{"version":3,"file":"4669.b08a179dee41aa9f.js","sources":["./projects/ngx-skeleton-loader/src/lib/ngx-skeleton-loader-config.types.ts","./projects/ngx-skeleton-loader/src/lib/ngx-skeleton-loader.module.ts","./src/app/components/components.module.ts","./src/app/pipes/pluralize.pipe.module.ts","./src/app/pipes/sentencecase.pipe.module.ts","./projects/ag-charts-angular/src/lib/ag-charts-angular.component.ts","./projects/ag-charts-angular/src/lib/ag-charts-angular.module.ts","./node_modules/ag-charts-community/dist/esm/es5/util/time/interval.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/millisecond.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/duration.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/second.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/minute.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/hour.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/day.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/week.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/month.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/year.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/utcMinute.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/utcHour.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/utcDay.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/utcMonth.js","./node_modules/ag-charts-community/dist/esm/es5/util/time/utcYear.js","./node_modules/ag-charts-community/dist/esm/es5/util/userAgent.js","./node_modules/ag-charts-community/dist/esm/es5/canvas/hdpiCanvas.js","./node_modules/ag-charts-community/dist/esm/es5/scene/bbox.js","./node_modules/ag-charts-community/dist/esm/es5/scene/matrix.js","./node_modules/ag-charts-community/dist/esm/es5/util/id.js","./node_modules/ag-charts-community/dist/esm/es5/scene/node.js","./node_modules/ag-charts-community/dist/esm/es5/util/compare.js","./node_modules/ag-charts-community/dist/esm/es5/util/function.js","./node_modules/ag-charts-community/dist/esm/es5/util/logger.js","./node_modules/ag-charts-community/dist/esm/es5/scene/group.js","./node_modules/ag-charts-community/dist/esm/es5/canvas/hdpiOffscreenCanvas.js","./node_modules/ag-charts-community/dist/esm/es5/scene/scene.js","./node_modules/ag-charts-community/dist/esm/es5/util/observable.js","./node_modules/ag-charts-community/dist/esm/es5/util/value.js","./node_modules/ag-charts-community/dist/esm/es5/util/decorator.js","./node_modules/ag-charts-community/dist/esm/es5/util/deprecation.js","./node_modules/ag-charts-community/dist/esm/es5/util/color.js","./node_modules/ag-charts-community/dist/esm/es5/util/validation.js","./node_modules/ag-charts-community/dist/esm/es5/chart/layers.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chartAxisDirection.js","./node_modules/ag-charts-community/dist/esm/es5/chart/tooltip/tooltip.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/series.js","./node_modules/ag-charts-community/dist/esm/es5/util/padding.js","./node_modules/ag-charts-community/dist/esm/es5/scene/selection.js","./node_modules/ag-charts-community/dist/esm/es5/util/angle.js","./node_modules/ag-charts-community/dist/esm/es5/scene/gradient/linearGradient.js","./node_modules/ag-charts-community/dist/esm/es5/scene/gradient/gradient.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/shape.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/text.js","./node_modules/ag-charts-community/dist/esm/es5/scene/intersection.js","./node_modules/ag-charts-community/dist/esm/es5/scene/polyRoots.js","./node_modules/ag-charts-community/dist/esm/es5/scene/path2D.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/path.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/marker.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/square.js","./node_modules/ag-charts-community/dist/esm/es5/util/proxy.js","./node_modules/ag-charts-community/dist/esm/es5/chart/markerLabel.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/circle.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/cross.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/diamond.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/heart.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/plus.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/triangle.js","./node_modules/ag-charts-community/dist/esm/es5/chart/marker/util.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chartUpdateType.js","./node_modules/ag-charts-community/dist/esm/es5/chart/gridLayout.js","./node_modules/ag-charts-community/dist/esm/es5/chart/pagination/pagination.js","./node_modules/ag-charts-community/dist/esm/es5/chart/legend.js","./node_modules/ag-charts-community/dist/esm/es5/util/sizeMonitor.js","./node_modules/ag-charts-community/dist/esm/es5/util/labelPlacement.js","./node_modules/ag-charts-community/dist/esm/es5/util/render.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/seriesMarker.js","./node_modules/ag-charts-community/dist/esm/es5/scale/continuousScale.js","./node_modules/ag-charts-community/dist/esm/es5/scale/bandScale.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/line.js","./node_modules/ag-charts-community/dist/esm/es5/util/number.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/arc.js","./node_modules/ag-charts-community/dist/esm/es5/caption.js","./node_modules/ag-charts-community/dist/esm/es5/util/equal.js","./node_modules/ag-charts-community/dist/esm/es5/util/ticks.js","./node_modules/ag-charts-community/dist/esm/es5/util/timeFormat.js","./node_modules/ag-charts-community/dist/esm/es5/scale/timeScale.js","./node_modules/ag-charts-community/dist/esm/es5/util/numberFormat.js","./node_modules/ag-charts-community/dist/esm/es5/scale/logScale.js","./node_modules/ag-charts-community/dist/esm/es5/util/default.js","./node_modules/ag-charts-community/dist/esm/es5/util/array.js","./node_modules/ag-charts-community/dist/esm/es5/chart/label.js","./node_modules/ag-charts-community/dist/esm/es5/axis.js","./node_modules/ag-charts-community/dist/esm/es5/scale/linearScale.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chartAxis.js","./node_modules/ag-charts-community/dist/esm/es5/chart/axis/categoryAxis.js","./node_modules/ag-charts-community/dist/esm/es5/util/json.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/cartesian/cartesianSeries.js","./node_modules/ag-charts-community/dist/esm/es5/util/async.js","./node_modules/ag-charts-community/dist/esm/es5/chart/overlay/overlay.js","./node_modules/ag-charts-community/dist/esm/es5/chart/overlay/chartOverlays.js","./node_modules/ag-charts-community/dist/esm/es5/util/listeners.js","./node_modules/ag-charts-community/dist/esm/es5/chart/interaction/baseManager.js","./node_modules/ag-charts-community/dist/esm/es5/chart/interaction/interactionManager.js","./node_modules/ag-charts-community/dist/esm/es5/chart/interaction/cursorManager.js","./node_modules/ag-charts-community/dist/esm/es5/chart/interaction/highlightManager.js","./node_modules/ag-charts-community/dist/esm/es5/chart/interaction/tooltipManager.js","./node_modules/ag-charts-community/dist/esm/es5/chart/interaction/zoomManager.js","./node_modules/ag-charts-community/dist/esm/es5/chart/layout/layoutService.js","./node_modules/ag-charts-community/dist/esm/es5/chart/updateService.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chartHighlight.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chart.js","./node_modules/ag-charts-community/dist/esm/es5/layout/tree.js","./node_modules/ag-charts-community/dist/esm/es5/chart/axis/groupedCategoryAxis.js","./node_modules/ag-charts-community/dist/esm/es5/chart/cartesianChart.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/polar/polarSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/polarChart.js","./node_modules/ag-charts-community/dist/esm/es5/chart/hierarchyChart.js","./node_modules/ag-charts-community/dist/esm/es5/util/string.js","./node_modules/ag-charts-community/dist/esm/es5/util/sanitize.js","./node_modules/ag-charts-community/dist/esm/es5/chart/axis/numberAxis.js","./node_modules/ag-charts-community/dist/esm/es5/util/secondaryAxisTicks.js","./node_modules/ag-charts-community/dist/esm/es5/chart/axis/logAxis.js","./node_modules/ag-charts-community/dist/esm/es5/chart/data/dataModel.js","./node_modules/ag-charts-community/dist/esm/es5/chart/axis/timeAxis.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/cartesian/areaSeries.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/rect.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/cartesian/barSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/cartesian/histogramSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/cartesian/lineSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/cartesian/scatterSeries.js","./node_modules/ag-charts-community/dist/esm/es5/util/sector.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/sector.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/polar/pieSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/hierarchy/hierarchySeries.js","./node_modules/ag-charts-community/dist/esm/es5/scene/dropShadow.js","./node_modules/ag-charts-community/dist/esm/es5/interpolate/number.js","./node_modules/ag-charts-community/dist/esm/es5/scale/colorScale.js","./node_modules/ag-charts-community/dist/esm/es5/interpolate/color.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/hierarchy/treemapSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chartTypes.js","./node_modules/ag-charts-community/dist/esm/es5/util/object.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/chartTheme.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/darkTheme.js","./node_modules/ag-charts-community/dist/esm/es5/util/module.js","./node_modules/ag-charts-community/dist/esm/es5/chart/shapes/rangeHandle.js","./node_modules/ag-charts-community/dist/esm/es5/chart/shapes/rangeMask.js","./node_modules/ag-charts-community/dist/esm/es5/chart/shapes/rangeSelector.js","./node_modules/ag-charts-community/dist/esm/es5/chart/navigator/navigatorMask.js","./node_modules/ag-charts-community/dist/esm/es5/chart/navigator/navigatorHandle.js","./node_modules/ag-charts-community/dist/esm/es5/chart/navigator/navigator.js","./node_modules/ag-charts-community/dist/esm/es5/util/navigator-module.js","./node_modules/ag-charts-community/dist/esm/es5/chart/background/background.js","./node_modules/ag-charts-community/dist/esm/es5/chart/background/backgroundModule.js","./node_modules/ag-charts-community/dist/esm/es5/chart/series/seriesTypes.js","./node_modules/ag-charts-community/dist/esm/es5/chart/mapping/defaults.js","./node_modules/ag-charts-community/dist/esm/es5/chart/mapping/transforms.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/materialLight.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/materialDark.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/pastelLight.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/pastelDark.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/solarLight.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/solarDark.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/vividLight.js","./node_modules/ag-charts-community/dist/esm/es5/chart/themes/vividDark.js","./node_modules/ag-charts-community/dist/esm/es5/chart/mapping/themes.js","./node_modules/ag-charts-community/dist/esm/es5/chart/mapping/prepareSeries.js","./node_modules/ag-charts-community/dist/esm/es5/chart/chartAxesTypes.js","./node_modules/ag-charts-community/dist/esm/es5/chart/mapping/prepare.js","./node_modules/ag-charts-community/dist/esm/es5/chart/crossline/crossLineLabelPosition.js","./node_modules/ag-charts-community/dist/esm/es5/scene/shape/range.js","./node_modules/ag-charts-community/dist/esm/es5/chart/crossline/crossLine.js","./node_modules/ag-charts-community/dist/esm/es5/scene/image.js","./node_modules/ag-charts-community/dist/esm/es5/chart/background/backgroundImage.js","./node_modules/ag-charts-community/dist/esm/es5/chart/agChartV2.js","./node_modules/ag-charts-community/dist/esm/es5/integrated-charts-theme.js","./node_modules/ag-charts-community/dist/esm/es5/scene/changeDetectable.js","./node_modules/ag-charts-community/dist/esm/es5/util/window.js","eva/webpack/universalModuleDefinition","eva/webpack/bootstrap","eva/node_modules/classnames/dedupe.js","eva/package/src/animation.scss","eva/node_modules/css-loader/lib/css-base.js","eva/node_modules/isomorphic-style-loader/insertCss.js","webpack:///eva/package/src/animation.scss?dc6f","eva/package/src/icon.js","eva/package/src/icons.js","eva/package/src/index.js","eva/package/src/replace.js","./node_modules/src/globals.ts","./node_modules/src/services/completer-base-data.ts","./node_modules/src/services/local-data.ts","./node_modules/src/services/remote-data.ts","./node_modules/src/services/local-data-factory.ts","./node_modules/src/services/remote-data-factory.ts","./node_modules/src/services/completer-service.ts","./node_modules/src/directives/ctr-completer.ts","./node_modules/src/directives/ctr-dropdown.ts","./node_modules/src/directives/ctr-input.ts","./node_modules/src/directives/ctr-list.ts","./node_modules/src/directives/ctr-row.ts","./node_modules/src/components/completer-list-item-cmp.ts","./node_modules/src/components/completer-cmp.ts","./node_modules/src/modules/ng2-completer.module.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/helpers.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-set/cell.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-set/row.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-set/column.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-set/data-set.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/grid.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-edit-mode/edit-cell-default.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-edit-mode/custom-edit.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-edit-mode/default-edit.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-edit-mode/edit-cell.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-editors/default-editor.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-editors/checkbox-editor.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-editors/completer-editor.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-editors/input-editor.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-editors/select-editor.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-editors/textarea-editor.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-view-mode/custom-view.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell-view-mode/view-cell.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/cell/cell.module.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/data-source.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter-default.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/default-filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/custom-filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter-types/default-filter.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter-types/checkbox-filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter-types/completer-filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter-types/input-filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter-types/select-filter.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/filter/filter.module.ts","./node_modules/projects/ng2-smart-table/src/lib/components/pager/pager.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/pager/pager.module.ts","./node_modules/projects/ng2-smart-table/src/lib/components/tbody/tbody.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/tbody/cells/create-cancel.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/tbody/cells/edit-delete.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/tbody/cells/custom.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/tbody/tbody.module.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/thead.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/cells/actions.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/cells/actions-title.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/cells/add-button.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/cells/checkbox-select-all.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/cells/column-title.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/cells/title/title.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/rows/thead-filters-row.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/rows/thead-form-row.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/rows/thead-titles-row.component.ts","./node_modules/projects/ng2-smart-table/src/lib/components/thead/thead.module.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/local/local.sorter.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/local/local.filter.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/local/local.pager.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/local/local.data-source.ts","./node_modules/projects/ng2-smart-table/src/lib/ng2-smart-table.component.ts","./node_modules/projects/ng2-smart-table/src/lib/ng2-smart-table.module.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/server/server-source.conf.ts","./node_modules/projects/ng2-smart-table/src/lib/lib/data-source/server/server.data-source.ts","../src/cdk/drag-drop/dom/styling.ts","../src/cdk/drag-drop/dom/transition-duration.ts","../src/cdk/drag-drop/dom/client-rect.ts","../src/cdk/drag-drop/dom/parent-position-tracker.ts","../src/cdk/drag-drop/dom/clone-node.ts","../src/cdk/drag-drop/drag-ref.ts","../src/cdk/drag-drop/drag-utils.ts","../src/cdk/drag-drop/sorting/single-axis-sort-strategy.ts","../src/cdk/drag-drop/drop-list-ref.ts","../src/cdk/drag-drop/drag-drop-registry.ts","../src/cdk/drag-drop/drag-drop.ts","../src/cdk/drag-drop/drag-parent.ts","../src/cdk/drag-drop/directives/drop-list-group.ts","../src/cdk/drag-drop/directives/config.ts","../src/cdk/drag-drop/directives/drop-list.ts","../src/cdk/drag-drop/directives/drag-handle.ts","../src/cdk/drag-drop/directives/drag-placeholder.ts","../src/cdk/drag-drop/directives/drag-preview.ts","../src/cdk/drag-drop/directives/drag.ts","../src/cdk/drag-drop/drag-drop-module.ts","./node_modules/@materia-ui/ngx-monaco-editor/fesm2020/materia-ui-ngx-monaco-editor.mjs","./node_modules/src/framework/eva-icons/eva-icons.module.ts","./node_modules/lib/src/interfaces.ts","./node_modules/lib/src/countdown.timer.ts","./node_modules/lib/src/countdown.config.ts","./node_modules/lib/src/countdown.component.ts","./node_modules/lib/src/countdown.module.ts","./node_modules/marked/src/defaults.ts","./node_modules/marked/src/rules.ts","./node_modules/marked/src/helpers.ts","./node_modules/marked/src/Tokenizer.ts","./node_modules/marked/src/Lexer.ts","./node_modules/marked/src/Renderer.ts","./node_modules/marked/src/TextRenderer.ts","./node_modules/marked/src/Parser.ts","./node_modules/marked/src/Hooks.ts","./node_modules/marked/src/marked.ts","./node_modules/marked/src/Instance.ts","./lib/src/clipboard-button.component.ts","./node_modules/rxjs/src/internal/operators/shareReplay.ts","./lib/src/clipboard-options.ts","./lib/src/prism-plugin.ts","./lib/src/marked-options.ts","./lib/src/markdown.service.ts","./lib/src/markdown.component.ts","./lib/src/markdown.module.ts","./lib/src/mermaid-options.ts"],"sourceRoot":"webpack:///","sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport type NgxSkeletonLoaderConfigTheme = {\n // This is required since ngStyle is using `any` as well\n // More details in https://angular.io/api/common/NgStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [k: string]: any;\n} | null;\n\nexport interface NgxSkeletonLoaderConfig {\n appearance: 'circle' | 'line' | '';\n animation: 'progress' | 'progress-dark' | 'pulse' | 'false' | false;\n theme: NgxSkeletonLoaderConfigTheme;\n loadingText: string;\n count: number;\n ariaLabel: string;\n}\n\nexport const NGX_SKELETON_LOADER_CONFIG = new InjectionToken('ngx-skeleton-loader.config');\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxSkeletonLoaderComponent } from './ngx-skeleton-loader.component';\nimport { NgxSkeletonLoaderConfig, NGX_SKELETON_LOADER_CONFIG } from './ngx-skeleton-loader-config.types';\n\n@NgModule({\n declarations: [NgxSkeletonLoaderComponent],\n imports: [CommonModule],\n exports: [NgxSkeletonLoaderComponent],\n})\nexport class NgxSkeletonLoaderModule {\n static forRoot(config?: Partial): ModuleWithProviders {\n return {\n ngModule: NgxSkeletonLoaderModule,\n providers: [{ provide: NGX_SKELETON_LOADER_CONFIG, useValue: config }],\n };\n }\n}\n","import { FormJsonEditorComponent } from './form-json-editor/form-json-editor.component';\nimport { HierarchyWidgetComponent } from './hierarchy-widget/hierarchy-widget.component';\nimport { EnvironmentSelectComponent } from './environment-select/environment-select.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n NbActionsModule,\n NbAutocompleteModule,\n NbButtonModule,\n NbCardModule,\n NbContextMenuModule,\n NbIconModule,\n NbInputModule,\n NbLayoutModule,\n NbMenuModule,\n NbSelectModule,\n NbSidebarModule,\n NbSpinnerModule,\n NbTooltipModule,\n NbUserModule,\n NbCheckboxModule,\n NbRadioModule,\n NbPopoverModule,\n NbFormFieldModule,\n NbDatepickerModule,\n NbToggleModule,\n NbAccordionModule,\n NbTimepickerModule,\n NbTreeGridModule,\n NbTagModule,\n NbTabsetModule,\n NbBadgeModule,\n NbListModule,\n NbStepperModule,\n} from '@nebular/theme';\nimport { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';\nimport { NbEvaIconsModule } from '@nebular/eva-icons';\nimport { TimeagoModule } from 'ngx-timeago';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CustomActionsComponent } from './custom-actions/custom-actions.component';\nimport { FormFieldComponent } from './form-field/form-field.component';\nimport { PageHeaderComponent } from './page-header/page-header.component';\nimport { DirectivesModule } from '../directives/directives.module';\nimport { SafeHtmlPipePipe } from './safe-html-pipe.pipe';\nimport { SmartTableRouterlinkComponent } from './smart-table-routerlink/smart-table-routerlink.component';\nimport { TableAddComponent } from './table-add/table-add.component';\nimport { Ng2SmartTableModule } from 'ng2-smart-table';\nimport { InfoComponent } from './info/info.component';\nimport { PageWrapperComponent } from './page-wrapper-component/page-wrapper.component';\nimport { DiffIconComponent } from './diff-icon/diff-icon.component';\nimport { CheckboxComponent } from './form/checkbox/checkbox.component';\nimport { NumberInputComponent } from './form/number-input/number-input.component';\nimport { ProfilesComponent } from './profiles/profiles.component';\nimport { AccessForbiddenComponent } from './access-forbidden/access-forbidden.component';\nimport { MessageComponent } from './message/message.component';\nimport { RadioComponent } from './form/radio/radio.component';\nimport { RBACButtonComponent } from './rbac-button/rbac-button.component';\nimport { TabPageHeaderComponent } from './tab-page-header/tab-page-header.component';\nimport { TrimWhiteSpace } from './trim-white-space.pipe';\nimport { SmartTableWithBadgeComponent } from './smart-table-with-badge/smart-table-with-badge.component';\nimport { TerminalComponent } from './terminal/terminal.component';\nimport { DateTimePickerComponent } from './date-time-picker/date-time-picker.component';\nimport { ToggleComponent } from './form/toggle/toggle.component';\nimport { SmartTableWithIconComponent } from './smart-table-with-icon/smart-table-with-icon.component';\nimport { SmartTableWithCountdownComponent } from './smart-table-with-countdown/smart-table-with-countdown.component';\nimport { CountdownModule } from 'ngx-countdown';\nimport { SmartTableHyperlinkComponent } from './smart-table-hyperlink/smart-table-hyperlink.component';\nimport { SmartTableIconTooltipComponent } from './smart-table-icon-tooltip/smart-table-icon-tooltip.component';\nimport { TagComponent } from './tag/tag.component';\nimport { SmartTableLongStringEllipsisComponent } from './smart-table-long-string-ellipsis/smart-table-long-string-ellipsis.component';\nimport { LinkWithEllipsisComponent } from './link-with-ellipsis/link-with-ellipsis.component';\nimport { SmartTableTextTooltipComponent } from './smart-table-text-tooltip/smart-table-text-tooltip.component';\nimport { SmartTableTimeagoTooltipComponent } from './smart-table-timeago-tooltip/smart-table-timeago-tooltip.component';\nimport { SmartTableLinkWithIconComponent } from './smart-table-link-with-icon/smart-table-link-with-icon.component';\nimport { SaveChangesFooterComponent } from './save-changes-footer/save-changes-footer.component';\nimport { FormLabelComponent } from './form-label/form-label.component';\nimport { BadgeWithIconComponent } from './badge-with-icon/badge-with-icon.component';\nimport { MultiSelectSearchComponent } from './multi-select-search/multi-select-search.component';\nimport { SelectSingleSearchComponent } from './select-single-search/select-single-search.component';\nimport { MultiSelectSearchV2Component } from './multi-select-search-v2/multi-select-search-v2.component';\nimport { SmartTableCellWithEllipsisComponent } from './smart-table-cell-with-ellipsis/smart-table-cell-with-ellipsis.component';\nimport { PageFooterComponent } from './page-footer/page-footer.component';\nimport { DeleteConfirmationComponent } from './delete-confirmation/delete-confirmation.component';\nimport { SmartTableMultiTypeComponent } from './smart-table-multi-type/smart-table-multi-type.component';\nimport { CountdownComponent } from './countdown/countdown.component';\nimport { AppAlertsComponent } from './alerts/alerts.component';\nimport { CustomSpinnerComponent } from './spinner-custom/spinner.custom.component';\nimport { SmartTableTextareaEditorComponent } from './smart-table-textarea-editor/smart-table-textarea-editor.component';\nimport { TableSkeletonLoaderComponent } from './table-skeleton-loader/table-skeleton-loader.component';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { ArtifactUriComponent } from './artifact-uri/artifact-uri.component';\nimport { OverrideDetailsComponent } from './override-details/override-details.component';\nimport { ReactiveTextAreaComponent } from './reactive-text-area/reactive-text-area.component';\nimport { ReactiveToggleComponent } from './reactive-toggle/reactive-toggle.component';\nimport { KubernetesAccountCreateEditComponent } from './kubernetes-account-create-edit/kubernetes-account-create-edit.component';\nimport { PluralizePipeModule } from 'src/app/pipes/pluralize.pipe.module';\nimport { StepperListItemComponent } from './stepper-list-item/stepper-list-item.component';\nimport { VpnInstructionsComponent } from './vpn-instructions/vpn-instructions.component';\nimport { UserNoteAlertComponent } from './user-note-alert/user-note-alert.component';\nimport { ReactiveFormFieldComponent } from './reactive-form-field/reactive-form-field.component';\nimport { TagListComponent } from './tag-list/tag-list.component';\nimport { AppCollapsibleButtonComponent } from './collapsible-button/collapsible-button.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { SmartTableToggleComponent } from './smart-table-toggle/smart-table-toggle.component';\nimport { QueuedReleasesComponent } from './queued-releases/queued-releases.component';\nimport { ButtonDropdownComponent } from './button-dropdown/button-dropdown.component';\nimport { AwsAccountCreateEditComponent } from './aws-account-create-edit/aws-account-create-edit.component';\nimport { AzureAccountCreateEditComponent } from './azure-account-create-edit/azure-account-create-edit.component';\nimport { GcpAccountCreateEditComponent } from './gcp-account-create-edit/gcp-account-create-edit.component';\nimport { ReactiveRadioGroupComponent } from './reactive-radio-group/reactive-radio-group.component';\nimport { CustomBadgeWithTooltipComponent } from './custom-badge-with-tooltip/custom-badge-with-tooltip.component';\nimport { SmartTableWithBulkSelectComponent } from './smart-table-with-bulk-select/smart-table-with-bulk-select.component';\nimport { SmartTableIconSubheadingComponent } from './smart-table-icon-subheading/smart-table-icon-subheading.component';\nimport { CoderAccountCreateEditComponent } from './coder-account/coder-account.component';\nimport { SmartTableEditToggleComponent } from './smart-table-edit-toggle/smart-table-edit-toggle.component';\nimport { OrganizationAccountDetailsComponent } from './organization-account-details/organization-account-details.component';\nimport { BorderedTextListWithIconComponent } from './bordered-text-list-with-icon/bordered-text-list-with-icon.component';\nimport { CreateCloudAccountIntegrationComponent } from './create-cloud-account-integration/create-cloud-account-integration.component';\nimport { CreateVcsAccountIntegrationComponent } from './create-vcs-account-integration/create-vcs-account-integration.component';\nimport { TokenExpiryUserNoteComponent } from './token-expiry-user-note/token-expiry-user-note.component';\nimport { TokenExpiryGlobalModalComponent } from './token-expiry-global-modal/token-expiry-global-modal.component';\nimport { CopyIconWithTooltipComponent } from './copy-icon-with-tooltip/copy-icon-with-tooltip.component';\nimport { PinImageFormComponent } from './pin-image-form/pin-image-form.component';\nimport { CloseIconComponent } from './close-icon/close-icon.component';\nimport { ConfirmActionComponent } from './confirm-action/confirm-action.component';\nimport { RemoveImageConfirmPopupComponent } from './remove-image-confirm-popup/remove-image-confirm-popup.component';\nimport { CardHeaderContentComponent } from './card-header-content/card-header-content.component';\nimport { DesignerCoderComponent } from '../pages/blueprint-designer/designer-coder/designer-coder.component';\nimport { JsonDynamicFormGroupComponent } from './json-dynamic-form-group/json-dynamic-form-group.component';\nimport { CardRadioGroupComponent } from './card-radio-group/card-radio-group.component';\nimport { CardRadioGroupWithShowMoreComponent } from './card-radio-group-with-show-more/card-radio-group-with-show-more.component';\nimport { ArrayStringInputComponent } from './json-dynamic-form-group/array-string-input/array-string-input.component';\nimport { DialogPageComponent } from './dialog-page/dialog-page.component';\nimport { LabelValueV1Component } from './label-value-v1/label-value-v1.component';\nimport { LabelValueV2Component } from './label-value-v2/label-value-v2.component';\nimport { AlertsChartComponent } from './alerts-chart/alerts-chart.component';\nimport { AgChartsAngularModule } from 'ag-charts-angular';\nimport { ReleaseTrendChartComponent } from './release-trend-chart/release-trend-chart.component';\nimport { DynamicComponentDirective } from '../directives/dynamic-component.directive';\nimport { CommitIDsComponent } from './commit-ids/commit-ids.component';\nimport { SentenceCasePipeModule } from '../pipes/sentencecase.pipe.module';\nimport { ValidationInfoCardComponent } from './validation-info-card/validation-info-card.component';\nimport { ListWithCheckComponent } from './list-with-check/list-with-check.component';\nimport { OnboardingComponent } from './onboarding/onboarding.component';\nimport { CreateBitbucketAccountIntegrationComponent } from './create-bitbucket-account-integration/create-bitbucket-account-integration.component';\nimport { ReleaseNotificationPanelComponent } from './release-notification-panel/release-notification-panel.component';\nimport { PaasSaasSwitchComponent } from './paas-saas-switch/paas-saas-switch.component';\nimport { InviteUserComponent } from './invite-user/invite-user.component';\nimport { ShellQuoteInputComponent } from './shell-quote-input/shell-quote-input.component';\nimport { ReactiveGroupedSelectComponent } from './reactive-grouped-select/reactive-grouped-select.component';\nimport { ReactiveFormGroupedAutocompleteComponent } from './reactive-form-grouped-autocomplete/reactive-form-grouped-autocomplete.component';\nimport { MapToIterablePipe } from './map-to-iterable-pipe.pipe';\nimport { SingleSelectSearchComponent } from './single-select-search/single-select-search.component';\nimport { VcsAccountCreateEditComponent } from './vcs-account-create-edit/vcs-account-create-edit.component';\nimport { DropdownWithSearchComponent } from './dropdown-with-search/dropdown-with-search.component';\nimport { PageActionButtonsComponent } from './page-action-buttons/page-action-buttons.component';\nimport { SmartTableLinkComponent } from './smart-table-link/smart-table-link.component';\nimport { SmartTableLinkListComponent } from './smart-table-link-list/smart-table-link-list-component';\nimport { SmartTableEyeIconEditModeComponent } from './smart-table-eye-icon-edit-mode/smart-table-eye-icon-edit-mode.component';\nimport { CustomAutocompleteComponent } from './custom-autocomplete/custom-autocomplete.component';\nimport { ReactiveFormSimpleAutocompleteComponent } from './reactive-form-simple-autocomplete/reactive-form-simple-autocomplete.component';\nimport { SmartTableWithMultiIconComponent } from './smart-table-with-multi-icon/smart-table-with-multi-icon.component';\nimport { MdRenderComponent } from './md-render/md-render.component';\nimport { MarkdownModule } from 'ngx-markdown';\nimport { CreateUserTokenComponent } from './create-user-token/create-user-token.component';\nimport { InputOutputModellingComponent } from '../pages/blueprint-designer/input-output-modelling/input-output-modelling.component';\nimport { MediaInfoCardComponent } from './media-info-card/media-info-card.component';\n\n@NgModule({\n declarations: [\n CustomActionsComponent,\n FormFieldComponent,\n CheckboxComponent,\n PageHeaderComponent,\n SafeHtmlPipePipe,\n SmartTableRouterlinkComponent,\n TableAddComponent,\n InfoComponent,\n PageWrapperComponent,\n DiffIconComponent,\n NumberInputComponent,\n ProfilesComponent,\n AccessForbiddenComponent,\n MessageComponent,\n RadioComponent,\n RBACButtonComponent,\n TabPageHeaderComponent,\n TrimWhiteSpace,\n MapToIterablePipe,\n SmartTableWithBadgeComponent,\n TerminalComponent,\n DateTimePickerComponent,\n ToggleComponent,\n SmartTableWithIconComponent,\n SmartTableWithCountdownComponent,\n SmartTableHyperlinkComponent,\n TagComponent,\n SmartTableIconTooltipComponent,\n SmartTableLongStringEllipsisComponent,\n LinkWithEllipsisComponent,\n SmartTableTextTooltipComponent,\n SmartTableTimeagoTooltipComponent,\n SmartTableLinkWithIconComponent,\n SaveChangesFooterComponent,\n FormLabelComponent,\n BadgeWithIconComponent,\n MultiSelectSearchComponent,\n TagListComponent,\n SelectSingleSearchComponent,\n MultiSelectSearchV2Component,\n SmartTableCellWithEllipsisComponent,\n PageFooterComponent,\n DeleteConfirmationComponent,\n ReactiveFormFieldComponent,\n SmartTableMultiTypeComponent,\n CountdownComponent,\n AppAlertsComponent,\n CustomSpinnerComponent,\n SmartTableTextareaEditorComponent,\n TableSkeletonLoaderComponent,\n ArtifactUriComponent,\n OverrideDetailsComponent,\n ReactiveTextAreaComponent,\n ReactiveToggleComponent,\n KubernetesAccountCreateEditComponent,\n StepperListItemComponent,\n VpnInstructionsComponent,\n UserNoteAlertComponent,\n AppCollapsibleButtonComponent,\n SmartTableToggleComponent,\n QueuedReleasesComponent,\n ButtonDropdownComponent,\n AwsAccountCreateEditComponent,\n AzureAccountCreateEditComponent,\n GcpAccountCreateEditComponent,\n ReactiveRadioGroupComponent,\n CustomBadgeWithTooltipComponent,\n SmartTableWithBulkSelectComponent,\n SmartTableIconSubheadingComponent,\n CoderAccountCreateEditComponent,\n SmartTableEditToggleComponent,\n ReactiveRadioGroupComponent,\n OrganizationAccountDetailsComponent,\n BorderedTextListWithIconComponent,\n CreateCloudAccountIntegrationComponent,\n TokenExpiryUserNoteComponent,\n TokenExpiryGlobalModalComponent,\n CreateVcsAccountIntegrationComponent,\n CopyIconWithTooltipComponent,\n PinImageFormComponent,\n CloseIconComponent,\n ConfirmActionComponent,\n RemoveImageConfirmPopupComponent,\n CardHeaderContentComponent,\n DesignerCoderComponent,\n JsonDynamicFormGroupComponent,\n CardRadioGroupComponent,\n CardRadioGroupWithShowMoreComponent,\n ArrayStringInputComponent,\n DialogPageComponent,\n EnvironmentSelectComponent,\n HierarchyWidgetComponent,\n LabelValueV1Component,\n LabelValueV2Component,\n AlertsChartComponent,\n ReleaseTrendChartComponent,\n DynamicComponentDirective,\n CommitIDsComponent,\n FormJsonEditorComponent,\n ValidationInfoCardComponent,\n ListWithCheckComponent,\n OnboardingComponent,\n CreateBitbucketAccountIntegrationComponent,\n ReleaseNotificationPanelComponent,\n PaasSaasSwitchComponent,\n InviteUserComponent,\n ShellQuoteInputComponent,\n ReactiveGroupedSelectComponent,\n ReactiveFormGroupedAutocompleteComponent,\n SingleSelectSearchComponent,\n VcsAccountCreateEditComponent,\n DropdownWithSearchComponent,\n PageActionButtonsComponent,\n SmartTableLinkComponent,\n SmartTableLinkListComponent,\n SmartTableEyeIconEditModeComponent,\n CustomAutocompleteComponent,\n ReactiveFormSimpleAutocompleteComponent,\n SmartTableWithMultiIconComponent,\n MdRenderComponent,\n CreateUserTokenComponent,\n InputOutputModellingComponent,\n MediaInfoCardComponent,\n ],\n imports: [\n MarkdownModule.forRoot(),\n CommonModule,\n NbLayoutModule,\n NbButtonModule,\n NbUserModule,\n NbActionsModule,\n NbCardModule,\n NbSelectModule,\n RouterModule,\n NbAutocompleteModule,\n FormsModule,\n NbInputModule,\n NbIconModule,\n NbEvaIconsModule,\n NbContextMenuModule,\n NbTooltipModule,\n DirectivesModule,\n NbMenuModule,\n Ng2SmartTableModule,\n NbSpinnerModule,\n NbSidebarModule,\n NbCheckboxModule,\n NbRadioModule,\n NbPopoverModule,\n NbFormFieldModule,\n NbDatepickerModule.forRoot(),\n NbTimepickerModule.forRoot(),\n NbToggleModule,\n CountdownModule,\n ReactiveFormsModule,\n NbAccordionModule,\n TimeagoModule,\n NbTreeGridModule,\n NbTagModule,\n NbTabsetModule,\n NbBadgeModule,\n NgxSkeletonLoaderModule,\n MonacoEditorModule,\n PluralizePipeModule,\n DragDropModule,\n NbListModule,\n AgChartsAngularModule,\n SentenceCasePipeModule,\n NbStepperModule,\n ],\n providers: [],\n exports: [\n CustomActionsComponent,\n FormFieldComponent,\n CheckboxComponent,\n PageHeaderComponent,\n SafeHtmlPipePipe,\n SmartTableRouterlinkComponent,\n TableAddComponent,\n InfoComponent,\n DiffIconComponent,\n NumberInputComponent,\n ProfilesComponent,\n MessageComponent,\n RadioComponent,\n RBACButtonComponent,\n TabPageHeaderComponent,\n TrimWhiteSpace,\n MapToIterablePipe,\n TerminalComponent,\n ToggleComponent,\n SmartTableWithBadgeComponent,\n SmartTableWithCountdownComponent,\n TagComponent,\n SmartTableIconTooltipComponent,\n LinkWithEllipsisComponent,\n SmartTableLongStringEllipsisComponent,\n SmartTableTextTooltipComponent,\n SmartTableTimeagoTooltipComponent,\n SmartTableWithBadgeComponent,\n DateTimePickerComponent,\n SaveChangesFooterComponent,\n FormLabelComponent,\n MultiSelectSearchComponent,\n TagListComponent,\n SelectSingleSearchComponent,\n MultiSelectSearchV2Component,\n SmartTableCellWithEllipsisComponent,\n PageFooterComponent,\n DeleteConfirmationComponent,\n ReactiveFormFieldComponent,\n SmartTableMultiTypeComponent,\n CountdownComponent,\n AppAlertsComponent,\n CustomSpinnerComponent,\n TableSkeletonLoaderComponent,\n ArtifactUriComponent,\n OverrideDetailsComponent,\n ReactiveTextAreaComponent,\n ReactiveToggleComponent,\n KubernetesAccountCreateEditComponent,\n StepperListItemComponent,\n VpnInstructionsComponent,\n UserNoteAlertComponent,\n AppCollapsibleButtonComponent,\n SmartTableToggleComponent,\n QueuedReleasesComponent,\n ButtonDropdownComponent,\n AwsAccountCreateEditComponent,\n AzureAccountCreateEditComponent,\n GcpAccountCreateEditComponent,\n ReactiveRadioGroupComponent,\n CustomBadgeWithTooltipComponent,\n SmartTableWithBulkSelectComponent,\n SmartTableIconSubheadingComponent,\n CoderAccountCreateEditComponent,\n SmartTableEditToggleComponent,\n ReactiveRadioGroupComponent,\n OrganizationAccountDetailsComponent,\n BorderedTextListWithIconComponent,\n CreateCloudAccountIntegrationComponent,\n TokenExpiryUserNoteComponent,\n TokenExpiryGlobalModalComponent,\n CreateVcsAccountIntegrationComponent,\n CopyIconWithTooltipComponent,\n PinImageFormComponent,\n ConfirmActionComponent,\n CloseIconComponent,\n RemoveImageConfirmPopupComponent,\n CardHeaderContentComponent,\n DesignerCoderComponent,\n JsonDynamicFormGroupComponent,\n CardRadioGroupWithShowMoreComponent,\n ArrayStringInputComponent,\n DialogPageComponent,\n EnvironmentSelectComponent,\n HierarchyWidgetComponent,\n LabelValueV1Component,\n LabelValueV2Component,\n AlertsChartComponent,\n ReleaseTrendChartComponent,\n CommitIDsComponent,\n FormJsonEditorComponent,\n ValidationInfoCardComponent,\n ListWithCheckComponent,\n OnboardingComponent,\n CreateBitbucketAccountIntegrationComponent,\n ReleaseNotificationPanelComponent,\n PaasSaasSwitchComponent,\n InviteUserComponent,\n ShellQuoteInputComponent,\n ReactiveGroupedSelectComponent,\n ReactiveFormGroupedAutocompleteComponent,\n VcsAccountCreateEditComponent,\n DropdownWithSearchComponent,\n PageActionButtonsComponent,\n SmartTableLinkComponent,\n SmartTableWithIconComponent,\n SingleSelectSearchComponent,\n SmartTableLinkListComponent,\n CustomAutocompleteComponent,\n ReactiveFormSimpleAutocompleteComponent,\n SmartTableWithMultiIconComponent,\n MdRenderComponent,\n CreateUserTokenComponent,\n InputOutputModellingComponent,\n MediaInfoCardComponent,\n ],\n})\nexport class ComponentsModule {}\n","import { NgModule } from '@angular/core';\nimport { PluralizePipe } from './pluralize.pipe';\n\n@NgModule({\n declarations: [PluralizePipe],\n exports: [PluralizePipe],\n})\nexport class PluralizePipeModule {}\n","import { NgModule } from '@angular/core';\nimport { SentenceCasePipe } from './sentencecase.pipe';\n\n@NgModule({\n declarations: [SentenceCasePipe],\n exports: [SentenceCasePipe],\n})\nexport class SentenceCasePipeModule {}\n","import { AfterViewInit, Component, EventEmitter, ElementRef, Input, Output, OnChanges, OnDestroy, ViewEncapsulation } from \"@angular/core\";\n\nimport { AgChartInstance, AgChart, AgChartOptions } from 'ag-charts-community';\n\n// noinspection AngularIncorrectTemplateDefinition\n@Component({\n selector: 'ag-charts-angular',\n template: '',\n encapsulation: ViewEncapsulation.None\n})\nexport class AgChartsAngular implements AfterViewInit, OnChanges, OnDestroy {\n\n private _nativeElement: any;\n private _initialised = false;\n\n public chart?: AgChartInstance;\n\n @Input()\n public options: AgChartOptions = {};\n\n @Output()\n public onChartReady: EventEmitter = new EventEmitter();\n\n constructor(elementDef: ElementRef) {\n this._nativeElement = elementDef.nativeElement;\n }\n\n ngAfterViewInit(): void {\n const options = this.applyContainerIfNotSet(this.options);\n\n this.chart = AgChart.create(options);\n this._initialised = true;\n\n (this.chart as any).chart.waitForUpdate()\n .then(() => {\n this.onChartReady.emit(this.chart);\n });\n }\n\n // noinspection JSUnusedGlobalSymbols,JSUnusedLocalSymbols\n ngOnChanges(changes: any): void {\n if (!this._initialised || !this.chart) {\n return;\n }\n\n AgChart.update(this.chart, this.applyContainerIfNotSet(this.options));\n }\n\n public ngOnDestroy(): void {\n if (this._initialised && this.chart) {\n this.chart.destroy();\n this.chart = undefined;\n this._initialised = false;\n }\n }\n\n private applyContainerIfNotSet(propsOptions: AgChartOptions) {\n if (propsOptions.container) {\n return propsOptions;\n }\n\n return {...propsOptions, container: this._nativeElement};\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AgChartsAngular } from './ag-charts-angular.component';\n\n\n\n@NgModule({\n declarations: [AgChartsAngular],\n imports: [\n ],\n exports: [AgChartsAngular]\n})\nexport class AgChartsAngularModule { }\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * The interval methods don't mutate Date parameters.\n */\nvar TimeInterval = /** @class */ (function () {\n function TimeInterval(encode, decode, rangeCallback) {\n this._encode = encode;\n this._decode = decode;\n this._rangeCallback = rangeCallback;\n }\n /**\n * Returns a new date representing the latest interval boundary date before or equal to date.\n * For example, `day.floor(date)` typically returns 12:00 AM local time on the given date.\n * @param date\n */\n TimeInterval.prototype.floor = function (date) {\n var d = new Date(date);\n var e = this._encode(d);\n return this._decode(e);\n };\n /**\n * Returns a new date representing the earliest interval boundary date after or equal to date.\n * @param date\n */\n TimeInterval.prototype.ceil = function (date) {\n var d = new Date(Number(date) - 1);\n var e = this._encode(d);\n return this._decode(e + 1);\n };\n /**\n * Returns an array of dates representing every interval boundary after or equal to start (inclusive) and before stop (exclusive).\n * @param start Range start.\n * @param stop Range end.\n * @param extend If specified, the requested range will be extended to the closest \"nice\" values.\n */\n TimeInterval.prototype.range = function (start, stop, extend) {\n var _a;\n var rangeCallback = (_a = this._rangeCallback) === null || _a === void 0 ? void 0 : _a.call(this, start, stop);\n var e0 = this._encode(extend ? this.floor(start) : this.ceil(start));\n var e1 = this._encode(extend ? this.ceil(stop) : this.floor(stop));\n if (e1 < e0) {\n return [];\n }\n var range = [];\n for (var e = e0; e <= e1; e++) {\n var d = this._decode(e);\n range.push(d);\n }\n rangeCallback === null || rangeCallback === void 0 ? void 0 : rangeCallback();\n return range;\n };\n return TimeInterval;\n}());\nexport { TimeInterval };\nvar CountableTimeInterval = /** @class */ (function (_super) {\n __extends(CountableTimeInterval, _super);\n function CountableTimeInterval() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CountableTimeInterval.prototype.getOffset = function (snapTo, step) {\n var s = typeof snapTo === 'number' || snapTo instanceof Date ? this._encode(new Date(snapTo)) : 0;\n return Math.floor(s) % step;\n };\n /**\n * Returns a filtered view of this interval representing every step'th date.\n * It can be a number of minutes, hours, days etc.\n * Must be a positive integer.\n * @param step\n */\n CountableTimeInterval.prototype.every = function (step, options) {\n var _this = this;\n var offset = 0;\n var rangeCallback;\n var _a = (options !== null && options !== void 0 ? options : {}).snapTo, snapTo = _a === void 0 ? 'start' : _a;\n if (typeof snapTo === 'string') {\n var initialOffset_1 = offset;\n rangeCallback = function (start, stop) {\n var s = snapTo === 'start' ? start : stop;\n offset = _this.getOffset(s, step);\n return function () { return (offset = initialOffset_1); };\n };\n }\n else if (typeof snapTo === 'number') {\n offset = this.getOffset(new Date(snapTo), step);\n }\n else if (snapTo instanceof Date) {\n offset = this.getOffset(snapTo, step);\n }\n var encode = function (date) {\n var e = _this._encode(date);\n return Math.floor((e - offset) / step);\n };\n var decode = function (encoded) {\n return _this._decode(encoded * step + offset);\n };\n var interval = new TimeInterval(encode, decode, rangeCallback);\n return interval;\n };\n return CountableTimeInterval;\n}(TimeInterval));\nexport { CountableTimeInterval };\n","import { CountableTimeInterval } from './interval';\nfunction encode(date) {\n return date.getTime();\n}\nfunction decode(encoded) {\n return new Date(encoded);\n}\nexport var millisecond = new CountableTimeInterval(encode, decode);\nexport default millisecond;\n","// Common time unit sizes in milliseconds.\nexport var epochYear = new Date(0).getFullYear();\nexport var durationSecond = 1000;\nexport var durationMinute = durationSecond * 60;\nexport var durationHour = durationMinute * 60;\nexport var durationDay = durationHour * 24;\nexport var durationWeek = durationDay * 7;\nexport var durationMonth = durationDay * 30;\nexport var durationYear = durationDay * 365;\n","import { CountableTimeInterval } from './interval';\nimport { durationSecond, durationMinute } from './duration';\nvar offset = new Date().getTimezoneOffset() * durationMinute;\nfunction encode(date) {\n return Math.floor((date.getTime() - offset) / durationSecond);\n}\nfunction decode(encoded) {\n return new Date(offset + encoded * durationSecond);\n}\nexport var second = new CountableTimeInterval(encode, decode);\nexport default second;\n","import { CountableTimeInterval } from './interval';\nimport { durationMinute } from './duration';\nvar offset = new Date().getTimezoneOffset() * durationMinute;\nfunction encode(date) {\n return Math.floor((date.getTime() - offset) / durationMinute);\n}\nfunction decode(encoded) {\n return new Date(offset + encoded * durationMinute);\n}\nexport var minute = new CountableTimeInterval(encode, decode);\nexport default minute;\n","import { CountableTimeInterval } from './interval';\nimport { durationHour, durationMinute } from './duration';\nvar offset = new Date().getTimezoneOffset() * durationMinute;\nfunction encode(date) {\n return Math.floor((date.getTime() - offset) / durationHour);\n}\nfunction decode(encoded) {\n return new Date(offset + encoded * durationHour);\n}\nexport var hour = new CountableTimeInterval(encode, decode);\nexport default hour;\n","import { CountableTimeInterval } from './interval';\nimport { durationDay } from './duration';\nfunction encode(date) {\n var utc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\n return Math.floor(utc / durationDay);\n}\nfunction decode(encoded) {\n var d = new Date(0);\n d.setDate(d.getDate() + encoded);\n d.setHours(0, 0, 0, 0);\n return d;\n}\nexport var day = new CountableTimeInterval(encode, decode);\nexport default day;\n","import { durationWeek, durationDay } from './duration';\nimport { CountableTimeInterval } from './interval';\nvar baseSunday = new Date(2023, 0, 1);\n// Set date to n-th day of the week.\nfunction weekday(n) {\n // Use UTC for weeks calculation to get into account time zone shifts\n var base = Date.UTC(baseSunday.getFullYear(), baseSunday.getMonth(), baseSunday.getDate()) + n * durationDay;\n function encode(date) {\n var utc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\n return Math.floor((utc - base) / durationWeek);\n }\n function decode(encoded) {\n var d = new Date(base);\n d.setDate(d.getDate() + encoded * 7);\n return d;\n }\n return new CountableTimeInterval(encode, decode);\n}\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\nexport default sunday;\n","import { CountableTimeInterval } from './interval';\nfunction encode(date) {\n return date.getFullYear() * 12 + date.getMonth();\n}\nfunction decode(encoded) {\n var year = Math.floor(encoded / 12);\n var month = encoded - year * 12;\n return new Date(year, month, 1);\n}\nexport var month = new CountableTimeInterval(encode, decode);\nexport default month;\n","import { CountableTimeInterval } from './interval';\nfunction encode(date) {\n return date.getFullYear();\n}\nfunction decode(encoded) {\n // Note: assigning years through the constructor\n // will break for years 0 - 99 AD (will turn 1900's).\n var d = new Date();\n d.setFullYear(encoded);\n d.setMonth(0, 1);\n d.setHours(0, 0, 0, 0);\n return d;\n}\nexport var year = new CountableTimeInterval(encode, decode);\nexport default year;\n","import { CountableTimeInterval } from './interval';\nimport { durationMinute } from './duration';\nfunction encode(date) {\n return Math.floor(date.getTime() / durationMinute);\n}\nfunction decode(encoded) {\n return new Date(encoded * durationMinute);\n}\nexport var utcMinute = new CountableTimeInterval(encode, decode);\n","import { CountableTimeInterval } from './interval';\nimport { durationHour } from './duration';\nfunction encode(date) {\n return Math.floor(date.getTime() / durationHour);\n}\nfunction decode(encoded) {\n return new Date(encoded * durationHour);\n}\nexport var utcHour = new CountableTimeInterval(encode, decode);\n","import { CountableTimeInterval } from './interval';\nimport { durationDay } from './duration';\nfunction encode(date) {\n return Math.floor(date.getTime() / durationDay);\n}\nfunction decode(encoded) {\n var d = new Date(0);\n d.setUTCDate(d.getUTCDate() + encoded);\n d.setUTCHours(0, 0, 0, 0);\n return d;\n}\nexport var utcDay = new CountableTimeInterval(encode, decode);\nexport default utcDay;\n","import { CountableTimeInterval } from './interval';\nfunction encode(date) {\n return date.getUTCFullYear() * 12 + date.getUTCMonth();\n}\nfunction decode(encoded) {\n var year = Math.floor(encoded / 12);\n var month = encoded - year * 12;\n return new Date(Date.UTC(year, month, 1));\n}\nexport var utcMonth = new CountableTimeInterval(encode, decode);\n","import { CountableTimeInterval } from './interval';\nfunction encode(date) {\n return date.getUTCFullYear();\n}\nfunction decode(encoded) {\n // Note: assigning years through the constructor\n // will break for years 0 - 99 AD (will turn 1900's).\n var d = new Date();\n d.setUTCFullYear(encoded);\n d.setUTCMonth(0, 1);\n d.setUTCHours(0, 0, 0, 0);\n return d;\n}\nexport var utcYear = new CountableTimeInterval(encode, decode);\nexport default utcYear;\n","var MOBILE = [/Android/i, /webOS/i, /iPhone/i, /iPad/i, /iPod/i, /BlackBerry/i, /Windows Phone/i];\nexport function isDesktop() {\n var userAgent = navigator.userAgent;\n if (MOBILE.some(function (r) { return r.test(userAgent); })) {\n return false;\n }\n return true;\n}\n","import { isDesktop } from '../util/userAgent';\n/**\n * Wraps the native Canvas element and overrides its CanvasRenderingContext2D to\n * provide resolution independent rendering based on `window.devicePixelRatio`.\n */\nvar HdpiCanvas = /** @class */ (function () {\n // The width/height attributes of the Canvas element default to\n // 300/150 according to w3.org.\n function HdpiCanvas(_a) {\n var _b = _a.document, document = _b === void 0 ? window.document : _b, _c = _a.width, width = _c === void 0 ? 600 : _c, _d = _a.height, height = _d === void 0 ? 300 : _d, _e = _a.domLayer, domLayer = _e === void 0 ? false : _e, _f = _a.zIndex, zIndex = _f === void 0 ? 0 : _f, _g = _a.name, name = _g === void 0 ? undefined : _g, _h = _a.overrideDevicePixelRatio, overrideDevicePixelRatio = _h === void 0 ? undefined : _h;\n this._container = undefined;\n this._enabled = true;\n // `NaN` is deliberate here, so that overrides are always applied\n // and the `resetTransform` inside the `resize` method works in IE11.\n this._pixelRatio = NaN;\n this._width = 0;\n this._height = 0;\n this.document = document;\n // Create canvas and immediately apply width + height to avoid out-of-memory\n // errors on iOS/iPadOS Safari.\n this.element = document.createElement('canvas');\n this.element.width = width;\n this.element.height = height;\n this.context = this.element.getContext('2d');\n this.imageSource = this.context.canvas;\n var style = this.element.style;\n style.userSelect = 'none';\n style.display = 'block';\n if (domLayer) {\n style.position = 'absolute';\n style.zIndex = String(zIndex);\n style.top = '0';\n style.left = '0';\n style.pointerEvents = 'none';\n style.opacity = \"1\";\n if (name) {\n this.element.id = name;\n }\n }\n this.setPixelRatio(overrideDevicePixelRatio);\n this.resize(width, height);\n }\n Object.defineProperty(HdpiCanvas.prototype, \"container\", {\n get: function () {\n return this._container;\n },\n set: function (value) {\n if (this._container !== value) {\n this.remove();\n if (value) {\n value.appendChild(this.element);\n }\n this._container = value;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas.prototype, \"enabled\", {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n this.element.style.display = value ? 'block' : 'none';\n this._enabled = !!value;\n },\n enumerable: false,\n configurable: true\n });\n HdpiCanvas.prototype.remove = function () {\n var parentNode = this.element.parentNode;\n if (parentNode != null) {\n parentNode.removeChild(this.element);\n }\n };\n HdpiCanvas.prototype.destroy = function () {\n this.element.remove();\n // Workaround memory allocation quirks in iOS Safari by resizing to 0x0 and clearing.\n // See https://bugs.webkit.org/show_bug.cgi?id=195325.\n this.element.width = 0;\n this.element.height = 0;\n this.context.clearRect(0, 0, 0, 0);\n Object.freeze(this);\n };\n HdpiCanvas.prototype.snapshot = function () {\n // No-op for compatibility with HdpiOffscreenCanvas.\n };\n HdpiCanvas.prototype.clear = function () {\n this.context.save();\n this.context.resetTransform();\n this.context.clearRect(0, 0, this.width, this.height);\n this.context.restore();\n };\n HdpiCanvas.prototype.toImage = function () {\n var img = this.document.createElement('img');\n img.src = this.getDataURL();\n return img;\n };\n HdpiCanvas.prototype.getDataURL = function (type) {\n return this.element.toDataURL(type);\n };\n /**\n * @param fileName The name of the downloaded file.\n * @param fileFormat The file format, the default is `image/png`\n */\n HdpiCanvas.prototype.download = function (fileName, fileFormat) {\n if (fileFormat === void 0) { fileFormat = 'image/png'; }\n fileName = (fileName || '').trim() || 'image';\n var dataUrl = this.getDataURL(fileFormat);\n var document = this.document;\n var a = document.createElement('a');\n a.href = dataUrl;\n a.download = fileName;\n a.style.display = 'none';\n document.body.appendChild(a); // required for the `click` to work in Firefox\n a.click();\n document.body.removeChild(a);\n };\n Object.defineProperty(HdpiCanvas.prototype, \"pixelRatio\", {\n get: function () {\n return this._pixelRatio;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Changes the pixel ratio of the Canvas element to the given value,\n * or uses the window.devicePixelRatio (default), then resizes the Canvas\n * element accordingly (default).\n */\n HdpiCanvas.prototype.setPixelRatio = function (ratio) {\n var pixelRatio = ratio !== null && ratio !== void 0 ? ratio : window.devicePixelRatio;\n if (!isDesktop()) {\n // Mobile browsers have stricter memory limits, we reduce rendering resolution to\n // improve stability on mobile browsers. iOS Safari 12->16 are pain-points since they\n // have memory allocation quirks - see https://bugs.webkit.org/show_bug.cgi?id=195325.\n pixelRatio = 1;\n }\n HdpiCanvas.overrideScale(this.context, pixelRatio);\n this._pixelRatio = pixelRatio;\n };\n Object.defineProperty(HdpiCanvas.prototype, \"pixelated\", {\n get: function () {\n return this.element.style.imageRendering === 'pixelated';\n },\n set: function (value) {\n this.element.style.imageRendering = value ? 'pixelated' : 'auto';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n enumerable: false,\n configurable: true\n });\n HdpiCanvas.prototype.resize = function (width, height) {\n if (!(width > 0 && height > 0)) {\n return;\n }\n var _a = this, element = _a.element, context = _a.context, pixelRatio = _a.pixelRatio;\n element.width = Math.round(width * pixelRatio);\n element.height = Math.round(height * pixelRatio);\n element.style.width = width + 'px';\n element.style.height = height + 'px';\n context.resetTransform();\n this._width = width;\n this._height = height;\n };\n Object.defineProperty(HdpiCanvas, \"textMeasuringContext\", {\n get: function () {\n if (this._textMeasuringContext) {\n return this._textMeasuringContext;\n }\n var canvas = document.createElement('canvas');\n this._textMeasuringContext = canvas.getContext('2d');\n return this._textMeasuringContext;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas, \"svgText\", {\n get: function () {\n if (this._svgText) {\n return this._svgText;\n }\n var xmlns = 'http://www.w3.org/2000/svg';\n var svg = document.createElementNS(xmlns, 'svg');\n svg.setAttribute('width', '100');\n svg.setAttribute('height', '100');\n // Add a descriptive class name in case someone sees this SVG element\n // in devtools and wonders about its purpose:\n if (svg.classList) {\n svg.classList.add('text-measuring-svg');\n }\n else {\n svg.setAttribute('class', 'text-measuring-svg');\n }\n svg.style.position = 'absolute';\n svg.style.top = '-1000px';\n svg.style.visibility = 'hidden';\n var svgText = document.createElementNS(xmlns, 'text');\n svgText.setAttribute('x', '0');\n svgText.setAttribute('y', '30');\n svgText.setAttribute('text', 'black');\n svg.appendChild(svgText);\n document.body.appendChild(svg);\n this._svgText = svgText;\n return svgText;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas, \"has\", {\n get: function () {\n if (this._has) {\n return this._has;\n }\n var isChrome = navigator.userAgent.indexOf('Chrome') > -1;\n var isFirefox = navigator.userAgent.indexOf('Firefox') > -1;\n var isSafari = !isChrome && navigator.userAgent.indexOf('Safari') > -1;\n this._has = Object.freeze({\n textMetrics: this.textMeasuringContext.measureText('test').actualBoundingBoxDescent !== undefined &&\n // Firefox implemented advanced TextMetrics object in v74:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1102584\n // but it's buggy, so we'll keep using the SVG for text measurement in Firefox for now.\n !isFirefox &&\n !isSafari,\n getTransform: this.textMeasuringContext.getTransform !== undefined,\n });\n return this._has;\n },\n enumerable: false,\n configurable: true\n });\n HdpiCanvas.measureText = function (text, font, textBaseline, textAlign) {\n var ctx = this.textMeasuringContext;\n ctx.font = font;\n ctx.textBaseline = textBaseline;\n ctx.textAlign = textAlign;\n return ctx.measureText(text);\n };\n /**\n * Returns the width and height of the measured text.\n * @param text The single-line text to measure.\n * @param font The font shorthand string.\n */\n HdpiCanvas.getTextSize = function (text, font) {\n if (this.has.textMetrics) {\n var ctx = this.textMeasuringContext;\n ctx.font = font;\n var metrics = ctx.measureText(text);\n return {\n width: metrics.width,\n height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent,\n };\n }\n else {\n return this.measureSvgText(text, font);\n }\n };\n HdpiCanvas.measureSvgText = function (text, font) {\n var cache = this.textSizeCache;\n var fontCache = cache[font];\n // Note: consider not caching the size of numeric strings.\n // For example: if (isNaN(+text)) { // skip\n if (fontCache) {\n var size_1 = fontCache[text];\n if (size_1) {\n return size_1;\n }\n }\n else {\n cache[font] = {};\n }\n var svgText = this.svgText;\n svgText.style.font = font;\n svgText.textContent = text;\n // `getBBox` returns an instance of `SVGRect` with the same `width` and `height`\n // measurements as `DOMRect` instance returned by the `getBoundingClientRect`.\n // But the `SVGRect` instance has half the properties of the `DOMRect`,\n // so we use the `getBBox` method.\n var bbox = svgText.getBBox();\n var size = {\n width: bbox.width,\n height: bbox.height,\n };\n cache[font][text] = size;\n return size;\n };\n HdpiCanvas.overrideScale = function (ctx, scale) {\n var depth = 0;\n var overrides = {\n save: function () {\n this.$save();\n depth++;\n },\n restore: function () {\n if (depth > 0) {\n this.$restore();\n depth--;\n }\n else {\n throw new Error('AG Charts - Unable to restore() past depth 0');\n }\n },\n setTransform: function (a, b, c, d, e, f) {\n if (typeof a === 'object') {\n this.$setTransform(a);\n }\n else {\n this.$setTransform(a * scale, b * scale, c * scale, d * scale, e * scale, f * scale);\n }\n },\n resetTransform: function () {\n // As of Jan 8, 2019, `resetTransform` is still an \"experimental technology\",\n // and doesn't work in IE11 and Edge 44.\n this.$setTransform(scale, 0, 0, scale, 0, 0);\n },\n verifyDepthZero: function () {\n if (depth !== 0) {\n throw new Error('AG Charts - Save/restore depth is non-zero: ' + depth);\n }\n },\n };\n for (var name_1 in overrides) {\n if (Object.prototype.hasOwnProperty.call(overrides, name_1)) {\n // Save native methods under prefixed names,\n // if this hasn't been done by the previous overrides already.\n if (!ctx['$' + name_1]) {\n ctx['$' + name_1] = ctx[name_1];\n }\n // Replace native methods with overrides,\n // or previous overrides with the new ones.\n ctx[name_1] = overrides[name_1];\n }\n }\n };\n HdpiCanvas.textSizeCache = {};\n return HdpiCanvas;\n}());\nexport { HdpiCanvas };\n","// For small data structs like a bounding box, objects are superior to arrays\n// in terms of performance (by 3-4% in Chrome 71, Safari 12 and by 20% in Firefox 64).\n// They are also self descriptive and harder to abuse.\n// For example, one has to do:\n// `ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);`\n// rather than become enticed by the much slower:\n// `ctx.strokeRect(...bbox);`\n// https://jsperf.com/array-vs-object-create-access\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar BBox = /** @class */ (function () {\n function BBox(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n BBox.prototype.clone = function () {\n var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n return new BBox(x, y, width, height);\n };\n BBox.prototype.equals = function (other) {\n return this.x === other.x && this.y === other.y && this.width === other.width && this.height === other.height;\n };\n BBox.prototype.containsPoint = function (x, y) {\n return x >= this.x && x <= this.x + this.width && y >= this.y && y <= this.y + this.height;\n };\n BBox.prototype.collidesBBox = function (other) {\n return (this.x < other.x + other.width &&\n this.x + this.width > other.x &&\n this.y < other.y + other.height &&\n this.y + this.height > other.y);\n };\n BBox.prototype.isInfinite = function () {\n return (Math.abs(this.x) === Infinity ||\n Math.abs(this.y) === Infinity ||\n Math.abs(this.width) === Infinity ||\n Math.abs(this.height) === Infinity);\n };\n BBox.prototype.shrink = function (amount, position) {\n var _this = this;\n var apply = function (pos, amt) {\n switch (pos) {\n case 'top':\n _this.y += amt;\n // eslint-disable-next-line no-fallthrough\n case 'bottom':\n _this.height -= amt;\n break;\n case 'left':\n _this.x += amt;\n // eslint-disable-next-line no-fallthrough\n case 'right':\n _this.width -= amt;\n break;\n case 'vertical':\n _this.y += amt;\n _this.height -= amt * 2;\n break;\n case 'horizontal':\n _this.x += amt;\n _this.width -= amt * 2;\n break;\n default:\n _this.x += amt;\n _this.width -= amt * 2;\n _this.y += amt;\n _this.height -= amt * 2;\n }\n };\n if (typeof amount === 'number') {\n apply(position, amount);\n }\n else {\n Object.entries(amount).forEach(function (_a) {\n var _b = __read(_a, 2), pos = _b[0], amt = _b[1];\n return apply(pos, amt);\n });\n }\n return this;\n };\n BBox.prototype.grow = function (amount, position) {\n if (typeof amount === 'number') {\n this.shrink(-amount, position);\n }\n else {\n var paddingCopy = __assign({}, amount);\n for (var key in paddingCopy) {\n paddingCopy[key] *= -1;\n }\n this.shrink(paddingCopy);\n }\n return this;\n };\n BBox.merge = function (boxes) {\n var left = Infinity;\n var top = Infinity;\n var right = -Infinity;\n var bottom = -Infinity;\n boxes.forEach(function (box) {\n if (box.x < left) {\n left = box.x;\n }\n if (box.y < top) {\n top = box.y;\n }\n if (box.x + box.width > right) {\n right = box.x + box.width;\n }\n if (box.y + box.height > bottom) {\n bottom = box.y + box.height;\n }\n });\n return new BBox(left, top, right - left, bottom - top);\n };\n return BBox;\n}());\nexport { BBox };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { BBox } from './bbox';\n/**\n * As of Jan 8, 2019, Firefox still doesn't implement\n * `getTransform(): DOMMatrix;`\n * `setTransform(transform?: DOMMatrix2DInit)`\n * in the `CanvasRenderingContext2D`.\n * Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=928150\n * IE11 and Edge 44 also don't have the support.\n * Thus this class, to keep track of the current transform and\n * combine transformations.\n * Standards:\n * https://html.spec.whatwg.org/dev/canvas.html\n * https://www.w3.org/TR/geometry-1/\n */\nvar Matrix = /** @class */ (function () {\n function Matrix(elements) {\n if (elements === void 0) { elements = [1, 0, 0, 1, 0, 0]; }\n this.elements = elements;\n }\n Matrix.prototype.setElements = function (elements) {\n var e = this.elements;\n // `this.elements = elements.slice()` is 4-5 times slower\n // (in Chrome 71 and FF 64) than manually copying elements,\n // since slicing allocates new memory.\n // The performance of passing parameters individually\n // vs as an array is about the same in both browsers, so we\n // go with a single (array of elements) parameter, because\n // `setElements(elements)` and `setElements([a, b, c, d, e, f])`\n // calls give us roughly the same performance, versus\n // `setElements(...elements)` and `setElements(a, b, c, d, e, f)`,\n // where the spread operator causes a 20-30x performance drop\n // (30x when compiled to ES5's `.apply(this, elements)`\n // 20x when used natively).\n e[0] = elements[0];\n e[1] = elements[1];\n e[2] = elements[2];\n e[3] = elements[3];\n e[4] = elements[4];\n e[5] = elements[5];\n return this;\n };\n Object.defineProperty(Matrix.prototype, \"identity\", {\n get: function () {\n var e = this.elements;\n return e[0] === 1 && e[1] === 0 && e[2] === 0 && e[3] === 1 && e[4] === 0 && e[5] === 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"a\", {\n get: function () {\n return this.elements[0];\n },\n set: function (value) {\n this.elements[0] = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"b\", {\n get: function () {\n return this.elements[1];\n },\n set: function (value) {\n this.elements[1] = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"c\", {\n get: function () {\n return this.elements[2];\n },\n set: function (value) {\n this.elements[2] = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"d\", {\n get: function () {\n return this.elements[3];\n },\n set: function (value) {\n this.elements[3] = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"e\", {\n get: function () {\n return this.elements[4];\n },\n set: function (value) {\n this.elements[4] = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"f\", {\n get: function () {\n return this.elements[5];\n },\n set: function (value) {\n this.elements[5] = value;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Performs the AxB matrix multiplication and saves the result\n * to `C`, if given, or to `A` otherwise.\n */\n Matrix.prototype.AxB = function (A, B, C) {\n var a = A[0] * B[0] + A[2] * B[1], b = A[1] * B[0] + A[3] * B[1], c = A[0] * B[2] + A[2] * B[3], d = A[1] * B[2] + A[3] * B[3], e = A[0] * B[4] + A[2] * B[5] + A[4], f = A[1] * B[4] + A[3] * B[5] + A[5];\n C = C || A;\n C[0] = a;\n C[1] = b;\n C[2] = c;\n C[3] = d;\n C[4] = e;\n C[5] = f;\n };\n /**\n * The `other` matrix gets post-multiplied to the current matrix.\n * Returns the current matrix.\n * @param other\n */\n Matrix.prototype.multiplySelf = function (other) {\n this.AxB(this.elements, other.elements);\n return this;\n };\n /**\n * The `other` matrix gets post-multiplied to the current matrix.\n * Returns a new matrix.\n * @param other\n */\n Matrix.prototype.multiply = function (other) {\n var elements = new Array(6);\n this.AxB(this.elements, other.elements, elements);\n return new Matrix(elements);\n };\n Matrix.prototype.preMultiplySelf = function (other) {\n this.AxB(other.elements, this.elements, this.elements);\n return this;\n };\n /**\n * Returns the inverse of this matrix as a new matrix.\n */\n Matrix.prototype.inverse = function () {\n var el = this.elements;\n var a = el[0], b = el[1], c = el[2], d = el[3];\n var e = el[4], f = el[5];\n var rD = 1 / (a * d - b * c); // reciprocal of determinant\n a *= rD;\n b *= rD;\n c *= rD;\n d *= rD;\n return new Matrix([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n };\n /**\n * Save the inverse of this matrix to the given matrix.\n */\n Matrix.prototype.inverseTo = function (other) {\n var el = this.elements;\n var a = el[0], b = el[1], c = el[2], d = el[3];\n var e = el[4], f = el[5];\n var rD = 1 / (a * d - b * c); // reciprocal of determinant\n a *= rD;\n b *= rD;\n c *= rD;\n d *= rD;\n other.setElements([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n return this;\n };\n Matrix.prototype.invertSelf = function () {\n var el = this.elements;\n var a = el[0], b = el[1], c = el[2], d = el[3];\n var e = el[4], f = el[5];\n var rD = 1 / (a * d - b * c); // reciprocal of determinant\n a *= rD;\n b *= rD;\n c *= rD;\n d *= rD;\n el[0] = d;\n el[1] = -b;\n el[2] = -c;\n el[3] = a;\n el[4] = c * f - d * e;\n el[5] = b * e - a * f;\n return this;\n };\n Matrix.prototype.transformPoint = function (x, y) {\n var e = this.elements;\n return {\n x: x * e[0] + y * e[2] + e[4],\n y: x * e[1] + y * e[3] + e[5],\n };\n };\n Matrix.prototype.transformBBox = function (bbox, target) {\n var elements = this.elements;\n var xx = elements[0];\n var xy = elements[1];\n var yx = elements[2];\n var yy = elements[3];\n var h_w = bbox.width * 0.5;\n var h_h = bbox.height * 0.5;\n var cx = bbox.x + h_w;\n var cy = bbox.y + h_h;\n var w = Math.abs(h_w * xx) + Math.abs(h_h * yx);\n var h = Math.abs(h_w * xy) + Math.abs(h_h * yy);\n if (!target) {\n target = new BBox(0, 0, 0, 0);\n }\n target.x = cx * xx + cy * yx + elements[4] - w;\n target.y = cx * xy + cy * yy + elements[5] - h;\n target.width = w + w;\n target.height = h + h;\n return target;\n };\n Matrix.prototype.toContext = function (ctx) {\n // It's fair to say that matrix multiplications are not cheap.\n // However, updating path definitions on every frame isn't either, so\n // it may be cheaper to just translate paths. It's also fair to\n // say, that most paths will have to be re-rendered anyway, say\n // rectangle paths in a bar chart, where an animation would happen when\n // the data set changes and existing bars are morphed into new ones.\n // Or a pie chart, where old sectors are also morphed into new ones.\n // Same for the line chart. The only plausible case where translating\n // existing paths would be enough, is the scatter chart, where marker\n // icons, typically circles, stay the same size. But if circle radii\n // are bound to some data points, even circle paths would have to be\n // updated. And thus it makes sense to optimize for fewer matrix\n // transforms, where transform matrices of paths are mostly identity\n // matrices and `x`/`y`, `centerX`/`centerY` and similar properties\n // are used to define a path at specific coordinates. And only groups\n // are used to collectively apply a transform to a set of nodes.\n // If the matrix is mostly identity (95% of the time),\n // the `if (this.isIdentity)` check can make this call 3-4 times\n // faster on average: https://jsperf.com/matrix-check-first-vs-always-set\n if (this.identity) {\n return;\n }\n var e = this.elements;\n ctx.transform(e[0], e[1], e[2], e[3], e[4], e[5]);\n };\n Matrix.flyweight = function (sourceMatrix) {\n return Matrix.instance.setElements(sourceMatrix.elements);\n };\n Matrix.updateTransformMatrix = function (matrix, scalingX, scalingY, rotation, translationX, translationY, opts) {\n // Assume that centers of scaling and rotation are at the origin.\n var _a = __read([0, 0], 2), bbcx = _a[0], bbcy = _a[1];\n var sx = scalingX;\n var sy = scalingY;\n var scx;\n var scy;\n if (sx === 1 && sy === 1) {\n scx = 0;\n scy = 0;\n }\n else {\n scx = (opts === null || opts === void 0 ? void 0 : opts.scalingCenterX) == null ? bbcx : opts === null || opts === void 0 ? void 0 : opts.scalingCenterX;\n scy = (opts === null || opts === void 0 ? void 0 : opts.scalingCenterY) == null ? bbcy : opts === null || opts === void 0 ? void 0 : opts.scalingCenterY;\n }\n var r = rotation;\n var cos = Math.cos(r);\n var sin = Math.sin(r);\n var rcx;\n var rcy;\n if (r === 0) {\n rcx = 0;\n rcy = 0;\n }\n else {\n rcx = (opts === null || opts === void 0 ? void 0 : opts.rotationCenterX) == null ? bbcx : opts === null || opts === void 0 ? void 0 : opts.rotationCenterX;\n rcy = (opts === null || opts === void 0 ? void 0 : opts.rotationCenterY) == null ? bbcy : opts === null || opts === void 0 ? void 0 : opts.rotationCenterY;\n }\n var tx = translationX;\n var ty = translationY;\n // The transform matrix `M` is a result of the following transformations:\n // 1) translate the center of scaling to the origin\n // 2) scale\n // 3) translate back\n // 4) translate the center of rotation to the origin\n // 5) rotate\n // 6) translate back\n // 7) translate\n // (7) (6) (5) (4) (3) (2) (1)\n // | 1 0 tx | | 1 0 rcx | | cos -sin 0 | | 1 0 -rcx | | 1 0 scx | | sx 0 0 | | 1 0 -scx |\n // M = | 0 1 ty | * | 0 1 rcy | * | sin cos 0 | * | 0 1 -rcy | * | 0 1 scy | * | 0 sy 0 | * | 0 1 -scy |\n // | 0 0 1 | | 0 0 1 | | 0 0 1 | | 0 0 1 | | 0 0 1 | | 0 0 0 | | 0 0 1 |\n // Translation after steps 1-4 above:\n var tx4 = scx * (1 - sx) - rcx;\n var ty4 = scy * (1 - sy) - rcy;\n matrix.setElements([\n cos * sx,\n sin * sx,\n -sin * sy,\n cos * sy,\n cos * tx4 - sin * ty4 + rcx + tx,\n sin * tx4 + cos * ty4 + rcy + ty,\n ]);\n return matrix;\n };\n Matrix.fromContext = function (ctx) {\n var domMatrix = ctx.getTransform();\n return new Matrix([domMatrix.a, domMatrix.b, domMatrix.c, domMatrix.d, domMatrix.e, domMatrix.f]);\n };\n Matrix.instance = new Matrix();\n return Matrix;\n}());\nexport { Matrix };\n","var ID_MAP = {};\nexport function resetIds() {\n for (var key in ID_MAP) {\n delete ID_MAP[key];\n }\n}\nexport function createId(instance) {\n var _a;\n var constructor = instance.constructor;\n var className = Object.prototype.hasOwnProperty.call(constructor, 'className')\n ? constructor.className\n : constructor.name;\n if (!className) {\n throw new Error(\"The \" + constructor + \" is missing the 'className' property.\");\n }\n var nextId = ((_a = ID_MAP[className]) !== null && _a !== void 0 ? _a : 0) + 1;\n ID_MAP[className] = nextId;\n return className + '-' + nextId;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Matrix } from './matrix';\nimport { createId } from '../util/id';\nimport { ChangeDetectable, SceneChangeDetection, RedrawType } from './changeDetectable';\nexport { SceneChangeDetection, RedrawType };\nexport var PointerEvents;\n(function (PointerEvents) {\n PointerEvents[PointerEvents[\"All\"] = 0] = \"All\";\n PointerEvents[PointerEvents[\"None\"] = 1] = \"None\";\n})(PointerEvents || (PointerEvents = {}));\nvar zIndexChangedCallback = function (o) {\n if (o.parent) {\n o.parent.dirtyZIndex = true;\n }\n o.zIndexChanged();\n};\n/**\n * Abstract scene graph node.\n * Each node can have zero or one parent and belong to zero or one scene.\n */\nvar Node = /** @class */ (function (_super) {\n __extends(Node, _super);\n function Node() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** Unique number to allow creation order to be easily determined. */\n _this.serialNumber = Node._nextSerialNumber++;\n /**\n * Unique node ID in the form `ClassName-NaturalNumber`.\n */\n _this.id = createId(_this);\n /**\n * Some number to identify this node, typically within a `Group` node.\n * Usually this will be some enum value used as a selector.\n */\n _this.tag = NaN;\n /**\n * To simplify the type system (especially in Selections) we don't have the `Parent` node\n * (one that has children). Instead, we mimic HTML DOM, where any node can have children.\n * But we still need to distinguish regular leaf nodes from container leafs somehow.\n */\n _this.isContainerNode = false;\n _this._children = [];\n // Used to check for duplicate nodes.\n _this.childSet = {}; // new Set()\n // These matrices may need to have package level visibility\n // for performance optimization purposes.\n _this.matrix = new Matrix();\n _this.inverseMatrix = new Matrix();\n _this._dirtyTransform = false;\n _this.scalingX = 1;\n _this.scalingY = 1;\n /**\n * The center of scaling.\n * The default value of `null` means the scaling center will be\n * determined automatically, as the center of the bounding box\n * of a node.\n */\n _this.scalingCenterX = null;\n _this.scalingCenterY = null;\n _this.rotationCenterX = null;\n _this.rotationCenterY = null;\n /**\n * Rotation angle in radians.\n * The value is set as is. No normalization to the [-180, 180) or [0, 360)\n * interval is performed.\n */\n _this.rotation = 0;\n _this.translationX = 0;\n _this.translationY = 0;\n _this.visible = true;\n _this.dirtyZIndex = false;\n _this.zIndex = 0;\n /** Discriminators for render order within a zIndex. */\n _this.zIndexSubOrder = undefined;\n _this.pointerEvents = PointerEvents.All;\n return _this;\n }\n Object.defineProperty(Node.prototype, \"datum\", {\n /**\n * Some arbitrary data bound to the node.\n */\n get: function () {\n var _a;\n if (this._datum !== undefined) {\n return this._datum;\n }\n return (_a = this._parent) === null || _a === void 0 ? void 0 : _a.datum;\n },\n set: function (datum) {\n this._datum = datum;\n },\n enumerable: false,\n configurable: true\n });\n Node.prototype._setLayerManager = function (value) {\n var e_1, _a;\n this._layerManager = value;\n this._debug = value === null || value === void 0 ? void 0 : value.debug;\n try {\n for (var _b = __values(this.children), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n child._setLayerManager(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n Object.defineProperty(Node.prototype, \"layerManager\", {\n get: function () {\n return this._layerManager;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"children\", {\n get: function () {\n return this._children;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Appends one or more new node instances to this parent.\n * If one needs to:\n * - move a child to the end of the list of children\n * - move a child from one parent to another (including parents in other scenes)\n * one should use the {@link insertBefore} method instead.\n * @param nodes A node or nodes to append.\n */\n Node.prototype.append = function (nodes) {\n var e_2, _a;\n // Passing a single parameter to an open-ended version of `append`\n // would be 30-35% slower than this.\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n try {\n for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {\n var node = nodes_1_1.value;\n if (node.parent) {\n throw new Error(node + \" already belongs to another parent: \" + node.parent + \".\");\n }\n if (node.layerManager) {\n throw new Error(node + \" already belongs to a scene: \" + node.layerManager + \".\");\n }\n if (this.childSet[node.id]) {\n // Cast to `any` to avoid `Property 'name' does not exist on type 'Function'`.\n throw new Error(\"Duplicate \" + node.constructor.name + \" node: \" + node);\n }\n this._children.push(node);\n this.childSet[node.id] = true;\n node._parent = this;\n node._setLayerManager(this.layerManager);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n this.dirtyZIndex = true;\n this.markDirty(this, RedrawType.MAJOR);\n };\n Node.prototype.appendChild = function (node) {\n this.append(node);\n return node;\n };\n Node.prototype.removeChild = function (node) {\n if (node.parent === this) {\n var i = this.children.indexOf(node);\n if (i >= 0) {\n this._children.splice(i, 1);\n delete this.childSet[node.id];\n node._parent = undefined;\n node._setLayerManager();\n this.dirtyZIndex = true;\n this.markDirty(node, RedrawType.MAJOR);\n return node;\n }\n }\n throw new Error(\"The node to be removed is not a child of this node.\");\n };\n /**\n * Inserts the node `node` before the existing child node `nextNode`.\n * If `nextNode` is null, insert `node` at the end of the list of children.\n * If the `node` belongs to another parent, it is first removed.\n * Returns the `node`.\n * @param node\n * @param nextNode\n */\n Node.prototype.insertBefore = function (node, nextNode) {\n var parent = node.parent;\n if (node.parent) {\n node.parent.removeChild(node);\n }\n if (nextNode && nextNode.parent === this) {\n var i = this.children.indexOf(nextNode);\n if (i >= 0) {\n this._children.splice(i, 0, node);\n this.childSet[node.id] = true;\n node._parent = this;\n node._setLayerManager(this.layerManager);\n }\n else {\n throw new Error(nextNode + \" has \" + parent + \" as the parent, \" + \"but is not in its list of children.\");\n }\n this.dirtyZIndex = true;\n this.markDirty(node, RedrawType.MAJOR);\n }\n else {\n this.append(node);\n }\n return node;\n };\n Node.prototype.calculateCumulativeMatrix = function () {\n this.computeTransformMatrix();\n var matrix = Matrix.flyweight(this.matrix);\n var parent = this.parent;\n while (parent) {\n parent.computeTransformMatrix();\n matrix.preMultiplySelf(parent.matrix);\n parent = parent.parent;\n }\n return matrix;\n };\n Node.prototype.transformPoint = function (x, y) {\n var matrix = this.calculateCumulativeMatrix();\n return matrix.invertSelf().transformPoint(x, y);\n };\n Node.prototype.inverseTransformPoint = function (x, y) {\n var matrix = this.calculateCumulativeMatrix();\n return matrix.transformPoint(x, y);\n };\n Node.prototype.transformBBox = function (bbox) {\n var matrix = this.calculateCumulativeMatrix();\n return matrix.invertSelf().transformBBox(bbox);\n };\n Node.prototype.inverseTransformBBox = function (bbox) {\n var matrix = this.calculateCumulativeMatrix();\n return matrix.transformBBox(bbox);\n };\n Node.prototype.markDirtyTransform = function () {\n this._dirtyTransform = true;\n this.markDirty(this, RedrawType.MAJOR);\n };\n Node.prototype.containsPoint = function (_x, _y) {\n return false;\n };\n /**\n * Hit testing method.\n * Recursively checks if the given point is inside this node or any of its children.\n * Returns the first matching node or `undefined`.\n * Nodes that render later (show on top) are hit tested first.\n */\n Node.prototype.pickNode = function (x, y) {\n var _a;\n if (!this.visible || this.pointerEvents === PointerEvents.None || !this.containsPoint(x, y)) {\n return;\n }\n var children = this.children;\n if (children.length > 1000) {\n // Try to optimise which children to interrogate; BBox calculation is an approximation\n // for more complex shapes, so discarding items based on this will save a lot of\n // processing when the point is nowhere near the child.\n for (var i = children.length - 1; i >= 0; i--) {\n var hit = ((_a = children[i].computeBBox()) === null || _a === void 0 ? void 0 : _a.containsPoint(x, y)) ? children[i].pickNode(x, y) : undefined;\n if (hit) {\n return hit;\n }\n }\n }\n else if (children.length) {\n // Nodes added later should be hit-tested first,\n // as they are rendered on top of the previously added nodes.\n for (var i = children.length - 1; i >= 0; i--) {\n var hit = children[i].pickNode(x, y);\n if (hit) {\n return hit;\n }\n }\n }\n else if (!this.isContainerNode) {\n // a leaf node, but not a container leaf\n return this;\n }\n };\n Node.prototype.findNodes = function (predicate) {\n var e_3, _a;\n var result = predicate(this) ? [this] : [];\n try {\n for (var _b = __values(this.children), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n var childResult = child.findNodes(predicate);\n if (childResult) {\n result.push.apply(result, __spread(childResult));\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return result;\n };\n Node.prototype.computeBBox = function () {\n return;\n };\n Node.prototype.computeTransformedBBox = function () {\n var bbox = this.computeBBox();\n if (!bbox) {\n return undefined;\n }\n this.computeTransformMatrix();\n var matrix = Matrix.flyweight(this.matrix);\n var parent = this.parent;\n while (parent) {\n parent.computeTransformMatrix();\n matrix.preMultiplySelf(parent.matrix);\n parent = parent.parent;\n }\n matrix.transformBBox(bbox, bbox);\n return bbox;\n };\n Node.prototype.computeTransformMatrix = function () {\n if (!this._dirtyTransform) {\n return;\n }\n var _a = this, matrix = _a.matrix, scalingX = _a.scalingX, scalingY = _a.scalingY, rotation = _a.rotation, translationX = _a.translationX, translationY = _a.translationY, scalingCenterX = _a.scalingCenterX, scalingCenterY = _a.scalingCenterY, rotationCenterX = _a.rotationCenterX, rotationCenterY = _a.rotationCenterY;\n Matrix.updateTransformMatrix(matrix, scalingX, scalingY, rotation, translationX, translationY, {\n scalingCenterX: scalingCenterX,\n scalingCenterY: scalingCenterY,\n rotationCenterX: rotationCenterX,\n rotationCenterY: rotationCenterY,\n });\n matrix.inverseTo(this.inverseMatrix);\n this._dirtyTransform = false;\n };\n Node.prototype.render = function (renderCtx) {\n var stats = renderCtx.stats;\n this._dirty = RedrawType.NONE;\n if (stats)\n stats.nodesRendered++;\n };\n Node.prototype.clearBBox = function (ctx) {\n var bbox = this.computeBBox();\n if (bbox == null) {\n return;\n }\n var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n var topLeft = this.transformPoint(x, y);\n var bottomRight = this.transformPoint(x + width, y + height);\n ctx.clearRect(topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n };\n Node.prototype.markDirty = function (_source, type, parentType) {\n if (type === void 0) { type = RedrawType.TRIVIAL; }\n if (parentType === void 0) { parentType = type; }\n if (this._dirty > type) {\n return;\n }\n if (this._dirty === type && type === parentType) {\n return;\n }\n this._dirty = type;\n if (this.parent) {\n this.parent.markDirty(this, parentType);\n }\n else if (this.layerManager) {\n this.layerManager.markDirty();\n }\n };\n Object.defineProperty(Node.prototype, \"dirty\", {\n get: function () {\n return this._dirty;\n },\n enumerable: false,\n configurable: true\n });\n Node.prototype.markClean = function (opts) {\n var e_4, _a;\n var _b = opts || {}, _c = _b.force, force = _c === void 0 ? false : _c, _d = _b.recursive, recursive = _d === void 0 ? true : _d;\n if (this._dirty === RedrawType.NONE && !force) {\n return;\n }\n this._dirty = RedrawType.NONE;\n if (recursive) {\n try {\n for (var _e = __values(this.children), _f = _e.next(); !_f.done; _f = _e.next()) {\n var child = _f.value;\n child.markClean();\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n };\n Node.prototype.visibilityChanged = function () {\n // Override point for sub-classes to react to visibility changes.\n };\n Object.defineProperty(Node.prototype, \"nodeCount\", {\n get: function () {\n var e_5, _a;\n var count = 1;\n var dirtyCount = this._dirty >= RedrawType.NONE || this._dirtyTransform ? 1 : 0;\n var visibleCount = this.visible ? 1 : 0;\n try {\n for (var _b = __values(this._children), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n var _d = child.nodeCount, childCount = _d.count, childVisibleCount = _d.visibleCount, childDirtyCount = _d.dirtyCount;\n count += childCount;\n visibleCount += childVisibleCount;\n dirtyCount += childDirtyCount;\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_5) throw e_5.error; }\n }\n return { count: count, visibleCount: visibleCount, dirtyCount: dirtyCount };\n },\n enumerable: false,\n configurable: true\n });\n Node.prototype.zIndexChanged = function () {\n // Override point for sub-classes.\n };\n Node._nextSerialNumber = 0;\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"scalingX\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"scalingY\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"scalingCenterX\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"scalingCenterY\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"rotationCenterX\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"rotationCenterY\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"rotation\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"translationX\", void 0);\n __decorate([\n SceneChangeDetection({ type: 'transform' })\n ], Node.prototype, \"translationY\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR, changeCb: function (o) { return o.visibilityChanged(); } })\n ], Node.prototype, \"visible\", void 0);\n __decorate([\n SceneChangeDetection({\n redraw: RedrawType.TRIVIAL,\n changeCb: zIndexChangedCallback,\n })\n ], Node.prototype, \"zIndex\", void 0);\n __decorate([\n SceneChangeDetection({\n redraw: RedrawType.TRIVIAL,\n changeCb: zIndexChangedCallback,\n })\n ], Node.prototype, \"zIndexSubOrder\", void 0);\n return Node;\n}(ChangeDetectable));\nexport { Node };\n","export function ascendingStringNumberUndefined(a, b) {\n var diff = 0;\n if (typeof a === 'number' && typeof b === 'number') {\n diff = a - b;\n }\n else if (typeof a === 'string' && typeof b === 'string') {\n diff = a.localeCompare(b);\n }\n else if (a == null && b == null) {\n // Equal.\n }\n else if (a == null) {\n diff = -1;\n }\n else if (b == null) {\n diff = 1;\n }\n else {\n diff = String(a).localeCompare(String(b));\n }\n return diff;\n}\nexport function compoundAscending(a, b, comparator) {\n var toLiteral = function (v) {\n if (typeof v === 'function') {\n return v();\n }\n return v;\n };\n for (var idx in a) {\n var diff = comparator(toLiteral(a[idx]), toLiteral(b[idx]));\n if (diff !== 0) {\n return diff;\n }\n }\n return 0;\n}\n","var doOnceFlags = {};\n/**\n * If the key was passed before, then doesn't execute the func\n */\nexport function doOnce(func, key) {\n if (doOnceFlags[key]) {\n return;\n }\n func();\n doOnceFlags[key] = true;\n}\n/** Clear doOnce() state (for test purposes). */\nexport function clearDoOnceFlags() {\n for (var key in doOnceFlags) {\n delete doOnceFlags[key];\n }\n}\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\n/* eslint-disable no-console */\nimport { doOnce } from './function';\nexport var Logger = {\n debug: function () {\n var logContent = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n logContent[_i] = arguments[_i];\n }\n console.log.apply(console, __spread(logContent));\n },\n warn: function (message) {\n var logContent = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n logContent[_i - 1] = arguments[_i];\n }\n console.warn.apply(console, __spread([\"AG Charts - \" + message], logContent));\n },\n error: function (message) {\n var logContent = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n logContent[_i - 1] = arguments[_i];\n }\n console.error.apply(console, __spread([\"AG Charts - \" + message], logContent));\n },\n warnOnce: function (message) {\n var logContent = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n logContent[_i - 1] = arguments[_i];\n }\n doOnce(function () { return Logger.warn.apply(Logger, __spread([message], logContent)); }, \"Logger.warn: \" + message);\n },\n errorOnce: function (message) {\n var logContent = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n logContent[_i - 1] = arguments[_i];\n }\n doOnce(function () { return Logger.error.apply(Logger, __spread([message], logContent)); }, \"Logger.warn: \" + message);\n },\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Node, RedrawType, SceneChangeDetection } from './node';\nimport { BBox } from './bbox';\nimport { compoundAscending, ascendingStringNumberUndefined } from '../util/compare';\nimport { Logger } from '../util/logger';\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group(opts) {\n var _a;\n var _this = _super.call(this) || this;\n _this.opts = opts;\n _this.opacity = 1;\n _this.lastBBox = undefined;\n var _b = opts || {}, zIndex = _b.zIndex, zIndexSubOrder = _b.zIndexSubOrder;\n _this.isContainerNode = true;\n if (zIndex !== undefined) {\n _this.zIndex = zIndex;\n }\n if (zIndexSubOrder !== undefined) {\n _this.zIndexSubOrder = zIndexSubOrder;\n }\n _this.name = (_a = _this.opts) === null || _a === void 0 ? void 0 : _a.name;\n return _this;\n }\n Group.prototype.zIndexChanged = function () {\n var _a;\n if (this.layer) {\n (_a = this._layerManager) === null || _a === void 0 ? void 0 : _a.moveLayer(this.layer, this.zIndex, this.zIndexSubOrder);\n }\n };\n Group.prototype.isLayer = function () {\n return this.layer != null;\n };\n Group.prototype._setLayerManager = function (scene) {\n var _this = this;\n var _a;\n if (this._layerManager && this.layer) {\n this._layerManager.removeLayer(this.layer);\n this.layer = undefined;\n }\n if (this.layer) {\n throw new Error('AG Charts - unable to deregister scene rendering layer!');\n }\n _super.prototype._setLayerManager.call(this, scene);\n if (scene && ((_a = this.opts) === null || _a === void 0 ? void 0 : _a.layer)) {\n var _b = this.opts || {}, zIndex = _b.zIndex, zIndexSubOrder = _b.zIndexSubOrder, name_1 = _b.name;\n var getComputedOpacity = function () { return _this.getComputedOpacity(); };\n var getVisibility = function () { return _this.getVisibility(); };\n this.layer = scene.addLayer({ zIndex: zIndex, zIndexSubOrder: zIndexSubOrder, name: name_1, getComputedOpacity: getComputedOpacity, getVisibility: getVisibility });\n }\n };\n Group.prototype.getComputedOpacity = function () {\n var opacity = 1;\n var node = this;\n do {\n if (node instanceof Group) {\n opacity *= node.opacity;\n }\n } while ((node = node.parent));\n return opacity;\n };\n Group.prototype.getVisibility = function () {\n var node = this;\n var visible = this.visible;\n while ((node = node.parent)) {\n if (node.visible) {\n continue;\n }\n visible = node.visible;\n }\n return visible;\n };\n Group.prototype.visibilityChanged = function () {\n if (this.layer) {\n this.layer.enabled = this.visible;\n }\n };\n Group.prototype.markDirty = function (source, type) {\n if (type === void 0) { type = RedrawType.TRIVIAL; }\n var parentType = type <= RedrawType.MINOR ? RedrawType.TRIVIAL : type;\n _super.prototype.markDirty.call(this, source, type, parentType);\n };\n // We consider a group to be boundless, thus any point belongs to it.\n Group.prototype.containsPoint = function (_x, _y) {\n return true;\n };\n Group.prototype.computeBBox = function () {\n this.computeTransformMatrix();\n return Group.computeBBox(this.children);\n };\n Group.prototype.computeTransformedBBox = function () {\n return this.computeBBox();\n };\n Group.prototype.render = function (renderCtx) {\n var e_1, _a;\n var _b, _c;\n var _d = this.opts, _e = (_d === void 0 ? {} : _d).name, name = _e === void 0 ? undefined : _e;\n var _f = this._debug, _g = (_f === void 0 ? {} : _f).consoleLog, consoleLog = _g === void 0 ? false : _g;\n var _h = this, dirty = _h.dirty, dirtyZIndex = _h.dirtyZIndex, layer = _h.layer, children = _h.children, clipRect = _h.clipRect;\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, clipBBox = renderCtx.clipBBox;\n var resized = renderCtx.resized, stats = renderCtx.stats;\n var canvasCtxTransform = ctx.getTransform();\n var isDirty = dirty >= RedrawType.MINOR || dirtyZIndex || resized;\n var isChildDirty = isDirty || children.some(function (n) { return n.dirty >= RedrawType.TRIVIAL; });\n if (name && consoleLog) {\n Logger.debug({ name: name, group: this, isDirty: isDirty, isChildDirty: isChildDirty, renderCtx: renderCtx, forceRender: forceRender });\n }\n if (layer) {\n // If bounding-box of a layer changes, force re-render.\n var currentBBox = this.computeBBox();\n if (this.lastBBox === undefined || !this.lastBBox.equals(currentBBox)) {\n forceRender = true;\n this.lastBBox = currentBBox;\n }\n else if (!currentBBox.isInfinite()) {\n // bbox for path2D is currently (Infinity) not calculated\n // If it's not a path2D, turn off forceRender\n // By default there is no need to force redraw a group which has it's own canvas layer\n // as the layer is independent of any other layer\n forceRender = false;\n }\n }\n if (!isDirty && !isChildDirty && !forceRender) {\n if (name && consoleLog && stats) {\n var counts = this.nodeCount;\n Logger.debug({ name: name, result: 'skipping', renderCtx: renderCtx, counts: counts, group: this });\n }\n if (layer && stats) {\n stats.layersSkipped++;\n stats.nodesSkipped += this.nodeCount.count;\n }\n this.markClean({ recursive: false });\n // Nothing to do.\n return;\n }\n var groupVisible = this.visible;\n if (layer) {\n // Switch context to the canvas layer we use for this group.\n ctx = layer.context;\n ctx.save();\n ctx.resetTransform();\n forceRender = true;\n layer.clear();\n if (clipBBox) {\n // clipBBox is in the canvas coordinate space, when we hit a layer we apply the new clipping at which point there are no transforms in play\n var width = clipBBox.width, height = clipBBox.height, x = clipBBox.x, y = clipBBox.y;\n if (consoleLog) {\n Logger.debug({ name: name, clipBBox: clipBBox, ctxTransform: ctx.getTransform(), renderCtx: renderCtx, group: this });\n }\n this.clipCtx(ctx, x, y, width, height);\n }\n ctx.setTransform(canvasCtxTransform);\n }\n else {\n // Only apply opacity if this isn't a distinct layer - opacity will be applied\n // at composition time.\n ctx.globalAlpha *= this.opacity;\n }\n // A group can have `scaling`, `rotation`, `translation` properties\n // that are applied to the canvas context before children are rendered,\n // so all children can be transformed at once.\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n if (clipRect) {\n // clipRect is in the group's coordinate space\n var x = clipRect.x, y = clipRect.y, width = clipRect.width, height = clipRect.height;\n ctx.save();\n if (consoleLog) {\n Logger.debug({ name: name, clipRect: clipRect, ctxTransform: ctx.getTransform(), renderCtx: renderCtx, group: this });\n }\n this.clipCtx(ctx, x, y, width, height);\n // clipBBox is in the canvas coordinate space, when we hit a layer we apply the new clipping at which point there are no transforms in play\n clipBBox = this.matrix.inverse().transformBBox(clipRect);\n }\n if (dirtyZIndex) {\n this.sortChildren();\n forceRender = true;\n }\n // Reduce churn if renderCtx is identical.\n var renderContextChanged = forceRender !== renderCtx.forceRender || clipBBox !== renderCtx.clipBBox || ctx !== renderCtx.ctx;\n var childRenderContext = renderContextChanged ? __assign(__assign({}, renderCtx), { ctx: ctx, forceRender: forceRender, clipBBox: clipBBox }) : renderCtx;\n // Render visible children.\n var skipped = 0;\n try {\n for (var children_1 = __values(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) {\n var child = children_1_1.value;\n if (!child.visible || !groupVisible) {\n // Skip invisible children, but make sure their dirty flag is reset.\n child.markClean();\n if (stats)\n skipped += child.nodeCount.count;\n continue;\n }\n if (!forceRender && child.dirty === RedrawType.NONE) {\n // Skip children that don't need to be redrawn.\n if (stats)\n skipped += child.nodeCount.count;\n continue;\n }\n // Render marks this node (and children) as clean - no need to explicitly markClean().\n ctx.save();\n child.render(childRenderContext);\n ctx.restore();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (stats)\n stats.nodesSkipped += skipped;\n // Render marks this node as clean - no need to explicitly markClean().\n _super.prototype.render.call(this, renderCtx);\n if (clipRect) {\n ctx.restore();\n }\n if (layer) {\n if (stats)\n stats.layersRendered++;\n ctx.restore();\n layer.snapshot();\n // Check for save/restore depth of zero!\n (_c = (_b = layer.context).verifyDepthZero) === null || _c === void 0 ? void 0 : _c.call(_b);\n }\n if (name && consoleLog && stats) {\n var counts = this.nodeCount;\n Logger.debug({ name: name, result: 'rendered', skipped: skipped, renderCtx: renderCtx, counts: counts, group: this });\n }\n };\n Group.prototype.sortChildren = function () {\n this.dirtyZIndex = false;\n this.children.sort(function (a, b) {\n var _a, _b;\n return compoundAscending(__spread([a.zIndex], ((_a = a.zIndexSubOrder) !== null && _a !== void 0 ? _a : [undefined, undefined]), [a.serialNumber]), __spread([b.zIndex], ((_b = b.zIndexSubOrder) !== null && _b !== void 0 ? _b : [undefined, undefined]), [b.serialNumber]), ascendingStringNumberUndefined);\n });\n };\n Group.prototype.clipCtx = function (ctx, x, y, width, height) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x + width, y + height);\n ctx.lineTo(x, y + height);\n ctx.closePath();\n ctx.clip();\n };\n Group.computeBBox = function (nodes) {\n var left = Infinity;\n var right = -Infinity;\n var top = Infinity;\n var bottom = -Infinity;\n nodes.forEach(function (n) {\n if (!n.visible) {\n return;\n }\n var bbox = n.computeTransformedBBox();\n if (!bbox) {\n return;\n }\n var x = bbox.x;\n var y = bbox.y;\n if (x < left) {\n left = x;\n }\n if (y < top) {\n top = y;\n }\n if (x + bbox.width > right) {\n right = x + bbox.width;\n }\n if (y + bbox.height > bottom) {\n bottom = y + bbox.height;\n }\n });\n return new BBox(left, top, right - left, bottom - top);\n };\n /**\n * Transforms bbox given in the canvas coordinate space to bbox in this group's coordinate space and\n * sets this group's clipRect to the transformed bbox.\n * @param bbox clipRect bbox in the canvas coordinate space.\n */\n Group.prototype.setClipRectInGroupCoordinateSpace = function (bbox) {\n this.clipRect = bbox ? this.transformBBox(bbox) : undefined;\n };\n Group.className = 'Group';\n __decorate([\n SceneChangeDetection({\n convertor: function (v) { return Math.min(1, Math.max(0, v)); },\n })\n ], Group.prototype, \"opacity\", void 0);\n return Group;\n}(Node));\nexport { Group };\n","import { HdpiCanvas } from './hdpiCanvas';\nimport { isDesktop } from '../util/userAgent';\n/**\n * Wraps a native OffscreenCanvas and overrides its OffscreenCanvasRenderingContext2D to\n * provide resolution independent rendering based on `window.devicePixelRatio`.\n */\nvar HdpiOffscreenCanvas = /** @class */ (function () {\n // The width/height attributes of the Canvas element default to\n // 300/150 according to w3.org.\n function HdpiOffscreenCanvas(_a) {\n var _b = _a.width, width = _b === void 0 ? 600 : _b, _c = _a.height, height = _c === void 0 ? 300 : _c, _d = _a.overrideDevicePixelRatio, overrideDevicePixelRatio = _d === void 0 ? undefined : _d;\n this.enabled = true;\n // `NaN` is deliberate here, so that overrides are always applied\n // and the `resetTransform` inside the `resize` method works in IE11.\n this._pixelRatio = NaN;\n this._width = 0;\n this._height = 0;\n this.canvas = new OffscreenCanvas(width, height);\n this.context = this.canvas.getContext('2d');\n this.imageSource = this.canvas.transferToImageBitmap();\n this.setPixelRatio(overrideDevicePixelRatio);\n this.resize(width, height);\n }\n HdpiOffscreenCanvas.isSupported = function () {\n return window['OffscreenCanvas'] != null;\n };\n HdpiOffscreenCanvas.prototype.snapshot = function () {\n this.imageSource.close();\n this.imageSource = this.canvas.transferToImageBitmap();\n };\n HdpiOffscreenCanvas.prototype.destroy = function () {\n this.imageSource.close();\n // Workaround memory allocation quirks in iOS Safari by resizing to 0x0 and clearing.\n // See https://bugs.webkit.org/show_bug.cgi?id=195325.\n this.canvas.width = 0;\n this.canvas.height = 0;\n this.context.clearRect(0, 0, 0, 0);\n };\n HdpiOffscreenCanvas.prototype.clear = function () {\n this.context.save();\n this.context.resetTransform();\n this.context.clearRect(0, 0, this.width, this.height);\n this.context.restore();\n };\n Object.defineProperty(HdpiOffscreenCanvas.prototype, \"pixelRatio\", {\n get: function () {\n return this._pixelRatio;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Changes the pixel ratio of the Canvas element to the given value,\n * or uses the window.devicePixelRatio (default), then resizes the Canvas\n * element accordingly (default).\n */\n HdpiOffscreenCanvas.prototype.setPixelRatio = function (ratio) {\n var pixelRatio = ratio !== null && ratio !== void 0 ? ratio : window.devicePixelRatio;\n if (!isDesktop()) {\n // Mobile browsers have stricter memory limits, we reduce rendering resolution to\n // improve stability on mobile browsers. iOS Safari 12->16 are pain-points since they\n // have memory allocation quirks - see https://bugs.webkit.org/show_bug.cgi?id=195325.\n pixelRatio = 1;\n }\n HdpiCanvas.overrideScale(this.context, pixelRatio);\n this._pixelRatio = pixelRatio;\n };\n Object.defineProperty(HdpiOffscreenCanvas.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HdpiOffscreenCanvas.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n enumerable: false,\n configurable: true\n });\n HdpiOffscreenCanvas.prototype.resize = function (width, height) {\n if (!(width > 0 && height > 0)) {\n return;\n }\n var _a = this, canvas = _a.canvas, context = _a.context, pixelRatio = _a.pixelRatio;\n canvas.width = Math.round(width * pixelRatio);\n canvas.height = Math.round(height * pixelRatio);\n context.resetTransform();\n this._width = width;\n this._height = height;\n };\n return HdpiOffscreenCanvas;\n}());\nexport { HdpiOffscreenCanvas };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { HdpiCanvas } from '../canvas/hdpiCanvas';\nimport { RedrawType } from './node';\nimport { createId } from '../util/id';\nimport { Group } from './group';\nimport { HdpiOffscreenCanvas } from '../canvas/hdpiOffscreenCanvas';\nimport { windowValue } from '../util/window';\nimport { ascendingStringNumberUndefined, compoundAscending } from '../util/compare';\nimport { Logger } from '../util/logger';\nfunction buildSceneNodeHighlight() {\n var _a;\n var config = (_a = windowValue('agChartsSceneDebug')) !== null && _a !== void 0 ? _a : [];\n if (typeof config === 'string') {\n config = [config];\n }\n var result = [];\n config.forEach(function (name) {\n if (name === 'layout') {\n result.push('seriesRoot', 'legend', 'root', /.*Axis-\\d+-axis.*/);\n }\n else {\n result.push(name);\n }\n });\n return result;\n}\nvar Scene = /** @class */ (function () {\n function Scene(opts) {\n var _a, _b;\n this.id = createId(this);\n this.layers = [];\n this._nextZIndex = 0;\n this._nextLayerId = 0;\n this._dirty = false;\n this._root = null;\n this.debug = {\n dirtyTree: false,\n stats: false,\n renderBoundingBoxes: false,\n consoleLog: false,\n sceneNodeHighlight: [],\n };\n var _c = opts.document, document = _c === void 0 ? window.document : _c, _d = opts.mode, mode = _d === void 0 ? windowValue('agChartsSceneRenderModel') || 'adv-composite' : _d, width = opts.width, height = opts.height, _e = opts.overrideDevicePixelRatio, overrideDevicePixelRatio = _e === void 0 ? undefined : _e;\n this.overrideDevicePixelRatio = overrideDevicePixelRatio;\n this.opts = { document: document, mode: mode };\n this.debug.consoleLog = windowValue('agChartsDebug') === true;\n this.debug.stats = (_a = windowValue('agChartsSceneStats')) !== null && _a !== void 0 ? _a : false;\n this.debug.dirtyTree = (_b = windowValue('agChartsSceneDirtyTree')) !== null && _b !== void 0 ? _b : false;\n this.debug.sceneNodeHighlight = buildSceneNodeHighlight();\n this.canvas = new HdpiCanvas({ document: document, width: width, height: height, overrideDevicePixelRatio: overrideDevicePixelRatio });\n }\n Object.defineProperty(Scene.prototype, \"container\", {\n get: function () {\n return this.canvas.container;\n },\n set: function (value) {\n this.canvas.container = value;\n },\n enumerable: false,\n configurable: true\n });\n Scene.prototype.download = function (fileName, fileFormat) {\n this.canvas.download(fileName, fileFormat);\n };\n Scene.prototype.getDataURL = function (type) {\n return this.canvas.getDataURL(type);\n };\n Object.defineProperty(Scene.prototype, \"width\", {\n get: function () {\n return this.pendingSize ? this.pendingSize[0] : this.canvas.width;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scene.prototype, \"height\", {\n get: function () {\n return this.pendingSize ? this.pendingSize[1] : this.canvas.height;\n },\n enumerable: false,\n configurable: true\n });\n Scene.prototype.resize = function (width, height) {\n width = Math.round(width);\n height = Math.round(height);\n // HdpiCanvas doesn't allow width/height <= 0.\n var lessThanZero = width <= 0 || height <= 0;\n var nan = isNaN(width) || isNaN(height);\n var unchanged = width === this.width && height === this.height;\n if (unchanged || nan || lessThanZero) {\n return false;\n }\n this.pendingSize = [width, height];\n this.markDirty();\n return true;\n };\n Scene.prototype.addLayer = function (opts) {\n var _a;\n var mode = this.opts.mode;\n var layeredModes = ['composite', 'dom-composite', 'adv-composite'];\n if (!layeredModes.includes(mode)) {\n return undefined;\n }\n var _b = opts.zIndex, zIndex = _b === void 0 ? this._nextZIndex++ : _b, name = opts.name, zIndexSubOrder = opts.zIndexSubOrder, getComputedOpacity = opts.getComputedOpacity, getVisibility = opts.getVisibility;\n var _c = this, width = _c.width, height = _c.height, overrideDevicePixelRatio = _c.overrideDevicePixelRatio;\n var domLayer = mode === 'dom-composite';\n var advLayer = mode === 'adv-composite';\n var canvas = !advLayer || !HdpiOffscreenCanvas.isSupported()\n ? new HdpiCanvas({\n document: this.opts.document,\n width: width,\n height: height,\n domLayer: domLayer,\n zIndex: zIndex,\n name: name,\n overrideDevicePixelRatio: overrideDevicePixelRatio,\n })\n : new HdpiOffscreenCanvas({\n width: width,\n height: height,\n overrideDevicePixelRatio: overrideDevicePixelRatio,\n });\n var newLayer = {\n id: this._nextLayerId++,\n name: name,\n zIndex: zIndex,\n zIndexSubOrder: zIndexSubOrder,\n canvas: canvas,\n getComputedOpacity: getComputedOpacity,\n getVisibility: getVisibility,\n };\n if (zIndex >= this._nextZIndex) {\n this._nextZIndex = zIndex + 1;\n }\n this.layers.push(newLayer);\n this.sortLayers();\n if (domLayer) {\n var domCanvases = this.layers\n .map(function (v) { return v.canvas; })\n .filter(function (v) { return v instanceof HdpiCanvas; });\n var newLayerIndex = domCanvases.findIndex(function (v) { return v === canvas; });\n var lastLayer = (_a = domCanvases[newLayerIndex - 1]) !== null && _a !== void 0 ? _a : this.canvas;\n lastLayer.element.insertAdjacentElement('afterend', canvas.element);\n }\n if (this.debug.consoleLog) {\n Logger.debug({ layers: this.layers });\n }\n return newLayer.canvas;\n };\n Scene.prototype.removeLayer = function (canvas) {\n var index = this.layers.findIndex(function (l) { return l.canvas === canvas; });\n if (index >= 0) {\n this.layers.splice(index, 1);\n canvas.destroy();\n this.markDirty();\n if (this.debug.consoleLog) {\n Logger.debug({ layers: this.layers });\n }\n }\n };\n Scene.prototype.moveLayer = function (canvas, newZIndex, newZIndexSubOrder) {\n var layer = this.layers.find(function (l) { return l.canvas === canvas; });\n if (layer) {\n layer.zIndex = newZIndex;\n layer.zIndexSubOrder = newZIndexSubOrder;\n this.sortLayers();\n this.markDirty();\n if (this.debug.consoleLog) {\n Logger.debug({ layers: this.layers });\n }\n }\n };\n Scene.prototype.sortLayers = function () {\n this.layers.sort(function (a, b) {\n var _a, _b;\n return compoundAscending(__spread([a.zIndex], ((_a = a.zIndexSubOrder) !== null && _a !== void 0 ? _a : [undefined, undefined]), [a.id]), __spread([b.zIndex], ((_b = b.zIndexSubOrder) !== null && _b !== void 0 ? _b : [undefined, undefined]), [b.id]), ascendingStringNumberUndefined);\n });\n };\n Scene.prototype.markDirty = function () {\n this._dirty = true;\n };\n Object.defineProperty(Scene.prototype, \"dirty\", {\n get: function () {\n return this._dirty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scene.prototype, \"root\", {\n get: function () {\n return this._root;\n },\n set: function (node) {\n if (node === this._root) {\n return;\n }\n if (this._root) {\n this._root._setLayerManager();\n }\n this._root = node;\n if (node) {\n // If `node` is the root node of another scene ...\n if (node.parent === null && node.layerManager && node.layerManager !== this) {\n node.layerManager.root = null;\n }\n node._setLayerManager(this);\n }\n this.markDirty();\n },\n enumerable: false,\n configurable: true\n });\n /** Alternative to destroy() that preserves re-usable resources. */\n Scene.prototype.strip = function () {\n var e_1, _a;\n var layers = this.layers;\n try {\n for (var layers_1 = __values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) {\n var layer = layers_1_1.value;\n layer.canvas.destroy();\n delete layer['canvas'];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n layers.splice(0, layers.length);\n this.root = null;\n this._dirty = false;\n this.canvas.context.resetTransform();\n };\n Scene.prototype.destroy = function () {\n this.container = undefined;\n this.strip();\n this.canvas.destroy();\n Object.assign(this, { canvas: undefined, ctx: undefined });\n };\n Scene.prototype.render = function (opts) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var _b, _c, debugSplitTimes, _d, extraDebugStats, _e, canvas, ctx, root, layers, pendingSize, mode, renderCtx, canvasCleared, _f, dirtyTree, paths;\n var _g;\n return __generator(this, function (_h) {\n _b = opts || {}, _c = _b.debugSplitTimes, debugSplitTimes = _c === void 0 ? [performance.now()] : _c, _d = _b.extraDebugStats, extraDebugStats = _d === void 0 ? {} : _d;\n _e = this, canvas = _e.canvas, ctx = _e.canvas.context, root = _e.root, layers = _e.layers, pendingSize = _e.pendingSize, mode = _e.opts.mode;\n if (pendingSize) {\n (_g = this.canvas).resize.apply(_g, __spread(pendingSize));\n this.layers.forEach(function (layer) {\n var _a;\n return (_a = layer.canvas).resize.apply(_a, __spread(pendingSize));\n });\n this.pendingSize = undefined;\n }\n if (root && !root.visible) {\n this._dirty = false;\n return [2 /*return*/];\n }\n if (root && !this.dirty) {\n if (this.debug.consoleLog) {\n Logger.debug('no-op', {\n redrawType: RedrawType[root.dirty],\n tree: this.buildTree(root),\n });\n }\n this.debugStats(debugSplitTimes, ctx, undefined, extraDebugStats);\n return [2 /*return*/];\n }\n renderCtx = {\n ctx: ctx,\n forceRender: true,\n resized: !!pendingSize,\n debugNodes: {},\n };\n if (this.debug.stats === 'detailed') {\n renderCtx.stats = { layersRendered: 0, layersSkipped: 0, nodesRendered: 0, nodesSkipped: 0 };\n }\n canvasCleared = false;\n if (!root || root.dirty >= RedrawType.TRIVIAL) {\n // start with a blank canvas, clear previous drawing\n canvasCleared = true;\n canvas.clear();\n }\n if (root && this.debug.dirtyTree) {\n _f = this.buildDirtyTree(root), dirtyTree = _f.dirtyTree, paths = _f.paths;\n Logger.debug({ dirtyTree: dirtyTree, paths: paths });\n }\n if (root && canvasCleared) {\n if (this.debug.consoleLog) {\n Logger.debug('before', {\n redrawType: RedrawType[root.dirty],\n canvasCleared: canvasCleared,\n tree: this.buildTree(root),\n });\n }\n if (root.visible) {\n ctx.save();\n root.render(renderCtx);\n ctx.restore();\n }\n }\n if (mode !== 'dom-composite' && layers.length > 0 && canvasCleared) {\n this.sortLayers();\n ctx.save();\n ctx.setTransform(1 / canvas.pixelRatio, 0, 0, 1 / canvas.pixelRatio, 0, 0);\n layers.forEach(function (_a) {\n var _b = _a.canvas, imageSource = _b.imageSource, enabled = _b.enabled, getComputedOpacity = _a.getComputedOpacity, getVisibility = _a.getVisibility;\n if (!enabled || !getVisibility()) {\n return;\n }\n ctx.globalAlpha = getComputedOpacity();\n ctx.drawImage(imageSource, 0, 0);\n });\n ctx.restore();\n }\n // Check for save/restore depth of zero!\n (_a = ctx.verifyDepthZero) === null || _a === void 0 ? void 0 : _a.call(ctx);\n this._dirty = false;\n this.debugStats(debugSplitTimes, ctx, renderCtx.stats, extraDebugStats);\n this.debugSceneNodeHighlight(ctx, this.debug.sceneNodeHighlight, renderCtx.debugNodes);\n if (root && this.debug.consoleLog) {\n Logger.debug('after', { redrawType: RedrawType[root.dirty], canvasCleared: canvasCleared, tree: this.buildTree(root) });\n }\n return [2 /*return*/];\n });\n });\n };\n Scene.prototype.debugStats = function (debugSplitTimes, ctx, renderCtxStats, extraDebugStats) {\n var e_2, _a;\n if (extraDebugStats === void 0) { extraDebugStats = {}; }\n var end = performance.now();\n if (this.debug.stats) {\n var start = debugSplitTimes[0];\n debugSplitTimes.push(end);\n var pct = function (rendered, skipped) {\n var total = rendered + skipped;\n return rendered + \" / \" + total + \" (\" + Math.round((100 * rendered) / total) + \"%)\";\n };\n var time_1 = function (start, end) {\n return Math.round((end - start) * 100) / 100 + \"ms\";\n };\n var _b = renderCtxStats !== null && renderCtxStats !== void 0 ? renderCtxStats : {}, _c = _b.layersRendered, layersRendered = _c === void 0 ? 0 : _c, _d = _b.layersSkipped, layersSkipped = _d === void 0 ? 0 : _d, _e = _b.nodesRendered, nodesRendered = _e === void 0 ? 0 : _e, _f = _b.nodesSkipped, nodesSkipped = _f === void 0 ? 0 : _f;\n var splits = debugSplitTimes\n .map(function (t, i) { return (i > 0 ? time_1(debugSplitTimes[i - 1], t) : null); })\n .filter(function (v) { return v != null; })\n .join(' + ');\n var extras = Object.entries(extraDebugStats)\n .map(function (_a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return k + \": \" + v;\n })\n .join(' ; ');\n var stats = [\n time_1(start, end) + \" (\" + splits + \")\",\n \"\" + extras,\n this.debug.stats === 'detailed' ? \"Layers: \" + pct(layersRendered, layersSkipped) : null,\n this.debug.stats === 'detailed' ? \"Nodes: \" + pct(nodesRendered, nodesSkipped) : null,\n ].filter(function (v) { return v != null; });\n var lineHeight = 15;\n ctx.save();\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, 200, 10 + lineHeight * stats.length);\n ctx.fillStyle = 'black';\n var index = 0;\n try {\n for (var stats_1 = __values(stats), stats_1_1 = stats_1.next(); !stats_1_1.done; stats_1_1 = stats_1.next()) {\n var stat = stats_1_1.value;\n ctx.fillText(stat, 2, 10 + index++ * lineHeight);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (stats_1_1 && !stats_1_1.done && (_a = stats_1.return)) _a.call(stats_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n ctx.restore();\n }\n };\n Scene.prototype.debugSceneNodeHighlight = function (ctx, sceneNodeHighlight, debugNodes) {\n var e_3, _a, e_4, _b, e_5, _c;\n var _d;\n var regexpPredicate = function (matcher) { return function (n) {\n if (matcher.test(n.id)) {\n return true;\n }\n return n instanceof Group && n.name != null && matcher.test(n.name);\n }; };\n var stringPredicate = function (match) { return function (n) {\n if (match === n.id) {\n return true;\n }\n return n instanceof Group && n.name != null && match === n.name;\n }; };\n try {\n for (var sceneNodeHighlight_1 = __values(sceneNodeHighlight), sceneNodeHighlight_1_1 = sceneNodeHighlight_1.next(); !sceneNodeHighlight_1_1.done; sceneNodeHighlight_1_1 = sceneNodeHighlight_1.next()) {\n var next = sceneNodeHighlight_1_1.value;\n if (typeof next === 'string' && debugNodes[next] != null)\n continue;\n var predicate = typeof next === 'string' ? stringPredicate(next) : regexpPredicate(next);\n var nodes = (_d = this.root) === null || _d === void 0 ? void 0 : _d.findNodes(predicate);\n if (!nodes || nodes.length === 0) {\n Logger.debug(\"no debugging node with id [\" + next + \"] in scene graph.\");\n continue;\n }\n try {\n for (var nodes_1 = (e_4 = void 0, __values(nodes)), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {\n var node = nodes_1_1.value;\n if (node instanceof Group && node.name) {\n debugNodes[node.name] = node;\n }\n else {\n debugNodes[node.id] = node;\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (nodes_1_1 && !nodes_1_1.done && (_b = nodes_1.return)) _b.call(nodes_1);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (sceneNodeHighlight_1_1 && !sceneNodeHighlight_1_1.done && (_a = sceneNodeHighlight_1.return)) _a.call(sceneNodeHighlight_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n ctx.save();\n try {\n for (var _e = __values(Object.entries(debugNodes)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var _g = __read(_f.value, 2), name_1 = _g[0], node = _g[1];\n var bbox = node.computeTransformedBBox();\n if (!bbox) {\n Logger.debug(\"no bbox for debugged node [\" + name_1 + \"].\");\n continue;\n }\n ctx.globalAlpha = 0.8;\n ctx.strokeStyle = 'red';\n ctx.lineWidth = 1;\n ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);\n ctx.fillStyle = 'red';\n ctx.strokeStyle = 'white';\n ctx.font = '16px sans-serif';\n ctx.textBaseline = 'top';\n ctx.textAlign = 'left';\n ctx.lineWidth = 2;\n ctx.strokeText(name_1, bbox.x, bbox.y, bbox.width);\n ctx.fillText(name_1, bbox.x, bbox.y, bbox.width);\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n }\n finally { if (e_5) throw e_5.error; }\n }\n ctx.restore();\n };\n Scene.prototype.buildTree = function (node) {\n var _this = this;\n var _a;\n var name = (_a = (node instanceof Group ? node.name : null)) !== null && _a !== void 0 ? _a : node.id;\n return __assign({ name: name,\n node: node, dirty: RedrawType[node.dirty] }, node.children\n .map(function (c) { return _this.buildTree(c); })\n .reduce(function (result, childTree) {\n var treeNodeName = childTree.name;\n var _a = childTree.node, visible = _a.visible, opacity = _a.opacity, zIndex = _a.zIndex, zIndexSubOrder = _a.zIndexSubOrder, childNode = childTree.node;\n if (!visible || opacity <= 0) {\n treeNodeName = \"(\" + treeNodeName + \")\";\n }\n if (childNode instanceof Group && childNode.isLayer()) {\n treeNodeName = \"*\" + treeNodeName + \"*\";\n }\n var key = [\n \"\" + (treeNodeName !== null && treeNodeName !== void 0 ? treeNodeName : ''),\n \"z: \" + zIndex,\n zIndexSubOrder && \"zo: \" + zIndexSubOrder.join(' / '),\n ]\n .filter(function (v) { return !!v; })\n .join(' ');\n result[key] = childTree;\n return result;\n }, {}));\n };\n Scene.prototype.buildDirtyTree = function (node) {\n var _this = this;\n var _a;\n if (node.dirty === RedrawType.NONE) {\n return { dirtyTree: {}, paths: [] };\n }\n var childrenDirtyTree = node.children.map(function (c) { return _this.buildDirtyTree(c); }).filter(function (c) { return c.paths.length > 0; });\n var name = (_a = (node instanceof Group ? node.name : null)) !== null && _a !== void 0 ? _a : node.id;\n var paths = childrenDirtyTree.length === 0\n ? [name]\n : childrenDirtyTree\n .map(function (c) { return c.paths; })\n .reduce(function (r, p) { return r.concat(p); }, [])\n .map(function (p) { return name + \".\" + p; });\n return {\n dirtyTree: __assign({ name: name,\n node: node, dirty: RedrawType[node.dirty] }, childrenDirtyTree\n .map(function (c) { return c.dirtyTree; })\n .filter(function (t) { return t.dirty !== undefined; })\n .reduce(function (result, childTree) {\n result[childTree.name || ''] = childTree;\n return result;\n }, {})),\n paths: paths,\n };\n };\n Scene.className = 'Scene';\n return Scene;\n}());\nexport { Scene };\n","var Observable = /** @class */ (function () {\n function Observable() {\n this.allEventListeners = new Map();\n }\n Observable.prototype.addEventListener = function (type, listener) {\n if (typeof listener !== 'function') {\n throw new Error('AG Charts - listener must be a Function');\n }\n var allEventListeners = this.allEventListeners;\n var eventListeners = allEventListeners.get(type);\n if (!eventListeners) {\n eventListeners = new Set();\n allEventListeners.set(type, eventListeners);\n }\n if (!eventListeners.has(listener)) {\n eventListeners.add(listener);\n }\n };\n Observable.prototype.removeEventListener = function (type, listener) {\n var allEventListeners = this.allEventListeners;\n var eventListeners = allEventListeners.get(type);\n if (!eventListeners) {\n return;\n }\n eventListeners.delete(listener);\n if (eventListeners.size === 0) {\n allEventListeners.delete(type);\n }\n };\n Observable.prototype.hasEventListener = function (type) {\n return this.allEventListeners.has(type);\n };\n Observable.prototype.clearEventListeners = function () {\n this.allEventListeners.clear();\n };\n Observable.prototype.fireEvent = function (event) {\n var listeners = this.allEventListeners.get(event.type);\n listeners === null || listeners === void 0 ? void 0 : listeners.forEach(function (listener) { return listener(event); });\n };\n return Observable;\n}());\nexport { Observable };\n","export var isString = function (v) { return typeof v === 'string'; };\nexport var isStringObject = function (v) {\n return !!v && Object.prototype.hasOwnProperty.call(v, 'toString') && isString(v.toString());\n};\nexport var isDate = function (v) { return v instanceof Date && !isNaN(+v); };\nexport function isDiscrete(value) {\n return isString(value) || isStringObject(value);\n}\nexport function isContinuous(value) {\n var isNumberObject = function (v) {\n return !!v && Object.prototype.hasOwnProperty.call(v, 'valueOf') && isNumber(v.valueOf());\n };\n var isDate = function (v) { return v instanceof Date && !isNaN(+v); };\n return isNumber(value) || isNumberObject(value) || isDate(value);\n}\nexport function checkDatum(value, isContinuousScale) {\n if (isContinuousScale && isContinuous(value)) {\n return value;\n }\n else if (!isContinuousScale) {\n if (!isDiscrete(value)) {\n return String(value);\n }\n return value;\n }\n return undefined;\n}\nexport var isNumber = function (v) { return typeof v === 'number' && Number.isFinite(v); };\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nexport var BREAK_TRANSFORM_CHAIN = Symbol('BREAK');\nvar CONFIG_KEY = '__decorator_config';\nfunction initialiseConfig(target, propertyKeyOrSymbol, propertyKey, valueStoreKey) {\n if (Object.getOwnPropertyDescriptor(target, CONFIG_KEY) == null) {\n Object.defineProperty(target, CONFIG_KEY, { value: {} });\n }\n var config = target[CONFIG_KEY];\n if (config[propertyKey] != null) {\n return config[propertyKey];\n }\n config[propertyKey] = { setters: [], getters: [] };\n var descriptor = Object.getOwnPropertyDescriptor(target, propertyKeyOrSymbol);\n var prevSet = descriptor === null || descriptor === void 0 ? void 0 : descriptor.set;\n var prevGet = descriptor === null || descriptor === void 0 ? void 0 : descriptor.get;\n var getter = function () {\n var e_1, _a;\n var _b, _c;\n var value = prevGet ? prevGet.call(this) : this[valueStoreKey];\n try {\n for (var _d = __values((_c = (_b = config[propertyKey]) === null || _b === void 0 ? void 0 : _b.getters) !== null && _c !== void 0 ? _c : []), _e = _d.next(); !_e.done; _e = _d.next()) {\n var transformFn = _e.value;\n value = transformFn(this, propertyKeyOrSymbol, value);\n if (value === BREAK_TRANSFORM_CHAIN) {\n return undefined;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return value;\n };\n var setter = function (value) {\n var e_2, _a;\n var _b, _c;\n var setters = (_c = (_b = config[propertyKey]) === null || _b === void 0 ? void 0 : _b.setters) !== null && _c !== void 0 ? _c : [];\n var oldValue;\n if (setters.some(function (f) { return f.length > 2; })) {\n // Lazily retrieve old value.\n oldValue = prevGet ? prevGet.call(this) : this[valueStoreKey];\n }\n try {\n for (var setters_1 = __values(setters), setters_1_1 = setters_1.next(); !setters_1_1.done; setters_1_1 = setters_1.next()) {\n var transformFn = setters_1_1.value;\n value = transformFn(this, propertyKeyOrSymbol, value, oldValue);\n if (value === BREAK_TRANSFORM_CHAIN) {\n return;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (setters_1_1 && !setters_1_1.done && (_a = setters_1.return)) _a.call(setters_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (prevSet) {\n prevSet.call(this, value);\n }\n else {\n this[valueStoreKey] = value;\n }\n };\n Object.defineProperty(target, propertyKeyOrSymbol, {\n set: setter,\n get: getter,\n enumerable: true,\n configurable: false,\n });\n return config[propertyKey];\n}\nexport function addTransformToInstanceProperty(setTransform, getTransform) {\n return function (target, propertyKeyOrSymbol) {\n var propertyKey = propertyKeyOrSymbol.toString();\n var valueStoreKey = \"__\" + propertyKey;\n var _a = initialiseConfig(target, propertyKeyOrSymbol, propertyKey, valueStoreKey), getters = _a.getters, setters = _a.setters;\n setters.push(setTransform);\n if (getTransform) {\n getters.splice(0, 0, getTransform);\n }\n };\n}\n","import { addTransformToInstanceProperty, BREAK_TRANSFORM_CHAIN } from './decorator';\nimport { Logger } from './logger';\nexport function createDeprecationWarning() {\n return function (key, message) {\n var msg = [\"Property [\" + key + \"] is deprecated.\", message].filter(function (v) { return v != null; }).join(' ');\n Logger.warnOnce(msg);\n };\n}\nexport function Deprecated(message, opts) {\n var def = opts === null || opts === void 0 ? void 0 : opts.default;\n var warn = createDeprecationWarning();\n return addTransformToInstanceProperty(function (_, key, value) {\n if (value !== def) {\n warn(key.toString(), message);\n }\n return value;\n });\n}\nexport function DeprecatedAndRenamedTo(newPropName, mapValue) {\n var warnDeprecated = createDeprecationWarning();\n return addTransformToInstanceProperty(function (target, key, value) {\n if (value !== target[newPropName]) {\n warnDeprecated(key.toString(), \"Use [\" + newPropName + \"] instead.\");\n target[newPropName] = mapValue ? mapValue(value) : value;\n }\n return BREAK_TRANSFORM_CHAIN;\n }, function (target, key) {\n warnDeprecated(key.toString(), \"Use [\" + newPropName + \"] instead.\");\n return target[newPropName];\n });\n}\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { Logger } from './logger';\nvar Color = /** @class */ (function () {\n /**\n * Every color component should be in the [0, 1] range.\n * Some easing functions (such as elastic easing) can overshoot the target value by some amount.\n * So, when animating colors, if the source or target color components are already near\n * or at the edge of the allowed [0, 1] range, it is possible for the intermediate color\n * component value to end up outside of that range mid-animation. For this reason the constructor\n * performs range checking/constraining.\n * @param r Red component.\n * @param g Green component.\n * @param b Blue component.\n * @param a Alpha (opacity) component.\n */\n function Color(r, g, b, a) {\n if (a === void 0) { a = 1; }\n // NaN is treated as 0.\n this.r = Math.min(1, Math.max(0, r || 0));\n this.g = Math.min(1, Math.max(0, g || 0));\n this.b = Math.min(1, Math.max(0, b || 0));\n this.a = Math.min(1, Math.max(0, a || 0));\n }\n /**\n * A color string can be in one of the following formats to be valid:\n * - #rgb\n * - #rrggbb\n * - rgb(r, g, b)\n * - rgba(r, g, b, a)\n * - CSS color name such as 'white', 'orange', 'cyan', etc.\n */\n Color.validColorString = function (str) {\n if (str.indexOf('#') >= 0) {\n return !!Color.parseHex(str);\n }\n if (str.indexOf('rgb') >= 0) {\n return !!Color.stringToRgba(str);\n }\n return !!Color.nameToHex[str.toLowerCase()];\n };\n /**\n * The given string can be in one of the following formats:\n * - #rgb\n * - #rrggbb\n * - rgb(r, g, b)\n * - rgba(r, g, b, a)\n * - CSS color name such as 'white', 'orange', 'cyan', etc.\n * @param str\n */\n Color.fromString = function (str) {\n // hexadecimal notation\n if (str.indexOf('#') >= 0) {\n // there can be some leading whitespace\n return Color.fromHexString(str);\n }\n // color name\n var hex = Color.nameToHex[str.toLowerCase()];\n if (hex) {\n return Color.fromHexString(hex);\n }\n // rgb(a) notation\n if (str.indexOf('rgb') >= 0) {\n return Color.fromRgbaString(str);\n }\n throw new Error(\"Invalid color string: '\" + str + \"'\");\n };\n Color.tryParseFromString = function (str) {\n try {\n return Color.fromString(str);\n }\n catch (e) {\n Logger.warnOnce(\"invalid color string: '\" + str + \"'.\");\n return Color.fromArray([0, 0, 0]);\n }\n };\n // See https://drafts.csswg.org/css-color/#hex-notation\n Color.parseHex = function (input) {\n input = input.replace(/ /g, '').slice(1);\n var parts;\n switch (input.length) {\n case 6:\n case 8:\n parts = [];\n for (var i = 0; i < input.length; i += 2) {\n parts.push(parseInt(\"\" + input[i] + input[i + 1], 16));\n }\n break;\n case 3:\n case 4:\n parts = input\n .split('')\n .map(function (p) { return parseInt(p, 16); })\n .map(function (p) { return p + p * 16; });\n break;\n }\n if ((parts === null || parts === void 0 ? void 0 : parts.length) >= 3) {\n if (parts.every(function (p) { return p >= 0; })) {\n if (parts.length === 3) {\n parts.push(255);\n }\n return parts;\n }\n }\n };\n Color.fromHexString = function (str) {\n var values = Color.parseHex(str);\n if (values) {\n var _a = __read(values, 4), r = _a[0], g = _a[1], b = _a[2], a = _a[3];\n return new Color(r / 255, g / 255, b / 255, a / 255);\n }\n throw new Error(\"Malformed hexadecimal color string: '\" + str + \"'\");\n };\n Color.stringToRgba = function (str) {\n // Find positions of opening and closing parentheses.\n var _a = __read([NaN, NaN], 2), po = _a[0], pc = _a[1];\n for (var i = 0; i < str.length; i++) {\n var c = str[i];\n if (!po && c === '(') {\n po = i;\n }\n else if (c === ')') {\n pc = i;\n break;\n }\n }\n var contents = po && pc && str.substring(po + 1, pc);\n if (!contents) {\n return;\n }\n var parts = contents.split(',');\n var rgba = [];\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i];\n var value = parseFloat(part);\n if (isNaN(value)) {\n return;\n }\n if (part.indexOf('%') >= 0) {\n // percentage r, g, or b value\n value = Math.max(0, Math.min(100, value));\n value /= 100;\n }\n else {\n if (i === 3) {\n // alpha component\n value = Math.max(0, Math.min(1, value));\n }\n else {\n // absolute r, g, or b value\n value = Math.max(0, Math.min(255, value));\n value /= 255;\n }\n }\n rgba.push(value);\n }\n return rgba;\n };\n Color.fromRgbaString = function (str) {\n var rgba = Color.stringToRgba(str);\n if (rgba) {\n if (rgba.length === 3) {\n return new Color(rgba[0], rgba[1], rgba[2]);\n }\n else if (rgba.length === 4) {\n return new Color(rgba[0], rgba[1], rgba[2], rgba[3]);\n }\n }\n throw new Error(\"Malformed rgb/rgba color string: '\" + str + \"'\");\n };\n Color.fromArray = function (arr) {\n if (arr.length === 4) {\n return new Color(arr[0], arr[1], arr[2], arr[3]);\n }\n if (arr.length === 3) {\n return new Color(arr[0], arr[1], arr[2]);\n }\n throw new Error('The given array should contain 3 or 4 color components (numbers).');\n };\n Color.fromHSB = function (h, s, b, alpha) {\n if (alpha === void 0) { alpha = 1; }\n var rgb = Color.HSBtoRGB(h, s, b);\n return new Color(rgb[0], rgb[1], rgb[2], alpha);\n };\n Color.padHex = function (str) {\n // Can't use `padStart(2, '0')` here because of IE.\n return str.length === 1 ? '0' + str : str;\n };\n Color.prototype.toHexString = function () {\n var hex = '#' +\n Color.padHex(Math.round(this.r * 255).toString(16)) +\n Color.padHex(Math.round(this.g * 255).toString(16)) +\n Color.padHex(Math.round(this.b * 255).toString(16));\n if (this.a < 1) {\n hex += Color.padHex(Math.round(this.a * 255).toString(16));\n }\n return hex;\n };\n Color.prototype.toRgbaString = function (fractionDigits) {\n if (fractionDigits === void 0) { fractionDigits = 3; }\n var components = [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255)];\n var k = Math.pow(10, fractionDigits);\n if (this.a !== 1) {\n components.push(Math.round(this.a * k) / k);\n return \"rgba(\" + components.join(', ') + \")\";\n }\n return \"rgb(\" + components.join(', ') + \")\";\n };\n Color.prototype.toString = function () {\n if (this.a === 1) {\n return this.toHexString();\n }\n return this.toRgbaString();\n };\n Color.prototype.toHSB = function () {\n return Color.RGBtoHSB(this.r, this.g, this.b);\n };\n /**\n * Converts the given RGB triple to an array of HSB (HSV) components.\n * The hue component will be `NaN` for achromatic colors.\n */\n Color.RGBtoHSB = function (r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var S = max !== 0 ? (max - min) / max : 0;\n var H = NaN;\n // min == max, means all components are the same\n // and the color is a shade of gray with no hue (H is NaN)\n if (min !== max) {\n var delta = max - min;\n var rc = (max - r) / delta;\n var gc_1 = (max - g) / delta;\n var bc = (max - b) / delta;\n if (r === max) {\n H = bc - gc_1;\n }\n else if (g === max) {\n H = 2.0 + rc - bc;\n }\n else {\n H = 4.0 + gc_1 - rc;\n }\n H /= 6.0;\n if (H < 0) {\n H = H + 1.0;\n }\n }\n return [H * 360, S, max];\n };\n /**\n * Converts the given HSB (HSV) triple to an array of RGB components.\n */\n Color.HSBtoRGB = function (H, S, B) {\n if (isNaN(H)) {\n H = 0;\n }\n H = (((H % 360) + 360) % 360) / 360; // normalize hue to [0, 360] interval, then scale to [0, 1]\n var r = 0;\n var g = 0;\n var b = 0;\n if (S === 0) {\n r = g = b = B;\n }\n else {\n var h = (H - Math.floor(H)) * 6;\n var f = h - Math.floor(h);\n var p = B * (1 - S);\n var q = B * (1 - S * f);\n var t = B * (1 - S * (1 - f));\n switch (h >> 0 // discard the floating point part of the number\n ) {\n case 0:\n r = B;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = B;\n b = p;\n break;\n case 2:\n r = p;\n g = B;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = B;\n break;\n case 4:\n r = t;\n g = p;\n b = B;\n break;\n case 5:\n r = B;\n g = p;\n b = q;\n break;\n }\n }\n return [r, g, b];\n };\n Color.prototype.derive = function (hueShift, saturationFactor, brightnessFactor, opacityFactor) {\n var hsb = Color.RGBtoHSB(this.r, this.g, this.b);\n var b = hsb[2];\n if (b == 0 && brightnessFactor > 1.0) {\n b = 0.05;\n }\n var h = (((hsb[0] + hueShift) % 360) + 360) % 360;\n var s = Math.max(Math.min(hsb[1] * saturationFactor, 1.0), 0.0);\n b = Math.max(Math.min(b * brightnessFactor, 1.0), 0.0);\n var a = Math.max(Math.min(this.a * opacityFactor, 1.0), 0.0);\n var rgba = Color.HSBtoRGB(h, s, b);\n rgba.push(a);\n return Color.fromArray(rgba);\n };\n Color.prototype.brighter = function () {\n return this.derive(0, 1.0, 1.0 / 0.7, 1.0);\n };\n Color.prototype.darker = function () {\n return this.derive(0, 1.0, 0.7, 1.0);\n };\n /**\n * CSS Color Module Level 4:\n * https://drafts.csswg.org/css-color/#named-colors\n */\n Color.nameToHex = Object.freeze({\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#00FFFF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blue: '#0000FF',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgreen: '#006400',\n darkgrey: '#A9A9A9',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#FF00FF',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n grey: '#808080',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgreen: '#90EE90',\n lightgrey: '#D3D3D3',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#00FF00',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#FF0000',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n transparent: '#00000000',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFFFFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FFFF00',\n yellowgreen: '#9ACD32',\n });\n return Color;\n}());\nexport { Color };\n","import { Color } from './color';\nimport { addTransformToInstanceProperty, BREAK_TRANSFORM_CHAIN } from './decorator';\nimport { Logger } from './logger';\nexport function Validate(predicate) {\n return addTransformToInstanceProperty(function (target, prop, v) {\n var _a, _b, _c;\n if (predicate(v, { target: target })) {\n return v;\n }\n var cleanKey = prop.toString().replace(/^_*/, '');\n var targetClass = (_b = (_a = target.constructor) === null || _a === void 0 ? void 0 : _a.className) !== null && _b !== void 0 ? _b : (_c = target.constructor) === null || _c === void 0 ? void 0 : _c.name;\n if ((targetClass === null || targetClass === void 0 ? void 0 : targetClass.length) < 3) {\n targetClass = null;\n }\n var targetClassName = targetClass ? \"of [\" + targetClass + \"] \" : '';\n if (predicate.message) {\n Logger.warn(\"Property [\" + cleanKey + \"] \" + targetClassName + \"cannot be set to [\" + JSON.stringify(v) + \"]; \" + predicate.message + \", ignoring.\");\n }\n else {\n Logger.warn(\"Property [\" + cleanKey + \"] \" + targetClassName + \"cannot be set to [\" + JSON.stringify(v) + \"], ignoring.\");\n }\n return BREAK_TRANSFORM_CHAIN;\n });\n}\nexport function predicateWithMessage(predicate, message) {\n predicate.message = message;\n return predicate;\n}\nexport var OPTIONAL = function (v, ctx, predicate) {\n return v === undefined || predicate(v, ctx);\n};\nexport var ARRAY = function (length, predicate) {\n return predicateWithMessage(function (v, ctx) {\n return Array.isArray(v) &&\n (length ? v.length === length : true) &&\n (predicate ? v.every(function (e) { return predicate(e, ctx); }) : true);\n }, \"expecting an Array\");\n};\nexport var OPT_ARRAY = function (length) {\n return predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, ARRAY(length)); }, 'expecting an optional Array');\n};\nexport var AND = function () {\n var predicates = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n predicates[_i] = arguments[_i];\n }\n return predicateWithMessage(function (v, ctx) { return predicates.every(function (p) { return p(v, ctx); }); }, predicates\n .map(function (p) { return p.message; })\n .filter(function (m) { return m != null; })\n .join(' AND '));\n};\nexport var OR = function () {\n var predicates = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n predicates[_i] = arguments[_i];\n }\n return predicateWithMessage(function (v, ctx) { return predicates.some(function (p) { return p(v, ctx); }); }, predicates\n .map(function (p) { return p.message; })\n .filter(function (m) { return m != null; })\n .join(' OR '));\n};\nvar isComparable = function (v) {\n return v != null && !isNaN(v);\n};\nexport var LESS_THAN = function (otherField) {\n return predicateWithMessage(function (v, ctx) {\n return !isComparable(v) || !isComparable(ctx.target[otherField]) || v < ctx.target[otherField];\n }, \"expected to be less than \" + otherField);\n};\nexport var GREATER_THAN = function (otherField) {\n return predicateWithMessage(function (v, ctx) {\n return !isComparable(v) || !isComparable(ctx.target[otherField]) || v > ctx.target[otherField];\n }, \"expected to be greater than \" + otherField);\n};\nexport var FUNCTION = predicateWithMessage(function (v) { return typeof v === 'function'; }, 'expecting a Function');\nexport var OPT_FUNCTION = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, FUNCTION); }, \"expecting an optional Function\");\nexport var BOOLEAN = predicateWithMessage(function (v) { return v === true || v === false; }, 'expecting a Boolean');\nexport var OPT_BOOLEAN = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, BOOLEAN); }, 'expecting an optional Boolean');\nexport var STRING = predicateWithMessage(function (v) { return typeof v === 'string'; }, 'expecting a String');\nexport var OPT_STRING = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, STRING); }, 'expecting an optional String');\nexport var DATE = predicateWithMessage(function (v) { return v instanceof Date && !isNaN(+v); }, 'expecting a Date object');\nexport var OPT_DATE = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, DATE); }, 'expecting an optional Date');\nexport var DATE_ARRAY = predicateWithMessage(ARRAY(undefined, DATE), 'expecting an Array of Date objects');\nexport var DATETIME_MS = NUMBER(0);\nexport var OPT_DATETIME_MS = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, DATETIME_MS); }, 'expecting an optional number');\nexport var OPT_DATE_OR_DATETIME_MS = OR(OPT_DATE, OPT_DATETIME_MS);\nvar colorMessage = \"A color string can be in one of the following formats to be valid: #rgb, #rrggbb, rgb(r, g, b), rgba(r, g, b, a) or a CSS color name such as 'white', 'orange', 'cyan', etc\";\nexport var COLOR_STRING = predicateWithMessage(function (v) {\n if (typeof v !== 'string') {\n return false;\n }\n return Color.validColorString(v);\n}, \"expecting a color String. \" + colorMessage);\nexport var OPT_COLOR_STRING = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, COLOR_STRING); }, \"expecting an optional color String. \" + colorMessage);\nexport var COLOR_STRING_ARRAY = predicateWithMessage(ARRAY(undefined, COLOR_STRING), \"expecting an Array of color strings. \" + colorMessage);\nexport var OPT_COLOR_STRING_ARRAY = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, COLOR_STRING_ARRAY); }, \"expecting an optional Array of color strings. \" + colorMessage);\nexport function NUMBER(min, max) {\n var message = \"expecting a finite Number\" + ((min !== undefined ? ', more than or equal to ' + min : '') +\n (max !== undefined ? ', less than or equal to ' + max : ''));\n return predicateWithMessage(function (v) {\n return typeof v === 'number' &&\n Number.isFinite(v) &&\n (min !== undefined ? v >= min : true) &&\n (max !== undefined ? v <= max : true);\n }, message);\n}\nexport function OPT_NUMBER(min, max) {\n var message = \"expecting an optional finite Number\" + ((min !== undefined ? ', more than or equal to ' + min : '') +\n (max !== undefined ? ', less than or equal to ' + max : ''));\n return predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, NUMBER(min, max)); }, message);\n}\nexport function NUMBER_OR_NAN(min, max) {\n // Can be NaN or finite number\n var message = \"expecting a finite Number\" + ((min !== undefined ? ', more than or equal to ' + min : '') +\n (max !== undefined ? ', less than or equal to ' + max : ''));\n return predicateWithMessage(function (v) {\n return typeof v === 'number' &&\n (isNaN(v) ||\n (Number.isFinite(v) && (min !== undefined ? v >= min : true) && (max !== undefined ? v <= max : true)));\n }, message);\n}\nexport var NUMBER_ARRAY = predicateWithMessage(ARRAY(undefined, NUMBER()), 'expecting an Array of numbers');\nexport var OPT_NUMBER_ARRAY = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, NUMBER_ARRAY); }, 'expecting an optional Array of numbers');\nexport var STRING_ARRAY = predicateWithMessage(ARRAY(undefined, STRING), 'expecting an Array of strings');\nexport var OPT_STRING_ARRAY = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, STRING_ARRAY); }, 'expecting an optional Array of strings');\nexport function STRING_UNION() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var message = \"expecting one of: \" + values.join(', ');\n return predicateWithMessage(function (v) { return typeof v === 'string' && values.indexOf(v) >= 0; }, message);\n}\nexport var BOOLEAN_ARRAY = predicateWithMessage(ARRAY(undefined, BOOLEAN), 'expecting an Array of boolean values');\nexport var OPT_BOOLEAN_ARRAY = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, BOOLEAN_ARRAY); }, 'expecting an optional Array of boolean values');\nvar FONT_WEIGHTS = [\n 'normal',\n 'bold',\n 'bolder',\n 'lighter',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n];\nexport var FONT_STYLE = predicateWithMessage(function (v) { return v === 'normal' || v === 'italic' || v === 'oblique'; }, \"expecting a font style keyword such as 'normal', 'italic' or 'oblique'\");\nexport var OPT_FONT_STYLE = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, FONT_STYLE); }, \"expecting an optional font style keyword such as 'normal', 'italic' or 'oblique'\");\nexport var FONT_WEIGHT = predicateWithMessage(function (v) { return FONT_WEIGHTS.includes(v); }, \"expecting a font weight keyword such as 'normal', 'bold' or 'bolder' or a numeric value such as 100, 300 or 600\");\nexport var OPT_FONT_WEIGHT = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, FONT_WEIGHT); }, \"expecting an optional font weight keyword such as 'normal', 'bold' or 'bolder' or a numeric value such as 100, 300 or 600\");\nexport var LINE_DASH = predicateWithMessage(ARRAY(undefined, NUMBER(0)), 'expecting an Array of numbers specifying the length in pixels of alternating dashes and gaps, for example, [6, 3] means dashes with a length of 6 pixels with gaps between of 3 pixels.');\nexport var OPT_LINE_DASH = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, LINE_DASH); }, 'expecting an optional Array of numbers specifying the length in pixels of alternating dashes and gaps, for example, [6, 3] means dashes with a length of 6 pixels with gaps between of 3 pixels.');\nvar LINE_CAPS = ['butt', 'round', 'square'];\nexport var LINE_CAP = predicateWithMessage(function (v) { return LINE_CAPS.includes(v); }, \"expecting a line cap keyword such as 'butt', 'round' or 'square'\");\nexport var OPT_LINE_CAP = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, LINE_CAP); }, \"expecting an optional line cap keyword such as 'butt', 'round' or 'square'\");\nvar LINE_JOINS = ['round', 'bevel', 'miter'];\nexport var LINE_JOIN = predicateWithMessage(function (v) { return LINE_JOINS.includes(v); }, \"expecting a line join keyword such as 'round', 'bevel' or 'miter'\");\nexport var OPT_LINE_JOIN = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, LINE_JOIN); }, \"expecting an optional line join keyword such as 'round', 'bevel' or 'miter'\");\nvar POSITIONS = ['top', 'right', 'bottom', 'left'];\nexport var POSITION = predicateWithMessage(function (v) { return POSITIONS.includes(v); }, \"expecting a position keyword such as 'top', 'right', 'bottom' or 'left\");\nvar INTERACTION_RANGES = ['exact', 'nearest'];\nexport var INTERACTION_RANGE = predicateWithMessage(function (v) { return (typeof v === 'number' && Number.isFinite(v)) || INTERACTION_RANGES.includes(v); }, \"expecting an interaction range of 'exact', 'nearest' or a number\");\n","/**\n * Constants to declare the expected nominal zIndex for all types of layer in chart rendering.\n */\nexport var Layers;\n(function (Layers) {\n Layers[Layers[\"SERIES_BACKGROUND_ZINDEX\"] = -10] = \"SERIES_BACKGROUND_ZINDEX\";\n Layers[Layers[\"AXIS_GRID_ZINDEX\"] = 0] = \"AXIS_GRID_ZINDEX\";\n Layers[Layers[\"AXIS_ZINDEX\"] = 20] = \"AXIS_ZINDEX\";\n Layers[Layers[\"SERIES_CROSSLINE_RANGE_ZINDEX\"] = 30] = \"SERIES_CROSSLINE_RANGE_ZINDEX\";\n Layers[Layers[\"SERIES_LAYER_ZINDEX\"] = 500] = \"SERIES_LAYER_ZINDEX\";\n Layers[Layers[\"SERIES_CROSSHAIR_ZINDEX\"] = 1000] = \"SERIES_CROSSHAIR_ZINDEX\";\n Layers[Layers[\"SERIES_LABEL_ZINDEX\"] = 1500] = \"SERIES_LABEL_ZINDEX\";\n Layers[Layers[\"SERIES_CROSSLINE_LINE_ZINDEX\"] = 2500] = \"SERIES_CROSSLINE_LINE_ZINDEX\";\n Layers[Layers[\"LEGEND_ZINDEX\"] = 3000] = \"LEGEND_ZINDEX\";\n})(Layers || (Layers = {}));\n","export var ChartAxisDirection;\n(function (ChartAxisDirection) {\n ChartAxisDirection[\"X\"] = \"x\";\n ChartAxisDirection[\"Y\"] = \"y\";\n})(ChartAxisDirection || (ChartAxisDirection = {}));\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { BBox } from '../../scene/bbox';\nimport { DeprecatedAndRenamedTo } from '../../util/deprecation';\nimport { Validate, BOOLEAN, NUMBER, OPT_STRING, INTERACTION_RANGE, predicateWithMessage } from '../../util/validation';\nexport var DEFAULT_TOOLTIP_CLASS = 'ag-chart-tooltip';\nvar defaultTooltipCss = \"\\n.\" + DEFAULT_TOOLTIP_CLASS + \" {\\n transition: transform 0.1s ease;\\n display: table;\\n position: fixed;\\n left: 0px;\\n top: 0px;\\n white-space: nowrap;\\n z-index: 99999;\\n font: 12px Verdana, sans-serif;\\n color: black;\\n background: rgb(244, 244, 244);\\n border-radius: 5px;\\n box-shadow: 0 0 1px rgba(3, 3, 3, 0.7), 0.5vh 0.5vh 1vh rgba(3, 3, 3, 0.25);\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-no-interaction {\\n pointer-events: none;\\n user-select: none;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-no-animation {\\n transition: none !important;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-hidden {\\n visibility: hidden;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-title {\\n font-weight: bold;\\n padding: 7px;\\n border-top-left-radius: 5px;\\n border-top-right-radius: 5px;\\n color: white;\\n background-color: #888888;\\n border-top-left-radius: 5px;\\n border-top-right-radius: 5px;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-content {\\n padding: 7px;\\n line-height: 1.7em;\\n border-bottom-left-radius: 5px;\\n border-bottom-right-radius: 5px;\\n overflow: hidden;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-content:empty {\\n padding: 0;\\n height: 7px;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-arrow::before {\\n content: \\\"\\\";\\n\\n position: absolute;\\n top: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n\\n border: 6px solid #989898;\\n\\n border-left-color: transparent;\\n border-right-color: transparent;\\n border-top-color: #989898;\\n border-bottom-color: transparent;\\n\\n width: 0;\\n height: 0;\\n\\n margin: 0 auto;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-arrow::after {\\n content: \\\"\\\";\\n\\n position: absolute;\\n top: 100%;\\n left: 50%;\\n transform: translateX(-50%);\\n\\n border: 5px solid black;\\n\\n border-left-color: transparent;\\n border-right-color: transparent;\\n border-top-color: rgb(244, 244, 244);\\n border-bottom-color: transparent;\\n\\n width: 0;\\n height: 0;\\n\\n margin: 0 auto;\\n}\\n\\n.ag-chart-wrapper {\\n box-sizing: border-box;\\n overflow: hidden;\\n}\\n\";\nexport function toTooltipHtml(input, defaults) {\n if (typeof input === 'string') {\n return input;\n }\n defaults = defaults || {};\n var _a = input.content, content = _a === void 0 ? defaults.content || '' : _a, _b = input.title, title = _b === void 0 ? defaults.title || undefined : _b, _c = input.color, color = _c === void 0 ? defaults.color || 'white' : _c, _d = input.backgroundColor, backgroundColor = _d === void 0 ? defaults.backgroundColor || '#888' : _d;\n var titleHtml = title\n ? \"
\" + title + \"
\"\n : '';\n return titleHtml + \"
\" + content + \"
\";\n}\nvar POSITION_TYPES = ['pointer', 'node'];\nexport var POSITION_TYPE = predicateWithMessage(function (v) { return POSITION_TYPES.includes(v); }, \"expecting a position type keyword such as 'pointer' or 'node'\");\nvar TooltipPosition = /** @class */ (function () {\n function TooltipPosition() {\n /** The type of positioning for the tooltip. By default, the tooltip follows the pointer. */\n this.type = 'pointer';\n /** The horizontal offset in pixels for the position of the tooltip. */\n this.xOffset = 0;\n /** The vertical offset in pixels for the position of the tooltip. */\n this.yOffset = 0;\n }\n __decorate([\n Validate(POSITION_TYPE)\n ], TooltipPosition.prototype, \"type\", void 0);\n __decorate([\n Validate(NUMBER())\n ], TooltipPosition.prototype, \"xOffset\", void 0);\n __decorate([\n Validate(NUMBER())\n ], TooltipPosition.prototype, \"yOffset\", void 0);\n return TooltipPosition;\n}());\nexport { TooltipPosition };\nvar Tooltip = /** @class */ (function () {\n function Tooltip(canvasElement, document, container) {\n var _this = this;\n this.enableInteraction = false;\n this.enabled = true;\n this.class = undefined;\n this.lastClass = undefined;\n this.delay = 0;\n this.range = 'nearest';\n this.position = new TooltipPosition();\n this.showTimeout = 0;\n this.showArrow = true;\n this.tooltipRoot = container;\n var element = document.createElement('div');\n this.element = this.tooltipRoot.appendChild(element);\n this.element.classList.add(DEFAULT_TOOLTIP_CLASS);\n this.canvasElement = canvasElement;\n // Detect when the chart becomes invisible and hide the tooltip as well.\n if (window.IntersectionObserver) {\n var observer = new IntersectionObserver(function (entries) {\n var e_1, _a;\n try {\n for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {\n var entry = entries_1_1.value;\n if (entry.target === _this.canvasElement && entry.intersectionRatio === 0) {\n _this.toggle(false);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }, { root: this.tooltipRoot });\n observer.observe(this.canvasElement);\n this.observer = observer;\n }\n if (Tooltip.tooltipDocuments.indexOf(document) < 0) {\n var styleElement = document.createElement('style');\n styleElement.innerHTML = defaultTooltipCss;\n // Make sure the default tooltip style goes before other styles so it can be overridden.\n document.head.insertBefore(styleElement, document.head.querySelector('style'));\n Tooltip.tooltipDocuments.push(document);\n }\n }\n Tooltip.prototype.destroy = function () {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n if (this.observer) {\n this.observer.unobserve(this.canvasElement);\n }\n };\n Tooltip.prototype.isVisible = function () {\n var element = this.element;\n return !element.classList.contains(DEFAULT_TOOLTIP_CLASS + '-hidden');\n };\n Tooltip.prototype.updateClass = function (visible, showArrow) {\n var _a = this, element = _a.element, newClass = _a.class, lastClass = _a.lastClass, enableInteraction = _a.enableInteraction;\n var wasVisible = this.isVisible();\n var toggleClass = function (name, include) {\n var className = DEFAULT_TOOLTIP_CLASS + \"-\" + name;\n if (include) {\n element.classList.add(className);\n }\n else {\n element.classList.remove(className);\n }\n };\n toggleClass('no-animation', !wasVisible && !!visible); // No animation on first show.\n toggleClass('no-interaction', !enableInteraction); // Prevent interaction.\n toggleClass('hidden', !visible); // Hide if not visible.\n toggleClass('arrow', !!showArrow); // Add arrow if tooltip is constrained.\n if (newClass !== lastClass) {\n if (lastClass) {\n element.classList.remove(lastClass);\n }\n if (newClass) {\n element.classList.add(newClass);\n }\n this.lastClass = newClass;\n }\n };\n /**\n * Shows tooltip at the given event's coordinates.\n * If the `html` parameter is missing, moves the existing tooltip to the new position.\n */\n Tooltip.prototype.show = function (meta, html, instantly) {\n var _this = this;\n var _a, _b, _c, _d, _e;\n if (instantly === void 0) { instantly = false; }\n var _f = this, element = _f.element, canvasElement = _f.canvasElement;\n if (html !== undefined) {\n element.innerHTML = html;\n }\n else if (!element.innerHTML) {\n return;\n }\n var limit = function (low, actual, high) {\n return Math.max(Math.min(actual, high), low);\n };\n var xOffset = (_b = (_a = meta.position) === null || _a === void 0 ? void 0 : _a.xOffset) !== null && _b !== void 0 ? _b : 0;\n var yOffset = (_d = (_c = meta.position) === null || _c === void 0 ? void 0 : _c.yOffset) !== null && _d !== void 0 ? _d : 0;\n var canvasRect = canvasElement.getBoundingClientRect();\n var naiveLeft = canvasRect.left + meta.offsetX - element.clientWidth / 2 + xOffset;\n var naiveTop = canvasRect.top + meta.offsetY - element.clientHeight - 8 + yOffset;\n var windowBounds = this.getWindowBoundingBox();\n var maxLeft = windowBounds.x + windowBounds.width - element.clientWidth - 1;\n var maxTop = windowBounds.y + windowBounds.height - element.clientHeight;\n var left = limit(windowBounds.x, naiveLeft, maxLeft);\n var top = limit(windowBounds.y, naiveTop, maxTop);\n var offsetApplied = xOffset !== 0 || yOffset !== 0;\n var constrained = left !== naiveLeft || top !== naiveTop;\n this.showArrow = !constrained && !offsetApplied;\n element.style.transform = \"translate(\" + Math.round(left) + \"px, \" + Math.round(top) + \"px)\";\n this.enableInteraction = (_e = meta.enableInteraction) !== null && _e !== void 0 ? _e : false;\n if (this.delay > 0 && !instantly) {\n this.toggle(false);\n this.showTimeout = window.setTimeout(function () {\n _this.toggle(true);\n }, this.delay);\n return;\n }\n this.toggle(true);\n };\n Tooltip.prototype.getWindowBoundingBox = function () {\n return new BBox(0, 0, window.innerWidth, window.innerHeight);\n };\n Tooltip.prototype.toggle = function (visible) {\n if (!visible) {\n window.clearTimeout(this.showTimeout);\n }\n this.updateClass(visible, this.showArrow);\n };\n Tooltip.prototype.pointerLeftOntoTooltip = function (event) {\n var _a;\n if (!this.enableInteraction)\n return false;\n var classList = (_a = event.sourceEvent.relatedTarget) === null || _a === void 0 ? void 0 : _a.classList;\n var classes = ['', '-title', '-content'];\n var classListContains = Boolean(classes.filter(function (c) { return classList === null || classList === void 0 ? void 0 : classList.contains(\"\" + DEFAULT_TOOLTIP_CLASS + c); }));\n return classList !== undefined && classListContains;\n };\n Tooltip.tooltipDocuments = [];\n __decorate([\n Validate(BOOLEAN)\n ], Tooltip.prototype, \"enabled\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], Tooltip.prototype, \"class\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Tooltip.prototype, \"delay\", void 0);\n __decorate([\n DeprecatedAndRenamedTo('range', function (value) { return (value ? 'nearest' : 'exact'); })\n ], Tooltip.prototype, \"tracking\", void 0);\n __decorate([\n Validate(INTERACTION_RANGE)\n ], Tooltip.prototype, \"range\", void 0);\n return Tooltip;\n}());\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Group } from '../../scene/group';\nimport { Observable } from '../../util/observable';\nimport { createId } from '../../util/id';\nimport { checkDatum, isNumber } from '../../util/value';\nimport { createDeprecationWarning } from '../../util/deprecation';\nimport { BOOLEAN, OPT_BOOLEAN, OPT_NUMBER, OPT_COLOR_STRING, INTERACTION_RANGE, STRING, Validate, } from '../../util/validation';\nimport { Layers } from '../layers';\nimport { ChartAxisDirection } from '../chartAxisDirection';\nimport { TooltipPosition } from '../tooltip/tooltip';\n/** Modes of matching user interactions to rendered nodes (e.g. hover or click) */\nexport var SeriesNodePickMode;\n(function (SeriesNodePickMode) {\n /** Pick matches based upon pick coordinates being inside a matching shape/marker. */\n SeriesNodePickMode[SeriesNodePickMode[\"EXACT_SHAPE_MATCH\"] = 0] = \"EXACT_SHAPE_MATCH\";\n /** Pick matches by nearest category/X-axis value, then distance within that category/X-value. */\n SeriesNodePickMode[SeriesNodePickMode[\"NEAREST_BY_MAIN_AXIS_FIRST\"] = 1] = \"NEAREST_BY_MAIN_AXIS_FIRST\";\n /** Pick matches by nearest category value, then distance within that category. */\n SeriesNodePickMode[SeriesNodePickMode[\"NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST\"] = 2] = \"NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST\";\n /** Pick matches based upon distance to ideal position */\n SeriesNodePickMode[SeriesNodePickMode[\"NEAREST_NODE\"] = 3] = \"NEAREST_NODE\";\n})(SeriesNodePickMode || (SeriesNodePickMode = {}));\nvar warnDeprecated = createDeprecationWarning();\nvar warnSeriesDeprecated = function () { return warnDeprecated('series', 'Use seriesId to get the series ID'); };\nexport function keyProperty(propName, continuous, opts) {\n if (opts === void 0) { opts = {}; }\n var result = __assign(__assign({}, opts), { property: propName, type: 'key', valueType: continuous ? 'range' : 'category', validation: function (v) { return checkDatum(v, continuous) != null; } });\n return result;\n}\nexport function valueProperty(propName, continuous, opts) {\n if (opts === void 0) { opts = {}; }\n var result = __assign(__assign({}, opts), { property: propName, type: 'value', valueType: continuous ? 'range' : 'category', validation: function (v) { return checkDatum(v, continuous) != null; } });\n return result;\n}\nexport function sumProperties(props) {\n var result = {\n properties: props,\n type: 'sum',\n };\n return result;\n}\nvar SeriesNodeBaseClickEvent = /** @class */ (function () {\n function SeriesNodeBaseClickEvent(nativeEvent, datum, series) {\n this.type = 'nodeClick';\n this.event = nativeEvent;\n this.datum = datum.datum;\n this.seriesId = series.id;\n this._series = series;\n }\n Object.defineProperty(SeriesNodeBaseClickEvent.prototype, \"series\", {\n /** @deprecated */\n get: function () {\n warnSeriesDeprecated();\n return this._series;\n },\n enumerable: false,\n configurable: true\n });\n return SeriesNodeBaseClickEvent;\n}());\nexport { SeriesNodeBaseClickEvent };\nvar SeriesNodeClickEvent = /** @class */ (function (_super) {\n __extends(SeriesNodeClickEvent, _super);\n function SeriesNodeClickEvent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return SeriesNodeClickEvent;\n}(SeriesNodeBaseClickEvent));\nexport { SeriesNodeClickEvent };\nvar SeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n __extends(SeriesNodeDoubleClickEvent, _super);\n function SeriesNodeDoubleClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeDoubleClick';\n return _this;\n }\n return SeriesNodeDoubleClickEvent;\n}(SeriesNodeBaseClickEvent));\nexport { SeriesNodeDoubleClickEvent };\nvar SeriesItemHighlightStyle = /** @class */ (function () {\n function SeriesItemHighlightStyle() {\n this.fill = 'yellow';\n this.fillOpacity = undefined;\n this.stroke = undefined;\n this.strokeWidth = undefined;\n }\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], SeriesItemHighlightStyle.prototype, \"fill\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1))\n ], SeriesItemHighlightStyle.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], SeriesItemHighlightStyle.prototype, \"stroke\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], SeriesItemHighlightStyle.prototype, \"strokeWidth\", void 0);\n return SeriesItemHighlightStyle;\n}());\nvar SeriesHighlightStyle = /** @class */ (function () {\n function SeriesHighlightStyle() {\n this.strokeWidth = undefined;\n this.dimOpacity = undefined;\n this.enabled = undefined;\n }\n __decorate([\n Validate(OPT_NUMBER(0))\n ], SeriesHighlightStyle.prototype, \"strokeWidth\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1))\n ], SeriesHighlightStyle.prototype, \"dimOpacity\", void 0);\n __decorate([\n Validate(OPT_BOOLEAN)\n ], SeriesHighlightStyle.prototype, \"enabled\", void 0);\n return SeriesHighlightStyle;\n}());\nvar TextHighlightStyle = /** @class */ (function () {\n function TextHighlightStyle() {\n this.color = 'black';\n }\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], TextHighlightStyle.prototype, \"color\", void 0);\n return TextHighlightStyle;\n}());\nvar HighlightStyle = /** @class */ (function () {\n function HighlightStyle() {\n this.item = new SeriesItemHighlightStyle();\n this.series = new SeriesHighlightStyle();\n this.text = new TextHighlightStyle();\n }\n return HighlightStyle;\n}());\nexport { HighlightStyle };\nvar SeriesTooltip = /** @class */ (function () {\n function SeriesTooltip() {\n this.enabled = true;\n this.interaction = new SeriesTooltipInteraction();\n this.position = new TooltipPosition();\n }\n __decorate([\n Validate(BOOLEAN)\n ], SeriesTooltip.prototype, \"enabled\", void 0);\n return SeriesTooltip;\n}());\nexport { SeriesTooltip };\nvar SeriesTooltipInteraction = /** @class */ (function () {\n function SeriesTooltipInteraction() {\n this.enabled = false;\n }\n __decorate([\n Validate(BOOLEAN)\n ], SeriesTooltipInteraction.prototype, \"enabled\", void 0);\n return SeriesTooltipInteraction;\n}());\nexport { SeriesTooltipInteraction };\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n function Series(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.useSeriesGroupLayer, useSeriesGroupLayer = _c === void 0 ? true : _c, _d = _b.useLabelLayer, useLabelLayer = _d === void 0 ? false : _d, _e = _b.pickModes, pickModes = _e === void 0 ? [SeriesNodePickMode.NEAREST_BY_MAIN_AXIS_FIRST] : _e, _f = _b.directionKeys, directionKeys = _f === void 0 ? {} : _f;\n var _this = _super.call(this) || this;\n _this.id = createId(_this);\n // The group node that contains all the nodes used to render this series.\n _this.rootGroup = new Group({ name: 'seriesRoot' });\n _this.directions = [ChartAxisDirection.X, ChartAxisDirection.Y];\n // Flag to determine if we should recalculate node data.\n _this.nodeDataRefresh = true;\n _this._data = undefined;\n _this._visible = true;\n _this.showInLegend = true;\n _this.cursor = 'default';\n _this.nodeClickRange = 'exact';\n _this._declarationOrder = -1;\n _this.highlightStyle = new HighlightStyle();\n var rootGroup = _this.rootGroup;\n _this.directionKeys = directionKeys;\n _this.contentGroup = rootGroup.appendChild(new Group({\n name: _this.id + \"-content\",\n layer: useSeriesGroupLayer,\n zIndex: Layers.SERIES_LAYER_ZINDEX,\n zIndexSubOrder: [function () { return _this._declarationOrder; }, 0],\n }));\n _this.highlightGroup = rootGroup.appendChild(new Group({\n name: _this.id + \"-highlight\",\n layer: true,\n zIndex: Layers.SERIES_LAYER_ZINDEX,\n zIndexSubOrder: [function () { return _this._declarationOrder; }, 15000],\n }));\n _this.highlightNode = _this.highlightGroup.appendChild(new Group({ name: 'highlightNode' }));\n _this.highlightLabel = _this.highlightGroup.appendChild(new Group({ name: 'highlightLabel' }));\n _this.highlightNode.zIndex = 0;\n _this.highlightLabel.zIndex = 10;\n _this.pickModes = pickModes;\n if (useLabelLayer) {\n _this.labelGroup = rootGroup.appendChild(new Group({\n name: _this.id + \"-series-labels\",\n layer: true,\n zIndex: Layers.SERIES_LABEL_ZINDEX,\n }));\n }\n return _this;\n }\n Object.defineProperty(Series.prototype, \"type\", {\n get: function () {\n return this.constructor.type || '';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Series.prototype, \"data\", {\n get: function () {\n return this._data;\n },\n set: function (input) {\n this._data = input;\n this.nodeDataRefresh = true;\n },\n enumerable: false,\n configurable: true\n });\n Series.prototype.hasData = function () {\n var data = this.data;\n return data && (!Array.isArray(data) || data.length > 0);\n };\n Object.defineProperty(Series.prototype, \"visible\", {\n get: function () {\n return this._visible;\n },\n set: function (value) {\n this._visible = value;\n this.visibleChanged();\n },\n enumerable: false,\n configurable: true\n });\n Series.prototype.getBandScalePadding = function () {\n return { inner: 1, outer: 0 };\n };\n Series.prototype.destroy = function () {\n // Override point for sub-classes.\n };\n Object.defineProperty(Series.prototype, \"grouped\", {\n set: function (g) {\n if (g === true) {\n throw new Error(\"AG Charts - grouped: true is unsupported for series of type: \" + this.type);\n }\n },\n enumerable: false,\n configurable: true\n });\n // Returns the actual keys used (to fetch the values from `data` items) for the given direction.\n Series.prototype.getKeys = function (direction) {\n var _this = this;\n var directionKeys = this.directionKeys;\n var resolvedDirection = this.resolveKeyDirection(direction);\n var keys = directionKeys && directionKeys[resolvedDirection];\n var values = [];\n var flatten = function () {\n var e_1, _a;\n var array = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n array[_i] = arguments[_i];\n }\n try {\n for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {\n var value = array_1_1.value;\n addValue(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n var addValue = function (value) {\n if (Array.isArray(value)) {\n flatten.apply(void 0, __spread(value));\n }\n else {\n values.push(value);\n }\n };\n if (!keys)\n return values;\n keys.forEach(function (key) {\n var value = _this[key];\n if (!value)\n return;\n addValue(value);\n });\n return values;\n };\n Series.prototype.resolveKeyDirection = function (direction) {\n return direction;\n };\n // Indicate that something external changed and we should recalculate nodeData.\n Series.prototype.markNodeDataDirty = function () {\n this.nodeDataRefresh = true;\n };\n Series.prototype.visibleChanged = function () {\n // Override point for this.visible change post-processing.\n };\n Series.prototype.getOpacity = function (datum) {\n var _a = this.highlightStyle.series, _b = _a.dimOpacity, dimOpacity = _b === void 0 ? 1 : _b, _c = _a.enabled, enabled = _c === void 0 ? true : _c;\n var defaultOpacity = 1;\n if (enabled === false || dimOpacity === defaultOpacity) {\n return defaultOpacity;\n }\n switch (this.isItemIdHighlighted(datum)) {\n case 'no-highlight':\n case 'highlighted':\n return defaultOpacity;\n case 'peer-highlighted':\n case 'other-highlighted':\n return dimOpacity;\n }\n };\n Series.prototype.getStrokeWidth = function (defaultStrokeWidth, datum) {\n var _a = this.highlightStyle.series, strokeWidth = _a.strokeWidth, _b = _a.enabled, enabled = _b === void 0 ? true : _b;\n if (enabled === false || strokeWidth === undefined) {\n // No change in styling for highlight cases.\n return defaultStrokeWidth;\n }\n switch (this.isItemIdHighlighted(datum)) {\n case 'highlighted':\n return strokeWidth;\n case 'no-highlight':\n case 'other-highlighted':\n case 'peer-highlighted':\n return defaultStrokeWidth;\n }\n };\n Series.prototype.isItemIdHighlighted = function (datum) {\n var _a;\n var highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n var _b = highlightedDatum !== null && highlightedDatum !== void 0 ? highlightedDatum : {}, series = _b.series, itemId = _b.itemId;\n var highlighting = series != null;\n if (!highlighting) {\n // Highlighting not active.\n return 'no-highlight';\n }\n if (series !== this) {\n // Highlighting active, this series not highlighted.\n return 'other-highlighted';\n }\n if (itemId === undefined) {\n // Series doesn't use itemIds - so no further refinement needed, series is highlighted.\n return 'highlighted';\n }\n if (datum && highlightedDatum !== datum && itemId !== datum.itemId) {\n // A peer (in same Series instance) sub-series has highlight active, but this sub-series\n // does not.\n return 'peer-highlighted';\n }\n return 'highlighted';\n };\n Series.prototype.pickNode = function (point, limitPickModes) {\n var e_2, _a;\n var _b = this, pickModes = _b.pickModes, visible = _b.visible, rootGroup = _b.rootGroup;\n if (!visible || !rootGroup.visible) {\n return;\n }\n try {\n for (var pickModes_1 = __values(pickModes), pickModes_1_1 = pickModes_1.next(); !pickModes_1_1.done; pickModes_1_1 = pickModes_1.next()) {\n var pickMode = pickModes_1_1.value;\n if (limitPickModes && !limitPickModes.includes(pickMode)) {\n continue;\n }\n var match = undefined;\n switch (pickMode) {\n case SeriesNodePickMode.EXACT_SHAPE_MATCH:\n match = this.pickNodeExactShape(point);\n break;\n case SeriesNodePickMode.NEAREST_BY_MAIN_AXIS_FIRST:\n case SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST:\n match = this.pickNodeMainAxisFirst(point, pickMode === SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST);\n break;\n case SeriesNodePickMode.NEAREST_NODE:\n match = this.pickNodeClosestDatum(point);\n break;\n }\n if (match) {\n return { pickMode: pickMode, match: match.datum, distance: match.distance };\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (pickModes_1_1 && !pickModes_1_1.done && (_a = pickModes_1.return)) _a.call(pickModes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n };\n Series.prototype.pickNodeExactShape = function (point) {\n var match = this.contentGroup.pickNode(point.x, point.y);\n if (match) {\n return {\n datum: match.datum,\n distance: 0,\n };\n }\n };\n Series.prototype.pickNodeClosestDatum = function (_point) {\n // Override point for sub-classes - but if this is invoked, the sub-class specified it wants\n // to use this feature.\n throw new Error('AG Charts - Series.pickNodeClosestDatum() not implemented');\n };\n Series.prototype.pickNodeMainAxisFirst = function (_point, _requireCategoryAxis) {\n // Override point for sub-classes - but if this is invoked, the sub-class specified it wants\n // to use this feature.\n throw new Error('AG Charts - Series.pickNodeMainAxisFirst() not implemented');\n };\n Series.prototype.fireNodeClickEvent = function (event, _datum) {\n var eventObject = this.getNodeClickEvent(event, _datum);\n this.fireEvent(eventObject);\n };\n Series.prototype.fireNodeDoubleClickEvent = function (event, _datum) {\n var eventObject = this.getNodeDoubleClickEvent(event, _datum);\n this.fireEvent(eventObject);\n };\n Series.prototype.getNodeClickEvent = function (event, datum) {\n return new SeriesNodeClickEvent(event, datum, this);\n };\n Series.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new SeriesNodeDoubleClickEvent(event, datum, this);\n };\n Series.prototype.toggleSeriesItem = function (_itemId, enabled) {\n this.visible = enabled;\n this.nodeDataRefresh = true;\n };\n Series.prototype.toggleOtherSeriesItems = function (_seriesToggled, _datumToggled, _enabled, _suggestedEnabled) {\n return;\n };\n Series.prototype.isEnabled = function () {\n return this.visible;\n };\n Series.prototype.fixNumericExtent = function (extent, axis) {\n var _a;\n if (extent === undefined) {\n // Don't return a range, there is no range.\n return [];\n }\n var _b = __read(extent, 2), min = _b[0], max = _b[1];\n min = +min;\n max = +max;\n if (min === 0 && max === 0) {\n // domain has zero length and the single valid value is 0. Use the default of [0, 1].\n return [0, 1];\n }\n if (min === Infinity && max === -Infinity) {\n // There's no data in the domain.\n return [];\n }\n if (min === Infinity) {\n min = 0;\n }\n if (max === -Infinity) {\n max = 0;\n }\n if (min === max) {\n // domain has zero length, there is only a single valid value in data\n var padding = (_a = axis === null || axis === void 0 ? void 0 : axis.calculatePadding(min, max)) !== null && _a !== void 0 ? _a : 1;\n min -= padding;\n max += padding;\n }\n if (!(isNumber(min) && isNumber(max))) {\n return [];\n }\n return [min, max];\n };\n Series.highlightedZIndex = 1000000000000;\n __decorate([\n Validate(STRING)\n ], Series.prototype, \"id\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], Series.prototype, \"_visible\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], Series.prototype, \"showInLegend\", void 0);\n __decorate([\n Validate(STRING)\n ], Series.prototype, \"cursor\", void 0);\n __decorate([\n Validate(INTERACTION_RANGE)\n ], Series.prototype, \"nodeClickRange\", void 0);\n return Series;\n}(Observable));\nexport { Series };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NUMBER, Validate } from './validation';\nvar Padding = /** @class */ (function () {\n function Padding(top, right, bottom, left) {\n if (top === void 0) { top = 0; }\n if (right === void 0) { right = top; }\n if (bottom === void 0) { bottom = top; }\n if (left === void 0) { left = right; }\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n this.left = left;\n }\n Padding.prototype.clear = function () {\n this.top = this.right = this.bottom = this.left = 0;\n };\n __decorate([\n Validate(NUMBER(0))\n ], Padding.prototype, \"top\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Padding.prototype, \"right\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Padding.prototype, \"bottom\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Padding.prototype, \"left\", void 0);\n return Padding;\n}());\nexport { Padding };\n","import { Node } from './node';\nvar Selection = /** @class */ (function () {\n function Selection(parent, classOrFactory) {\n this._nodes = [];\n this._data = [];\n this._parent = parent;\n this._factory = Object.prototype.isPrototypeOf.call(Node, classOrFactory)\n ? function () { return new classOrFactory(); }\n : classOrFactory;\n }\n Selection.select = function (parent, classOrFactory) {\n return new Selection(parent, classOrFactory);\n };\n Selection.prototype.each = function (iterate) {\n this._nodes.forEach(function (node, i) { return iterate(node, node.datum, i); });\n return this;\n };\n Selection.prototype.update = function (data, init) {\n var _this = this;\n var old = this._data;\n var parent = this._parent;\n var factory = this._factory;\n if (data.length > old.length) {\n data.slice(old.length).forEach(function (datum) {\n var node = factory(datum);\n node.datum = datum;\n init && init(node);\n parent.appendChild(node);\n _this._nodes.push(node);\n });\n }\n else if (data.length < old.length) {\n this._nodes.splice(data.length).forEach(function (node) {\n parent.removeChild(node);\n });\n }\n this._data = data.slice(0);\n for (var i = 0; i < data.length; i++) {\n this._nodes[i].datum = this._data[i];\n }\n return this;\n };\n Selection.prototype.clear = function () {\n this.update([]);\n return this;\n };\n Selection.prototype.select = function (predicate) {\n var results = [];\n var traverse = function (node) {\n if (predicate(node)) {\n results.push(node);\n }\n node.children.forEach(traverse);\n };\n traverse(this._parent);\n return results;\n };\n Selection.prototype.selectByClass = function (Class) {\n return this.select(function (node) { return node instanceof Class; });\n };\n Selection.prototype.selectByTag = function (tag) {\n return this.select(function (node) { return node.tag === tag; });\n };\n Selection.prototype.nodes = function () {\n return this._nodes;\n };\n return Selection;\n}());\nexport { Selection };\n","var twoPi = Math.PI * 2;\n/**\n * Normalize the given angle to be in the [0, 2π) interval.\n * @param radians Angle in radians.\n */\nexport function normalizeAngle360(radians) {\n radians %= twoPi;\n radians += twoPi;\n radians %= twoPi;\n return radians;\n}\nexport function normalizeAngle360Inclusive(radians) {\n radians %= twoPi;\n radians += twoPi;\n if (radians !== twoPi) {\n radians %= twoPi;\n }\n return radians;\n}\n/**\n * Normalize the given angle to be in the [-π, π) interval.\n * @param radians Angle in radians.\n */\nexport function normalizeAngle180(radians) {\n radians %= twoPi;\n if (radians < -Math.PI) {\n radians += twoPi;\n }\n else if (radians >= Math.PI) {\n radians -= twoPi;\n }\n return radians;\n}\nexport function toRadians(degrees) {\n return (degrees / 180) * Math.PI;\n}\nexport function toDegrees(radians) {\n return (radians / Math.PI) * 180;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Gradient } from './gradient';\nimport { toRadians, normalizeAngle360 } from '../../util/angle';\nvar LinearGradient = /** @class */ (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.angle = 0;\n return _this;\n }\n LinearGradient.prototype.createGradient = function (ctx, bbox) {\n // Gradient 0° angle starts at top according to CSS spec\n var angleOffset = 90;\n var _a = this, stops = _a.stops, angle = _a.angle;\n var radians = normalizeAngle360(toRadians(angle + angleOffset));\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n var w = bbox.width;\n var h = bbox.height;\n var cx = bbox.x + w * 0.5;\n var cy = bbox.y + h * 0.5;\n if (w > 0 && h > 0) {\n var diagonal = Math.sqrt(h * h + w * w) / 2;\n var diagonalAngle = Math.atan2(h, w);\n var quarteredAngle = void 0;\n if (radians < Math.PI / 2) {\n quarteredAngle = radians;\n }\n else if (radians < Math.PI) {\n quarteredAngle = Math.PI - radians;\n }\n else if (radians < (3 * Math.PI) / 2) {\n quarteredAngle = radians - Math.PI;\n }\n else {\n quarteredAngle = 2 * Math.PI - radians;\n }\n var l = diagonal * Math.abs(Math.cos(quarteredAngle - diagonalAngle));\n var gradient_1 = ctx.createLinearGradient(cx + cos * l, cy + sin * l, cx - cos * l, cy - sin * l);\n stops.forEach(function (stop) {\n gradient_1.addColorStop(stop.offset, stop.color);\n });\n return gradient_1;\n }\n return 'black';\n };\n return LinearGradient;\n}(Gradient));\nexport { LinearGradient };\n","var Gradient = /** @class */ (function () {\n function Gradient() {\n this.stops = [];\n }\n return Gradient;\n}());\nexport { Gradient };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Node, RedrawType, SceneChangeDetection } from '../node';\nimport { LinearGradient } from '../gradient/linearGradient';\nvar LINEAR_GRADIENT_REGEXP = /^linear-gradient\\((.*?)deg,\\s*(.*?)\\s*\\)$/i;\nvar Shape = /** @class */ (function (_super) {\n __extends(Shape, _super);\n function Shape() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.lastInstanceId = 0;\n _this.fillOpacity = 1;\n _this.strokeOpacity = 1;\n _this.fill = Shape.defaultStyles.fill;\n /**\n * Note that `strokeStyle = null` means invisible stroke,\n * while `lineWidth = 0` means no stroke, and sometimes this can mean different things.\n * For example, a rect shape with an invisible stroke may not align to the pixel grid\n * properly because the stroke affects the rules of alignment, and arc shapes forming\n * a pie chart will have a gap between them if they have an invisible stroke, whereas\n * there would be not gap if there was no stroke at all.\n * The preferred way of making the stroke invisible is setting the `lineWidth` to zero,\n * unless specific looks that is achieved by having an invisible stroke is desired.\n */\n _this.stroke = Shape.defaultStyles.stroke;\n _this.strokeWidth = Shape.defaultStyles.strokeWidth;\n _this.lineDash = Shape.defaultStyles.lineDash;\n _this.lineDashOffset = Shape.defaultStyles.lineDashOffset;\n _this.lineCap = Shape.defaultStyles.lineCap;\n _this.lineJoin = Shape.defaultStyles.lineJoin;\n _this.opacity = Shape.defaultStyles.opacity;\n _this.fillShadow = Shape.defaultStyles.fillShadow;\n return _this;\n }\n /**\n * Creates a light-weight instance of the given shape (that serves as a template).\n * The created instance only stores the properites set on the instance itself\n * and the rest of the properties come via the prototype chain from the template.\n * This can greatly reduce memory usage in cases where one has many similar shapes,\n * for example, circles of different size, position and color. The exact memory usage\n * reduction will depend on the size of the template and the number of own properties\n * set on its lightweight instances, but will typically be around an order of magnitude\n * or more.\n *\n * Note: template shapes are not supposed to be part of the scene graph (they should not\n * have a parent).\n *\n * @param template\n */\n Shape.createInstance = function (template) {\n var shape = Object.create(template);\n shape._setParent(undefined);\n shape.id = template.id + '-Instance-' + String(++template.lastInstanceId);\n return shape;\n };\n /**\n * Restores the default styles introduced by this subclass.\n */\n Shape.prototype.restoreOwnStyles = function () {\n var styles = this.constructor.defaultStyles;\n var keys = Object.getOwnPropertyNames(styles);\n // getOwnPropertyNames is about 2.5 times faster than\n // for..in with the hasOwnProperty check and in this\n // case, where most properties are inherited, can be\n // more then an order of magnitude faster.\n for (var i = 0, n = keys.length; i < n; i++) {\n var key = keys[i];\n this[key] = styles[key];\n }\n };\n Shape.prototype.restoreAllStyles = function () {\n var styles = this.constructor.defaultStyles;\n for (var property in styles) {\n this[property] = styles[property];\n }\n };\n /**\n * Restores the base class default styles that have been overridden by this subclass.\n */\n Shape.prototype.restoreOverriddenStyles = function () {\n var styles = this.constructor.defaultStyles;\n var protoStyles = Object.getPrototypeOf(styles);\n for (var property in styles) {\n if (Object.prototype.hasOwnProperty.call(styles, property) &&\n Object.prototype.hasOwnProperty.call(protoStyles, property)) {\n this[property] = styles[property];\n }\n }\n };\n Shape.prototype.updateGradient = function () {\n var fill = this.fill;\n var linearGradientMatch;\n if ((fill === null || fill === void 0 ? void 0 : fill.startsWith('linear-gradient')) && (linearGradientMatch = fill.match(LINEAR_GRADIENT_REGEXP))) {\n var angle = parseFloat(linearGradientMatch[1]);\n var colors_1 = [];\n var colorsPart = linearGradientMatch[2];\n var colorRegex = /(#[0-9a-f]+)|(rgba?\\(.+?\\))|([a-z]+)/gi;\n var c = void 0;\n while ((c = colorRegex.exec(colorsPart))) {\n colors_1.push(c[0]);\n }\n this.gradient = new LinearGradient();\n this.gradient.angle = angle;\n this.gradient.stops = colors_1.map(function (color, index) {\n var offset = index / (colors_1.length - 1);\n return { offset: offset, color: color };\n });\n }\n else {\n this.gradient = undefined;\n }\n };\n /**\n * Returns a device-pixel aligned coordinate (or length if length is supplied).\n *\n * NOTE: Not suitable for strokes, since the stroke needs to be offset to the middle\n * of a device pixel.\n */\n Shape.prototype.align = function (start, length) {\n var _a, _b, _c;\n var pixelRatio = (_c = (_b = (_a = this.layerManager) === null || _a === void 0 ? void 0 : _a.canvas) === null || _b === void 0 ? void 0 : _b.pixelRatio) !== null && _c !== void 0 ? _c : 1;\n var alignedStart = Math.round(start * pixelRatio) / pixelRatio;\n if (length == undefined) {\n return alignedStart;\n }\n if (length === 0) {\n return 0;\n }\n if (length < 1) {\n // Avoid hiding crisp shapes\n return Math.ceil(length * pixelRatio) / pixelRatio;\n }\n // Account for the rounding of alignedStart by increasing length to compensate before\n // alignment.\n return Math.round((length + start) * pixelRatio) / pixelRatio - alignedStart;\n };\n Shape.prototype.fillStroke = function (ctx) {\n this.renderFill(ctx);\n this.renderStroke(ctx);\n };\n Shape.prototype.renderFill = function (ctx) {\n if (this.fill) {\n var globalAlpha = ctx.globalAlpha;\n this.applyFill(ctx);\n this.applyFillAlpha(ctx);\n this.applyShadow(ctx);\n ctx.fill();\n ctx.globalAlpha = globalAlpha;\n }\n ctx.shadowColor = 'rgba(0, 0, 0, 0)';\n };\n Shape.prototype.applyFill = function (ctx) {\n if (this.gradient) {\n ctx.fillStyle = this.gradient.createGradient(ctx, this.computeBBox());\n }\n else {\n ctx.fillStyle = this.fill;\n }\n };\n Shape.prototype.applyFillAlpha = function (ctx) {\n var globalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = globalAlpha * this.opacity * this.fillOpacity;\n };\n Shape.prototype.applyShadow = function (ctx) {\n var _a, _b;\n // The canvas context scaling (depends on the device's pixel ratio)\n // has no effect on shadows, so we have to account for the pixel ratio\n // manually here.\n var pixelRatio = (_b = (_a = this.layerManager) === null || _a === void 0 ? void 0 : _a.canvas.pixelRatio) !== null && _b !== void 0 ? _b : 1;\n var fillShadow = this.fillShadow;\n if (fillShadow && fillShadow.enabled) {\n ctx.shadowColor = fillShadow.color;\n ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n ctx.shadowBlur = fillShadow.blur * pixelRatio;\n }\n };\n Shape.prototype.renderStroke = function (ctx) {\n if (this.stroke && this.strokeWidth) {\n var globalAlpha = ctx.globalAlpha;\n ctx.strokeStyle = this.stroke;\n ctx.globalAlpha = globalAlpha * this.opacity * this.strokeOpacity;\n ctx.lineWidth = this.strokeWidth;\n if (this.lineDash) {\n ctx.setLineDash(this.lineDash);\n }\n if (this.lineDashOffset) {\n ctx.lineDashOffset = this.lineDashOffset;\n }\n if (this.lineCap) {\n ctx.lineCap = this.lineCap;\n }\n if (this.lineJoin) {\n ctx.lineJoin = this.lineJoin;\n }\n ctx.stroke();\n ctx.globalAlpha = globalAlpha;\n }\n };\n Shape.prototype.containsPoint = function (x, y) {\n return this.isPointInPath(x, y);\n };\n /**\n * Defaults for style properties. Note that properties that affect the position\n * and shape of the node are not considered style properties, for example:\n * `x`, `y`, `width`, `height`, `radius`, `rotation`, etc.\n * Can be used to reset to the original styling after some custom styling\n * has been applied (using the `restoreOwnStyles` and `restoreAllStyles` methods).\n * These static defaults are meant to be inherited by subclasses.\n */\n Shape.defaultStyles = Object.assign({}, {\n fill: 'black',\n stroke: undefined,\n strokeWidth: 0,\n lineDash: undefined,\n lineDashOffset: 0,\n lineCap: undefined,\n lineJoin: undefined,\n opacity: 1,\n fillShadow: undefined,\n });\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"fillOpacity\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"strokeOpacity\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR, changeCb: function (s) { return s.updateGradient(); } })\n ], Shape.prototype, \"fill\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"stroke\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"strokeWidth\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"lineDash\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"lineDashOffset\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"lineCap\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Shape.prototype, \"lineJoin\", void 0);\n __decorate([\n SceneChangeDetection({\n redraw: RedrawType.MINOR,\n convertor: function (v) { return Math.min(1, Math.max(0, v)); },\n })\n ], Shape.prototype, \"opacity\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR, checkDirtyOnAssignment: true })\n ], Shape.prototype, \"fillShadow\", void 0);\n return Shape;\n}(Node));\nexport { Shape };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Shape } from './shape';\nimport { BBox } from '../bbox';\nimport { HdpiCanvas } from '../../canvas/hdpiCanvas';\nimport { RedrawType, SceneChangeDetection } from '../node';\nfunction SceneFontChangeDetection(opts) {\n var _a = opts || {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.MAJOR : _b, changeCb = _a.changeCb;\n return SceneChangeDetection({ redraw: redraw, type: 'font', changeCb: changeCb });\n}\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.x = 0;\n _this.y = 0;\n _this.lines = [];\n _this.text = '';\n _this._dirtyFont = true;\n _this.fontSize = 10;\n _this.fontFamily = 'sans-serif';\n _this.textAlign = Text.defaultStyles.textAlign;\n _this.textBaseline = Text.defaultStyles.textBaseline;\n // TextMetrics are used if lineHeight is not defined.\n _this.lineHeight = undefined;\n return _this;\n }\n Text.prototype._splitText = function () {\n this.lines = typeof this.text === 'string' ? this.text.split(/\\r?\\n/g) : [];\n };\n Object.defineProperty(Text.prototype, \"font\", {\n get: function () {\n if (this._dirtyFont) {\n this._dirtyFont = false;\n this._font = getFont(this.fontSize, this.fontFamily, this.fontStyle, this.fontWeight);\n }\n return this._font;\n },\n enumerable: false,\n configurable: true\n });\n Text.prototype.computeBBox = function () {\n return HdpiCanvas.has.textMetrics ? this.getPreciseBBox() : this.getApproximateBBox();\n };\n Text.prototype.getPreciseBBox = function () {\n var _a, _b;\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n // Distance between first and last base lines.\n var baselineDistance = 0;\n for (var i = 0; i < this.lines.length; i++) {\n var metrics = HdpiCanvas.measureText(this.lines[i], this.font, this.textBaseline, this.textAlign);\n left = Math.max(left, metrics.actualBoundingBoxLeft);\n width = Math.max(width, metrics.width);\n if (i == 0) {\n top += metrics.actualBoundingBoxAscent;\n height += metrics.actualBoundingBoxAscent;\n }\n else {\n baselineDistance += (_a = metrics.fontBoundingBoxAscent) !== null && _a !== void 0 ? _a : metrics.emHeightAscent;\n }\n if (i == this.lines.length - 1) {\n height += metrics.actualBoundingBoxDescent;\n }\n else {\n baselineDistance += (_b = metrics.fontBoundingBoxDescent) !== null && _b !== void 0 ? _b : metrics.emHeightDescent;\n }\n }\n if (this.lineHeight !== undefined) {\n baselineDistance = (this.lines.length - 1) * this.lineHeight;\n }\n height += baselineDistance;\n top += baselineDistance * this.getVerticalOffset();\n return new BBox(this.x - left, this.y - top, width, height);\n };\n Text.prototype.getVerticalOffset = function () {\n switch (this.textBaseline) {\n case 'top':\n case 'hanging':\n return 0;\n case 'bottom':\n case 'alphabetic':\n case 'ideographic':\n return 1;\n case 'middle':\n return 0.5;\n }\n };\n Text.prototype.getApproximateBBox = function () {\n var _a;\n var width = 0;\n var firstLineHeight = 0;\n // Distance between first and last base lines.\n var baselineDistance = 0;\n if (this.lines.length > 0) {\n var lineSize = HdpiCanvas.getTextSize(this.lines[0], this.font);\n width = lineSize.width;\n firstLineHeight = lineSize.height;\n }\n for (var i = 1; i < this.lines.length; i++) {\n var lineSize = HdpiCanvas.getTextSize(this.lines[i], this.font);\n width = Math.max(width, lineSize.width);\n baselineDistance += (_a = this.lineHeight) !== null && _a !== void 0 ? _a : lineSize.height;\n }\n var _b = this, x = _b.x, y = _b.y;\n switch (this.textAlign) {\n case 'end':\n case 'right':\n x -= width;\n break;\n case 'center':\n x -= width / 2;\n }\n switch (this.textBaseline) {\n case 'alphabetic':\n y -= firstLineHeight * 0.7 + baselineDistance * 0.5;\n break;\n case 'middle':\n y -= firstLineHeight * 0.45 + baselineDistance * 0.5;\n break;\n case 'ideographic':\n y -= firstLineHeight + baselineDistance;\n break;\n case 'hanging':\n y -= firstLineHeight * 0.2 + baselineDistance * 0.5;\n break;\n case 'bottom':\n y -= firstLineHeight + baselineDistance;\n break;\n }\n return new BBox(x, y, width, firstLineHeight + baselineDistance);\n };\n Text.prototype.getLineHeight = function (line) {\n var _a, _b;\n if (this.lineHeight)\n return this.lineHeight;\n if (HdpiCanvas.has.textMetrics) {\n var metrics = HdpiCanvas.measureText(line, this.font, this.textBaseline, this.textAlign);\n return (((_a = metrics.fontBoundingBoxAscent) !== null && _a !== void 0 ? _a : metrics.emHeightAscent) +\n ((_b = metrics.fontBoundingBoxDescent) !== null && _b !== void 0 ? _b : metrics.emHeightDescent));\n }\n return HdpiCanvas.getTextSize(line, this.font).height;\n };\n Text.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return bbox ? bbox.containsPoint(point.x, point.y) : false;\n };\n Text.prototype.render = function (renderCtx) {\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n if (this.dirty === RedrawType.NONE && !forceRender) {\n if (stats)\n stats.nodesSkipped += this.nodeCount.count;\n return;\n }\n if (!this.lines.length || !this.layerManager) {\n if (stats)\n stats.nodesSkipped += this.nodeCount.count;\n return;\n }\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n var _a = this, fill = _a.fill, stroke = _a.stroke, strokeWidth = _a.strokeWidth;\n ctx.font = this.font;\n ctx.textAlign = this.textAlign;\n ctx.textBaseline = this.textBaseline;\n var pixelRatio = this.layerManager.canvas.pixelRatio || 1;\n var globalAlpha = ctx.globalAlpha;\n if (fill) {\n ctx.fillStyle = fill;\n ctx.globalAlpha = globalAlpha * this.opacity * this.fillOpacity;\n var fillShadow = this.fillShadow;\n if (fillShadow && fillShadow.enabled) {\n ctx.shadowColor = fillShadow.color;\n ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n ctx.shadowBlur = fillShadow.blur * pixelRatio;\n }\n this.renderLines(function (line, x, y) { return ctx.fillText(line, x, y); });\n }\n if (stroke && strokeWidth) {\n ctx.strokeStyle = stroke;\n ctx.lineWidth = strokeWidth;\n ctx.globalAlpha = globalAlpha * this.opacity * this.strokeOpacity;\n var _b = this, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, lineCap = _b.lineCap, lineJoin = _b.lineJoin;\n if (lineDash) {\n ctx.setLineDash(lineDash);\n }\n if (lineDashOffset) {\n ctx.lineDashOffset = lineDashOffset;\n }\n if (lineCap) {\n ctx.lineCap = lineCap;\n }\n if (lineJoin) {\n ctx.lineJoin = lineJoin;\n }\n this.renderLines(function (line, x, y) { return ctx.strokeText(line, x, y); });\n }\n _super.prototype.render.call(this, renderCtx);\n };\n Text.prototype.renderLines = function (renderCallback) {\n var _this = this;\n var _a = this, lines = _a.lines, x = _a.x, y = _a.y;\n var lineHeights = this.lines.map(function (line) { return _this.getLineHeight(line); });\n var totalHeight = lineHeights.reduce(function (a, b) { return a + b; }, 0);\n var offsetY = -(totalHeight - lineHeights[0]) * this.getVerticalOffset();\n for (var i = 0; i < lines.length; i++) {\n renderCallback(lines[i], x, y + offsetY);\n offsetY += lineHeights[i];\n }\n };\n Text.className = 'Text';\n Text.defaultStyles = Object.assign({}, Shape.defaultStyles, {\n textAlign: 'start',\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 10,\n fontFamily: 'sans-serif',\n textBaseline: 'alphabetic',\n });\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Text.prototype, \"x\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Text.prototype, \"y\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR, changeCb: function (o) { return o._splitText(); } })\n ], Text.prototype, \"text\", void 0);\n __decorate([\n SceneFontChangeDetection()\n ], Text.prototype, \"fontStyle\", void 0);\n __decorate([\n SceneFontChangeDetection()\n ], Text.prototype, \"fontWeight\", void 0);\n __decorate([\n SceneFontChangeDetection()\n ], Text.prototype, \"fontSize\", void 0);\n __decorate([\n SceneFontChangeDetection()\n ], Text.prototype, \"fontFamily\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Text.prototype, \"textAlign\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Text.prototype, \"textBaseline\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Text.prototype, \"lineHeight\", void 0);\n return Text;\n}(Shape));\nexport { Text };\nexport function getFont(fontSize, fontFamily, fontStyle, fontWeight) {\n return [fontStyle || '', fontWeight || '', fontSize + 'px', fontFamily].join(' ').trim();\n}\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { normalizeAngle360 } from '../util/angle';\nimport { cubicRoots } from './polyRoots';\n/**\n * Returns the intersection point for the given pair of line segments, or null,\n * if the segments are parallel or don't intersect.\n * Based on http://paulbourke.net/geometry/pointlineplane/\n */\nexport function segmentIntersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {\n var d = (ax2 - ax1) * (by2 - by1) - (ay2 - ay1) * (bx2 - bx1);\n if (d === 0) {\n // The lines are parallel.\n return null;\n }\n var ua = ((bx2 - bx1) * (ay1 - by1) - (ax1 - bx1) * (by2 - by1)) / d;\n var ub = ((ax2 - ax1) * (ay1 - by1) - (ay2 - ay1) * (ax1 - bx1)) / d;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n return {\n x: ax1 + ua * (ax2 - ax1),\n y: ay1 + ua * (ay2 - ay1),\n };\n }\n return null; // The intersection point is outside either or both segments.\n}\n/**\n * Returns intersection points of the given cubic curve and the line segment.\n * Takes in x/y components of cubic control points and line segment start/end points\n * as parameters.\n */\nexport function cubicSegmentIntersections(px1, py1, px2, py2, px3, py3, px4, py4, x1, y1, x2, y2) {\n var e_1, _a;\n var intersections = [];\n // Find line equation coefficients.\n var A = y1 - y2;\n var B = x2 - x1;\n var C = x1 * (y2 - y1) - y1 * (x2 - x1);\n // Find cubic Bezier curve equation coefficients from control points.\n var bx = bezierCoefficients(px1, px2, px3, px4);\n var by = bezierCoefficients(py1, py2, py3, py4);\n var a = A * bx[0] + B * by[0]; // t^3\n var b = A * bx[1] + B * by[1]; // t^2\n var c = A * bx[2] + B * by[2]; // t\n var d = A * bx[3] + B * by[3] + C; // 1\n var roots = cubicRoots(a, b, c, d);\n try {\n // Verify that the roots are within bounds of the linear segment.\n for (var roots_1 = __values(roots), roots_1_1 = roots_1.next(); !roots_1_1.done; roots_1_1 = roots_1.next()) {\n var t = roots_1_1.value;\n var tt = t * t;\n var ttt = t * tt;\n // Find the cartesian plane coordinates for the parametric root `t`.\n var x = bx[0] * ttt + bx[1] * tt + bx[2] * t + bx[3];\n var y = by[0] * ttt + by[1] * tt + by[2] * t + by[3];\n // The parametric cubic roots we found are intersection points\n // with an infinite line, and so the x/y coordinates above are as well.\n // Make sure the x/y is also within the bounds of the given segment.\n var s = void 0;\n if (x1 !== x2) {\n s = (x - x1) / (x2 - x1);\n }\n else {\n // the line is vertical\n s = (y - y1) / (y2 - y1);\n }\n if (s >= 0 && s <= 1) {\n intersections.push({ x: x, y: y });\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (roots_1_1 && !roots_1_1.done && (_a = roots_1.return)) _a.call(roots_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return intersections;\n}\n/**\n * Returns the given coordinates vector multiplied by the coefficient matrix\n * of the parametric cubic Bézier equation.\n */\nfunction bezierCoefficients(P1, P2, P3, P4) {\n return [\n // Bézier expressed as matrix operations:\n -P1 + 3 * P2 - 3 * P3 + P4,\n 3 * P1 - 6 * P2 + 3 * P3,\n -3 * P1 + 3 * P2,\n P1,\n ];\n}\n/**\n * Returns intersection points of the arc and the line segment.\n * Takes in arc parameters and line segment start/end points.\n */\nexport function arcIntersections(cx, cy, r, startAngle, endAngle, counterClockwise, x1, y1, x2, y2) {\n // Solving the quadratic equation:\n // 1. y = k * x + y0\n // 2. (x - cx)^2 + (y - cy)^2 = r^2\n var k = (y2 - y1) / (x2 - x1);\n var y0 = y1 - k * x1;\n var a = Math.pow(k, 2) + 1;\n var b = 2 * (k * (y0 - cy) - cx);\n var c = Math.pow(cx, 2) + Math.pow(y0 - cy, 2) - Math.pow(r, 2);\n var d = Math.pow(b, 2) - 4 * a * c;\n if (d < 0) {\n return [];\n }\n var i1x = (-b + Math.sqrt(d)) / 2 / a;\n var i2x = (-b - Math.sqrt(d)) / 2 / a;\n var intersections = [];\n [i1x, i2x].forEach(function (x) {\n var isXInsideLine = x >= Math.min(x1, x2) && x <= Math.max(x1, x2);\n if (!isXInsideLine) {\n return;\n }\n var y = k * x;\n var a1 = normalizeAngle360(counterClockwise ? endAngle : startAngle);\n var a2 = normalizeAngle360(counterClockwise ? startAngle : endAngle);\n var intersectionAngle = normalizeAngle360(Math.atan2(y, x));\n // Order angles clockwise after the start angle\n // (end angle if counter-clockwise)\n if (a2 <= a1) {\n a2 += 2 * Math.PI;\n }\n if (intersectionAngle < a1) {\n intersectionAngle += 2 * Math.PI;\n }\n if (intersectionAngle >= a1 && intersectionAngle <= a2) {\n intersections.push({ x: x, y: y });\n }\n });\n return intersections;\n}\n","/**\n * Finds the roots of a parametric linear equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n */\nfunction linearRoot(a, b) {\n var t = -b / a;\n return a !== 0 && t >= 0 && t <= 1 ? [t] : [];\n}\n/**\n * Finds the roots of a parametric quadratic equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n */\nfunction quadraticRoots(a, b, c) {\n if (a === 0) {\n return linearRoot(b, c);\n }\n var D = b * b - 4 * a * c; // The polynomial's discriminant.\n var roots = [];\n if (D === 0) {\n // A single real root.\n var t = -b / (2 * a);\n if (t >= 0 && t <= 1) {\n roots.push(t);\n }\n }\n else if (D > 0) {\n // A pair of distinct real roots.\n var rD = Math.sqrt(D);\n var t1 = (-b - rD) / (2 * a);\n var t2 = (-b + rD) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n roots.push(t2);\n }\n }\n // else -> Complex roots.\n return roots;\n}\n/**\n * Finds the roots of a parametric cubic equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n * Returns an array of parametric intersection locations along the cubic,\n * excluding out-of-bounds intersections (before or after the end point\n * or in the imaginary plane).\n * An adaptation of http://www.particleincell.com/blog/2013/cubic-line-intersection/\n */\nexport function cubicRoots(a, b, c, d) {\n if (a === 0) {\n return quadraticRoots(b, c, d);\n }\n var A = b / a;\n var B = c / a;\n var C = d / a;\n var Q = (3 * B - A * A) / 9;\n var R = (9 * A * B - 27 * C - 2 * A * A * A) / 54;\n var D = Q * Q * Q + R * R; // The polynomial's discriminant.\n var third = 1 / 3;\n var roots = [];\n if (D >= 0) {\n // Complex or duplicate roots.\n var rD = Math.sqrt(D);\n var S = Math.sign(R + rD) * Math.pow(Math.abs(R + rD), third);\n var T = Math.sign(R - rD) * Math.pow(Math.abs(R - rD), third);\n var Im = Math.abs((Math.sqrt(3) * (S - T)) / 2); // Complex part of the root pair.\n var t = -third * A + (S + T); // A real root.\n if (t >= 0 && t <= 1) {\n roots.push(t);\n }\n if (Im === 0) {\n var t_1 = -third * A - (S + T) / 2; // The real part of a complex root.\n if (t_1 >= 0 && t_1 <= 1) {\n roots.push(t_1);\n }\n }\n }\n else {\n // Distinct real roots.\n var theta = Math.acos(R / Math.sqrt(-Q * Q * Q));\n var thirdA = third * A;\n var twoSqrtQ = 2 * Math.sqrt(-Q);\n var t1 = twoSqrtQ * Math.cos(third * theta) - thirdA;\n var t2 = twoSqrtQ * Math.cos(third * (theta + 2 * Math.PI)) - thirdA;\n var t3 = twoSqrtQ * Math.cos(third * (theta + 4 * Math.PI)) - thirdA;\n if (t1 >= 0 && t1 <= 1) {\n roots.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n roots.push(t2);\n }\n if (t3 >= 0 && t3 <= 1) {\n roots.push(t3);\n }\n }\n return roots;\n}\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { cubicSegmentIntersections, segmentIntersection, arcIntersections } from './intersection';\nvar Command;\n(function (Command) {\n Command[Command[\"Move\"] = 0] = \"Move\";\n Command[Command[\"Line\"] = 1] = \"Line\";\n Command[Command[\"Arc\"] = 2] = \"Arc\";\n Command[Command[\"Curve\"] = 3] = \"Curve\";\n Command[Command[\"ClosePath\"] = 4] = \"ClosePath\";\n})(Command || (Command = {}));\nvar Path2D = /** @class */ (function () {\n function Path2D() {\n // The methods of this class will likely be called many times per animation frame,\n // and any allocation can trigger a GC cycle during animation, so we attempt\n // to minimize the number of allocations.\n this.previousCommands = [];\n this.previousParams = [];\n this.previousClosedPath = false;\n this.commands = [];\n this.params = [];\n this._closedPath = false;\n }\n Path2D.prototype.isDirty = function () {\n if (this._closedPath !== this.previousClosedPath) {\n return true;\n }\n if (this.previousCommands.length !== this.commands.length) {\n return true;\n }\n if (this.previousParams.length !== this.params.length) {\n return true;\n }\n for (var i = 0; i < this.commands.length; i++) {\n if (this.commands[i] !== this.previousCommands[i]) {\n return true;\n }\n }\n for (var i = 0; i < this.params.length; i++) {\n if (this.params[i] !== this.previousParams[i]) {\n return true;\n }\n }\n return false;\n };\n Path2D.prototype.draw = function (ctx) {\n var e_1, _a;\n var commands = this.commands;\n var params = this.params;\n var j = 0;\n ctx.beginPath();\n try {\n for (var commands_1 = __values(commands), commands_1_1 = commands_1.next(); !commands_1_1.done; commands_1_1 = commands_1.next()) {\n var command = commands_1_1.value;\n switch (command) {\n case Command.Move:\n ctx.moveTo(params[j++], params[j++]);\n break;\n case Command.Line:\n ctx.lineTo(params[j++], params[j++]);\n break;\n case Command.Curve:\n ctx.bezierCurveTo(params[j++], params[j++], params[j++], params[j++], params[j++], params[j++]);\n break;\n case Command.Arc:\n ctx.arc(params[j++], params[j++], params[j++], params[j++], params[j++], params[j++] === 1);\n break;\n case Command.ClosePath:\n ctx.closePath();\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (commands_1_1 && !commands_1_1.done && (_a = commands_1.return)) _a.call(commands_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (commands.length === 0) {\n ctx.closePath();\n }\n };\n Path2D.prototype.moveTo = function (x, y) {\n if (this.xy) {\n this.xy[0] = x;\n this.xy[1] = y;\n }\n else {\n this.xy = [x, y];\n }\n this.commands.push(Command.Move);\n this.params.push(x, y);\n };\n Path2D.prototype.lineTo = function (x, y) {\n if (this.xy) {\n this.commands.push(Command.Line);\n this.params.push(x, y);\n this.xy[0] = x;\n this.xy[1] = y;\n }\n else {\n this.moveTo(x, y);\n }\n };\n Path2D.prototype.rect = function (x, y, width, height) {\n this.moveTo(x, y);\n this.lineTo(x + width, y);\n this.lineTo(x + width, y + height);\n this.lineTo(x, y + height);\n this.closePath();\n };\n Path2D.prototype.arc = function (x, y, r, sAngle, eAngle, antiClockwise) {\n if (antiClockwise === void 0) { antiClockwise = false; }\n var endX = x + r * Math.cos(eAngle);\n var endY = y + r * Math.sin(eAngle);\n if (this.xy) {\n this.xy[0] = endX;\n this.xy[1] = endY;\n }\n else {\n this.xy = [endX, endY];\n }\n this.commands.push(Command.Arc);\n this.params.push(x, y, r, sAngle, eAngle, antiClockwise ? 1 : 0);\n };\n Path2D.prototype.cubicCurveTo = function (cx1, cy1, cx2, cy2, x, y) {\n if (!this.xy) {\n this.moveTo(cx1, cy1);\n }\n this.commands.push(Command.Curve);\n this.params.push(cx1, cy1, cx2, cy2, x, y);\n this.xy[0] = x;\n this.xy[1] = y;\n };\n Object.defineProperty(Path2D.prototype, \"closedPath\", {\n get: function () {\n return this._closedPath;\n },\n enumerable: false,\n configurable: true\n });\n Path2D.prototype.closePath = function () {\n if (this.xy) {\n this.xy = undefined;\n this.commands.push(Command.ClosePath);\n this._closedPath = true;\n }\n };\n Path2D.prototype.clear = function (_a) {\n var trackChanges = (_a === void 0 ? { trackChanges: false } : _a).trackChanges;\n if (trackChanges) {\n this.previousCommands = this.commands;\n this.previousParams = this.params;\n this.previousClosedPath = this._closedPath;\n this.commands = [];\n this.params = [];\n }\n else {\n this.commands.length = 0;\n this.params.length = 0;\n }\n this.xy = undefined;\n this._closedPath = false;\n };\n Path2D.prototype.isPointInPath = function (x, y) {\n var commands = this.commands;\n var params = this.params;\n var cn = commands.length;\n // Hit testing using ray casting method, where the ray's origin is some point\n // outside the path. In this case, an offscreen point that is remote enough, so that\n // even if the path itself is large and is partially offscreen, the ray's origin\n // will likely be outside the path anyway. To test if the given point is inside the\n // path or not, we cast a ray from the origin to the given point and check the number\n // of intersections of this segment with the path. If the number of intersections is\n // even, then the ray both entered and exited the path an equal number of times,\n // therefore the point is outside the path, and inside the path, if the number of\n // intersections is odd. Since the path is compound, we check if the ray segment\n // intersects with each of the path's segments, which can be either a line segment\n // (one or no intersection points) or a Bézier curve segment (up to 3 intersection\n // points).\n var ox = -10000;\n var oy = -10000;\n // the starting point of the current path\n var sx = NaN;\n var sy = NaN;\n // the previous point of the current path\n var px = 0;\n var py = 0;\n var intersectionCount = 0;\n for (var ci = 0, pi = 0; ci < cn; ci++) {\n switch (commands[ci]) {\n case Command.Move:\n if (!isNaN(sx)) {\n if (segmentIntersection(sx, sy, px, py, ox, oy, x, y)) {\n intersectionCount++;\n }\n }\n px = params[pi++];\n sx = px;\n py = params[pi++];\n sy = py;\n break;\n case Command.Line:\n if (segmentIntersection(px, py, params[pi++], params[pi++], ox, oy, x, y)) {\n intersectionCount++;\n }\n px = params[pi - 2];\n py = params[pi - 1];\n break;\n case Command.Curve:\n intersectionCount += cubicSegmentIntersections(px, py, params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], ox, oy, x, y).length;\n px = params[pi - 2];\n py = params[pi - 1];\n break;\n case Command.Arc:\n intersectionCount += arcIntersections(params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], Boolean(params[pi++]), ox, oy, x, y).length;\n px = params[pi - 2];\n py = params[pi - 1];\n break;\n case Command.ClosePath:\n if (!isNaN(sx)) {\n if (segmentIntersection(sx, sy, px, py, ox, oy, x, y)) {\n intersectionCount++;\n }\n }\n break;\n }\n }\n return intersectionCount % 2 === 1;\n };\n return Path2D;\n}());\nexport { Path2D };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Shape } from './shape';\nimport { Path2D } from '../path2D';\nimport { RedrawType, SceneChangeDetection } from '../node';\nexport function ScenePathChangeDetection(opts) {\n var _a = opts || {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.MAJOR : _b, changeCb = _a.changeCb, convertor = _a.convertor;\n return SceneChangeDetection({ redraw: redraw, type: 'path', convertor: convertor, changeCb: changeCb });\n}\nvar Path = /** @class */ (function (_super) {\n __extends(Path, _super);\n function Path() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Declare a path to retain for later rendering and hit testing\n * using custom Path2D class. Think of it as a TypeScript version\n * of the native Path2D (with some differences) that works in all browsers.\n */\n _this.path = new Path2D();\n /**\n * The path only has to be updated when certain attributes change.\n * For example, if transform attributes (such as `translationX`)\n * are changed, we don't have to update the path. The `dirtyPath` flag\n * is how we keep track if the path has to be updated or not.\n */\n _this._dirtyPath = true;\n return _this;\n }\n Object.defineProperty(Path.prototype, \"dirtyPath\", {\n get: function () {\n return this._dirtyPath;\n },\n set: function (value) {\n if (this._dirtyPath !== value) {\n this._dirtyPath = value;\n if (value) {\n this.markDirty(this, RedrawType.MAJOR);\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Path.prototype.checkPathDirty = function () {\n var _a, _b;\n if (this._dirtyPath) {\n return;\n }\n this.dirtyPath = this.path.isDirty() || ((_b = (_a = this.fillShadow) === null || _a === void 0 ? void 0 : _a.isDirty()) !== null && _b !== void 0 ? _b : false);\n };\n Path.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n return this.path.closedPath && this.path.isPointInPath(point.x, point.y);\n };\n Path.prototype.isDirtyPath = function () {\n // Override point for more expensive dirty checks.\n return false;\n };\n Path.prototype.updatePath = function () {\n // Override point for subclasses.\n };\n Path.prototype.render = function (renderCtx) {\n var _a, _b;\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n if (this.dirty === RedrawType.NONE && !forceRender) {\n if (stats)\n stats.nodesSkipped += this.nodeCount.count;\n return;\n }\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n if (this.dirtyPath || this.isDirtyPath()) {\n this.updatePath();\n this.dirtyPath = false;\n }\n if (this.clipPath) {\n ctx.save();\n if (this.clipMode === 'normal') {\n // Bound the shape rendered to the clipping path.\n this.clipPath.draw(ctx);\n ctx.clip();\n }\n this.path.draw(ctx);\n this.fillStroke(ctx);\n if (this.clipMode === 'punch-out') {\n // Bound the shape rendered to outside the clipping path.\n this.clipPath.draw(ctx);\n ctx.clip();\n // Fallback values, but practically these should never be used.\n var _c = (_a = this.computeBBox()) !== null && _a !== void 0 ? _a : {}, _d = _c.x, x = _d === void 0 ? -10000 : _d, _e = _c.y, y = _e === void 0 ? -10000 : _e, _f = _c.width, width = _f === void 0 ? 20000 : _f, _g = _c.height, height = _g === void 0 ? 20000 : _g;\n ctx.clearRect(x, y, width, height);\n }\n ctx.restore();\n }\n else {\n this.path.draw(ctx);\n this.fillStroke(ctx);\n }\n (_b = this.fillShadow) === null || _b === void 0 ? void 0 : _b.markClean();\n _super.prototype.render.call(this, renderCtx);\n };\n Path.className = 'Path';\n __decorate([\n ScenePathChangeDetection()\n ], Path.prototype, \"clipPath\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Path.prototype, \"clipMode\", void 0);\n return Path;\n}(Shape));\nexport { Path };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { Path, ScenePathChangeDetection } from '../../scene/shape/path';\nimport { BBox } from '../../scene/bbox';\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n function Marker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.x = 0;\n _this.y = 0;\n _this.size = 12;\n return _this;\n }\n Marker.prototype.computeBBox = function () {\n var _a = this, x = _a.x, y = _a.y, size = _a.size;\n var half = size / 2;\n return new BBox(x - half, y - half, size, size);\n };\n Marker.prototype.applyPath = function (s, moves) {\n var e_1, _a;\n var path = this.path;\n var _b = this, x = _b.x, y = _b.y;\n path.clear();\n try {\n for (var moves_1 = __values(moves), moves_1_1 = moves_1.next(); !moves_1_1.done; moves_1_1 = moves_1.next()) {\n var _c = moves_1_1.value, mx = _c.x, my = _c.y, t = _c.t;\n x += mx * s;\n y += my * s;\n if (t === 'move') {\n path.moveTo(x, y);\n }\n else {\n path.lineTo(x, y);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (moves_1_1 && !moves_1_1.done && (_a = moves_1.return)) _a.call(moves_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n path.closePath();\n };\n __decorate([\n ScenePathChangeDetection()\n ], Marker.prototype, \"x\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Marker.prototype, \"y\", void 0);\n __decorate([\n ScenePathChangeDetection({ convertor: Math.abs })\n ], Marker.prototype, \"size\", void 0);\n return Marker;\n}(Path));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Square = /** @class */ (function (_super) {\n __extends(Square, _super);\n function Square() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Square.prototype.updatePath = function () {\n var _a = this, path = _a.path, x = _a.x, y = _a.y;\n var hs = this.size / 2;\n path.clear();\n path.moveTo(this.align(x - hs), this.align(y - hs));\n path.lineTo(this.align(x + hs), this.align(y - hs));\n path.lineTo(this.align(x + hs), this.align(y + hs));\n path.lineTo(this.align(x - hs), this.align(y + hs));\n path.closePath();\n };\n Square.className = 'Square';\n return Square;\n}(Marker));\nexport { Square };\n","import { addTransformToInstanceProperty } from './decorator';\nexport function ProxyOnWrite(proxyProperty) {\n return addTransformToInstanceProperty(function (target, _, value) {\n target[proxyProperty] = value;\n return value;\n });\n}\nexport function ProxyPropertyOnWrite(childName, childProperty) {\n return addTransformToInstanceProperty(function (target, key, value) {\n target[childName][childProperty !== null && childProperty !== void 0 ? childProperty : key] = value;\n return value;\n });\n}\n/**\n * Allows side-effects to be triggered on property write.\n *\n * @param opts.newValue called when a new value is set - never called for undefined values.\n * @param opts.oldValue called with the old value before a new value is set - never called for\n * undefined values.\n * @param opts.changeValue called on any change to the value - always called.\n */\nexport function ActionOnSet(opts) {\n var newValueFn = opts.newValue, oldValueFn = opts.oldValue, changeValueFn = opts.changeValue;\n return addTransformToInstanceProperty(function (target, _, newValue, oldValue) {\n if (newValue !== oldValue) {\n if (oldValue !== undefined) {\n oldValueFn === null || oldValueFn === void 0 ? void 0 : oldValueFn.call(target, oldValue);\n }\n if (newValue !== undefined) {\n newValueFn === null || newValueFn === void 0 ? void 0 : newValueFn.call(target, newValue);\n }\n changeValueFn === null || changeValueFn === void 0 ? void 0 : changeValueFn.call(target, newValue, oldValue);\n }\n return newValue;\n });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Group } from '../scene/group';\nimport { Text } from '../scene/shape/text';\nimport { Square } from './marker/square';\nimport { HdpiCanvas } from '../canvas/hdpiCanvas';\nimport { ProxyPropertyOnWrite } from '../util/proxy';\nvar MarkerLabel = /** @class */ (function (_super) {\n __extends(MarkerLabel, _super);\n function MarkerLabel() {\n var _this = _super.call(this, { name: 'markerLabelGroup' }) || this;\n _this.label = new Text();\n _this._marker = new Square();\n _this._markerSize = 15;\n _this._spacing = 8;\n var label = _this.label;\n label.textBaseline = 'middle';\n label.fontSize = 12;\n label.fontFamily = 'Verdana, sans-serif';\n label.fill = 'black';\n // For better looking vertical alignment of labels to markers.\n label.y = HdpiCanvas.has.textMetrics ? 1 : 0;\n _this.append([_this.marker, label]);\n _this.update();\n return _this;\n }\n Object.defineProperty(MarkerLabel.prototype, \"marker\", {\n get: function () {\n return this._marker;\n },\n set: function (value) {\n if (this._marker !== value) {\n this.removeChild(this._marker);\n this._marker = value;\n this.appendChild(value);\n this.update();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerSize\", {\n get: function () {\n return this._markerSize;\n },\n set: function (value) {\n if (this._markerSize !== value) {\n this._markerSize = value;\n this.update();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"spacing\", {\n get: function () {\n return this._spacing;\n },\n set: function (value) {\n if (this._spacing !== value) {\n this._spacing = value;\n this.update();\n }\n },\n enumerable: false,\n configurable: true\n });\n MarkerLabel.prototype.update = function () {\n var marker = this.marker;\n var markerSize = this.markerSize;\n marker.size = markerSize;\n this.label.x = markerSize / 2 + this.spacing;\n };\n MarkerLabel.prototype.render = function (renderCtx) {\n // Cannot override field Group.opacity with get/set pair, so\n // propagate opacity changes here.\n this.marker.opacity = this.opacity;\n this.label.opacity = this.opacity;\n _super.prototype.render.call(this, renderCtx);\n };\n MarkerLabel.className = 'MarkerLabel';\n __decorate([\n ProxyPropertyOnWrite('label')\n ], MarkerLabel.prototype, \"text\", void 0);\n __decorate([\n ProxyPropertyOnWrite('label')\n ], MarkerLabel.prototype, \"fontStyle\", void 0);\n __decorate([\n ProxyPropertyOnWrite('label')\n ], MarkerLabel.prototype, \"fontWeight\", void 0);\n __decorate([\n ProxyPropertyOnWrite('label')\n ], MarkerLabel.prototype, \"fontSize\", void 0);\n __decorate([\n ProxyPropertyOnWrite('label')\n ], MarkerLabel.prototype, \"fontFamily\", void 0);\n __decorate([\n ProxyPropertyOnWrite('label', 'fill')\n ], MarkerLabel.prototype, \"color\", void 0);\n __decorate([\n ProxyPropertyOnWrite('marker', 'fill')\n ], MarkerLabel.prototype, \"markerFill\", void 0);\n __decorate([\n ProxyPropertyOnWrite('marker', 'stroke')\n ], MarkerLabel.prototype, \"markerStroke\", void 0);\n __decorate([\n ProxyPropertyOnWrite('marker', 'strokeWidth')\n ], MarkerLabel.prototype, \"markerStrokeWidth\", void 0);\n __decorate([\n ProxyPropertyOnWrite('marker', 'fillOpacity')\n ], MarkerLabel.prototype, \"markerFillOpacity\", void 0);\n __decorate([\n ProxyPropertyOnWrite('marker', 'strokeOpacity')\n ], MarkerLabel.prototype, \"markerStrokeOpacity\", void 0);\n return MarkerLabel;\n}(Group));\nexport { MarkerLabel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Circle = /** @class */ (function (_super) {\n __extends(Circle, _super);\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Circle.prototype.updatePath = function () {\n var _a = this, x = _a.x, y = _a.y, path = _a.path, size = _a.size;\n var r = size / 2;\n path.clear();\n path.arc(x, y, r, 0, Math.PI * 2);\n path.closePath();\n };\n Circle.className = 'Circle';\n return Circle;\n}(Marker));\nexport { Circle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Cross = /** @class */ (function (_super) {\n __extends(Cross, _super);\n function Cross() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Cross.prototype.updatePath = function () {\n var s = this.size / 4.2;\n _super.prototype.applyPath.call(this, s, Cross.moves);\n };\n Cross.className = 'Cross';\n Cross.moves = [\n { x: -1, y: 0, t: 'move' },\n { x: -1, y: -1 },\n { x: +1, y: -1 },\n { x: +1, y: +1 },\n { x: +1, y: -1 },\n { x: +1, y: +1 },\n { x: -1, y: +1 },\n { x: +1, y: +1 },\n { x: -1, y: +1 },\n { x: -1, y: -1 },\n { x: -1, y: +1 },\n { x: -1, y: -1 },\n ];\n return Cross;\n}(Marker));\nexport { Cross };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Diamond = /** @class */ (function (_super) {\n __extends(Diamond, _super);\n function Diamond() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Diamond.prototype.updatePath = function () {\n var s = this.size / 2;\n _super.prototype.applyPath.call(this, s, Diamond.moves);\n };\n Diamond.className = 'Diamond';\n Diamond.moves = [\n { x: 0, y: -1, t: 'move' },\n { x: +1, y: +1 },\n { x: -1, y: +1 },\n { x: -1, y: -1 },\n { x: +1, y: -1 },\n ];\n return Diamond;\n}(Marker));\nexport { Diamond };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Heart = /** @class */ (function (_super) {\n __extends(Heart, _super);\n function Heart() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Heart.prototype.rad = function (degree) {\n return (degree / 180) * Math.PI;\n };\n Heart.prototype.updatePath = function () {\n var _a = this, x = _a.x, path = _a.path, size = _a.size, rad = _a.rad;\n var r = size / 4;\n var y = this.y + r / 2;\n path.clear();\n path.arc(x - r, y - r, r, rad(130), rad(330));\n path.arc(x + r, y - r, r, rad(220), rad(50));\n path.lineTo(x, y + r);\n path.closePath();\n };\n Heart.className = 'Heart';\n return Heart;\n}(Marker));\nexport { Heart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Plus = /** @class */ (function (_super) {\n __extends(Plus, _super);\n function Plus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Plus.prototype.updatePath = function () {\n var s = this.size / 3;\n _super.prototype.applyPath.call(this, s, Plus.moves);\n };\n Plus.className = 'Plus';\n Plus.moves = [\n { x: -0.5, y: -0.5, t: 'move' },\n { x: 0, y: -1 },\n { x: +1, y: 0 },\n { x: 0, y: +1 },\n { x: +1, y: 0 },\n { x: 0, y: +1 },\n { x: -1, y: 0 },\n { x: 0, y: +1 },\n { x: -1, y: 0 },\n { x: 0, y: -1 },\n { x: -1, y: 0 },\n { x: 0, y: -1 },\n ];\n return Plus;\n}(Marker));\nexport { Plus };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from './marker';\nvar Triangle = /** @class */ (function (_super) {\n __extends(Triangle, _super);\n function Triangle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Triangle.prototype.updatePath = function () {\n var s = this.size * 1.1;\n _super.prototype.applyPath.call(this, s, Triangle.moves);\n };\n Triangle.className = 'Triangle';\n Triangle.moves = [\n { x: 0, y: -0.48, t: 'move' },\n { x: 0.5, y: 0.87 },\n { x: -1, y: 0 },\n ];\n return Triangle;\n}(Marker));\nexport { Triangle };\n","import { Square } from './square';\nimport { Circle } from './circle';\nimport { Cross } from './cross';\nimport { Diamond } from './diamond';\nimport { Heart } from './heart';\nimport { Plus } from './plus';\nimport { Triangle } from './triangle';\n// This function is in its own file because putting it into SeriesMarker makes the Legend\n// suddenly aware of the series (it's an agnostic component), and putting it into Marker\n// introduces circular dependencies.\nexport function getMarker(shape) {\n if (shape === void 0) { shape = Square; }\n if (typeof shape === 'string') {\n switch (shape) {\n case 'circle':\n return Circle;\n case 'cross':\n return Cross;\n case 'diamond':\n return Diamond;\n case 'heart':\n return Heart;\n case 'plus':\n return Plus;\n case 'triangle':\n return Triangle;\n default:\n return Square;\n }\n }\n if (typeof shape === 'function') {\n return shape;\n }\n return Square;\n}\n","/** Types of chart-update, in pipeline execution order. */\nexport var ChartUpdateType;\n(function (ChartUpdateType) {\n ChartUpdateType[ChartUpdateType[\"FULL\"] = 0] = \"FULL\";\n ChartUpdateType[ChartUpdateType[\"PROCESS_DATA\"] = 1] = \"PROCESS_DATA\";\n ChartUpdateType[ChartUpdateType[\"PERFORM_LAYOUT\"] = 2] = \"PERFORM_LAYOUT\";\n ChartUpdateType[ChartUpdateType[\"SERIES_UPDATE\"] = 3] = \"SERIES_UPDATE\";\n ChartUpdateType[ChartUpdateType[\"TOOLTIP_RECALCULATION\"] = 4] = \"TOOLTIP_RECALCULATION\";\n ChartUpdateType[ChartUpdateType[\"SCENE_RENDER\"] = 5] = \"SCENE_RENDER\";\n ChartUpdateType[ChartUpdateType[\"NONE\"] = 6] = \"NONE\";\n})(ChartUpdateType || (ChartUpdateType = {}));\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nexport function gridLayout(_a) {\n var orientation = _a.orientation, bboxes = _a.bboxes, maxHeight = _a.maxHeight, maxWidth = _a.maxWidth, _b = _a.itemPaddingY, itemPaddingY = _b === void 0 ? 0 : _b, _c = _a.itemPaddingX, itemPaddingX = _c === void 0 ? 0 : _c, _d = _a.forceResult, forceResult = _d === void 0 ? false : _d;\n var horizontal = orientation === 'horizontal';\n var primary = {\n max: horizontal ? maxWidth : maxHeight,\n fn: horizontal ? function (b) { return b.width; } : function (b) { return b.height; },\n padding: horizontal ? itemPaddingX : itemPaddingY,\n };\n var secondary = {\n max: !horizontal ? maxWidth : maxHeight,\n fn: !horizontal ? function (b) { return b.width; } : function (b) { return b.height; },\n padding: !horizontal ? itemPaddingX : itemPaddingY,\n };\n var processedBBoxCount = 0;\n var rawPages = [];\n while (processedBBoxCount < bboxes.length) {\n var unprocessedBBoxes = bboxes.slice(processedBBoxCount);\n var result = processBBoxes(unprocessedBBoxes, processedBBoxCount, primary, secondary, forceResult);\n if (!result) {\n return;\n }\n processedBBoxCount += result.processedBBoxCount;\n rawPages.push(result.pageIndices);\n }\n return buildPages(rawPages, orientation, bboxes, itemPaddingY, itemPaddingX);\n}\nfunction processBBoxes(bboxes, indexOffset, primary, secondary, forceResult) {\n // If calculatePage() fails on the first guess, we could use the number of items that fit\n // as a good guess for the next iteration.\n var minGuess = 1;\n var startingGuess = estimateStartingGuess(bboxes, primary);\n if (startingGuess < minGuess) {\n if (!forceResult) {\n return undefined;\n }\n // Legend constraints too small! Display at least one row/column if forceResult is true\n startingGuess = minGuess;\n }\n for (var guess = startingGuess; guess >= minGuess; guess--) {\n var pageIndices = calculatePage(bboxes, indexOffset, guess, primary, secondary, forceResult);\n if (pageIndices == null && guess <= minGuess) {\n // Can't layout!\n return undefined;\n }\n if (pageIndices == null) {\n // Guess again!\n continue;\n }\n if (typeof pageIndices === 'number') {\n // calculatePage() suggested a better guess, use that if it's more than minGuess.\n if (pageIndices <= minGuess) {\n // Can't layout!\n return undefined;\n }\n guess = pageIndices < guess && pageIndices > minGuess ? pageIndices : guess;\n continue;\n }\n var processedBBoxCount = pageIndices.length * pageIndices[0].length; // this is an estimate, not all rows/columns will have the same length\n return { processedBBoxCount: processedBBoxCount, pageIndices: pageIndices };\n }\n}\nfunction calculatePage(bboxes, indexOffset, primaryCount, primary, secondary, forceResult) {\n var _a;\n var result = [];\n var sumSecondary = 0;\n var currentMaxSecondary = 0;\n var currentPrimaryIndices = [];\n var maxPrimaryValues = [];\n for (var bboxIndex = 0; bboxIndex < bboxes.length; bboxIndex++) {\n var primaryValueIdx = (bboxIndex + primaryCount) % primaryCount;\n if (primaryValueIdx === 0) {\n sumSecondary += currentMaxSecondary;\n currentMaxSecondary = 0;\n if (currentPrimaryIndices.length > 0) {\n result.push(currentPrimaryIndices);\n }\n currentPrimaryIndices = [];\n }\n var primaryValue = primary.fn(bboxes[bboxIndex]) + primary.padding;\n maxPrimaryValues[primaryValueIdx] = Math.max((_a = maxPrimaryValues[primaryValueIdx]) !== null && _a !== void 0 ? _a : 0, primaryValue);\n currentMaxSecondary = Math.max(currentMaxSecondary, secondary.fn(bboxes[bboxIndex]) + secondary.padding);\n var currentSecondaryDimension = sumSecondary + currentMaxSecondary;\n var returnResult = !forceResult || result.length > 0;\n if (currentSecondaryDimension > secondary.max && returnResult) {\n // Breached max secondary dimension size, return indices accumlated so far (but not in-progress row/column).\n currentPrimaryIndices = [];\n break;\n }\n var sumPrimary = maxPrimaryValues.reduce(function (sum, next) { return sum + next; }, 0);\n if (sumPrimary > primary.max && !forceResult) {\n // Breached max main dimension size.\n if (maxPrimaryValues.length < primaryCount) {\n // Feedback as guess for next iteration if we're on the first round still.\n return maxPrimaryValues.length;\n }\n return undefined;\n }\n currentPrimaryIndices.push(bboxIndex + indexOffset);\n }\n if (currentPrimaryIndices.length > 0) {\n result.push(currentPrimaryIndices);\n }\n return result.length > 0 ? result : undefined;\n}\nfunction buildPages(rawPages, orientation, bboxes, itemPaddingY, itemPaddingX) {\n var maxPageWidth = 0;\n var maxPageHeight = 0;\n var pages = rawPages.map(function (indices) {\n if (orientation === 'horizontal') {\n indices = transpose(indices);\n }\n var endIndex = 0;\n var columns = indices.map(function (colIndices) {\n var colBBoxes = colIndices.map(function (bboxIndex) {\n endIndex = Math.max(bboxIndex, endIndex);\n return bboxes[bboxIndex];\n });\n var columnHeight = 0;\n var columnWidth = 0;\n colBBoxes.forEach(function (bbox) {\n columnHeight += bbox.height + itemPaddingY;\n columnWidth = Math.max(columnWidth, bbox.width + itemPaddingX);\n });\n return {\n indices: colIndices,\n bboxes: colBBoxes,\n columnHeight: columnHeight,\n columnWidth: columnWidth,\n };\n });\n var pageWidth = 0;\n var pageHeight = 0;\n columns.forEach(function (column) {\n pageWidth += column.columnWidth;\n pageHeight = Math.max(pageHeight, column.columnHeight);\n });\n maxPageWidth = Math.max(pageWidth, maxPageWidth);\n maxPageHeight = Math.max(pageHeight, maxPageHeight);\n return {\n columns: columns,\n startIndex: indices[0][0],\n endIndex: endIndex,\n pageWidth: pageWidth,\n pageHeight: pageHeight,\n };\n });\n return { pages: pages, maxPageWidth: maxPageWidth, maxPageHeight: maxPageHeight };\n}\nfunction transpose(data) {\n var e_1, _a;\n var result = [];\n try {\n for (var _b = __values(data[0]), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _ = _c.value;\n result.push([]);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n data.forEach(function (innerData, dataIdx) {\n innerData.forEach(function (item, itemIdx) {\n result[itemIdx][dataIdx] = item;\n });\n });\n return result;\n}\nfunction estimateStartingGuess(bboxes, primary) {\n var n = bboxes.length;\n var primarySum = 0;\n for (var bboxIndex = 0; bboxIndex < n; bboxIndex++) {\n primarySum += primary.fn(bboxes[bboxIndex]) + primary.padding;\n if (primarySum > primary.max) {\n var ratio = n / bboxIndex;\n if (ratio < 2) {\n return Math.ceil(n / 2);\n }\n return bboxIndex;\n }\n }\n return n;\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Group } from '../../scene/group';\nimport { Triangle } from '../marker/triangle';\nimport { Text } from '../../scene/shape/text';\nimport { HdpiCanvas } from '../../canvas/hdpiCanvas';\nimport { getMarker } from '../marker/util';\nimport { createId } from '../../util/id';\nimport { ChartUpdateType } from '../chartUpdateType';\nimport { COLOR_STRING, NUMBER, OPT_COLOR_STRING, OPT_FONT_STYLE, OPT_FONT_WEIGHT, OPT_NUMBER, STRING, Validate, } from '../../util/validation';\nvar PaginationLabel = /** @class */ (function () {\n function PaginationLabel() {\n this.color = 'black';\n this.fontStyle = undefined;\n this.fontWeight = undefined;\n this.fontSize = 12;\n this.fontFamily = 'Verdana, sans-serif';\n }\n __decorate([\n Validate(COLOR_STRING)\n ], PaginationLabel.prototype, \"color\", void 0);\n __decorate([\n Validate(OPT_FONT_STYLE)\n ], PaginationLabel.prototype, \"fontStyle\", void 0);\n __decorate([\n Validate(OPT_FONT_WEIGHT)\n ], PaginationLabel.prototype, \"fontWeight\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PaginationLabel.prototype, \"fontSize\", void 0);\n __decorate([\n Validate(STRING)\n ], PaginationLabel.prototype, \"fontFamily\", void 0);\n return PaginationLabel;\n}());\nvar PaginationMarkerStyle = /** @class */ (function () {\n function PaginationMarkerStyle() {\n this.size = 15;\n this.fill = undefined;\n this.fillOpacity = undefined;\n this.stroke = undefined;\n this.strokeWidth = 1;\n this.strokeOpacity = 1;\n }\n __decorate([\n Validate(NUMBER(0))\n ], PaginationMarkerStyle.prototype, \"size\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], PaginationMarkerStyle.prototype, \"fill\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1))\n ], PaginationMarkerStyle.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], PaginationMarkerStyle.prototype, \"stroke\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PaginationMarkerStyle.prototype, \"strokeWidth\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], PaginationMarkerStyle.prototype, \"strokeOpacity\", void 0);\n return PaginationMarkerStyle;\n}());\nvar PaginationMarker = /** @class */ (function () {\n function PaginationMarker() {\n this.size = 15;\n this._shape = Triangle;\n /**\n * Inner padding between a pagination button and the label.\n */\n this.padding = 8;\n }\n Object.defineProperty(PaginationMarker.prototype, \"shape\", {\n get: function () {\n return this._shape;\n },\n set: function (value) {\n var _a;\n this._shape = value;\n (_a = this.parent) === null || _a === void 0 ? void 0 : _a.onMarkerShapeChange();\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Validate(NUMBER(0))\n ], PaginationMarker.prototype, \"size\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PaginationMarker.prototype, \"padding\", void 0);\n return PaginationMarker;\n}());\nvar Pagination = /** @class */ (function () {\n function Pagination(chartUpdateCallback, pageUpdateCallback, interactionManager, cursorManager) {\n var _this = this;\n this.chartUpdateCallback = chartUpdateCallback;\n this.pageUpdateCallback = pageUpdateCallback;\n this.interactionManager = interactionManager;\n this.cursorManager = cursorManager;\n this.id = createId(this);\n this.group = new Group({ name: 'pagination' });\n this.labelNode = new Text();\n this.marker = new PaginationMarker();\n this.activeStyle = new PaginationMarkerStyle();\n this.inactiveStyle = new PaginationMarkerStyle();\n this.highlightStyle = new PaginationMarkerStyle();\n this.label = new PaginationLabel();\n this.totalPages = 0;\n this.currentPage = 0;\n this.nextButtonDisabled = false;\n this.previousButtonDisabled = false;\n this._visible = true;\n this._enabled = true;\n this._orientation = 'vertical';\n this._nextButton = new Triangle();\n this._previousButton = new Triangle();\n var labelNode = this.labelNode;\n labelNode.textBaseline = 'middle';\n labelNode.fontSize = 12;\n labelNode.fontFamily = 'Verdana, sans-serif';\n labelNode.fill = 'black';\n labelNode.y = HdpiCanvas.has.textMetrics ? 1 : 0;\n this.group.append([this.nextButton, this.previousButton, labelNode]);\n this.interactionManager.addListener('click', function (event) { return _this.onPaginationClick(event); });\n this.interactionManager.addListener('hover', function (event) { return _this.onPaginationMouseMove(event); });\n this.marker.parent = this;\n this.update();\n this.updateMarkers();\n }\n Object.defineProperty(Pagination.prototype, \"visible\", {\n get: function () {\n return this._visible;\n },\n set: function (value) {\n this._visible = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Pagination.prototype, \"enabled\", {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n this._enabled = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Pagination.prototype.updateGroupVisibility = function () {\n this.group.visible = this.enabled && this.visible;\n };\n Object.defineProperty(Pagination.prototype, \"orientation\", {\n get: function () {\n return this._orientation;\n },\n set: function (value) {\n this._orientation = value;\n switch (value) {\n case 'horizontal': {\n this.previousButton.rotation = -Math.PI / 2;\n this.nextButton.rotation = Math.PI / 2;\n break;\n }\n case 'vertical':\n default: {\n this.previousButton.rotation = 0;\n this.nextButton.rotation = Math.PI;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Pagination.prototype, \"translationX\", {\n get: function () {\n return this.group.translationX;\n },\n set: function (value) {\n this.group.translationX = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Pagination.prototype, \"translationY\", {\n get: function () {\n return this.group.translationY;\n },\n set: function (value) {\n this.group.translationY = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Pagination.prototype, \"nextButton\", {\n get: function () {\n return this._nextButton;\n },\n set: function (value) {\n if (this._nextButton !== value) {\n this.group.removeChild(this._nextButton);\n this._nextButton = value;\n this.group.appendChild(value);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Pagination.prototype, \"previousButton\", {\n get: function () {\n return this._previousButton;\n },\n set: function (value) {\n if (this._previousButton !== value) {\n this.group.removeChild(this._previousButton);\n this._previousButton = value;\n this.group.appendChild(value);\n }\n },\n enumerable: false,\n configurable: true\n });\n Pagination.prototype.update = function () {\n this.updateLabel();\n this.updatePositions();\n this.enableOrDisableButtons();\n };\n Pagination.prototype.updatePositions = function () {\n this.updateLabelPosition();\n this.updateNextButtonPosition();\n };\n Pagination.prototype.updateLabelPosition = function () {\n var _a = this.marker, markerSize = _a.size, markerPadding = _a.padding;\n this.nextButton.size = markerSize;\n this.previousButton.size = markerSize;\n this.labelNode.x = markerSize / 2 + markerPadding;\n };\n Pagination.prototype.updateNextButtonPosition = function () {\n var labelBBox = this.labelNode.computeBBox();\n this.nextButton.translationX = labelBBox.x + labelBBox.width + this.marker.size / 2 + this.marker.padding;\n };\n Pagination.prototype.updateLabel = function () {\n var _a = this, currentPage = _a.currentPage, pages = _a.totalPages, labelNode = _a.labelNode, _b = _a.label, color = _b.color, fontStyle = _b.fontStyle, fontWeight = _b.fontWeight, fontSize = _b.fontSize, fontFamily = _b.fontFamily;\n labelNode.text = currentPage + 1 + \" / \" + pages;\n labelNode.fill = color;\n labelNode.fontStyle = fontStyle;\n labelNode.fontWeight = fontWeight;\n labelNode.fontSize = fontSize;\n labelNode.fontFamily = fontFamily;\n };\n Pagination.prototype.updateMarkers = function () {\n var _a = this, nextButton = _a.nextButton, previousButton = _a.previousButton, nextButtonDisabled = _a.nextButtonDisabled, previousButtonDisabled = _a.previousButtonDisabled, activeStyle = _a.activeStyle, inactiveStyle = _a.inactiveStyle, highlightStyle = _a.highlightStyle, highlightActive = _a.highlightActive;\n var buttonStyle = function (button, disabled) {\n if (disabled) {\n return inactiveStyle;\n }\n else if (button === highlightActive) {\n return highlightStyle;\n }\n return activeStyle;\n };\n this.updateMarker(nextButton, buttonStyle('next', nextButtonDisabled));\n this.updateMarker(previousButton, buttonStyle('previous', previousButtonDisabled));\n };\n Pagination.prototype.updateMarker = function (marker, style) {\n var _a;\n var size = this.marker.size;\n marker.size = size;\n marker.fill = style.fill;\n marker.fillOpacity = (_a = style.fillOpacity) !== null && _a !== void 0 ? _a : 1;\n marker.stroke = style.stroke;\n marker.strokeWidth = style.strokeWidth;\n marker.strokeOpacity = style.strokeOpacity;\n };\n Pagination.prototype.enableOrDisableButtons = function () {\n var _a = this, currentPage = _a.currentPage, totalPages = _a.totalPages;\n var zeroPagesToDisplay = totalPages === 0;\n var onLastPage = currentPage === totalPages - 1;\n var onFirstPage = currentPage === 0;\n this.nextButtonDisabled = onLastPage || zeroPagesToDisplay;\n this.previousButtonDisabled = onFirstPage || zeroPagesToDisplay;\n };\n Pagination.prototype.nextButtonContainsPoint = function (offsetX, offsetY) {\n return !this.nextButtonDisabled && this.nextButton.containsPoint(offsetX, offsetY);\n };\n Pagination.prototype.previousButtonContainsPoint = function (offsetX, offsetY) {\n return !this.previousButtonDisabled && this.previousButton.containsPoint(offsetX, offsetY);\n };\n Pagination.prototype.onPaginationClick = function (event) {\n var offsetX = event.offsetX, offsetY = event.offsetY;\n if (this.nextButtonContainsPoint(offsetX, offsetY)) {\n this.incrementPage();\n this.onPaginationChanged();\n event.consume();\n }\n else if (this.previousButtonContainsPoint(offsetX, offsetY)) {\n this.decrementPage();\n this.onPaginationChanged();\n event.consume();\n }\n };\n Pagination.prototype.onPaginationMouseMove = function (event) {\n var offsetX = event.offsetX, offsetY = event.offsetY;\n if (this.nextButtonContainsPoint(offsetX, offsetY)) {\n this.cursorManager.updateCursor(this.id, 'pointer');\n this.highlightActive = 'next';\n }\n else if (this.previousButtonContainsPoint(offsetX, offsetY)) {\n this.cursorManager.updateCursor(this.id, 'pointer');\n this.highlightActive = 'previous';\n }\n else {\n this.cursorManager.updateCursor(this.id);\n this.highlightActive = undefined;\n }\n this.updateMarkers();\n this.chartUpdateCallback(ChartUpdateType.SCENE_RENDER);\n };\n Pagination.prototype.onPaginationChanged = function () {\n this.pageUpdateCallback(this.currentPage);\n };\n Pagination.prototype.incrementPage = function () {\n this.currentPage = Math.min(this.currentPage + 1, this.totalPages - 1);\n };\n Pagination.prototype.decrementPage = function () {\n this.currentPage = Math.max(this.currentPage - 1, 0);\n };\n Pagination.prototype.onMarkerShapeChange = function () {\n var Marker = getMarker(this.marker.shape || Triangle);\n this.previousButton = new Marker();\n this.nextButton = new Marker();\n this.updatePositions();\n this.updateMarkers();\n this.chartUpdateCallback(ChartUpdateType.SCENE_RENDER);\n };\n Pagination.prototype.attachPagination = function (node) {\n node.append(this.group);\n };\n Pagination.prototype.computeBBox = function () {\n return this.group.computeBBox();\n };\n Pagination.className = 'Pagination';\n return Pagination;\n}());\nexport { Pagination };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { RedrawType } from '../scene/node';\nimport { Group } from '../scene/group';\nimport { Selection } from '../scene/selection';\nimport { MarkerLabel } from './markerLabel';\nimport { BBox } from '../scene/bbox';\nimport { getFont } from '../scene/shape/text';\nimport { getMarker } from './marker/util';\nimport { createId } from '../util/id';\nimport { HdpiCanvas } from '../canvas/hdpiCanvas';\nimport { BOOLEAN, NUMBER, OPT_BOOLEAN, OPT_FONT_STYLE, OPT_FONT_WEIGHT, OPT_FUNCTION, OPT_NUMBER, POSITION, COLOR_STRING, STRING, Validate, predicateWithMessage, OPTIONAL, } from '../util/validation';\nimport { Layers } from './layers';\nimport { ChartUpdateType } from './chartUpdateType';\nimport { gridLayout } from './gridLayout';\nimport { Pagination } from './pagination/pagination';\nimport { toTooltipHtml } from './tooltip/tooltip';\nimport { Logger } from '../util/logger';\nvar ORIENTATIONS = ['horizontal', 'vertical'];\nexport var OPT_ORIENTATION = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v) { return ORIENTATIONS.includes(v); }); }, \"expecting an orientation keyword such as 'horizontal' or 'vertical'\");\nvar LegendLabel = /** @class */ (function () {\n function LegendLabel() {\n this.maxLength = undefined;\n this.color = 'black';\n this.fontStyle = undefined;\n this.fontWeight = undefined;\n this.fontSize = 12;\n this.fontFamily = 'Verdana, sans-serif';\n this.formatter = undefined;\n }\n LegendLabel.prototype.getFont = function () {\n return getFont(this.fontSize, this.fontFamily, this.fontStyle, this.fontWeight);\n };\n __decorate([\n Validate(OPT_NUMBER(0))\n ], LegendLabel.prototype, \"maxLength\", void 0);\n __decorate([\n Validate(COLOR_STRING)\n ], LegendLabel.prototype, \"color\", void 0);\n __decorate([\n Validate(OPT_FONT_STYLE)\n ], LegendLabel.prototype, \"fontStyle\", void 0);\n __decorate([\n Validate(OPT_FONT_WEIGHT)\n ], LegendLabel.prototype, \"fontWeight\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LegendLabel.prototype, \"fontSize\", void 0);\n __decorate([\n Validate(STRING)\n ], LegendLabel.prototype, \"fontFamily\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], LegendLabel.prototype, \"formatter\", void 0);\n return LegendLabel;\n}());\nvar LegendMarker = /** @class */ (function () {\n function LegendMarker() {\n this.size = 15;\n /**\n * If the marker type is set, the legend will always use that marker type for all its items,\n * regardless of the type that comes from the `data`.\n */\n this._shape = undefined;\n /**\n * Padding between the marker and the label within each legend item.\n */\n this.padding = 8;\n this.strokeWidth = 1;\n }\n Object.defineProperty(LegendMarker.prototype, \"shape\", {\n get: function () {\n return this._shape;\n },\n set: function (value) {\n var _a;\n this._shape = value;\n (_a = this.parent) === null || _a === void 0 ? void 0 : _a.onMarkerShapeChange();\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Validate(NUMBER(0))\n ], LegendMarker.prototype, \"size\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LegendMarker.prototype, \"padding\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LegendMarker.prototype, \"strokeWidth\", void 0);\n return LegendMarker;\n}());\nvar LegendItem = /** @class */ (function () {\n function LegendItem() {\n this.marker = new LegendMarker();\n this.label = new LegendLabel();\n /** Used to constrain the width of legend items. */\n this.maxWidth = undefined;\n /**\n * The legend uses grid layout for its items, occupying as few columns as possible when positioned to left or right,\n * and as few rows as possible when positioned to top or bottom. This config specifies the amount of horizontal\n * padding between legend items.\n */\n this.paddingX = 16;\n /**\n * The legend uses grid layout for its items, occupying as few columns as possible when positioned to left or right,\n * and as few rows as possible when positioned to top or bottom. This config specifies the amount of vertical\n * padding between legend items.\n */\n this.paddingY = 8;\n this.toggleSeriesVisible = true;\n }\n __decorate([\n Validate(OPT_NUMBER(0))\n ], LegendItem.prototype, \"maxWidth\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LegendItem.prototype, \"paddingX\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LegendItem.prototype, \"paddingY\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], LegendItem.prototype, \"toggleSeriesVisible\", void 0);\n return LegendItem;\n}());\nvar LegendListeners = /** @class */ (function () {\n function LegendListeners() {\n this.legendItemClick = undefined;\n this.legendItemDoubleClick = undefined;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], LegendListeners.prototype, \"legendItemClick\", void 0);\n return LegendListeners;\n}());\nvar Legend = /** @class */ (function () {\n function Legend(chart, interactionManager, cursorManager, highlightManager, tooltipManager, layoutService) {\n var _a;\n var _this = this;\n this.chart = chart;\n this.interactionManager = interactionManager;\n this.cursorManager = cursorManager;\n this.highlightManager = highlightManager;\n this.tooltipManager = tooltipManager;\n this.layoutService = layoutService;\n this.id = createId(this);\n this.group = new Group({ name: 'legend', layer: true, zIndex: Layers.LEGEND_ZINDEX });\n this.itemSelection = Selection.select(this.group, MarkerLabel);\n this.oldSize = [0, 0];\n this.pages = [];\n this.maxPageSize = [0, 0];\n /** Item index to track on re-pagination, so current page updates appropriately. */\n this.paginationTrackingIndex = 0;\n this.item = new LegendItem();\n this.listeners = new LegendListeners();\n this.truncatedItems = new Set();\n this._data = [];\n this._enabled = true;\n this.position = 'right';\n /** Used to constrain the width of the legend. */\n this.maxWidth = undefined;\n /** Used to constrain the height of the legend. */\n this.maxHeight = undefined;\n /** Reverse the display order of legend items if `true`. */\n this.reverseOrder = undefined;\n this.destroyFns = [];\n /**\n * Spacing between the legend and the edge of the chart's element.\n */\n this.spacing = 20;\n this.characterWidths = new Map();\n this.size = [0, 0];\n this._visible = true;\n this.item.marker.parent = this;\n this.pagination = new Pagination(function (type) { return _this.chart.update(type); }, function (page) { return _this.updatePageNumber(page); }, this.interactionManager, this.cursorManager);\n this.pagination.attachPagination(this.group);\n this.item.marker.parent = this;\n var interactionListeners = [\n this.interactionManager.addListener('click', function (e) { return _this.checkLegendClick(e); }),\n this.interactionManager.addListener('dblclick', function (e) { return _this.checkLegendDoubleClick(e); }),\n this.interactionManager.addListener('hover', function (e) { return _this.handleLegendMouseMove(e); }),\n ];\n var layoutListeners = [\n this.layoutService.addListener('start-layout', function (e) { return _this.positionLegend(e.shrinkRect); }),\n ];\n (_a = this.destroyFns).push.apply(_a, __spread(interactionListeners.map(function (s) { return function () { return _this.interactionManager.removeListener(s); }; }), layoutListeners.map(function (s) { return function () { return _this.layoutService.removeListener(s); }; })));\n }\n Object.defineProperty(Legend.prototype, \"translationX\", {\n get: function () {\n return this.group.translationX;\n },\n set: function (value) {\n this.group.translationX = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Legend.prototype, \"translationY\", {\n get: function () {\n return this.group.translationY;\n },\n set: function (value) {\n this.group.translationY = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Legend.prototype, \"data\", {\n get: function () {\n return this._data;\n },\n set: function (value) {\n this._data = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Legend.prototype, \"enabled\", {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n this._enabled = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Legend.prototype.getOrientation = function () {\n if (this.orientation !== undefined) {\n return this.orientation;\n }\n switch (this.position) {\n case 'right':\n case 'left':\n return 'vertical';\n case 'bottom':\n case 'top':\n return 'horizontal';\n }\n };\n Legend.prototype.destroy = function () {\n this.destroyFns.forEach(function (f) { return f(); });\n };\n Legend.prototype.onMarkerShapeChange = function () {\n this.itemSelection.clear();\n this.group.markDirty(this.group, RedrawType.MINOR);\n };\n Legend.prototype.getCharacterWidths = function (font) {\n var characterWidths = this.characterWidths;\n if (characterWidths.has(font)) {\n return characterWidths.get(font);\n }\n var cw = {\n '...': HdpiCanvas.getTextSize('...', font).width,\n };\n characterWidths.set(font, cw);\n return cw;\n };\n Object.defineProperty(Legend.prototype, \"visible\", {\n get: function () {\n return this._visible;\n },\n set: function (value) {\n this._visible = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Legend.prototype.updateGroupVisibility = function () {\n this.group.visible = this.enabled && this.visible && this.data.length > 0;\n };\n Legend.prototype.attachLegend = function (node) {\n node.append(this.group);\n };\n /**\n * The method is given the desired size of the legend, which only serves as a hint.\n * The vertically oriented legend will take as much horizontal space as needed, but will\n * respect the height constraints, and the horizontal legend will take as much vertical\n * space as needed in an attempt not to exceed the given width.\n * After the layout is done, the {@link size} will contain the actual size of the legend.\n * If the actual size is not the same as the previous actual size, the legend will fire\n * the 'layoutChange' event to communicate that another layout is needed, and the above\n * process should be repeated.\n * @param width\n * @param height\n */\n Legend.prototype.performLayout = function (width, height) {\n var _this = this;\n var _a = this.item, paddingX = _a.paddingX, paddingY = _a.paddingY, label = _a.label, maxWidth = _a.maxWidth, _b = _a.marker, markerSize = _b.size, markerPadding = _b.padding, markerShape = _b.shape, _c = _a.label, _d = _c.maxLength, maxLength = _d === void 0 ? Infinity : _d, fontStyle = _c.fontStyle, fontWeight = _c.fontWeight, fontSize = _c.fontSize, fontFamily = _c.fontFamily;\n var data = __spread(this.data);\n if (this.reverseOrder) {\n data.reverse();\n }\n this.itemSelection.update(data);\n // Update properties that affect the size of the legend items and measure them.\n var bboxes = [];\n var font = label.getFont();\n var itemMaxWidthPercentage = 0.8;\n var maxItemWidth = maxWidth !== null && maxWidth !== void 0 ? maxWidth : width * itemMaxWidthPercentage;\n var paddedMarkerWidth = markerSize + markerPadding + paddingX;\n this.itemSelection.each(function (markerLabel, datum) {\n var _a;\n var Marker = getMarker(markerShape || datum.marker.shape);\n if (!(markerLabel.marker && markerLabel.marker instanceof Marker)) {\n markerLabel.marker = new Marker();\n }\n markerLabel.markerSize = markerSize;\n markerLabel.spacing = markerPadding;\n markerLabel.fontStyle = fontStyle;\n markerLabel.fontWeight = fontWeight;\n markerLabel.fontSize = fontSize;\n markerLabel.fontFamily = fontFamily;\n var id = datum.itemId || datum.id;\n var text = ((_a = datum.label.text) !== null && _a !== void 0 ? _a : '').replace(/\\r?\\n/g, ' ');\n markerLabel.text = _this.truncate(text, maxLength, maxItemWidth, paddedMarkerWidth, font, id);\n bboxes.push(markerLabel.computeBBox());\n });\n width = Math.max(1, width);\n height = Math.max(1, height);\n if (!isFinite(width)) {\n return false;\n }\n var size = this.size;\n var oldSize = this.oldSize;\n size[0] = width;\n size[1] = height;\n if (size[0] !== oldSize[0] || size[1] !== oldSize[1]) {\n oldSize[0] = size[0];\n oldSize[1] = size[1];\n }\n var _e = this.updatePagination(bboxes, width, height), pages = _e.pages, maxPageHeight = _e.maxPageHeight, maxPageWidth = _e.maxPageWidth;\n this.pages = pages;\n this.maxPageSize = [maxPageWidth - paddingX, maxPageHeight - paddingY];\n var pageNumber = this.pagination.currentPage;\n var page = this.pages[pageNumber];\n if (this.pages.length < 1 || !page) {\n this.visible = false;\n return;\n }\n this.visible = true;\n // Position legend items\n this.updatePositions(pageNumber);\n // Update legend item properties that don't affect the layout.\n this.update();\n };\n Legend.prototype.truncate = function (text, maxCharLength, maxItemWidth, paddedMarkerWidth, font, id) {\n var e_1, _a;\n var ellipsis = \"...\";\n var textChars = text.split('');\n var addEllipsis = false;\n if (text.length > maxCharLength) {\n text = \"\" + text.substring(0, maxCharLength);\n addEllipsis = true;\n }\n var labelWidth = Math.floor(paddedMarkerWidth + HdpiCanvas.getTextSize(text, font).width);\n if (labelWidth > maxItemWidth) {\n var truncatedText = '';\n var characterWidths = this.getCharacterWidths(font);\n var cumulativeWidth = paddedMarkerWidth + characterWidths[ellipsis];\n try {\n for (var textChars_1 = __values(textChars), textChars_1_1 = textChars_1.next(); !textChars_1_1.done; textChars_1_1 = textChars_1.next()) {\n var char = textChars_1_1.value;\n if (!characterWidths[char]) {\n characterWidths[char] = HdpiCanvas.getTextSize(char, font).width;\n }\n cumulativeWidth += characterWidths[char];\n if (cumulativeWidth > maxItemWidth) {\n break;\n }\n truncatedText += char;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (textChars_1_1 && !textChars_1_1.done && (_a = textChars_1.return)) _a.call(textChars_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n text = truncatedText;\n addEllipsis = true;\n }\n if (addEllipsis) {\n text += ellipsis;\n this.truncatedItems.add(id);\n }\n else {\n this.truncatedItems.delete(id);\n }\n return text;\n };\n Legend.prototype.updatePagination = function (bboxes, width, height) {\n var orientation = this.getOrientation();\n var trackingIndex = Math.min(this.paginationTrackingIndex, bboxes.length);\n this.pagination.orientation = orientation;\n this.pagination.translationX = 0;\n this.pagination.translationY = 0;\n var _a = this.calculatePagination(bboxes, width, height), pages = _a.pages, maxPageHeight = _a.maxPageHeight, maxPageWidth = _a.maxPageWidth, paginationBBox = _a.paginationBBox, paginationVertical = _a.paginationVertical;\n var newCurrentPage = pages.findIndex(function (p) { return p.endIndex >= trackingIndex; });\n this.pagination.currentPage = Math.min(Math.max(newCurrentPage, 0), pages.length - 1);\n var _b = this.item, itemPaddingX = _b.paddingX, itemPaddingY = _b.paddingY;\n var paginationComponentPadding = 8;\n var legendItemsWidth = maxPageWidth - itemPaddingX;\n var legendItemsHeight = maxPageHeight - itemPaddingY;\n var paginationX = 0;\n var paginationY = -paginationBBox.y - this.item.marker.size / 2;\n if (paginationVertical) {\n paginationY += legendItemsHeight + paginationComponentPadding;\n }\n else {\n paginationX += -paginationBBox.x + legendItemsWidth + paginationComponentPadding;\n paginationY += (legendItemsHeight - paginationBBox.height) / 2;\n }\n this.pagination.translationX = paginationX;\n this.pagination.translationY = paginationY;\n this.pagination.update();\n this.pagination.updateMarkers();\n return {\n maxPageHeight: maxPageHeight,\n maxPageWidth: maxPageWidth,\n pages: pages,\n };\n };\n Legend.prototype.calculatePagination = function (bboxes, width, height) {\n var _a, _b, _c;\n var _d = this.item, itemPaddingX = _d.paddingX, itemPaddingY = _d.paddingY;\n var orientation = this.getOrientation();\n var paginationVertical = ['left', 'right'].includes(this.position);\n var paginationBBox = this.pagination.computeBBox();\n var lastPassPaginationBBox = new BBox(0, 0, 0, 0);\n var pages = [];\n var maxPageWidth = 0;\n var maxPageHeight = 0;\n var count = 0;\n var stableOutput = function (lastPassPaginationBBox) {\n var width = lastPassPaginationBBox.width, height = lastPassPaginationBBox.height;\n return width === paginationBBox.width && height === paginationBBox.height;\n };\n var forceResult = this.maxWidth !== undefined || this.maxHeight !== undefined;\n do {\n if (count++ > 10) {\n Logger.warn('unable to find stable legend layout.');\n break;\n }\n paginationBBox = lastPassPaginationBBox;\n var maxWidth = width - (paginationVertical ? 0 : paginationBBox.width);\n var maxHeight = height - (paginationVertical ? paginationBBox.height : 0);\n var layout = gridLayout({\n orientation: orientation,\n bboxes: bboxes,\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n itemPaddingY: itemPaddingY,\n itemPaddingX: itemPaddingX,\n forceResult: forceResult,\n });\n pages = (_a = layout === null || layout === void 0 ? void 0 : layout.pages) !== null && _a !== void 0 ? _a : [];\n maxPageWidth = (_b = layout === null || layout === void 0 ? void 0 : layout.maxPageWidth) !== null && _b !== void 0 ? _b : 0;\n maxPageHeight = (_c = layout === null || layout === void 0 ? void 0 : layout.maxPageHeight) !== null && _c !== void 0 ? _c : 0;\n var totalPages = pages.length;\n this.pagination.visible = totalPages > 1;\n this.pagination.totalPages = totalPages;\n this.pagination.update();\n lastPassPaginationBBox = this.pagination.computeBBox();\n if (!this.pagination.visible) {\n break;\n }\n } while (!stableOutput(lastPassPaginationBBox));\n return { maxPageWidth: maxPageWidth, maxPageHeight: maxPageHeight, pages: pages, paginationBBox: paginationBBox, paginationVertical: paginationVertical };\n };\n Legend.prototype.updatePositions = function (pageNumber) {\n if (pageNumber === void 0) { pageNumber = 0; }\n var _a = this, paddingY = _a.item.paddingY, itemSelection = _a.itemSelection, pages = _a.pages;\n if (pages.length < 1 || !pages[pageNumber]) {\n return;\n }\n var _b = pages[pageNumber], columns = _b.columns, visibleStart = _b.startIndex, visibleEnd = _b.endIndex;\n // Position legend items using the layout computed above.\n var x = 0;\n var y = 0;\n var columnCount = columns.length;\n var rowCount = columns[0].indices.length;\n var horizontal = this.getOrientation() === 'horizontal';\n var itemHeight = columns[0].bboxes[0].height + paddingY;\n var rowSumColumnWidths = [];\n itemSelection.each(function (markerLabel, _, i) {\n var _a, _b;\n if (i < visibleStart || i > visibleEnd) {\n markerLabel.visible = false;\n return;\n }\n var pageIndex = i - visibleStart;\n var columnIndex = 0;\n var rowIndex = 0;\n if (horizontal) {\n columnIndex = pageIndex % columnCount;\n rowIndex = Math.floor(pageIndex / columnCount);\n }\n else {\n columnIndex = Math.floor(pageIndex / rowCount);\n rowIndex = pageIndex % rowCount;\n }\n markerLabel.visible = true;\n var column = columns[columnIndex];\n if (!column) {\n return;\n }\n y = itemHeight * rowIndex;\n x = (_a = rowSumColumnWidths[rowIndex]) !== null && _a !== void 0 ? _a : 0;\n rowSumColumnWidths[rowIndex] = ((_b = rowSumColumnWidths[rowIndex]) !== null && _b !== void 0 ? _b : 0) + column.columnWidth;\n // Round off for pixel grid alignment to work properly.\n markerLabel.translationX = Math.floor(x);\n markerLabel.translationY = Math.floor(y);\n });\n };\n Legend.prototype.updatePageNumber = function (pageNumber) {\n var pages = this.pages;\n // Track an item on the page in re-pagination cases (e.g. resize).\n var _a = pages[pageNumber], startIndex = _a.startIndex, endIndex = _a.endIndex;\n if (startIndex === 0) {\n // Stay on first page on pagination update.\n this.paginationTrackingIndex = 0;\n }\n else if (pageNumber === pages.length - 1) {\n // Stay on last page on pagination update.\n this.paginationTrackingIndex = endIndex;\n }\n else {\n // Track the middle item on the page).\n this.paginationTrackingIndex = Math.floor((startIndex + endIndex) / 2);\n }\n this.pagination.update();\n this.pagination.updateMarkers();\n this.updatePositions(pageNumber);\n this.chart.update(ChartUpdateType.SCENE_RENDER);\n };\n Legend.prototype.update = function () {\n var _a = this.item, strokeWidth = _a.marker.strokeWidth, color = _a.label.color;\n this.itemSelection.each(function (markerLabel, datum) {\n var marker = datum.marker;\n markerLabel.markerFill = marker.fill;\n markerLabel.markerStroke = marker.stroke;\n markerLabel.markerStrokeWidth = strokeWidth;\n markerLabel.markerFillOpacity = marker.fillOpacity;\n markerLabel.markerStrokeOpacity = marker.strokeOpacity;\n markerLabel.opacity = datum.enabled ? 1 : 0.5;\n markerLabel.color = color;\n });\n };\n Legend.prototype.getDatumForPoint = function (x, y) {\n var e_2, _a;\n var visibleChildBBoxes = [];\n var closestLeftTop = { dist: Infinity, datum: undefined };\n try {\n for (var _b = __values(this.group.children), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n if (!child.visible)\n continue;\n if (!(child instanceof MarkerLabel))\n continue;\n var childBBox = child.computeBBox();\n childBBox.grow(this.item.paddingX / 2, 'horizontal');\n childBBox.grow(this.item.paddingY / 2, 'vertical');\n if (childBBox.containsPoint(x, y)) {\n return child.datum;\n }\n var distX = x - childBBox.x - this.item.paddingX / 2;\n var distY = y - childBBox.y - this.item.paddingY / 2;\n var dist = Math.pow(distX, 2) + Math.pow(distY, 2);\n var toTheLeftTop = distX >= 0 && distY >= 0;\n if (toTheLeftTop && dist < closestLeftTop.dist) {\n closestLeftTop.dist = dist;\n closestLeftTop.datum = child.datum;\n }\n visibleChildBBoxes.push(childBBox);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n var pageBBox = BBox.merge(visibleChildBBoxes);\n if (!pageBBox.containsPoint(x, y)) {\n // We're not in-between legend items.\n return undefined;\n }\n // Fallback to returning closest match to the left/up.\n return closestLeftTop.datum;\n };\n Legend.prototype.computeBBox = function () {\n return this.group.computeBBox();\n };\n Legend.prototype.computePagedBBox = function () {\n var actualBBox = this.group.computeBBox();\n if (this.pages.length <= 1) {\n return actualBBox;\n }\n var _a = __read(this.maxPageSize, 2), maxPageWidth = _a[0], maxPageHeight = _a[1];\n actualBBox.height = Math.max(maxPageHeight, actualBBox.height);\n actualBBox.width = Math.max(maxPageWidth, actualBBox.width);\n return actualBBox;\n };\n Legend.prototype.checkLegendClick = function (event) {\n var _a = this, legendItemClick = _a.listeners.legendItemClick, chart = _a.chart, highlightManager = _a.highlightManager, toggleSeriesVisible = _a.item.toggleSeriesVisible;\n var datum = this.getDatumForPoint(event.offsetX, event.offsetY);\n if (!datum) {\n return;\n }\n var id = datum.id, itemId = datum.itemId, enabled = datum.enabled;\n var series = chart.series.find(function (s) { return s.id === id; });\n if (!series) {\n return;\n }\n event.consume();\n var newEnabled = enabled;\n if (toggleSeriesVisible) {\n newEnabled = !enabled;\n chart.series.forEach(function (s) {\n if (s.id === series.id) {\n s.toggleSeriesItem(itemId, newEnabled);\n }\n else {\n s.toggleOtherSeriesItems(series, datum, newEnabled);\n }\n });\n }\n if (!newEnabled) {\n highlightManager.updateHighlight(this.id);\n }\n else {\n highlightManager.updateHighlight(this.id, {\n series: series,\n itemId: itemId,\n datum: undefined,\n });\n }\n this.chart.update(ChartUpdateType.PROCESS_DATA, { forceNodeDataRefresh: true });\n legendItemClick === null || legendItemClick === void 0 ? void 0 : legendItemClick({ type: 'click', enabled: newEnabled, itemId: itemId, seriesId: series.id });\n };\n Legend.prototype.checkLegendDoubleClick = function (event) {\n var _a, _b;\n var _c = this, legendItemDoubleClick = _c.listeners.legendItemDoubleClick, chart = _c.chart, toggleSeriesVisible = _c.item.toggleSeriesVisible;\n // Integrated charts do not handle double click behaviour correctly due to multiple instances of the\n // chart being created. See https://ag-grid.atlassian.net/browse/RTI-1381\n if (chart.mode === 'integrated') {\n return;\n }\n var datum = this.getDatumForPoint(event.offsetX, event.offsetY);\n if (!datum) {\n return;\n }\n var id = datum.id, itemId = datum.itemId, seriesId = datum.seriesId;\n var series = chart.series.find(function (s) { return s.id === id; });\n if (!series) {\n return;\n }\n event.consume();\n if (toggleSeriesVisible) {\n var legendData = chart.series.reduce(function (ls, s) { return __spread(ls, s.getLegendData()); }, []);\n var visibleItemsCount = legendData.filter(function (d) { return d.enabled; }).length;\n var clickedItem = legendData.find(function (d) { return d.itemId === itemId && d.seriesId === seriesId; });\n var seriesItemCounts = legendData.reduce(function (acc, d) {\n var _a;\n var _b;\n (_a = acc[_b = d.seriesId]) !== null && _a !== void 0 ? _a : (acc[_b] = 0);\n acc[d.seriesId]++;\n return acc;\n }, {});\n var seriesItemEnabledCounts = legendData.reduce(function (acc, d) {\n var _a;\n var _b;\n if (!d.enabled)\n return acc;\n (_a = acc[_b = d.seriesId]) !== null && _a !== void 0 ? _a : (acc[_b] = 0);\n acc[d.seriesId]++;\n return acc;\n }, {});\n var eachSeriesHasSingleItem_1 = Object.values(seriesItemCounts).filter(function (c) { return c > 1; }).length === 0;\n var singleEnabledInEachSeries = Object.values(seriesItemEnabledCounts).filter(function (count) { return count > 1; }).length === 0;\n var singleSelectedWasNotClicked_1 = visibleItemsCount === 1 && ((_a = clickedItem === null || clickedItem === void 0 ? void 0 : clickedItem.enabled) !== null && _a !== void 0 ? _a : false);\n var singleEnabledInEachSeriesWasNotClicked_1 = singleEnabledInEachSeries && ((_b = clickedItem === null || clickedItem === void 0 ? void 0 : clickedItem.enabled) !== null && _b !== void 0 ? _b : false);\n chart.series.forEach(function (s) {\n var legendData = s.getLegendData();\n legendData.forEach(function (d) {\n var wasClicked = d.itemId === itemId && d.seriesId === seriesId;\n var newEnabled = wasClicked ||\n (eachSeriesHasSingleItem_1 && singleSelectedWasNotClicked_1) ||\n (!eachSeriesHasSingleItem_1 && singleEnabledInEachSeriesWasNotClicked_1);\n s.toggleSeriesItem(d.itemId, newEnabled);\n });\n if (s.id !== series.id) {\n s.toggleOtherSeriesItems(series, datum, undefined, singleEnabledInEachSeriesWasNotClicked_1);\n }\n });\n }\n this.chart.update(ChartUpdateType.PROCESS_DATA, { forceNodeDataRefresh: true });\n legendItemDoubleClick === null || legendItemDoubleClick === void 0 ? void 0 : legendItemDoubleClick({ type: 'dblclick', enabled: true, itemId: itemId, seriesId: series.id });\n };\n Legend.prototype.handleLegendMouseMove = function (event) {\n var _a = this, enabled = _a.enabled, toggleSeriesVisible = _a.item.toggleSeriesVisible, listeners = _a.listeners;\n if (!enabled) {\n return;\n }\n var legendBBox = this.computeBBox();\n var pageX = event.pageX, pageY = event.pageY, offsetX = event.offsetX, offsetY = event.offsetY;\n var pointerInsideLegend = this.group.visible && legendBBox.containsPoint(offsetX, offsetY);\n if (!pointerInsideLegend) {\n this.cursorManager.updateCursor(this.id);\n this.highlightManager.updateHighlight(this.id);\n this.tooltipManager.removeTooltip(this.id);\n return;\n }\n // Prevent other handlers from consuming this event if it's generated inside the legend\n // boundaries.\n event.consume();\n var datum = this.getDatumForPoint(offsetX, offsetY);\n var pointerOverLegendDatum = pointerInsideLegend && datum !== undefined;\n if (!pointerOverLegendDatum) {\n this.cursorManager.updateCursor(this.id);\n this.highlightManager.updateHighlight(this.id);\n return;\n }\n var series = datum ? this.chart.series.find(function (series) { return series.id === (datum === null || datum === void 0 ? void 0 : datum.id); }) : undefined;\n if (datum && this.truncatedItems.has(datum.itemId || datum.id)) {\n this.tooltipManager.updateTooltip(this.id, { pageX: pageX, pageY: pageY, offsetX: offsetX, offsetY: offsetY, event: event }, toTooltipHtml({ content: datum.label.text }));\n }\n else {\n this.tooltipManager.removeTooltip(this.id);\n }\n if (toggleSeriesVisible || listeners.legendItemClick != null) {\n this.cursorManager.updateCursor(this.id, 'pointer');\n }\n if ((datum === null || datum === void 0 ? void 0 : datum.enabled) && series) {\n this.highlightManager.updateHighlight(this.id, {\n series: series,\n itemId: datum === null || datum === void 0 ? void 0 : datum.itemId,\n datum: undefined,\n });\n }\n else {\n this.highlightManager.updateHighlight(this.id);\n }\n };\n Legend.prototype.positionLegend = function (shrinkRect) {\n var _this = this;\n var newShrinkRect = shrinkRect.clone();\n if (!this.enabled || !this.data.length) {\n return { shrinkRect: newShrinkRect };\n }\n var _a = __read(this.calculateLegendDimensions(shrinkRect), 2), legendWidth = _a[0], legendHeight = _a[1];\n var translationX = 0;\n var translationY = 0;\n this.translationX = 0;\n this.translationY = 0;\n this.performLayout(legendWidth, legendHeight);\n var legendBBox = this.computePagedBBox();\n var calculateTranslationPerpendicularDimension = function () {\n switch (_this.position) {\n case 'top':\n return 0;\n case 'bottom':\n return shrinkRect.height - legendBBox.height;\n case 'left':\n return 0;\n case 'right':\n default:\n return shrinkRect.width - legendBBox.width;\n }\n };\n if (this.visible) {\n switch (this.position) {\n case 'top':\n case 'bottom':\n translationX = (shrinkRect.width - legendBBox.width) / 2;\n translationY = calculateTranslationPerpendicularDimension();\n newShrinkRect.shrink(legendBBox.height, this.position);\n break;\n case 'left':\n case 'right':\n default:\n translationX = calculateTranslationPerpendicularDimension();\n translationY = (shrinkRect.height - legendBBox.height) / 2;\n newShrinkRect.shrink(legendBBox.width, this.position);\n }\n // Round off for pixel grid alignment to work properly.\n this.translationX = Math.floor(-legendBBox.x + shrinkRect.x + translationX);\n this.translationY = Math.floor(-legendBBox.y + shrinkRect.y + translationY);\n }\n if (this.visible && this.enabled && this.data.length) {\n var legendPadding = this.spacing;\n newShrinkRect.shrink(legendPadding, this.position);\n var legendPositionedBBox = legendBBox.clone();\n legendPositionedBBox.x += this.translationX;\n legendPositionedBBox.y += this.translationY;\n this.tooltipManager.updateExclusiveRect(this.id, legendPositionedBBox);\n }\n else {\n this.tooltipManager.updateExclusiveRect(this.id);\n }\n return { shrinkRect: newShrinkRect };\n };\n Legend.prototype.calculateLegendDimensions = function (shrinkRect) {\n var width = shrinkRect.width, height = shrinkRect.height;\n var aspectRatio = width / height;\n var maxCoefficient = 0.5;\n var minHeightCoefficient = 0.2;\n var minWidthCoefficient = 0.25;\n var legendWidth = 0;\n var legendHeight = 0;\n switch (this.position) {\n case 'top':\n case 'bottom':\n // A horizontal legend should take maximum between 20 to 50 percent of the chart height if height is larger than width\n // and maximum 20 percent of the chart height if height is smaller than width.\n var heightCoefficient = aspectRatio < 1\n ? Math.min(maxCoefficient, minHeightCoefficient * (1 / aspectRatio))\n : minHeightCoefficient;\n legendWidth = this.maxWidth ? Math.min(this.maxWidth, width) : width;\n legendHeight = this.maxHeight\n ? Math.min(this.maxHeight, height)\n : Math.round(height * heightCoefficient);\n break;\n case 'left':\n case 'right':\n default:\n // A vertical legend should take maximum between 25 to 50 percent of the chart width if width is larger than height\n // and maximum 25 percent of the chart width if width is smaller than height.\n var widthCoefficient = aspectRatio > 1 ? Math.min(maxCoefficient, minWidthCoefficient * aspectRatio) : minWidthCoefficient;\n legendWidth = this.maxWidth ? Math.min(this.maxWidth, width) : Math.round(width * widthCoefficient);\n legendHeight = this.maxHeight ? Math.min(this.maxHeight, height) : height;\n }\n return [legendWidth, legendHeight];\n };\n Legend.className = 'Legend';\n __decorate([\n Validate(BOOLEAN)\n ], Legend.prototype, \"_enabled\", void 0);\n __decorate([\n Validate(POSITION)\n ], Legend.prototype, \"position\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], Legend.prototype, \"maxWidth\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], Legend.prototype, \"maxHeight\", void 0);\n __decorate([\n Validate(OPT_BOOLEAN)\n ], Legend.prototype, \"reverseOrder\", void 0);\n __decorate([\n Validate(OPT_ORIENTATION)\n ], Legend.prototype, \"orientation\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Legend.prototype, \"spacing\", void 0);\n return Legend;\n}());\nexport { Legend };\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar SizeMonitor = /** @class */ (function () {\n function SizeMonitor() {\n }\n SizeMonitor.init = function () {\n var _this = this;\n var NativeResizeObserver = window.ResizeObserver;\n if (NativeResizeObserver) {\n this.resizeObserver = new NativeResizeObserver(function (entries) {\n var e_1, _a;\n try {\n for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {\n var entry = entries_1_1.value;\n var _b = entry.contentRect, width = _b.width, height = _b.height;\n _this.checkSize(_this.elements.get(entry.target), entry.target, width, height);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n });\n }\n else {\n // polyfill (more reliable even in browsers that support ResizeObserver)\n var step = function () {\n _this.elements.forEach(function (entry, element) {\n _this.checkClientSize(element, entry);\n });\n };\n window.setInterval(step, 100);\n }\n this.ready = true;\n };\n SizeMonitor.checkSize = function (entry, element, width, height) {\n if (entry) {\n if (!entry.size || width !== entry.size.width || height !== entry.size.height) {\n entry.size = { width: width, height: height };\n entry.cb(entry.size, element);\n }\n }\n };\n // Only a single callback is supported.\n SizeMonitor.observe = function (element, cb) {\n if (!this.ready) {\n this.init();\n }\n this.unobserve(element);\n if (this.resizeObserver) {\n this.resizeObserver.observe(element);\n }\n this.elements.set(element, { cb: cb });\n // Ensure first size callback happens synchronously.\n this.checkClientSize(element, { cb: cb });\n };\n SizeMonitor.unobserve = function (element) {\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(element);\n }\n this.elements.delete(element);\n };\n SizeMonitor.checkClientSize = function (element, entry) {\n var width = element.clientWidth ? element.clientWidth : 0;\n var height = element.clientHeight ? element.clientHeight : 0;\n this.checkSize(entry, element, width, height);\n };\n SizeMonitor.elements = new Map();\n SizeMonitor.ready = false;\n return SizeMonitor;\n}());\nexport { SizeMonitor };\n","function circleRectOverlap(c, x, y, w, h) {\n // Find closest horizontal and vertical edges.\n var edgeX = c.x < x ? x : c.x > x + w ? x + w : c.x;\n var edgeY = c.y < y ? y : c.y > y + h ? y + h : c.y;\n // Find distance to closest edges.\n var dx = c.x - edgeX;\n var dy = c.y - edgeY;\n var d = Math.sqrt(dx * dx + dy * dy);\n return d <= c.size * 0.5;\n}\nfunction rectRectOverlap(r1, x2, y2, w2, h2) {\n var xOverlap = r1.x + r1.width > x2 && r1.x < x2 + w2;\n var yOverlap = r1.y + r1.height > y2 && r1.y < y2 + h2;\n return xOverlap && yOverlap;\n}\nfunction rectContainsRect(r1, r2x, r2y, r2w, r2h) {\n return r2x + r2w < r1.x + r1.width && r2x > r1.x && r2y > r1.y && r2y + r2h < r1.y + r1.height;\n}\nexport function isPointLabelDatum(x) {\n return x != null && typeof x.point === 'object' && typeof x.label === 'object';\n}\n/**\n * @param data Points and labels for one or more series. The order of series determines label placement precedence.\n * @param bounds Bounds to fit the labels into. If a label can't be fully contained, it doesn't fit.\n * @returns Placed labels for the given series (in the given order).\n */\nexport function placeLabels(data, bounds, padding) {\n if (padding === void 0) { padding = 5; }\n var result = [];\n data = data.map(function (d) { return d.slice().sort(function (a, b) { return b.point.size - a.point.size; }); });\n for (var j = 0; j < data.length; j++) {\n var labels = (result[j] = []);\n var datum = data[j];\n if (!(datum && datum.length && datum[0].label)) {\n continue;\n }\n var _loop_1 = function (i, ln) {\n var d = datum[i];\n var l = d.label;\n var r = d.point.size * 0.5;\n var x = d.point.x - l.width * 0.5;\n var y = d.point.y - r - l.height - padding;\n var width = l.width, height = l.height;\n var withinBounds = !bounds || rectContainsRect(bounds, x, y, width, height);\n if (!withinBounds) {\n return \"continue\";\n }\n var overlapPoints = data.some(function (datum) {\n return datum.some(function (d) { return circleRectOverlap(d.point, x, y, width, height); });\n });\n if (overlapPoints) {\n return \"continue\";\n }\n var overlapLabels = result.some(function (labels) { return labels.some(function (l) { return rectRectOverlap(l, x, y, width, height); }); });\n if (overlapLabels) {\n return \"continue\";\n }\n labels.push({\n index: i,\n text: l.text,\n x: x,\n y: y,\n width: width,\n height: height,\n datum: d,\n });\n };\n for (var i = 0, ln = datum.length; i < ln; i++) {\n _loop_1(i, ln);\n }\n }\n return result;\n}\nexport function axisLabelsOverlap(data, padding) {\n var result = [];\n var _loop_2 = function (i) {\n var datum = data[i];\n var _a = datum.point, x = _a.x, y = _a.y, text = datum.label.text;\n var _b = datum.label, width = _b.width, height = _b.height;\n width += padding !== null && padding !== void 0 ? padding : 0;\n height += padding !== null && padding !== void 0 ? padding : 0;\n var overlapLabels = result.some(function (l) {\n var overlap = rectRectOverlap(l, x, y, width, height);\n return overlap;\n });\n if (overlapLabels) {\n return { value: true };\n }\n result.push({\n index: i,\n text: text,\n x: x,\n y: y,\n width: width,\n height: height,\n datum: datum,\n });\n };\n for (var i = 0; i < data.length; i++) {\n var state_1 = _loop_2(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n return false;\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n/**\n * Wrap a function in debouncing trigger function. A requestAnimationFrame() is scheduled\n * after the first schedule() call, and subsequent schedule() calls will be ignored until the\n * animation callback executes.\n */\nexport function debouncedAnimationFrame(cb) {\n return buildScheduler(function (cb) { return requestAnimationFrame(cb); }, cb);\n}\nexport function debouncedCallback(cb) {\n return buildScheduler(function (cb) { return setTimeout(cb, 0); }, cb);\n}\nfunction buildScheduler(scheduleFn, cb) {\n var scheduleCount = 0;\n var promiseRunning = false;\n var awaitingPromise;\n var awaitingDone;\n var busy = function () {\n return promiseRunning;\n };\n var done = function () {\n promiseRunning = false;\n awaitingDone === null || awaitingDone === void 0 ? void 0 : awaitingDone();\n awaitingDone = undefined;\n awaitingPromise = undefined;\n if (scheduleCount > 0) {\n scheduleFn(scheduleCb);\n }\n };\n var scheduleCb = function () {\n var count = scheduleCount;\n scheduleCount = 0;\n promiseRunning = true;\n var maybePromise = cb({ count: count });\n if (!maybePromise) {\n done();\n return;\n }\n maybePromise.then(done).catch(done);\n };\n return {\n schedule: function () {\n if (scheduleCount === 0 && !busy()) {\n scheduleFn(scheduleCb);\n }\n scheduleCount++;\n },\n await: function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!busy()) {\n return [2 /*return*/];\n }\n if (!awaitingPromise) {\n awaitingPromise = new Promise(function (resolve) {\n awaitingDone = resolve;\n });\n }\n _a.label = 1;\n case 1:\n if (!busy()) return [3 /*break*/, 3];\n return [4 /*yield*/, awaitingPromise];\n case 2:\n _a.sent();\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n });\n },\n };\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Marker } from '../marker/marker';\nimport { Circle } from '../marker/circle';\nimport { ChangeDetectable, RedrawType, SceneChangeDetection } from '../../scene/changeDetectable';\nimport { BOOLEAN, NUMBER, OPT_COLOR_STRING, OPT_NUMBER, OPT_NUMBER_ARRAY, predicateWithMessage, Validate, } from '../../util/validation';\nvar MARKER_SHAPES = ['circle', 'cross', 'diamond', 'heart', 'plus', 'square', 'triangle'];\nvar MARKER_SHAPE = predicateWithMessage(function (v) { return MARKER_SHAPES.includes(v) || Object.getPrototypeOf(v) === Marker; }, \"expecting a marker shape keyword such as 'circle', 'diamond' or 'square' or an object extending the Marker class\");\nvar SeriesMarker = /** @class */ (function (_super) {\n __extends(SeriesMarker, _super);\n function SeriesMarker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.enabled = true;\n /**\n * One of the predefined marker names, or a marker constructor function (for user-defined markers).\n * A series will create one marker instance per data point.\n */\n _this.shape = Circle;\n _this.size = 6;\n /**\n * In case a series has the `sizeKey` set, the `sizeKey` values along with the `size` and `maxSize` configs\n * will be used to determine the size of the marker. All values will be mapped to a marker size\n * within the `[size, maxSize]` range, where the largest values will correspond to the `maxSize`\n * and the lowest to the `size`.\n */\n _this.maxSize = 30;\n _this.domain = undefined;\n _this.fill = undefined;\n _this.stroke = undefined;\n _this.strokeWidth = 1;\n _this.fillOpacity = undefined;\n _this.strokeOpacity = undefined;\n return _this;\n }\n __decorate([\n Validate(BOOLEAN),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"enabled\", void 0);\n __decorate([\n Validate(MARKER_SHAPE),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"shape\", void 0);\n __decorate([\n Validate(NUMBER(0)),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"size\", void 0);\n __decorate([\n Validate(NUMBER(0)),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"maxSize\", void 0);\n __decorate([\n Validate(OPT_NUMBER_ARRAY),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"domain\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"fill\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"stroke\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0)),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"strokeWidth\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1)),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1)),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], SeriesMarker.prototype, \"strokeOpacity\", void 0);\n return SeriesMarker;\n}(ChangeDetectable));\nexport { SeriesMarker };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { Logger } from '../util/logger';\nvar ContinuousScale = /** @class */ (function () {\n function ContinuousScale(domain, range) {\n this.domain = domain;\n this.range = range;\n this.nice = false;\n this.tickCount = ContinuousScale.defaultTickCount;\n this.minTickCount = 0;\n this.maxTickCount = Infinity;\n this.niceDomain = null;\n this.strictClampByDefault = false;\n this.cache = null;\n this.cacheProps = ['domain', 'range', 'nice', 'tickCount', 'minTickCount', 'maxTickCount'];\n }\n ContinuousScale.prototype.transform = function (x) {\n return x;\n };\n ContinuousScale.prototype.transformInvert = function (x) {\n return x;\n };\n ContinuousScale.prototype.fromDomain = function (d) {\n if (typeof d === 'number') {\n return d;\n }\n else if (d instanceof Date) {\n return d.getTime();\n }\n return NaN;\n };\n ContinuousScale.prototype.getDomain = function () {\n if (this.nice) {\n this.refresh();\n if (this.niceDomain) {\n return this.niceDomain;\n }\n }\n return this.domain;\n };\n ContinuousScale.prototype.convert = function (x, params) {\n var _this = this;\n var _a;\n if (!this.domain || this.domain.length < 2) {\n return NaN;\n }\n this.refresh();\n var strict = (_a = params === null || params === void 0 ? void 0 : params.strict) !== null && _a !== void 0 ? _a : this.strictClampByDefault;\n var domain = this.getDomain().map(function (d) { return _this.transform(d); });\n var _b = __read(domain, 2), d0 = _b[0], d1 = _b[1];\n var range = this.range;\n var _c = __read(range, 2), r0 = _c[0], r1 = _c[1];\n x = this.transform(x);\n if (x < d0) {\n return strict ? NaN : r0;\n }\n else if (x > d1) {\n return strict ? NaN : r1;\n }\n if (d0 === d1) {\n return (r0 + r1) / 2;\n }\n else if (x === d0) {\n return r0;\n }\n else if (x === d1) {\n return r1;\n }\n return (r0 + ((this.fromDomain(x) - this.fromDomain(d0)) / (this.fromDomain(d1) - this.fromDomain(d0))) * (r1 - r0));\n };\n ContinuousScale.prototype.invert = function (x) {\n var _this = this;\n this.refresh();\n var domain = this.getDomain().map(function (d) { return _this.transform(d); });\n var _a = __read(domain, 2), d0 = _a[0], d1 = _a[1];\n var range = this.range;\n var _b = __read(range, 2), r0 = _b[0], r1 = _b[1];\n var isReversed = r0 > r1;\n var rMin = isReversed ? r1 : r0;\n var rMax = isReversed ? r0 : r1;\n var d;\n if (x < rMin) {\n return isReversed ? d1 : d0;\n }\n else if (x > rMax) {\n return isReversed ? d0 : d1;\n }\n else if (r0 === r1) {\n d = this.toDomain((this.fromDomain(d0) + this.fromDomain(d1)) / 2);\n }\n else {\n d = this.toDomain(this.fromDomain(d0) + ((x - r0) / (r1 - r0)) * (this.fromDomain(d1) - this.fromDomain(d0)));\n }\n return this.transformInvert(d);\n };\n ContinuousScale.prototype.didChange = function () {\n var _this = this;\n var cache = this.cache;\n var didChange = !cache || this.cacheProps.some(function (p) { return _this[p] !== cache[p]; });\n if (didChange) {\n this.cache = {};\n this.cacheProps.forEach(function (p) { return (_this.cache[p] = _this[p]); });\n return true;\n }\n return false;\n };\n ContinuousScale.prototype.refresh = function () {\n if (this.didChange()) {\n this.update();\n }\n };\n ContinuousScale.prototype.isDenseInterval = function (_a) {\n var start = _a.start, stop = _a.stop, interval = _a.interval, count = _a.count;\n var range = this.range;\n var domain = stop - start;\n var min = Math.min(range[0], range[1]);\n var max = Math.max(range[0], range[1]);\n var availableRange = max - min;\n var step = typeof interval === 'number' ? interval : 1;\n count !== null && count !== void 0 ? count : (count = domain / step);\n if (count >= availableRange) {\n Logger.warn(\"the configured tick interval, \" + JSON.stringify(interval) + \", results in more than 1 tick per pixel, ignoring. Supply a larger tick interval or omit this configuration.\");\n return true;\n }\n return false;\n };\n ContinuousScale.defaultTickCount = 5;\n ContinuousScale.defaultMaxTickCount = 6;\n return ContinuousScale;\n}());\nexport { ContinuousScale };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nfunction clamp(x, min, max) {\n return Math.max(min, Math.min(max, x));\n}\n/**\n * Maps a discrete domain to a continuous numeric range.\n */\nvar BandScale = /** @class */ (function () {\n function BandScale() {\n this.type = 'band';\n this.cache = null;\n this.cacheProps = ['_domain', 'range', '_paddingInner', '_paddingOuter', 'round', 'interval'];\n /**\n * Maps datum to its index in the {@link domain} array.\n * Used to check for duplicate datums (not allowed).\n */\n this.index = new Map();\n /**\n * The output range values for datum at each index.\n */\n this.ordinalRange = [];\n /**\n * Contains unique datums only. Since `{}` is used in place of `Map`\n * for IE11 compatibility, the datums are converted `toString` before\n * the uniqueness check.\n */\n this._domain = [];\n this.range = [0, 1];\n this._bandwidth = 1;\n this._rawBandwidth = 1;\n /**\n * The ratio of the range that is reserved for space between bands.\n */\n this._paddingInner = 0;\n /**\n * The ratio of the range that is reserved for space before the first\n * and after the last band.\n */\n this._paddingOuter = 0;\n this.round = false;\n }\n BandScale.prototype.didChange = function () {\n var _this = this;\n var cache = this.cache;\n var didChange = !cache || this.cacheProps.some(function (p) { return _this[p] !== cache[p]; });\n if (didChange) {\n this.cache = {};\n this.cacheProps.forEach(function (p) { return (_this.cache[p] = _this[p]); });\n return true;\n }\n return false;\n };\n BandScale.prototype.refresh = function () {\n if (this.didChange()) {\n this.update();\n }\n };\n Object.defineProperty(BandScale.prototype, \"domain\", {\n get: function () {\n return this._domain;\n },\n set: function (values) {\n var domain = [];\n this.index = new Map();\n var index = this.index;\n // In case one wants to have duplicate domain values, for example, two 'Italy' categories,\n // one should use objects rather than strings for domain values like so:\n // { toString: () => 'Italy' }\n // { toString: () => 'Italy' }\n values.forEach(function (value) {\n if (index.get(value) === undefined) {\n index.set(value, domain.push(value) - 1);\n }\n });\n this._domain = domain;\n },\n enumerable: false,\n configurable: true\n });\n BandScale.prototype.ticks = function () {\n this.refresh();\n var _a = this.interval, interval = _a === void 0 ? 1 : _a;\n var step = Math.abs(Math.round(interval));\n return this._domain.filter(function (_, i) { return i % step === 0; });\n };\n BandScale.prototype.convert = function (d) {\n this.refresh();\n var i = this.index.get(d);\n if (i === undefined) {\n return NaN;\n }\n var r = this.ordinalRange[i];\n if (r === undefined) {\n return NaN;\n }\n return r;\n };\n BandScale.prototype.invert = function (position) {\n this.refresh();\n var index = this.ordinalRange.findIndex(function (p) { return p === position; });\n return this.domain[index];\n };\n Object.defineProperty(BandScale.prototype, \"bandwidth\", {\n get: function () {\n this.refresh();\n return this._bandwidth;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"rawBandwidth\", {\n get: function () {\n this.refresh();\n return this._rawBandwidth;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"padding\", {\n get: function () {\n return this._paddingInner;\n },\n set: function (value) {\n value = clamp(value, 0, 1);\n this._paddingInner = value;\n this._paddingOuter = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"paddingInner\", {\n get: function () {\n return this._paddingInner;\n },\n set: function (value) {\n this._paddingInner = clamp(value, 0, 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"paddingOuter\", {\n get: function () {\n return this._paddingOuter;\n },\n set: function (value) {\n this._paddingOuter = clamp(value, 0, 1);\n },\n enumerable: false,\n configurable: true\n });\n BandScale.prototype.update = function () {\n var count = this._domain.length;\n if (count === 0) {\n return;\n }\n var round = this.round;\n var paddingInner = this._paddingInner;\n var paddingOuter = this._paddingOuter;\n var _a = __read(this.range, 2), r0 = _a[0], r1 = _a[1];\n var width = r1 - r0;\n var rawStep = width / Math.max(1, count + 2 * paddingOuter - paddingInner);\n var step = round ? Math.floor(rawStep) : rawStep;\n var fullBandWidth = step * (count - paddingInner);\n var x0 = r0 + (width - fullBandWidth) / 2;\n var start = round ? Math.round(x0) : x0;\n var bw = step * (1 - paddingInner);\n var bandwidth = round ? Math.round(bw) : bw;\n var rawBandwidth = rawStep * (1 - paddingInner);\n var values = [];\n for (var i = 0; i < count; i++) {\n values.push(start + step * i);\n }\n this._bandwidth = bandwidth;\n this._rawBandwidth = rawBandwidth;\n this.ordinalRange = values;\n };\n return BandScale;\n}());\nexport { BandScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Shape } from './shape';\nimport { BBox } from '../bbox';\nimport { RedrawType, SceneChangeDetection } from '../node';\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n var _this = _super.call(this) || this;\n _this.x1 = 0;\n _this.y1 = 0;\n _this.x2 = 0;\n _this.y2 = 0;\n _this.restoreOwnStyles();\n return _this;\n }\n Line.prototype.computeBBox = function () {\n return new BBox(this.x1, this.y1, this.x2 - this.x1, this.y2 - this.y1);\n };\n Line.prototype.isPointInPath = function (_x, _y) {\n return false;\n };\n Line.prototype.render = function (renderCtx) {\n var _a;\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n if (this.dirty === RedrawType.NONE && !forceRender) {\n if (stats)\n stats.nodesSkipped += this.nodeCount.count;\n return;\n }\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n var x1 = this.x1;\n var y1 = this.y1;\n var x2 = this.x2;\n var y2 = this.y2;\n // Align to the pixel grid if the line is strictly vertical\n // or horizontal (but not both, i.e. a dot).\n if (x1 === x2) {\n var x = Math.round(x1) + (Math.floor(this.strokeWidth) % 2) / 2;\n x1 = x;\n x2 = x;\n }\n else if (y1 === y2) {\n var y = Math.round(y1) + (Math.floor(this.strokeWidth) % 2) / 2;\n y1 = y;\n y2 = y;\n }\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n this.fillStroke(ctx);\n (_a = this.fillShadow) === null || _a === void 0 ? void 0 : _a.markClean();\n _super.prototype.render.call(this, renderCtx);\n };\n Line.className = 'Line';\n Line.defaultStyles = Object.assign({}, Shape.defaultStyles, {\n fill: undefined,\n strokeWidth: 1,\n });\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Line.prototype, \"x1\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Line.prototype, \"y1\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Line.prototype, \"x2\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Line.prototype, \"y2\", void 0);\n return Line;\n}(Shape));\nexport { Line };\n","export function isEqual(a, b, epsilon) {\n if (epsilon === void 0) { epsilon = 1e-10; }\n return Math.abs(a - b) < epsilon;\n}\n/**\n * `Number.toFixed(n)` always formats a number so that it has `n` digits after the decimal point.\n * For example, `Number(0.00003427).toFixed(2)` returns `0.00`.\n * That's not very helpful, because all the meaningful information is lost.\n * In this case we would want the formatted value to have at least two significant digits: `0.000034`,\n * not two fraction digits.\n * @param value\n * @param fractionOrSignificantDigits\n */\nexport function toFixed(value, fractionOrSignificantDigits) {\n if (fractionOrSignificantDigits === void 0) { fractionOrSignificantDigits = 2; }\n var power = Math.floor(Math.log(Math.abs(value)) / Math.LN10);\n if (power >= 0 || !isFinite(power)) {\n return value.toFixed(fractionOrSignificantDigits); // fraction digits\n }\n return value.toFixed(Math.abs(power) - 1 + fractionOrSignificantDigits); // significant digits\n}\n/**\n * Returns the mathematically correct n modulus of m. For context, the JS % operator is remainder\n * NOT modulus, which is why this is needed.\n */\nexport function mod(n, m) {\n if (n >= 0) {\n return Math.floor(n % m);\n }\n return Math.floor((n % m) + m);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Shape } from './shape';\nimport { Path, ScenePathChangeDetection } from './path';\nimport { BBox } from '../bbox';\nimport { normalizeAngle360 } from '../../util/angle';\nimport { isEqual } from '../../util/number';\nvar ArcType;\n(function (ArcType) {\n ArcType[ArcType[\"Open\"] = 0] = \"Open\";\n ArcType[ArcType[\"Chord\"] = 1] = \"Chord\";\n ArcType[ArcType[\"Round\"] = 2] = \"Round\";\n})(ArcType || (ArcType = {}));\n/**\n * Elliptical arc node.\n */\nvar Arc = /** @class */ (function (_super) {\n __extends(Arc, _super);\n function Arc() {\n var _this = _super.call(this) || this;\n _this.centerX = 0;\n _this.centerY = 0;\n _this.radius = 10;\n _this.startAngle = 0;\n _this.endAngle = Math.PI * 2;\n _this.counterClockwise = false;\n /**\n * The type of arc to render:\n * - {@link ArcType.Open} - end points of the arc segment are not connected (default)\n * - {@link ArcType.Chord} - end points of the arc segment are connected by a line segment\n * - {@link ArcType.Round} - each of the end points of the arc segment are connected\n * to the center of the arc\n * Arcs with {@link ArcType.Open} do not support hit testing, even if they have their\n * {@link Shape.fillStyle} set, because they are not closed paths. Hit testing support\n * would require using two paths - one for rendering, another for hit testing - and there\n * doesn't seem to be a compelling reason to do that, when one can just use {@link ArcType.Chord}\n * to create a closed path.\n */\n _this.type = ArcType.Open;\n _this.restoreOwnStyles();\n return _this;\n }\n Object.defineProperty(Arc.prototype, \"fullPie\", {\n get: function () {\n return isEqual(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n },\n enumerable: false,\n configurable: true\n });\n Arc.prototype.updatePath = function () {\n var path = this.path;\n path.clear(); // No need to recreate the Path, can simply clear the existing one.\n path.arc(this.centerX, this.centerY, this.radius, this.startAngle, this.endAngle, this.counterClockwise);\n if (this.type === ArcType.Chord) {\n path.closePath();\n }\n else if (this.type === ArcType.Round && !this.fullPie) {\n path.lineTo(this.centerX, this.centerY);\n path.closePath();\n }\n };\n Arc.prototype.computeBBox = function () {\n // Only works with full arcs (circles) and untransformed ellipses.\n return new BBox(this.centerX - this.radius, this.centerY - this.radius, this.radius * 2, this.radius * 2);\n };\n Arc.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return (this.type !== ArcType.Open &&\n bbox.containsPoint(point.x, point.y) &&\n this.path.isPointInPath(point.x, point.y));\n };\n Arc.className = 'Arc';\n Arc.defaultStyles = Object.assign({}, Shape.defaultStyles, {\n lineWidth: 1,\n fillStyle: null,\n });\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"centerX\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"centerY\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"radius\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"startAngle\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"endAngle\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"counterClockwise\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Arc.prototype, \"type\", void 0);\n return Arc;\n}(Path));\nexport { Arc };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Text } from './scene/shape/text';\nimport { PointerEvents } from './scene/node';\nimport { BOOLEAN, NUMBER, OPT_COLOR_STRING, OPT_FONT_STYLE, OPT_FONT_WEIGHT, OPT_NUMBER, STRING, Validate, } from './util/validation';\nimport { ProxyPropertyOnWrite } from './util/proxy';\nvar Caption = /** @class */ (function () {\n function Caption() {\n this.node = new Text();\n this.enabled = false;\n this.text = '';\n this.fontSize = 10;\n this.fontFamily = 'sans-serif';\n this.spacing = Caption.PADDING;\n this._lineHeight = undefined;\n var node = this.node;\n node.textAlign = 'center';\n node.pointerEvents = PointerEvents.None;\n }\n Object.defineProperty(Caption.prototype, \"lineHeight\", {\n get: function () {\n return this._lineHeight;\n },\n set: function (value) {\n this._lineHeight = value;\n this.node.lineHeight = value;\n },\n enumerable: false,\n configurable: true\n });\n Caption.PADDING = 10;\n __decorate([\n Validate(BOOLEAN)\n ], Caption.prototype, \"enabled\", void 0);\n __decorate([\n Validate(STRING),\n ProxyPropertyOnWrite('node')\n ], Caption.prototype, \"text\", void 0);\n __decorate([\n Validate(OPT_FONT_STYLE),\n ProxyPropertyOnWrite('node')\n ], Caption.prototype, \"fontStyle\", void 0);\n __decorate([\n Validate(OPT_FONT_WEIGHT),\n ProxyPropertyOnWrite('node')\n ], Caption.prototype, \"fontWeight\", void 0);\n __decorate([\n Validate(NUMBER(0)),\n ProxyPropertyOnWrite('node')\n ], Caption.prototype, \"fontSize\", void 0);\n __decorate([\n Validate(STRING),\n ProxyPropertyOnWrite('node')\n ], Caption.prototype, \"fontFamily\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING),\n ProxyPropertyOnWrite('node', 'fill')\n ], Caption.prototype, \"color\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], Caption.prototype, \"spacing\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], Caption.prototype, \"_lineHeight\", void 0);\n return Caption;\n}());\nexport { Caption };\n","export function areArrayItemsStrictlyEqual(arrA, arrB) {\n return (arrA.length === arrB.length &&\n arrA.every(function (a, i) {\n var b = arrB[i];\n if (Array.isArray(a) && Array.isArray(b)) {\n return areArrayItemsStrictlyEqual(a, b);\n }\n return a === b;\n }));\n}\nexport function areArrayNumbersEqual(arrA, arrB) {\n return arrA.length === arrB.length && arrA.every(function (item, i) { return Number(item) === Number(arrB[i]); });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexport default function (start, stop, count, minCount, maxCount) {\n if (count < 2) {\n return range(start, stop, stop - start);\n }\n var step = tickStep(start, stop, count, minCount, maxCount);\n if (isNaN(step)) {\n return new NumericTicks(0);\n }\n start = Math.ceil(start / step) * step;\n stop = Math.floor(stop / step) * step;\n return range(start, stop, step);\n}\nvar tickMultipliers = [1, 2, 5, 10];\nexport function tickStep(a, b, count, minCount, maxCount) {\n if (minCount === void 0) { minCount = 0; }\n if (maxCount === void 0) { maxCount = Infinity; }\n var rawStep = (b - a) / count;\n var power = Math.floor(Math.log10(rawStep));\n var step = Math.pow(10, power);\n var m = tickMultipliers\n .map(function (multiplier) {\n var s = multiplier * step;\n var c = Math.ceil((b - a) / s);\n var isWithinBounds = c >= minCount && c <= maxCount;\n var diffCount = Math.abs(c - count);\n return { multiplier: multiplier, isWithinBounds: isWithinBounds, diffCount: diffCount };\n })\n .sort(function (a, b) {\n if (a.isWithinBounds !== b.isWithinBounds) {\n return a.isWithinBounds ? -1 : 1;\n }\n return a.diffCount - b.diffCount;\n })[0].multiplier;\n if (!m || isNaN(m)) {\n return NaN;\n }\n return m * step;\n}\nexport function singleTickDomain(a, b) {\n var power = Math.floor(Math.log10(b - a));\n var step = Math.pow(10, power);\n return tickMultipliers\n .map(function (multiplier) {\n var s = multiplier * step;\n var start = Math.floor(a / s) * s;\n var end = Math.ceil(b / s) * s;\n var error = 1 - (b - a) / (end - start);\n var domain = [start, end];\n return { error: error, domain: domain };\n })\n .sort(function (a, b) { return a.error - b.error; })[0].domain;\n}\nvar NumericTicks = /** @class */ (function (_super) {\n __extends(NumericTicks, _super);\n function NumericTicks(fractionDigits, elements) {\n var _this = _super.call(this) || this;\n if (elements) {\n for (var i = 0, n = elements.length; i < n; i++) {\n _this[i] = elements[i];\n }\n }\n _this.fractionDigits = fractionDigits;\n return _this;\n }\n return NumericTicks;\n}(Array));\nexport { NumericTicks };\nexport function range(start, stop, step) {\n var countDigits = function (expNo) {\n var _a, _b;\n var parts = expNo.split('e');\n return Math.max(((_b = (_a = parts[0].split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - Number(parts[1]), 0);\n };\n var fractionalDigits = countDigits((step % 1).toExponential());\n var f = Math.pow(10, fractionalDigits);\n var n = Math.ceil((stop - start) / step);\n var values = new NumericTicks(fractionalDigits);\n for (var i = 0; i <= n; i++) {\n var value = start + step * i;\n values.push(Math.round(value * f) / f);\n }\n return values;\n}\n","var CONSTANTS = {\n periods: ['AM', 'PM'],\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n};\nfunction dayOfYear(date, startOfYear) {\n if (startOfYear === void 0) { startOfYear = new Date(date.getFullYear(), 0, 1); }\n var startOffset = date.getTimezoneOffset() - startOfYear.getTimezoneOffset();\n var timeDiff = date.getTime() - startOfYear.getTime() + startOffset * 60000;\n var timeOneDay = 3600000 * 24;\n return Math.floor(timeDiff / timeOneDay);\n}\nfunction weekOfYear(date, startDay) {\n var startOfYear = new Date(date.getFullYear(), 0, 1);\n var startOfYearDay = startOfYear.getDay();\n var firstWeekStartOffset = (startDay - startOfYearDay + 7) % 7;\n var startOffset = new Date(date.getFullYear(), 0, firstWeekStartOffset + 1);\n if (startOffset <= date) {\n return Math.floor(dayOfYear(date, startOffset) / 7) + 1;\n }\n // Days before week 1 are in week 0.\n return 0;\n}\nvar SUNDAY = 0;\nvar MONDAY = 1;\nvar THURSDAY = 4;\nfunction isoWeekOfYear(date, year) {\n if (year === void 0) { year = date.getFullYear(); }\n var firstOfYear = new Date(year, 0, 1);\n var firstOfYearDay = firstOfYear.getDay();\n var firstThursdayOffset = (THURSDAY - firstOfYearDay + 7) % 7;\n var startOffset = new Date(year, 0, firstThursdayOffset - (THURSDAY - MONDAY) + 1);\n if (startOffset <= date) {\n return Math.floor(dayOfYear(date, startOffset) / 7) + 1;\n }\n // Days before week 1 are in week 52/53 of previous year.\n return isoWeekOfYear(date, year - 1);\n}\nfunction timezone(date) {\n var offset = date.getTimezoneOffset();\n var unsignedOffset = Math.abs(offset);\n var sign = offset > 0 ? '-' : '+';\n return \"\" + sign + pad(Math.floor(unsignedOffset / 60), 2, '0') + pad(Math.floor(unsignedOffset % 60), 2, '0');\n}\nvar FORMATTERS = {\n a: function (d) { return CONSTANTS.shortDays[d.getDay()]; },\n A: function (d) { return CONSTANTS.days[d.getDay()]; },\n b: function (d) { return CONSTANTS.shortMonths[d.getMonth()]; },\n B: function (d) { return CONSTANTS.months[d.getMonth()]; },\n c: '%x, %X',\n d: function (d, p) { return pad(d.getDate(), 2, p !== null && p !== void 0 ? p : '0'); },\n e: '%_d',\n f: function (d, p) { return pad(d.getMilliseconds() * 1000, 6, p !== null && p !== void 0 ? p : '0'); },\n H: function (d, p) { return pad(d.getHours(), 2, p !== null && p !== void 0 ? p : '0'); },\n I: function (d, p) {\n var hours = d.getHours() % 12;\n return hours === 0 ? '12' : pad(hours, 2, p !== null && p !== void 0 ? p : '0');\n },\n j: function (d, p) { return pad(dayOfYear(d) + 1, 3, p !== null && p !== void 0 ? p : '0'); },\n m: function (d, p) { return pad(d.getMonth() + 1, 2, p !== null && p !== void 0 ? p : '0'); },\n M: function (d, p) { return pad(d.getMinutes(), 2, p !== null && p !== void 0 ? p : '0'); },\n L: function (d, p) { return pad(d.getMilliseconds(), 3, p !== null && p !== void 0 ? p : '0'); },\n p: function (d) { return (d.getHours() < 12 ? 'AM' : 'PM'); },\n Q: function (d) { return String(d.getTime()); },\n s: function (d) { return String(Math.floor(d.getTime() / 1000)); },\n S: function (d, p) { return pad(d.getSeconds(), 2, p !== null && p !== void 0 ? p : '0'); },\n u: function (d) {\n var day = d.getDay();\n if (day < 1)\n day += 7;\n return String(day % 7);\n },\n U: function (d, p) { return pad(weekOfYear(d, SUNDAY), 2, p !== null && p !== void 0 ? p : '0'); },\n V: function (d, p) { return pad(isoWeekOfYear(d), 2, p !== null && p !== void 0 ? p : '0'); },\n w: function (d, p) { return pad(d.getDay(), 2, p !== null && p !== void 0 ? p : '0'); },\n W: function (d, p) { return pad(weekOfYear(d, MONDAY), 2, p !== null && p !== void 0 ? p : '0'); },\n x: '%-m/%-d/%Y',\n X: '%-I:%M:%S %p',\n y: function (d, p) { return pad(d.getFullYear() % 100, 2, p !== null && p !== void 0 ? p : '0'); },\n Y: function (d, p) { return pad(d.getFullYear(), 4, p !== null && p !== void 0 ? p : '0'); },\n Z: function (d) { return timezone(d); },\n '%': function () { return '%'; },\n};\nvar PADS = {\n _: ' ',\n '0': '0',\n '-': '',\n};\nfunction pad(value, size, padChar) {\n var output = String(Math.floor(value));\n if (output.length >= size) {\n return output;\n }\n return \"\" + padChar.repeat(size - output.length) + output;\n}\nexport function buildFormatter(formatString) {\n var formatParts = [];\n while (formatString.length > 0) {\n var nextEscapeIdx = formatString.indexOf('%');\n if (nextEscapeIdx !== 0) {\n var literalPart = nextEscapeIdx > 0 ? formatString.substring(0, nextEscapeIdx) : formatString;\n formatParts.push(literalPart);\n }\n if (nextEscapeIdx < 0)\n break;\n var maybePadSpecifier = formatString[nextEscapeIdx + 1];\n var maybePad = PADS[maybePadSpecifier];\n if (maybePad != null) {\n nextEscapeIdx++;\n }\n var maybeFormatterSpecifier = formatString[nextEscapeIdx + 1];\n var maybeFormatter = FORMATTERS[maybeFormatterSpecifier];\n if (typeof maybeFormatter === 'function') {\n formatParts.push([maybeFormatter, maybePad]);\n }\n else if (typeof maybeFormatter === 'string') {\n var formatter = buildFormatter(maybeFormatter);\n formatParts.push([formatter, maybePad]);\n }\n else {\n formatParts.push(\"\" + (maybePad !== null && maybePad !== void 0 ? maybePad : '') + maybeFormatterSpecifier);\n }\n formatString = formatString.substring(nextEscapeIdx + 2);\n }\n return function (dateTime) {\n var dateTimeAsDate = typeof dateTime === 'number' ? new Date(dateTime) : dateTime;\n return formatParts.map(function (c) { return (typeof c === 'string' ? c : c[0](dateTimeAsDate, c[1])); }).join('');\n };\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar _a;\nimport { ContinuousScale } from './continuousScale';\nimport timeMillisecond from '../util/time/millisecond';\nimport timeSecond from '../util/time/second';\nimport timeMinute from '../util/time/minute';\nimport timeHour from '../util/time/hour';\nimport timeDay from '../util/time/day';\nimport timeWeek from '../util/time/week';\nimport timeMonth from '../util/time/month';\nimport timeYear from '../util/time/year';\nimport { durationSecond, durationMinute, durationHour, durationDay, durationWeek, durationMonth, durationYear, } from '../util/time/duration';\nimport { TimeInterval } from '../util/time/interval';\nimport { tickStep } from '../util/ticks';\nimport { buildFormatter } from '../util/timeFormat';\nvar DefaultTimeFormats;\n(function (DefaultTimeFormats) {\n DefaultTimeFormats[DefaultTimeFormats[\"MILLISECOND\"] = 0] = \"MILLISECOND\";\n DefaultTimeFormats[DefaultTimeFormats[\"SECOND\"] = 1] = \"SECOND\";\n DefaultTimeFormats[DefaultTimeFormats[\"MINUTE\"] = 2] = \"MINUTE\";\n DefaultTimeFormats[DefaultTimeFormats[\"HOUR\"] = 3] = \"HOUR\";\n DefaultTimeFormats[DefaultTimeFormats[\"WEEK_DAY\"] = 4] = \"WEEK_DAY\";\n DefaultTimeFormats[DefaultTimeFormats[\"SHORT_MONTH\"] = 5] = \"SHORT_MONTH\";\n DefaultTimeFormats[DefaultTimeFormats[\"MONTH\"] = 6] = \"MONTH\";\n DefaultTimeFormats[DefaultTimeFormats[\"SHORT_YEAR\"] = 7] = \"SHORT_YEAR\";\n DefaultTimeFormats[DefaultTimeFormats[\"YEAR\"] = 8] = \"YEAR\";\n})(DefaultTimeFormats || (DefaultTimeFormats = {}));\nvar formatStrings = (_a = {},\n _a[DefaultTimeFormats.MILLISECOND] = '.%L',\n _a[DefaultTimeFormats.SECOND] = ':%S',\n _a[DefaultTimeFormats.MINUTE] = '%I:%M',\n _a[DefaultTimeFormats.HOUR] = '%I %p',\n _a[DefaultTimeFormats.WEEK_DAY] = '%a',\n _a[DefaultTimeFormats.SHORT_MONTH] = '%b %d',\n _a[DefaultTimeFormats.MONTH] = '%B',\n _a[DefaultTimeFormats.SHORT_YEAR] = '%y',\n _a[DefaultTimeFormats.YEAR] = '%Y',\n _a);\nfunction toNumber(x) {\n return x instanceof Date ? x.getTime() : x;\n}\nvar TimeScale = /** @class */ (function (_super) {\n __extends(TimeScale, _super);\n function TimeScale() {\n var _this = _super.call(this, [new Date(2022, 11, 7), new Date(2022, 11, 8)], [0, 1]) || this;\n _this.type = 'time';\n _this.cacheProps = [\n 'domain',\n 'range',\n 'nice',\n 'tickCount',\n 'interval',\n 'minTickCount',\n 'maxTickCount',\n ];\n _this.year = timeYear;\n _this.month = timeMonth;\n _this.week = timeWeek;\n _this.day = timeDay;\n _this.hour = timeHour;\n _this.minute = timeMinute;\n _this.second = timeSecond;\n _this.millisecond = timeMillisecond;\n /**\n * Array of default tick intervals in the following format:\n *\n * [\n * interval (unit of time),\n * number of units (step),\n * the length of that number of units in milliseconds\n * ]\n */\n _this.tickIntervals = [\n [_this.second, 1, durationSecond],\n [_this.second, 5, 5 * durationSecond],\n [_this.second, 15, 15 * durationSecond],\n [_this.second, 30, 30 * durationSecond],\n [_this.minute, 1, durationMinute],\n [_this.minute, 5, 5 * durationMinute],\n [_this.minute, 15, 15 * durationMinute],\n [_this.minute, 30, 30 * durationMinute],\n [_this.hour, 1, durationHour],\n [_this.hour, 3, 3 * durationHour],\n [_this.hour, 6, 6 * durationHour],\n [_this.hour, 12, 12 * durationHour],\n [_this.day, 1, durationDay],\n [_this.day, 2, 2 * durationDay],\n [_this.week, 1, durationWeek],\n [_this.week, 2, 2 * durationWeek],\n [_this.week, 3, 3 * durationWeek],\n [_this.month, 1, durationMonth],\n [_this.month, 2, 2 * durationMonth],\n [_this.month, 3, 3 * durationMonth],\n [_this.month, 4, 4 * durationMonth],\n [_this.month, 6, 6 * durationMonth],\n [_this.year, 1, durationYear],\n ];\n return _this;\n }\n TimeScale.prototype.toDomain = function (d) {\n return new Date(d);\n };\n TimeScale.prototype.calculateDefaultTickFormat = function (ticks) {\n var e_1, _a;\n if (ticks === void 0) { ticks = []; }\n var defaultTimeFormat = DefaultTimeFormats.YEAR;\n var updateFormat = function (format) {\n if (format < defaultTimeFormat) {\n defaultTimeFormat = format;\n }\n };\n try {\n for (var ticks_1 = __values(ticks), ticks_1_1 = ticks_1.next(); !ticks_1_1.done; ticks_1_1 = ticks_1.next()) {\n var value = ticks_1_1.value;\n var format = this.getLowestGranularityFormat(value);\n updateFormat(format);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ticks_1_1 && !ticks_1_1.done && (_a = ticks_1.return)) _a.call(ticks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n var firstTick = toNumber(ticks[0]);\n var lastTick = toNumber(ticks[ticks.length - 1]);\n var startYear = new Date(firstTick).getFullYear();\n var stopYear = new Date(lastTick).getFullYear();\n var yearChange = stopYear - startYear > 0;\n return this.buildFormatString(defaultTimeFormat, yearChange);\n };\n TimeScale.prototype.buildFormatString = function (defaultTimeFormat, yearChange) {\n var formatStringArray = [formatStrings[defaultTimeFormat]];\n var timeEndIndex = 0;\n var domain = this.getDomain();\n var start = Math.min.apply(Math, __spread(domain.map(toNumber)));\n var stop = Math.max.apply(Math, __spread(domain.map(toNumber)));\n var extent = stop - start;\n switch (defaultTimeFormat) {\n case DefaultTimeFormats.SECOND:\n if (extent / durationMinute > 1) {\n formatStringArray.push(formatStrings[DefaultTimeFormats.MINUTE]);\n }\n // fall through deliberately\n case DefaultTimeFormats.MINUTE:\n if (extent / durationHour > 1) {\n formatStringArray.push(formatStrings[DefaultTimeFormats.HOUR]);\n }\n // fall through deliberately\n case DefaultTimeFormats.HOUR:\n timeEndIndex = formatStringArray.length;\n if (extent / durationDay > 1) {\n formatStringArray.push(formatStrings[DefaultTimeFormats.WEEK_DAY]);\n }\n // fall through deliberately\n case DefaultTimeFormats.WEEK_DAY:\n if (extent / durationWeek > 1 || yearChange) {\n // if it's more than a week or there is a year change, don't show week day\n var weekDayIndex = formatStringArray.indexOf(formatStrings[DefaultTimeFormats.WEEK_DAY]);\n if (weekDayIndex > -1) {\n formatStringArray.splice(weekDayIndex, 1, formatStrings[DefaultTimeFormats.SHORT_MONTH]);\n }\n }\n // fall through deliberately\n case DefaultTimeFormats.SHORT_MONTH:\n case DefaultTimeFormats.MONTH:\n if (extent / durationYear > 1 || yearChange) {\n formatStringArray.push(formatStrings[DefaultTimeFormats.YEAR]);\n }\n // fall through deliberately\n default:\n break;\n }\n if (timeEndIndex < formatStringArray.length) {\n // Insert a gap between all date components.\n formatStringArray = __spread(formatStringArray.slice(0, timeEndIndex), [\n formatStringArray.slice(timeEndIndex).join(' '),\n ]);\n }\n if (timeEndIndex > 0) {\n // Reverse order of time components, since they should be displayed in descending\n // granularity.\n formatStringArray = __spread(formatStringArray.slice(0, timeEndIndex).reverse(), formatStringArray.slice(timeEndIndex));\n if (timeEndIndex < formatStringArray.length) {\n // Insert a gap between time and date components.\n formatStringArray.splice(timeEndIndex, 0, ' ');\n }\n }\n return formatStringArray.join('');\n };\n TimeScale.prototype.getLowestGranularityFormat = function (value) {\n if (this.second.floor(value) < value) {\n return DefaultTimeFormats.MILLISECOND;\n }\n else if (this.minute.floor(value) < value) {\n return DefaultTimeFormats.SECOND;\n }\n else if (this.hour.floor(value) < value) {\n return DefaultTimeFormats.MINUTE;\n }\n else if (this.day.floor(value) < value) {\n return DefaultTimeFormats.HOUR;\n }\n else if (this.month.floor(value) < value) {\n if (this.week.floor(value) < value) {\n return DefaultTimeFormats.WEEK_DAY;\n }\n return DefaultTimeFormats.SHORT_MONTH;\n }\n else if (this.year.floor(value) < value) {\n return DefaultTimeFormats.MONTH;\n }\n return DefaultTimeFormats.YEAR;\n };\n TimeScale.prototype.defaultTickFormat = function (ticks) {\n var formatString = this.calculateDefaultTickFormat(ticks);\n return function (date) { return buildFormatter(formatString)(date); };\n };\n /**\n * @param options Tick interval options.\n * @param options.start The start time (timestamp).\n * @param options.stop The end time (timestamp).\n * @param options.count Number of intervals between ticks.\n */\n TimeScale.prototype.getTickInterval = function (_a) {\n var _b;\n var start = _a.start, stop = _a.stop, count = _a.count, minCount = _a.minCount, maxCount = _a.maxCount;\n var tickIntervals = this.tickIntervals;\n var countableTimeInterval;\n var step;\n var tickCount = count !== null && count !== void 0 ? count : ContinuousScale.defaultTickCount;\n var target = Math.abs(stop - start) / Math.max(tickCount, 1);\n var i = 0;\n while (i < tickIntervals.length && target > tickIntervals[i][2]) {\n i++;\n }\n if (i === 0) {\n step = Math.max(tickStep(start, stop, tickCount, minCount, maxCount), 1);\n countableTimeInterval = this.millisecond;\n }\n else if (i === tickIntervals.length) {\n var y0 = start / durationYear;\n var y1 = stop / durationYear;\n step = tickStep(y0, y1, tickCount, minCount, maxCount);\n countableTimeInterval = this.year;\n }\n else {\n var diff0 = target - tickIntervals[i - 1][2];\n var diff1 = tickIntervals[i][2] - target;\n var index = diff0 < diff1 ? i - 1 : i;\n _b = __read(tickIntervals[index], 2), countableTimeInterval = _b[0], step = _b[1];\n }\n return countableTimeInterval.every(step);\n };\n TimeScale.prototype.invert = function (y) {\n return new Date(_super.prototype.invert.call(this, y));\n };\n /**\n * Returns uniformly-spaced dates that represent the scale's domain.\n */\n TimeScale.prototype.ticks = function () {\n if (!this.domain || this.domain.length < 2) {\n return [];\n }\n this.refresh();\n var _a = __read(this.getDomain().map(toNumber), 2), t0 = _a[0], t1 = _a[1];\n if (this.interval !== undefined) {\n return this.getTicksForInterval({ start: t0, stop: t1 });\n }\n if (this.nice) {\n var tickCount = this.tickCount;\n if (tickCount === 2) {\n return this.niceDomain;\n }\n if (tickCount === 1) {\n return this.niceDomain.slice(0, 1);\n }\n }\n return this.getDefaultTicks({ start: t0, stop: t1 });\n };\n TimeScale.prototype.getDefaultTicks = function (_a) {\n var start = _a.start, stop = _a.stop;\n var t = this.getTickInterval({\n start: start,\n stop: stop,\n count: this.tickCount,\n minCount: this.minTickCount,\n maxCount: this.maxTickCount,\n });\n return t ? t.range(new Date(start), new Date(stop)) : []; // inclusive stop\n };\n TimeScale.prototype.getTicksForInterval = function (_a) {\n var start = _a.start, stop = _a.stop;\n var _b = this, interval = _b.interval, tickIntervals = _b.tickIntervals;\n if (!interval) {\n return [];\n }\n if (interval instanceof TimeInterval) {\n var ticks_2 = interval.range(new Date(start), new Date(stop));\n if (this.isDenseInterval({ start: start, stop: stop, interval: interval, count: ticks_2.length })) {\n return this.getDefaultTicks({ start: start, stop: stop });\n }\n return ticks_2;\n }\n var absInterval = Math.abs(interval);\n if (this.isDenseInterval({ start: start, stop: stop, interval: absInterval })) {\n return this.getDefaultTicks({ start: start, stop: stop });\n }\n var reversedInterval = __spread(tickIntervals);\n reversedInterval.reverse();\n var timeInterval = reversedInterval.find(function (tickInterval) { return absInterval % tickInterval[2] === 0; });\n if (timeInterval) {\n var i = timeInterval[0].every(absInterval / (timeInterval[2] / timeInterval[1]));\n return i.range(new Date(start), new Date(stop));\n }\n var date = new Date(start);\n var stopDate = new Date(stop);\n var ticks = [];\n while (date <= stopDate) {\n ticks.push(date);\n date = new Date(date);\n date.setMilliseconds(date.getMilliseconds() + absInterval);\n }\n return ticks;\n };\n /**\n * Returns a time format function suitable for displaying tick values.\n * @param specifier If the specifier string is provided, this method is equivalent to\n * the {@link TimeLocaleObject.format} method.\n * If no specifier is provided, this method returns the default time format function.\n */\n TimeScale.prototype.tickFormat = function (_a) {\n var ticks = _a.ticks, specifier = _a.specifier;\n return specifier == undefined ? this.defaultTickFormat(ticks) : buildFormatter(specifier);\n };\n TimeScale.prototype.update = function () {\n if (!this.domain || this.domain.length < 2) {\n return;\n }\n if (this.nice) {\n this.updateNiceDomain();\n }\n };\n /**\n * Extends the domain so that it starts and ends on nice round values.\n * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.\n */\n TimeScale.prototype.updateNiceDomain = function () {\n var maxAttempts = 4;\n var _a = __read(this.domain, 2), d0 = _a[0], d1 = _a[1];\n for (var i = 0; i < maxAttempts; i++) {\n this.updateNiceDomainIteration(d0, d1);\n var _b = __read(this.niceDomain, 2), n0 = _b[0], n1 = _b[1];\n if (toNumber(d0) === toNumber(n0) && toNumber(d1) === toNumber(n1)) {\n break;\n }\n d0 = n0;\n d1 = n1;\n }\n };\n TimeScale.prototype.updateNiceDomainIteration = function (d0, d1) {\n var start = toNumber(d0);\n var stop = toNumber(d1);\n var interval = this.interval;\n var i;\n if (interval instanceof TimeInterval) {\n i = interval;\n }\n else {\n var tickCount = typeof interval === 'number' ? (stop - start) / Math.max(interval, 1) : this.tickCount;\n i = this.getTickInterval({\n start: start,\n stop: stop,\n count: tickCount,\n minCount: this.minTickCount,\n maxCount: this.maxTickCount,\n });\n }\n if (i) {\n var intervalRange = i.range(d0, d1, true);\n var n0 = intervalRange[0];\n var n1 = intervalRange[intervalRange.length - 1];\n this.niceDomain = [n0, n1];\n }\n };\n return TimeScale;\n}(ContinuousScale));\nexport { TimeScale };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar _a;\nvar group = function (content) { return \"(\" + content + \")\"; };\nvar optionalGroup = function (content) { return group(content) + \"?\"; };\nvar nonCapturingGroup = function (content) { return optionalGroup(\"?:\" + content); };\nvar formatRegEx = (function () {\n var fill = '.';\n var align = '[<>=^]';\n var sign = '[+\\\\-( ]';\n var symbol = '[$€£¥₣₹#]';\n var zero = '0';\n var width = '\\\\d+';\n var comma = ',';\n var precision = '\\\\d+';\n var tilde = '~';\n var type = '[%a-z]';\n return new RegExp([\n '^',\n nonCapturingGroup(\"\" + optionalGroup(fill) + group(align)),\n optionalGroup(sign),\n optionalGroup(symbol),\n optionalGroup(zero),\n optionalGroup(width),\n optionalGroup(comma),\n nonCapturingGroup(\"\\\\.\" + group(precision)),\n optionalGroup(tilde),\n optionalGroup(type),\n '$',\n ].join(''), 'i');\n})();\nvar surroundedRegEx = (function () {\n var prefix = '.*?';\n var content = '.+?';\n var suffix = '.*?';\n return new RegExp(['^', group(prefix), \"#\\\\{\" + group(content) + \"\\\\}\", group(suffix), '$'].join(''));\n})();\nfunction parseFormatter(formatter) {\n var _a;\n var prefix;\n var suffix;\n var surrounded = formatter.match(surroundedRegEx);\n if (surrounded) {\n _a = __read(surrounded, 4), prefix = _a[1], formatter = _a[2], suffix = _a[3];\n }\n var match = formatter.match(formatRegEx);\n if (!match) {\n throw new Error(\"The number formatter is invalid: \" + formatter);\n }\n var _b = __read(match, 11), fill = _b[1], align = _b[2], sign = _b[3], symbol = _b[4], zero = _b[5], width = _b[6], comma = _b[7], precision = _b[8], trim = _b[9], type = _b[10];\n return {\n fill: fill,\n align: align,\n sign: sign,\n symbol: symbol,\n zero: zero,\n width: parseInt(width),\n comma: comma,\n precision: parseInt(precision),\n trim: Boolean(trim),\n type: type,\n prefix: prefix,\n suffix: suffix,\n };\n}\nexport function format(formatter) {\n var options = typeof formatter === 'string' ? parseFormatter(formatter) : formatter;\n var fill = options.fill, align = options.align, _a = options.sign, sign = _a === void 0 ? '-' : _a, symbol = options.symbol, zero = options.zero, width = options.width, comma = options.comma, type = options.type, _b = options.prefix, prefix = _b === void 0 ? '' : _b, _c = options.suffix, suffix = _c === void 0 ? '' : _c;\n var precision = options.precision, trim = options.trim;\n var formatBody;\n if (!type) {\n formatBody = decimalTypes['g'];\n trim = true;\n }\n else if (type in decimalTypes && type in integerTypes) {\n formatBody = isNaN(precision) ? integerTypes[type] : decimalTypes[type];\n }\n else if (type in decimalTypes) {\n formatBody = decimalTypes[type];\n }\n else if (type in integerTypes) {\n formatBody = integerTypes[type];\n }\n else {\n throw new Error(\"The number formatter type is invalid: \" + type);\n }\n if (isNaN(precision)) {\n precision = type ? 6 : 12;\n }\n return function (n) {\n var result = formatBody(n, precision);\n if (trim) {\n result = removeTrailingZeros(result);\n }\n if (comma) {\n result = insertSeparator(result, comma);\n }\n result = addSign(n, result, sign);\n if (symbol && symbol !== '#') {\n result = \"\" + symbol + result;\n }\n if (symbol === '#' && type === 'x') {\n result = \"0x\" + result;\n }\n if (type === 's') {\n result = \"\" + result + getSIPrefix(n);\n }\n if (type === '%' || type === 'p') {\n result = result + \"%\";\n }\n if (!isNaN(width)) {\n result = addPadding(result, width, fill || zero, align);\n }\n result = \"\" + prefix + result + suffix;\n return result;\n };\n}\nvar absFloor = function (n) { return Math.floor(Math.abs(n)); };\nvar integerTypes = {\n b: function (n) { return absFloor(n).toString(2); },\n c: function (n) { return String.fromCharCode(n); },\n d: function (n) { return Math.round(Math.abs(n)).toFixed(0); },\n o: function (n) { return absFloor(n).toString(8); },\n x: function (n) { return absFloor(n).toString(16); },\n X: function (n) { return integerTypes.x(n).toUpperCase(); },\n n: function (n) { return integerTypes.d(n); },\n '%': function (n) { return \"\" + absFloor(n * 100).toFixed(0); },\n};\nvar decimalTypes = {\n e: function (n, f) { return Math.abs(n).toExponential(f); },\n E: function (n, f) { return decimalTypes.e(n, f).toUpperCase(); },\n f: function (n, f) { return Math.abs(n).toFixed(f); },\n F: function (n, f) { return decimalTypes.f(n, f).toUpperCase(); },\n g: function (n, f) {\n if (n === 0) {\n return '0';\n }\n var a = Math.abs(n);\n var p = Math.floor(Math.log10(a));\n if (p >= -4 && p < f) {\n return a.toFixed(f - 1 - p);\n }\n return a.toExponential(f - 1);\n },\n G: function (n, f) { return decimalTypes.g(n, f).toUpperCase(); },\n n: function (n, f) { return decimalTypes.g(n, f); },\n p: function (n, f) { return decimalTypes.r(n * 100, f); },\n r: function (n, f) {\n if (n === 0) {\n return '0';\n }\n var a = Math.abs(n);\n var p = Math.floor(Math.log10(a));\n var q = p - (f - 1);\n if (q <= 0) {\n return a.toFixed(-q);\n }\n var x = Math.pow(10, q);\n return (Math.round(a / x) * x).toFixed();\n },\n s: function (n, f) {\n var p = getSIPrefixPower(n);\n return decimalTypes.r(n / Math.pow(10, p), f);\n },\n '%': function (n, f) { return decimalTypes.f(n * 100, f); },\n};\nfunction removeTrailingZeros(numString) {\n return numString.replace(/\\.0+$/, '').replace(/(\\.[1-9])0+$/, '$1');\n}\nfunction insertSeparator(numString, separator) {\n var dotIndex = numString.indexOf('.');\n if (dotIndex < 0) {\n dotIndex = numString.length;\n }\n var integerChars = numString.substring(0, dotIndex).split('');\n var fractionalPart = numString.substring(dotIndex);\n for (var i = integerChars.length - 3; i > 0; i -= 3) {\n integerChars.splice(i, 0, separator);\n }\n return \"\" + integerChars.join('') + fractionalPart;\n}\nfunction getSIPrefix(n) {\n return siPrefixes[getSIPrefixPower(n)];\n}\nfunction getSIPrefixPower(n) {\n var power = Math.log10(Math.abs(n));\n var p = Math.floor(power / 3) * 3;\n return Math.max(minSIPrefix, Math.min(maxSIPrefix, p));\n}\nvar minSIPrefix = -24;\nvar maxSIPrefix = 24;\nvar siPrefixes = (_a = {},\n _a[minSIPrefix] = 'y',\n _a[-21] = 'z',\n _a[-18] = 'a',\n _a[-15] = 'f',\n _a[-12] = 'p',\n _a[-9] = 'n',\n _a[-6] = 'µ',\n _a[-3] = 'm',\n _a[0] = '',\n _a[3] = 'k',\n _a[6] = 'M',\n _a[9] = 'G',\n _a[12] = 'T',\n _a[15] = 'P',\n _a[18] = 'E',\n _a[21] = 'Z',\n _a[maxSIPrefix] = 'Y',\n _a);\nvar minusSign = '\\u2212';\nfunction addSign(num, numString, signType) {\n if (signType === void 0) { signType = ''; }\n if (signType === '(') {\n return num >= 0 ? numString : \"(\" + numString + \")\";\n }\n var plusSign = signType === '+' ? '+' : '';\n return \"\" + (num >= 0 ? plusSign : minusSign) + numString;\n}\nfunction addPadding(numString, width, fill, align) {\n if (fill === void 0) { fill = ' '; }\n if (align === void 0) { align = '>'; }\n var result = numString;\n if (align === '>' || !align) {\n result = result.padStart(width, fill);\n }\n else if (align === '<') {\n result = result.padEnd(width, fill);\n }\n else if (align === '^') {\n var padWidth = Math.max(0, width - result.length);\n var padLeft = Math.ceil(padWidth / 2);\n var padRight = Math.floor(padWidth / 2);\n result = result.padStart(padLeft + result.length, fill);\n result = result.padEnd(padRight + result.length, fill);\n }\n return result;\n}\nexport function tickFormat(ticks, formatter) {\n var options = parseFormatter(formatter || ',f');\n if (isNaN(options.precision)) {\n if (options.type === 'f' || options.type === '%') {\n options.precision = Math.max.apply(Math, __spread(ticks.map(function (x) {\n if (typeof x !== 'number' || x === 0) {\n return 0;\n }\n var l = Math.floor(Math.log10(Math.abs(x)));\n var digits = options.type ? 6 : 12;\n var exp = x.toExponential(digits - 1).replace(/\\.?0+e/, 'e');\n var dotIndex = exp.indexOf('.');\n if (dotIndex < 0) {\n return l >= 0 ? 0 : -l;\n }\n var s = exp.indexOf('e') - dotIndex;\n return Math.max(0, s - l - 1);\n })));\n }\n else if (!options.type || options.type in decimalTypes) {\n options.precision = Math.max.apply(Math, __spread(ticks.map(function (x) {\n if (typeof x !== 'number') {\n return 0;\n }\n var exp = x.toExponential((options.type ? 6 : 12) - 1).replace(/\\.?0+e/, 'e');\n return exp.substring(0, exp.indexOf('e')).replace('.', '').length;\n })));\n }\n }\n var f = format(options);\n return function (n) { return f(Number(n)); };\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { ContinuousScale } from './continuousScale';\nimport generateTicks, { range } from '../util/ticks';\nimport { format } from '../util/numberFormat';\nimport { NUMBER, Validate } from '../util/validation';\nvar identity = function (x) { return x; };\nvar LogScale = /** @class */ (function (_super) {\n __extends(LogScale, _super);\n function LogScale() {\n var _this = _super.call(this, [1, 10], [0, 1]) || this;\n _this.type = 'log';\n _this.base = 10;\n _this.cacheProps = ['domain', 'range', 'nice', 'tickCount', 'base'];\n _this.baseLog = identity;\n _this.basePow = identity;\n _this.log = function (x) {\n return _this.domain[0] >= 0 ? _this.baseLog(x) : -_this.baseLog(-x);\n };\n _this.pow = function (x) {\n return _this.domain[0] >= 0 ? _this.basePow(x) : -_this.basePow(-x);\n };\n return _this;\n }\n LogScale.prototype.toDomain = function (d) {\n return d;\n };\n LogScale.prototype.transform = function (x) {\n return this.domain[0] >= 0 ? Math.log(x) : -Math.log(-x);\n };\n LogScale.prototype.transformInvert = function (x) {\n return this.domain[0] >= 0 ? Math.exp(x) : -Math.exp(-x);\n };\n LogScale.prototype.update = function () {\n if (!this.domain || this.domain.length < 2) {\n return;\n }\n this.updateLogFn();\n this.updatePowFn();\n if (this.nice) {\n this.updateNiceDomain();\n }\n };\n LogScale.prototype.updateLogFn = function () {\n var base = this.base;\n var log;\n if (base === 10) {\n log = Math.log10;\n }\n else if (base === Math.E) {\n log = Math.log;\n }\n else if (base === 2) {\n log = Math.log2;\n }\n else {\n var logBase_1 = Math.log(base);\n log = function (x) { return Math.log(x) / logBase_1; };\n }\n this.baseLog = log;\n };\n LogScale.prototype.updatePowFn = function () {\n var base = this.base;\n var pow;\n if (base === 10) {\n pow = LogScale.pow10;\n }\n else if (base === Math.E) {\n pow = Math.exp;\n }\n else {\n pow = function (x) { return Math.pow(base, x); };\n }\n this.basePow = pow;\n };\n LogScale.prototype.updateNiceDomain = function () {\n var _a = __read(this.domain, 2), d0 = _a[0], d1 = _a[1];\n var n0 = this.pow(Math.floor(this.log(d0)));\n var n1 = this.pow(Math.ceil(this.log(d1)));\n this.niceDomain = [n0, n1];\n };\n LogScale.pow10 = function (x) {\n return x >= 0 ? Math.pow(10, x) : 1 / Math.pow(10, -x);\n };\n LogScale.prototype.ticks = function () {\n var _this = this;\n var _a;\n var count = (_a = this.tickCount) !== null && _a !== void 0 ? _a : 10;\n if (!this.domain || this.domain.length < 2 || count < 1) {\n return [];\n }\n this.refresh();\n var base = this.base;\n var _b = __read(this.getDomain(), 2), d0 = _b[0], d1 = _b[1];\n var p0 = this.log(d0);\n var p1 = this.log(d1);\n if (this.interval) {\n var step = Math.abs(this.interval);\n var absDiff = Math.abs(p1 - p0);\n var ticks_1 = range(p0, p1, Math.min(absDiff, step))\n .map(function (x) { return _this.pow(x); })\n .filter(function (t) { return t >= d0 && t <= d1; });\n if (!this.isDenseInterval({ start: d0, stop: d1, interval: step, count: ticks_1.length })) {\n return ticks_1;\n }\n }\n var isBaseInteger = base % 1 === 0;\n var isDiffLarge = p1 - p0 >= count;\n if (!isBaseInteger || isDiffLarge) {\n // Returns [10^1, 10^2, 10^3, 10^4, ...]\n return generateTicks(p0, p1, Math.min(p1 - p0, count)).map(function (x) { return _this.pow(x); });\n }\n var ticks = [];\n var isPositive = d0 > 0;\n p0 = Math.floor(p0) - 1;\n p1 = Math.round(p1) + 1;\n var min = Math.min.apply(Math, __spread(this.range));\n var max = Math.max.apply(Math, __spread(this.range));\n var availableSpacing = (max - min) / count;\n var lastTickPosition = Infinity;\n for (var p = p0; p <= p1; p++) {\n var nextMagnitudeTickPosition = this.convert(this.pow(p + 1));\n for (var k = 1; k < base; k++) {\n var q = isPositive ? k : base - k + 1;\n var t = this.pow(p) * q;\n var tickPosition = this.convert(t);\n var prevSpacing = Math.abs(lastTickPosition - tickPosition);\n var nextSpacing = Math.abs(tickPosition - nextMagnitudeTickPosition);\n var fits = prevSpacing >= availableSpacing && nextSpacing >= availableSpacing;\n if (t >= d0 && t <= d1 && (k === 1 || fits)) {\n ticks.push(t);\n lastTickPosition = tickPosition;\n }\n }\n }\n return ticks;\n };\n LogScale.prototype.tickFormat = function (_a) {\n var count = _a.count, ticks = _a.ticks, specifier = _a.specifier;\n var base = this.base;\n if (specifier == null) {\n specifier = (base === 10 ? '.0e' : ',');\n }\n if (typeof specifier !== 'function') {\n specifier = format(specifier);\n }\n if (count === Infinity) {\n return specifier;\n }\n if (count == null) {\n count = 10;\n }\n ticks = ticks !== null && ticks !== void 0 ? ticks : this.ticks();\n return function (d) {\n return specifier(d);\n };\n };\n __decorate([\n Validate(NUMBER(0))\n ], LogScale.prototype, \"base\", void 0);\n return LogScale;\n}(ContinuousScale));\nexport { LogScale };\n","import { addTransformToInstanceProperty } from './decorator';\nexport function Default(defaultValue, replaces) {\n if (replaces === void 0) { replaces = [undefined]; }\n return addTransformToInstanceProperty(function (_, __, v) {\n if (replaces.includes(v)) {\n return defaultValue;\n }\n return v;\n });\n}\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nexport function extent(values) {\n var length = values.length;\n if (length === 0) {\n return undefined;\n }\n var min = Infinity;\n var max = -Infinity;\n for (var i = 0; i < length; i++) {\n var v = values[i];\n if (v instanceof Date) {\n v = v.getTime();\n }\n if (typeof v !== 'number') {\n continue;\n }\n if (v < min) {\n min = v;\n }\n if (v > max) {\n max = v;\n }\n }\n var extent = [min, max];\n if (extent.some(function (v) { return !isFinite(v); })) {\n return undefined;\n }\n return extent;\n}\n/**\n * finds the min and max using a process appropriate for stacked values. Ie,\n * summing up the positive and negative numbers, and returning the totals of each\n */\nexport function findMinMax(values) {\n var e_1, _a;\n var min = undefined;\n var max = undefined;\n try {\n for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n var value = values_1_1.value;\n if (value < 0) {\n min = (min !== null && min !== void 0 ? min : 0) + value;\n }\n else if (value >= 0) {\n max = (max !== null && max !== void 0 ? max : 0) + value;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return { min: min, max: max };\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { BOOLEAN, NUMBER, OPT_FONT_STYLE, OPT_FONT_WEIGHT, COLOR_STRING, STRING, Validate } from '../util/validation';\nimport { getFont } from '../scene/shape/text';\nimport { normalizeAngle360, toRadians } from '../util/angle';\nvar Label = /** @class */ (function () {\n function Label() {\n this.enabled = true;\n this.fontSize = 12;\n this.fontFamily = 'Verdana, sans-serif';\n this.fontStyle = undefined;\n this.fontWeight = undefined;\n this.color = 'rgba(70, 70, 70, 1)';\n }\n Label.prototype.getFont = function () {\n return getFont(this.fontSize, this.fontFamily, this.fontStyle, this.fontWeight);\n };\n __decorate([\n Validate(BOOLEAN)\n ], Label.prototype, \"enabled\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Label.prototype, \"fontSize\", void 0);\n __decorate([\n Validate(STRING)\n ], Label.prototype, \"fontFamily\", void 0);\n __decorate([\n Validate(OPT_FONT_STYLE)\n ], Label.prototype, \"fontStyle\", void 0);\n __decorate([\n Validate(OPT_FONT_WEIGHT)\n ], Label.prototype, \"fontWeight\", void 0);\n __decorate([\n Validate(COLOR_STRING)\n ], Label.prototype, \"color\", void 0);\n return Label;\n}());\nexport { Label };\nexport function calculateLabelRotation(opts) {\n var _a = opts.parallelFlipRotation, parallelFlipRotation = _a === void 0 ? 0 : _a, _b = opts.regularFlipRotation, regularFlipRotation = _b === void 0 ? 0 : _b;\n var labelRotation = opts.rotation ? normalizeAngle360(toRadians(opts.rotation)) : 0;\n var parallelFlipFlag = !labelRotation && parallelFlipRotation >= 0 && parallelFlipRotation <= Math.PI ? -1 : 1;\n // Flip if the axis rotation angle is in the top hemisphere.\n var regularFlipFlag = !labelRotation && regularFlipRotation >= 0 && regularFlipRotation <= Math.PI ? -1 : 1;\n var autoRotation = 0;\n if (opts.parallel) {\n autoRotation = (parallelFlipFlag * Math.PI) / 2;\n }\n else if (regularFlipFlag === -1) {\n autoRotation = Math.PI;\n }\n return { labelRotation: labelRotation, autoRotation: autoRotation, parallelFlipFlag: parallelFlipFlag, regularFlipFlag: regularFlipFlag };\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Group } from './scene/group';\nimport { Selection } from './scene/selection';\nimport { Line } from './scene/shape/line';\nimport { Text } from './scene/shape/text';\nimport { Arc } from './scene/shape/arc';\nimport { BBox } from './scene/bbox';\nimport { Caption } from './caption';\nimport { createId } from './util/id';\nimport { normalizeAngle360, normalizeAngle360Inclusive, toRadians } from './util/angle';\nimport { TimeInterval } from './util/time/interval';\nimport { areArrayNumbersEqual } from './util/equal';\nimport { Validate, BOOLEAN, OPT_BOOLEAN, NUMBER, OPT_NUMBER, OPT_FONT_STYLE, OPT_FONT_WEIGHT, STRING, OPT_COLOR_STRING, OPTIONAL, ARRAY, predicateWithMessage, OPT_STRING, OPT_ARRAY, LESS_THAN, NUMBER_OR_NAN, AND, GREATER_THAN, } from './util/validation';\nimport { Layers } from './chart/layers';\nimport { axisLabelsOverlap } from './util/labelPlacement';\nimport { ContinuousScale } from './scale/continuousScale';\nimport { Matrix } from './scene/matrix';\nimport { TimeScale } from './scale/timeScale';\nimport { LogScale } from './scale/logScale';\nimport { Default } from './util/default';\nimport { Deprecated } from './util/deprecation';\nimport { extent } from './util/array';\nimport { ChartAxisDirection } from './chart/chartAxisDirection';\nimport { calculateLabelRotation } from './chart/label';\nimport { Logger } from './util/logger';\nvar TICK_COUNT = predicateWithMessage(function (v, ctx) { return NUMBER(0)(v, ctx) || v instanceof TimeInterval; }, \"expecting a tick count Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'\");\nvar OPT_TICK_COUNT = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, TICK_COUNT); }, \"expecting an optional tick count Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'\");\nvar OPT_TICK_INTERVAL = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v, ctx) { return (v !== 0 && NUMBER(0)(v, ctx)) || v instanceof TimeInterval; }); }, \"expecting an optional non-zero positive Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'\");\nvar GRID_STYLE_KEYS = ['stroke', 'lineDash'];\nvar GRID_STYLE = predicateWithMessage(ARRAY(undefined, function (o) {\n for (var key in o) {\n if (!GRID_STYLE_KEYS.includes(key)) {\n return false;\n }\n }\n return true;\n}), \"expecting an Array of objects with gridline style properties such as 'stroke' and 'lineDash'\");\nexport var Tags;\n(function (Tags) {\n Tags[Tags[\"TickLine\"] = 0] = \"TickLine\";\n Tags[Tags[\"TickLabel\"] = 1] = \"TickLabel\";\n Tags[Tags[\"GridLine\"] = 2] = \"GridLine\";\n Tags[Tags[\"GridArc\"] = 3] = \"GridArc\";\n Tags[Tags[\"AxisLine\"] = 4] = \"AxisLine\";\n})(Tags || (Tags = {}));\nvar AxisLine = /** @class */ (function () {\n function AxisLine() {\n this.width = 1;\n this.color = 'rgba(195, 195, 195, 1)';\n }\n __decorate([\n Validate(NUMBER(0))\n ], AxisLine.prototype, \"width\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], AxisLine.prototype, \"color\", void 0);\n return AxisLine;\n}());\nexport { AxisLine };\nvar AxisTick = /** @class */ (function () {\n function AxisTick() {\n /**\n * The line width to be used by axis ticks.\n */\n this.width = 1;\n /**\n * The line length to be used by axis ticks.\n */\n this.size = 6;\n /**\n * The color of the axis ticks.\n * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make the ticks invisible.\n */\n this.color = 'rgba(195, 195, 195, 1)';\n /**\n * A hint of how many ticks to use (the exact number of ticks might differ),\n * a `TimeInterval` or a `CountableTimeInterval`.\n * For example:\n *\n * axis.tick.count = 5;\n * axis.tick.count = year;\n * axis.tick.count = month.every(6);\n */\n this.count = undefined;\n this.interval = undefined;\n this.values = undefined;\n this.minSpacing = NaN;\n this.maxSpacing = NaN;\n }\n __decorate([\n Validate(NUMBER(0))\n ], AxisTick.prototype, \"width\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], AxisTick.prototype, \"size\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], AxisTick.prototype, \"color\", void 0);\n __decorate([\n Validate(OPT_TICK_COUNT),\n Deprecated('Use tick.interval or tick.minSpacing and tick.maxSpacing instead')\n ], AxisTick.prototype, \"count\", void 0);\n __decorate([\n Validate(OPT_TICK_INTERVAL)\n ], AxisTick.prototype, \"interval\", void 0);\n __decorate([\n Validate(OPT_ARRAY())\n ], AxisTick.prototype, \"values\", void 0);\n __decorate([\n Validate(AND(NUMBER_OR_NAN(1), LESS_THAN('maxSpacing'))),\n Default(NaN)\n ], AxisTick.prototype, \"minSpacing\", void 0);\n __decorate([\n Validate(AND(NUMBER_OR_NAN(1), GREATER_THAN('minSpacing'))),\n Default(NaN)\n ], AxisTick.prototype, \"maxSpacing\", void 0);\n return AxisTick;\n}());\nvar AxisLabel = /** @class */ (function () {\n function AxisLabel() {\n this.fontStyle = undefined;\n this.fontWeight = undefined;\n this.fontSize = 12;\n this.fontFamily = 'Verdana, sans-serif';\n /**\n * The padding between the labels and the ticks.\n */\n this.padding = 5;\n /**\n * Minimum gap in pixels between the axis labels before being removed to avoid collisions.\n */\n this.minSpacing = NaN;\n /**\n * The color of the labels.\n * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make labels invisible.\n */\n this.color = 'rgba(87, 87, 87, 1)';\n /**\n * Custom label rotation in degrees.\n * Labels are rendered perpendicular to the axis line by default.\n * Or parallel to the axis line, if the {@link parallel} is set to `true`.\n * The value of this config is used as the angular offset/deflection\n * from the default rotation.\n */\n this.rotation = undefined;\n /**\n * If specified and axis labels may collide, they are rotated to reduce collisions. If the\n * `rotation` property is specified, it takes precedence.\n */\n this.autoRotate = undefined;\n /**\n * Rotation angle to use when autoRotate is applied.\n */\n this.autoRotateAngle = 335;\n /**\n * Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide.\n */\n this.avoidCollisions = true;\n /**\n * By default labels and ticks are positioned to the left of the axis line.\n * `true` positions the labels to the right of the axis line.\n * However, if the axis is rotated, it's easier to think in terms\n * of this side or the opposite side, rather than left and right.\n * We use the term `mirror` for conciseness, although it's not\n * true mirroring - for example, when a label is rotated, so that\n * it is inclined at the 45 degree angle, text flowing from north-west\n * to south-east, ending at the tick to the left of the axis line,\n * and then we set this config to `true`, the text will still be flowing\n * from north-west to south-east, _starting_ at the tick to the right\n * of the axis line.\n */\n this.mirrored = false;\n /**\n * Labels are rendered perpendicular to the axis line by default.\n * Setting this config to `true` makes labels render parallel to the axis line\n * and center aligns labels' text at the ticks.\n */\n this.parallel = false;\n /**\n * In case {@param value} is a number, the {@param fractionDigits} parameter will\n * be provided as well. The `fractionDigits` corresponds to the number of fraction\n * digits used by the tick step. For example, if the tick step is `0.0005`,\n * the `fractionDigits` is 4.\n */\n this.formatter = undefined;\n this.format = undefined;\n }\n __decorate([\n Validate(OPT_FONT_STYLE)\n ], AxisLabel.prototype, \"fontStyle\", void 0);\n __decorate([\n Validate(OPT_FONT_WEIGHT)\n ], AxisLabel.prototype, \"fontWeight\", void 0);\n __decorate([\n Validate(NUMBER(1))\n ], AxisLabel.prototype, \"fontSize\", void 0);\n __decorate([\n Validate(STRING)\n ], AxisLabel.prototype, \"fontFamily\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], AxisLabel.prototype, \"padding\", void 0);\n __decorate([\n Validate(NUMBER_OR_NAN()),\n Default(NaN)\n ], AxisLabel.prototype, \"minSpacing\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], AxisLabel.prototype, \"color\", void 0);\n __decorate([\n Validate(OPT_NUMBER(-360, 360))\n ], AxisLabel.prototype, \"rotation\", void 0);\n __decorate([\n Validate(OPT_BOOLEAN)\n ], AxisLabel.prototype, \"autoRotate\", void 0);\n __decorate([\n Validate(NUMBER(-360, 360))\n ], AxisLabel.prototype, \"autoRotateAngle\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], AxisLabel.prototype, \"avoidCollisions\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], AxisLabel.prototype, \"mirrored\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], AxisLabel.prototype, \"parallel\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], AxisLabel.prototype, \"format\", void 0);\n return AxisLabel;\n}());\nexport { AxisLabel };\n/**\n * A general purpose linear axis with no notion of orientation.\n * The axis is always rendered vertically, with horizontal labels positioned to the left\n * of the axis line by default. The axis can be {@link rotation | rotated} by an arbitrary angle,\n * so that it can be used as a top, right, bottom, left, radial or any other kind\n * of linear axis.\n * The generic `D` parameter is the type of the domain of the axis' scale.\n * The output range of the axis' scale is always numeric (screen coordinates).\n */\nvar Axis = /** @class */ (function () {\n function Axis(scale) {\n this.id = createId(this);\n this.nice = true;\n this.dataDomain = [];\n this.axisGroup = new Group({ name: this.id + \"-axis\", zIndex: Layers.AXIS_ZINDEX });\n this.lineNode = this.axisGroup.appendChild(new Line());\n this.tickLineGroup = this.axisGroup.appendChild(new Group({ name: this.id + \"-Axis-tick-lines\", zIndex: Layers.AXIS_ZINDEX }));\n this.tickLabelGroup = this.axisGroup.appendChild(new Group({ name: this.id + \"-Axis-tick-labels\", zIndex: Layers.AXIS_ZINDEX }));\n this.crossLineGroup = new Group({ name: this.id + \"-CrossLines\" });\n this.gridGroup = new Group({ name: this.id + \"-Axis-grid\" });\n this.gridLineGroup = this.gridGroup.appendChild(new Group({\n name: this.id + \"-gridLines\",\n zIndex: Layers.AXIS_GRID_ZINDEX,\n }));\n this.gridArcGroup = this.gridGroup.appendChild(new Group({\n name: this.id + \"-gridArcs\",\n zIndex: Layers.AXIS_GRID_ZINDEX,\n }));\n this.tickLineGroupSelection = Selection.select(this.tickLineGroup, Line);\n this.tickLabelGroupSelection = Selection.select(this.tickLabelGroup, Text);\n this.gridLineGroupSelection = Selection.select(this.gridLineGroup, Line);\n this.gridArcGroupSelection = Selection.select(this.gridArcGroup, Arc);\n this._crossLines = [];\n this.line = new AxisLine();\n this.tick = new AxisTick();\n this.label = new AxisLabel();\n this.translation = { x: 0, y: 0 };\n this.rotation = 0; // axis rotation angle in degrees\n this.layout = {\n label: {\n align: 'center',\n baseline: 'middle',\n rotation: 0,\n fractionDigits: 0,\n padding: this.label.padding,\n format: this.label.format,\n },\n };\n this.requestedRange = [0, 1];\n this._visibleRange = [0, 1];\n this._title = undefined;\n /**\n * The length of the grid. The grid is only visible in case of a non-zero value.\n * In case {@link radialGrid} is `true`, the value is interpreted as an angle\n * (in degrees).\n */\n this._gridLength = 0;\n /**\n * The array of styles to cycle through when rendering grid lines.\n * For example, use two {@link GridStyle} objects for alternating styles.\n * Contains only one {@link GridStyle} object by default, meaning all grid lines\n * have the same style.\n */\n this.gridStyle = [\n {\n stroke: 'rgba(219, 219, 219, 1)',\n lineDash: [4, 2],\n },\n ];\n /**\n * `false` - render grid as lines of {@link gridLength} that extend the ticks\n * on the opposite side of the axis\n * `true` - render grid as concentric circles that go through the ticks\n */\n this._radialGrid = false;\n this.fractionDigits = 0;\n /**\n * The distance between the grid ticks and the axis ticks.\n */\n this.gridPadding = 0;\n /**\n * Is used to avoid collisions between axis labels and series.\n */\n this.seriesAreaPadding = 0;\n this.thickness = 0;\n this._scale = scale;\n this.refreshScale();\n }\n Object.defineProperty(Axis.prototype, \"scale\", {\n get: function () {\n return this._scale;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"crossLines\", {\n get: function () {\n return this._crossLines;\n },\n set: function (value) {\n var _this = this;\n var _a, _b;\n (_a = this._crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) { return _this.detachCrossLine(crossLine); });\n this._crossLines = value;\n (_b = this._crossLines) === null || _b === void 0 ? void 0 : _b.forEach(function (crossLine) {\n _this.attachCrossLine(crossLine);\n _this.initCrossLine(crossLine);\n });\n },\n enumerable: false,\n configurable: true\n });\n Axis.prototype.attachCrossLine = function (crossLine) {\n this.crossLineGroup.appendChild(crossLine.group);\n };\n Axis.prototype.detachCrossLine = function (crossLine) {\n this.crossLineGroup.removeChild(crossLine.group);\n };\n Axis.prototype.destroy = function () {\n // For override by sub-classes.\n };\n Axis.prototype.refreshScale = function () {\n var _this = this;\n var _a;\n this.requestedRange = this.scale.range.slice();\n (_a = this.crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) {\n _this.initCrossLine(crossLine);\n });\n };\n Axis.prototype.updateRange = function () {\n var _a;\n var _b = this, rr = _b.requestedRange, vr = _b.visibleRange, scale = _b.scale;\n var span = (rr[1] - rr[0]) / (vr[1] - vr[0]);\n var shift = span * vr[0];\n var start = rr[0] - shift;\n scale.range = [start, start + span];\n (_a = this.crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) {\n crossLine.clippedRange = [rr[0], rr[1]];\n });\n };\n Axis.prototype.setCrossLinesVisible = function (visible) {\n this.crossLineGroup.visible = visible;\n };\n Axis.prototype.attachAxis = function (node, nextNode) {\n node.insertBefore(this.gridGroup, nextNode);\n node.insertBefore(this.axisGroup, nextNode);\n node.insertBefore(this.crossLineGroup, nextNode);\n };\n Axis.prototype.detachAxis = function (node) {\n node.removeChild(this.gridGroup);\n node.removeChild(this.axisGroup);\n node.removeChild(this.crossLineGroup);\n };\n /**\n * Checks if a point or an object is in range.\n * @param x A point (or object's starting point).\n * @param width Object's width.\n * @param tolerance Expands the range on both ends by this amount.\n */\n Axis.prototype.inRange = function (x, width, tolerance) {\n if (width === void 0) { width = 0; }\n if (tolerance === void 0) { tolerance = 0; }\n return this.inRangeEx(x, width, tolerance) === 0;\n };\n Axis.prototype.inRangeEx = function (x, width, tolerance) {\n if (width === void 0) { width = 0; }\n if (tolerance === void 0) { tolerance = 0; }\n var range = this.range;\n // Account for inverted ranges, for example [500, 100] as well as [100, 500]\n var min = Math.min(range[0], range[1]);\n var max = Math.max(range[0], range[1]);\n if (x + width < min - tolerance) {\n return -1; // left of range\n }\n if (x > max + tolerance) {\n return 1; // right of range\n }\n return 0; // in range\n };\n Object.defineProperty(Axis.prototype, \"range\", {\n get: function () {\n return this.requestedRange;\n },\n set: function (value) {\n this.requestedRange = value.slice();\n this.updateRange();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"visibleRange\", {\n get: function () {\n return this._visibleRange.slice();\n },\n set: function (value) {\n if (value && value.length === 2) {\n var _a = __read(value, 2), min = _a[0], max = _a[1];\n min = Math.max(0, min);\n max = Math.min(1, max);\n min = Math.min(min, max);\n max = Math.max(min, max);\n this._visibleRange = [min, max];\n this.updateRange();\n }\n },\n enumerable: false,\n configurable: true\n });\n Axis.prototype.onLabelFormatChange = function (ticks, format) {\n var _a = this, scale = _a.scale, fractionDigits = _a.fractionDigits;\n var logScale = scale instanceof LogScale;\n var defaultLabelFormatter = !logScale && fractionDigits > 0\n ? function (x) { return (typeof x === 'number' ? x.toFixed(fractionDigits) : String(x)); }\n : function (x) { return String(x); };\n if (format && scale && scale.tickFormat) {\n try {\n this.labelFormatter = scale.tickFormat({\n ticks: ticks,\n specifier: format,\n });\n }\n catch (e) {\n this.labelFormatter = defaultLabelFormatter;\n Logger.warnOnce(\"the axis label format string \" + format + \" is invalid. No formatting will be applied\");\n }\n }\n else {\n this.labelFormatter = defaultLabelFormatter;\n }\n };\n Object.defineProperty(Axis.prototype, \"title\", {\n get: function () {\n return this._title;\n },\n set: function (value) {\n var oldTitle = this._title;\n if (oldTitle !== value) {\n if (oldTitle) {\n this.axisGroup.removeChild(oldTitle.node);\n }\n if (value) {\n value.node.rotation = -Math.PI / 2;\n this.axisGroup.appendChild(value.node);\n }\n this._title = value;\n // position title so that it doesn't briefly get rendered in the top left hand corner of the canvas before update is called.\n this.setTickCount(this.tick.count);\n this.setTickInterval(this.tick.interval);\n this.updateTitle({ ticks: this.scale.ticks() });\n }\n },\n enumerable: false,\n configurable: true\n });\n Axis.prototype.setDomain = function () {\n var _a;\n var _b = this, scale = _b.scale, dataDomain = _b.dataDomain, tickValues = _b.tick.values;\n if (tickValues && scale instanceof ContinuousScale) {\n var _c = __read((_a = extent(tickValues)) !== null && _a !== void 0 ? _a : [Infinity, -Infinity], 2), tickMin = _c[0], tickMax = _c[1];\n var min = Math.min(scale.fromDomain(dataDomain[0]), tickMin);\n var max = Math.max(scale.fromDomain(dataDomain[1]), tickMax);\n scale.domain = [scale.toDomain(min), scale.toDomain(max)];\n }\n else {\n scale.domain = dataDomain;\n }\n };\n Axis.prototype.setTickInterval = function (interval) {\n var _a;\n this.scale.interval = (_a = this.tick.interval) !== null && _a !== void 0 ? _a : interval;\n };\n Axis.prototype.setTickCount = function (count, minTickCount, maxTickCount) {\n var scale = this.scale;\n if (!(count && scale instanceof ContinuousScale)) {\n return;\n }\n if (typeof count === 'number') {\n scale.tickCount = count;\n scale.minTickCount = minTickCount !== null && minTickCount !== void 0 ? minTickCount : 0;\n scale.maxTickCount = maxTickCount !== null && maxTickCount !== void 0 ? maxTickCount : Infinity;\n return;\n }\n if (scale instanceof TimeScale) {\n this.setTickInterval(count);\n }\n };\n Object.defineProperty(Axis.prototype, \"gridLength\", {\n get: function () {\n return this._gridLength;\n },\n set: function (value) {\n var _this = this;\n var _a;\n // Was visible and now invisible, or was invisible and now visible.\n if ((this._gridLength && !value) || (!this._gridLength && value)) {\n this.gridLineGroupSelection = this.gridLineGroupSelection.clear();\n this.gridArcGroupSelection = this.gridArcGroupSelection.clear();\n }\n this._gridLength = value;\n (_a = this.crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) {\n _this.initCrossLine(crossLine);\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"radialGrid\", {\n get: function () {\n return this._radialGrid;\n },\n set: function (value) {\n if (this._radialGrid !== value) {\n this._radialGrid = value;\n this.gridLineGroupSelection = this.gridLineGroupSelection.clear();\n this.gridArcGroupSelection = this.gridArcGroupSelection.clear();\n }\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Creates/removes/updates the scene graph nodes that constitute the axis.\n */\n Axis.prototype.update = function (primaryTickCount) {\n var _a, _b;\n this.calculateDomain();\n var _c = this, scale = _c.scale, gridLength = _c.gridLength, tick = _c.tick, _d = _c.label, parallelLabels = _d.parallel, mirrored = _d.mirrored, avoidCollisions = _d.avoidCollisions, requestedRange = _c.requestedRange;\n var requestedRangeMin = Math.min.apply(Math, __spread(requestedRange));\n var requestedRangeMax = Math.max.apply(Math, __spread(requestedRange));\n var rotation = toRadians(this.rotation);\n var anySeriesActive = this.isAnySeriesActive();\n // The side of the axis line to position the labels on.\n // -1 = left (default)\n // 1 = right\n var sideFlag = mirrored ? 1 : -1;\n // When labels are parallel to the axis line, the `parallelFlipFlag` is used to\n // flip the labels to avoid upside-down text, when the axis is rotated\n // such that it is in the right hemisphere, i.e. the angle of rotation\n // is in the [0, π] interval.\n // The rotation angle is normalized, so that we have an easier time checking\n // if it's in the said interval. Since the axis is always rendered vertically\n // and then rotated, zero rotation means 12 (not 3) o-clock.\n // -1 = flip\n // 1 = don't flip (default)\n var parallelFlipRotation = normalizeAngle360(rotation);\n var regularFlipRotation = normalizeAngle360(rotation - Math.PI / 2);\n var nice = this.nice;\n this.setDomain();\n this.setTickInterval(this.tick.interval);\n if (scale instanceof ContinuousScale) {\n scale.nice = nice;\n this.setTickCount(this.tick.count);\n scale.update();\n }\n var halfBandwidth = (scale.bandwidth || 0) / 2;\n this.updatePosition();\n this.updateLine();\n var i = 0;\n var labelOverlap = true;\n var ticks = [];\n var _e = this.estimateTickCount({\n minSpacing: this.tick.minSpacing,\n maxSpacing: this.tick.maxSpacing,\n }), maxTickCount = _e.maxTickCount, minTickCount = _e.minTickCount, defaultTickCount = _e.defaultTickCount;\n var continuous = scale instanceof ContinuousScale;\n var secondaryAxis = primaryTickCount !== undefined;\n var checkForOverlap = avoidCollisions && this.tick.interval === undefined && this.tick.values === undefined;\n var tickSpacing = !isNaN(this.tick.minSpacing) || !isNaN(this.tick.maxSpacing);\n var maxIterations = this.tick.count || !continuous || isNaN(maxTickCount) ? 10 : maxTickCount;\n while (labelOverlap) {\n var unchanged = true;\n var _loop_1 = function () {\n if (i > maxIterations) {\n return \"break\";\n }\n var prevTicks = ticks;\n var tickCount = Math.max(defaultTickCount - i, minTickCount);\n var filterTicks = checkForOverlap && !(continuous && this_1.tick.count === undefined) && (tickSpacing || i !== 0);\n if (this_1.tick.values) {\n ticks = this_1.tick.values;\n }\n else if (maxTickCount === 0) {\n ticks = [];\n }\n else if (i === 0 || !filterTicks) {\n this_1.setTickCount((_a = this_1.tick.count) !== null && _a !== void 0 ? _a : tickCount, minTickCount, maxTickCount);\n ticks = scale.ticks();\n }\n if (filterTicks) {\n var keepEvery_1 = tickSpacing ? Math.ceil(ticks.length / tickCount) : 2;\n ticks = ticks.filter(function (_, i) { return i % keepEvery_1 === 0; });\n }\n var secondaryAxisTicks = void 0;\n if (secondaryAxis) {\n // `updateSecondaryAxisTicks` mutates `scale.domain` based on `primaryTickCount`\n secondaryAxisTicks = this_1.updateSecondaryAxisTicks(primaryTickCount);\n ticks = secondaryAxisTicks;\n }\n this_1.updateSelections({\n halfBandwidth: halfBandwidth,\n gridLength: gridLength,\n ticks: ticks,\n });\n if (!secondaryAxis && ticks.length > 0) {\n primaryTickCount = ticks.length;\n }\n unchanged = checkForOverlap ? areArrayNumbersEqual(ticks, prevTicks) : false;\n i++;\n };\n var this_1 = this;\n while (unchanged) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n if (unchanged) {\n break;\n }\n // When the scale domain or the ticks change, the label format may change\n this.onLabelFormatChange(ticks, this.label.format);\n var _f = this.updateLabels({\n parallelFlipRotation: parallelFlipRotation,\n regularFlipRotation: regularFlipRotation,\n sideFlag: sideFlag,\n tickLabelGroupSelection: this.tickLabelGroupSelection,\n ticks: ticks,\n }), labelData = _f.labelData, rotated = _f.rotated;\n var labelSpacing = this.getLabelSpacing(rotated);\n // no need for further iterations if `avoidCollisions` is false\n labelOverlap = checkForOverlap ? axisLabelsOverlap(labelData, labelSpacing) : false;\n }\n this.updateGridLines({\n gridLength: gridLength,\n halfBandwidth: halfBandwidth,\n sideFlag: sideFlag,\n });\n var anyTickVisible = false;\n var visibleFn = function (node) {\n var min = Math.floor(requestedRangeMin);\n var max = Math.ceil(requestedRangeMax);\n if (min === max) {\n node.visible = false;\n return;\n }\n // Fix an effect of rounding error\n if (node.translationY >= min - 1 && node.translationY < min) {\n node.translationY = min;\n }\n if (node.translationY > max && node.translationY <= max + 1) {\n node.translationY = max;\n }\n var visible = node.translationY >= min && node.translationY <= max;\n if (visible) {\n anyTickVisible = true;\n }\n node.visible = visible;\n };\n var _g = this, gridLineGroupSelection = _g.gridLineGroupSelection, gridArcGroupSelection = _g.gridArcGroupSelection, tickLineGroupSelection = _g.tickLineGroupSelection, tickLabelGroupSelection = _g.tickLabelGroupSelection;\n gridLineGroupSelection.each(visibleFn);\n gridArcGroupSelection.each(visibleFn);\n tickLineGroupSelection.each(visibleFn);\n tickLabelGroupSelection.each(visibleFn);\n this.tickLineGroup.visible = anyTickVisible;\n this.tickLabelGroup.visible = anyTickVisible;\n this.gridLineGroup.visible = anyTickVisible;\n this.gridArcGroup.visible = anyTickVisible;\n (_b = this.crossLines) === null || _b === void 0 ? void 0 : _b.forEach(function (crossLine) {\n crossLine.sideFlag = -sideFlag;\n crossLine.direction = rotation === -Math.PI / 2 ? ChartAxisDirection.X : ChartAxisDirection.Y;\n crossLine.label.parallel =\n crossLine.label.parallel !== undefined ? crossLine.label.parallel : parallelLabels;\n crossLine.parallelFlipRotation = parallelFlipRotation;\n crossLine.regularFlipRotation = regularFlipRotation;\n crossLine.update(anySeriesActive);\n });\n this.updateTitle({ ticks: ticks });\n tickLineGroupSelection.each(function (line) {\n line.strokeWidth = tick.width;\n line.stroke = tick.color;\n line.visible = anyTickVisible;\n line.x1 = sideFlag * tick.size;\n line.x2 = 0;\n line.y1 = 0;\n line.y2 = 0;\n });\n return primaryTickCount;\n };\n Axis.prototype.estimateTickCount = function (_a) {\n var minSpacing = _a.minSpacing, maxSpacing = _a.maxSpacing;\n var requestedRange = this.requestedRange;\n var min = Math.min.apply(Math, __spread(requestedRange));\n var max = Math.max.apply(Math, __spread(requestedRange));\n var availableRange = max - min;\n var defaultMinSpacing = Math.max(Axis.defaultTickMinSpacing, availableRange / ContinuousScale.defaultMaxTickCount);\n if (isNaN(minSpacing) && isNaN(maxSpacing)) {\n minSpacing = defaultMinSpacing;\n maxSpacing = availableRange;\n if (minSpacing > maxSpacing) {\n // Take automatic minSpacing if there is a conflict.\n maxSpacing = minSpacing;\n }\n }\n else if (isNaN(minSpacing)) {\n minSpacing = defaultMinSpacing;\n if (minSpacing > maxSpacing) {\n // Take user-suplied maxSpacing if there is a conflict.\n minSpacing = maxSpacing;\n }\n }\n else if (isNaN(maxSpacing)) {\n maxSpacing = availableRange;\n if (minSpacing > maxSpacing) {\n // Take user-suplied minSpacing if there is a conflict.\n maxSpacing = minSpacing;\n }\n }\n var maxTickCount = Math.max(1, Math.floor(availableRange / minSpacing));\n var minTickCount = Math.min(maxTickCount, Math.ceil(availableRange / maxSpacing));\n var defaultTickCount = ContinuousScale.defaultTickCount;\n if (defaultTickCount > maxTickCount) {\n defaultTickCount = maxTickCount;\n }\n else if (defaultTickCount < minTickCount) {\n defaultTickCount = minTickCount;\n }\n return { minTickCount: minTickCount, maxTickCount: maxTickCount, defaultTickCount: defaultTickCount };\n };\n Axis.prototype.getLabelSpacing = function (rotated) {\n var label = this.label;\n if (!isNaN(label.minSpacing)) {\n return label.minSpacing;\n }\n return rotated ? 0 : 10;\n };\n Axis.prototype.calculateDomain = function () {\n // Placeholder for subclasses to override.\n };\n Axis.prototype.updatePosition = function () {\n var _a = this, label = _a.label, crossLineGroup = _a.crossLineGroup, axisGroup = _a.axisGroup, gridGroup = _a.gridGroup, translation = _a.translation, gridLineGroupSelection = _a.gridLineGroupSelection, gridPadding = _a.gridPadding, gridLength = _a.gridLength;\n var rotation = toRadians(this.rotation);\n var sideFlag = label.mirrored ? 1 : -1;\n var translationX = Math.floor(translation.x);\n var translationY = Math.floor(translation.y);\n crossLineGroup.translationX = translationX;\n crossLineGroup.translationY = translationY;\n crossLineGroup.rotation = rotation;\n axisGroup.translationX = translationX;\n axisGroup.translationY = translationY;\n axisGroup.rotation = rotation;\n gridGroup.translationX = translationX;\n gridGroup.translationY = translationY;\n gridGroup.rotation = rotation;\n gridLineGroupSelection.each(function (line) {\n line.x1 = gridPadding;\n line.x2 = -sideFlag * gridLength + gridPadding;\n line.y1 = 0;\n line.y2 = 0;\n });\n };\n Axis.prototype.updateSecondaryAxisTicks = function (_primaryTickCount) {\n throw new Error('AG Charts - unexpected call to updateSecondaryAxisTicks() - check axes configuration.');\n };\n Axis.prototype.updateSelections = function (_a) {\n var ticks = _a.ticks, halfBandwidth = _a.halfBandwidth, gridLength = _a.gridLength;\n var scale = this.scale;\n var data = ticks.map(function (t) { return ({ tick: t, translationY: scale.convert(t) + halfBandwidth }); });\n var gridLineGroupSelection = this.radialGrid\n ? this.gridLineGroupSelection\n : this.gridLineGroupSelection.update(gridLength ? data : [], function (group) {\n var node = new Line();\n node.tag = Tags.GridLine;\n group.append(node);\n });\n var gridArcGroupSelection = this.radialGrid\n ? this.gridArcGroupSelection.update(gridLength ? data : [], function (group) {\n var node = new Arc();\n node.tag = Tags.GridArc;\n group.append(node);\n })\n : this.gridArcGroupSelection;\n var tickLineGroupSelection = this.tickLineGroupSelection.update(data, function (group) {\n var line = new Line();\n line.tag = Tags.TickLine;\n group.appendChild(line);\n });\n var tickLabelGroupSelection = this.tickLabelGroupSelection.update(data, function (group) {\n var text = new Text();\n text.tag = Tags.TickLabel;\n group.appendChild(text);\n });\n // We need raw `translationY` values on `datum` for accurate label collision detection in axes.update()\n // But node `translationY` values must be rounded to get pixel grid alignment\n var translationFn = function (node) { return (node.translationY = Math.round(node.datum.translationY)); };\n gridLineGroupSelection.each(translationFn);\n gridArcGroupSelection.each(translationFn);\n tickLineGroupSelection.each(translationFn);\n tickLabelGroupSelection.each(translationFn);\n this.tickLineGroupSelection = tickLineGroupSelection;\n this.tickLabelGroupSelection = tickLabelGroupSelection;\n this.gridLineGroupSelection = gridLineGroupSelection;\n this.gridArcGroupSelection = gridArcGroupSelection;\n };\n Axis.prototype.updateGridLines = function (_a) {\n var gridLength = _a.gridLength, halfBandwidth = _a.halfBandwidth, sideFlag = _a.sideFlag;\n var _b = this, gridStyle = _b.gridStyle, scale = _b.scale, tick = _b.tick, gridPadding = _b.gridPadding;\n if (gridLength && gridStyle.length) {\n var styleCount_1 = gridStyle.length;\n var grid = void 0;\n if (this.radialGrid) {\n var angularGridLength_1 = normalizeAngle360Inclusive(toRadians(gridLength));\n grid = this.gridArcGroupSelection.each(function (arc, datum) {\n var radius = Math.round(scale.convert(datum) + halfBandwidth);\n arc.centerX = 0;\n arc.centerY = scale.range[0] - radius;\n arc.endAngle = angularGridLength_1;\n arc.radius = radius;\n });\n }\n else {\n grid = this.gridLineGroupSelection.each(function (line) {\n line.x1 = gridPadding;\n line.x2 = -sideFlag * gridLength + gridPadding;\n line.y1 = 0;\n line.y2 = 0;\n });\n }\n grid.each(function (node, _, index) {\n var style = gridStyle[index % styleCount_1];\n node.stroke = style.stroke;\n node.strokeWidth = tick.width;\n node.lineDash = style.lineDash;\n node.fill = undefined;\n });\n }\n };\n Axis.prototype.updateLabels = function (_a) {\n var _this = this;\n var ticks = _a.ticks, tickLabelGroupSelection = _a.tickLabelGroupSelection, sideFlag = _a.sideFlag, parallelFlipRotation = _a.parallelFlipRotation, regularFlipRotation = _a.regularFlipRotation;\n var _b = this, label = _b.label, _c = _b.label, parallel = _c.parallel, rotation = _c.rotation, tick = _b.tick;\n var labelAutoRotation = 0;\n var _d = calculateLabelRotation({\n rotation: rotation,\n parallel: parallel,\n regularFlipRotation: regularFlipRotation,\n parallelFlipRotation: parallelFlipRotation,\n }), autoRotation = _d.autoRotation, labelRotation = _d.labelRotation, parallelFlipFlag = _d.parallelFlipFlag, regularFlipFlag = _d.regularFlipFlag;\n // `ticks instanceof NumericTicks` doesn't work here, so we feature detect.\n this.fractionDigits = ticks.fractionDigits >= 0 ? ticks.fractionDigits : 0;\n // Update properties that affect the size of the axis labels and measure the labels\n var labelBboxes = new Map();\n var labelX = sideFlag * (tick.size + label.padding + this.seriesAreaPadding);\n var labelMatrix = new Matrix();\n Matrix.updateTransformMatrix(labelMatrix, 1, 1, autoRotation, 0, 0);\n var labelData = [];\n var labelSelection = tickLabelGroupSelection.each(function (node, datum, index) {\n var tick = datum.tick, translationY = datum.translationY;\n node.fontStyle = label.fontStyle;\n node.fontWeight = label.fontWeight;\n node.fontSize = label.fontSize;\n node.fontFamily = label.fontFamily;\n node.fill = label.color;\n node.text = _this.formatTickDatum(tick, index);\n var userHidden = node.text === '' || node.text == undefined;\n var bbox = node.computeBBox();\n var width = bbox.width, height = bbox.height;\n var translatedBBox = new BBox(labelX, translationY, 0, 0);\n labelMatrix.transformBBox(translatedBBox, bbox);\n var _a = bbox.x, x = _a === void 0 ? 0 : _a, _b = bbox.y, y = _b === void 0 ? 0 : _b;\n bbox.width = width;\n bbox.height = height;\n labelBboxes.set(index, userHidden ? null : bbox);\n if (userHidden) {\n return;\n }\n labelData.push({\n point: {\n x: x,\n y: y,\n size: 0,\n },\n label: {\n width: width,\n height: height,\n text: '',\n },\n });\n });\n var labelSpacing = this.getLabelSpacing();\n var rotate = axisLabelsOverlap(labelData, labelSpacing);\n if (label.rotation === undefined && label.autoRotate === true && rotate) {\n // When no user label rotation angle has been specified and the width of any label exceeds the average tick gap (`rotate` is `true`),\n // automatically rotate the labels\n labelAutoRotation = normalizeAngle360(toRadians(label.autoRotateAngle));\n }\n var labelTextBaseline = 'middle';\n if (parallel && !labelRotation) {\n if (sideFlag * parallelFlipFlag === -1) {\n labelTextBaseline = 'hanging';\n }\n else {\n labelTextBaseline = 'bottom';\n }\n }\n var labelRotated = labelRotation > 0 && labelRotation <= Math.PI;\n var labelAutoRotated = labelAutoRotation > 0 && labelAutoRotation <= Math.PI;\n var alignFlag = labelRotated || labelAutoRotated ? -1 : 1;\n var labelTextAlign = 'start';\n if (parallel) {\n if (labelRotation || labelAutoRotation) {\n if (sideFlag * alignFlag === -1) {\n labelTextAlign = 'end';\n }\n }\n else {\n labelTextAlign = 'center';\n }\n }\n else if (sideFlag * regularFlipFlag === -1) {\n labelTextAlign = 'end';\n }\n var combinedRotation = autoRotation + labelRotation + labelAutoRotation;\n if (combinedRotation) {\n Matrix.updateTransformMatrix(labelMatrix, 1, 1, combinedRotation, 0, 0);\n }\n labelData = [];\n labelSelection.each(function (label, datum, index) {\n if (label.text === '' || label.text == undefined) {\n label.visible = false; // hide empty labels\n return;\n }\n label.textBaseline = labelTextBaseline;\n label.textAlign = labelTextAlign;\n label.x = labelX;\n label.rotationCenterX = labelX;\n label.rotation = combinedRotation;\n // Text.computeBBox() does not take into account any of the transformations that have been applied to the label nodes, only the width and height are useful.\n // Rather than taking into account all transformations including those of parent nodes which would be the result of `computeTransformedBBox()`, giving the x and y in the entire axis coordinate space,\n // take into account only the rotation and translation applied to individual label nodes to get the x y coordinates of the labels relative to each other\n // this makes label collision detection a lot simpler\n var bbox = labelBboxes.get(index);\n if (!bbox) {\n return;\n }\n label.visible = true;\n var _a = bbox.width, width = _a === void 0 ? 0 : _a, _b = bbox.height, height = _b === void 0 ? 0 : _b;\n var translationY = datum.translationY;\n var translatedBBox = new BBox(labelX, translationY, 0, 0);\n labelMatrix.transformBBox(translatedBBox, bbox);\n var _c = bbox.x, x = _c === void 0 ? 0 : _c, _d = bbox.y, y = _d === void 0 ? 0 : _d;\n labelData.push({\n point: {\n x: x,\n y: y,\n size: 0,\n },\n label: {\n width: width,\n height: height,\n text: label.text,\n },\n });\n });\n this.layout.label = {\n align: labelTextAlign,\n baseline: labelTextBaseline,\n rotation: combinedRotation,\n fractionDigits: this.fractionDigits,\n padding: this.label.padding,\n format: this.label.format,\n };\n return { labelData: labelData, rotated: !!(labelRotation || labelAutoRotation) };\n };\n Axis.prototype.updateLine = function () {\n // Render axis line.\n var _a = this, lineNode = _a.lineNode, requestedRange = _a.requestedRange;\n lineNode.x1 = 0;\n lineNode.x2 = 0;\n lineNode.y1 = requestedRange[0];\n lineNode.y2 = requestedRange[1];\n lineNode.strokeWidth = this.line.width;\n lineNode.stroke = this.line.color;\n lineNode.visible = true;\n };\n Axis.prototype.updateTitle = function (_a) {\n var ticks = _a.ticks;\n var _b = this, label = _b.label, rotation = _b.rotation, title = _b.title, lineNode = _b.lineNode, requestedRange = _b.requestedRange, tickLineGroup = _b.tickLineGroup, tickLabelGroup = _b.tickLabelGroup;\n if (!title) {\n return;\n }\n var titleVisible = false;\n if (title.enabled && lineNode.visible) {\n titleVisible = true;\n var sideFlag = label.mirrored ? 1 : -1;\n var parallelFlipRotation = normalizeAngle360(rotation);\n var padding = Caption.PADDING;\n var titleNode = title.node;\n var titleRotationFlag = sideFlag === -1 && parallelFlipRotation > Math.PI && parallelFlipRotation < Math.PI * 2 ? -1 : 1;\n titleNode.rotation = (titleRotationFlag * sideFlag * Math.PI) / 2;\n titleNode.x = Math.floor((titleRotationFlag * sideFlag * (requestedRange[0] + requestedRange[1])) / 2);\n var bboxYDimension = 0;\n if ((ticks === null || ticks === void 0 ? void 0 : ticks.length) > 0) {\n var tickBBox = Group.computeBBox([tickLineGroup, tickLabelGroup]);\n var tickWidth = rotation === 0 ? tickBBox.width : tickBBox.height;\n if (Math.abs(tickWidth) < Infinity) {\n bboxYDimension += tickWidth;\n }\n }\n if (sideFlag === -1) {\n titleNode.y = Math.floor(titleRotationFlag * (-padding - bboxYDimension));\n }\n else {\n titleNode.y = Math.floor(-padding - bboxYDimension);\n }\n titleNode.textBaseline = titleRotationFlag === 1 ? 'bottom' : 'top';\n }\n title.node.visible = titleVisible;\n };\n // For formatting (nice rounded) tick values.\n Axis.prototype.formatTickDatum = function (datum, index) {\n var _a = this, label = _a.label, labelFormatter = _a.labelFormatter, fractionDigits = _a.fractionDigits;\n if (label.formatter) {\n return label.formatter({\n value: fractionDigits > 0 ? datum : String(datum),\n index: index,\n fractionDigits: fractionDigits,\n formatter: labelFormatter,\n });\n }\n else if (labelFormatter) {\n return labelFormatter(datum);\n }\n // The axis is using a logScale or the`datum` is an integer, a string or an object\n return String(datum);\n };\n // For formatting arbitrary values between the ticks.\n Axis.prototype.formatDatum = function (datum) {\n return String(datum);\n };\n Axis.prototype.computeBBox = function () {\n return this.axisGroup.computeBBox();\n };\n Axis.prototype.initCrossLine = function (crossLine) {\n crossLine.scale = this.scale;\n crossLine.gridLength = this.gridLength;\n };\n Axis.prototype.isAnySeriesActive = function () {\n return false;\n };\n Axis.prototype.clipTickLines = function (x, y, width, height) {\n this.tickLineGroup.setClipRectInGroupCoordinateSpace(new BBox(x, y, width, height));\n };\n Axis.prototype.clipGrid = function (x, y, width, height) {\n this.gridGroup.setClipRectInGroupCoordinateSpace(new BBox(x, y, width, height));\n };\n Axis.prototype.calculatePadding = function (min, _max) {\n return Math.abs(min * 0.01);\n };\n Axis.defaultTickMinSpacing = 50;\n __decorate([\n Validate(BOOLEAN)\n ], Axis.prototype, \"nice\", void 0);\n __decorate([\n Validate(GRID_STYLE)\n ], Axis.prototype, \"gridStyle\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Axis.prototype, \"thickness\", void 0);\n return Axis;\n}());\nexport { Axis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { ContinuousScale } from './continuousScale';\nimport ticks, { range, tickStep, singleTickDomain } from '../util/ticks';\nimport { tickFormat } from '../util/numberFormat';\n/**\n * Maps continuous domain to a continuous range.\n */\nvar LinearScale = /** @class */ (function (_super) {\n __extends(LinearScale, _super);\n function LinearScale() {\n var _this = _super.call(this, [0, 1], [0, 1]) || this;\n _this.type = 'linear';\n return _this;\n }\n LinearScale.prototype.toDomain = function (d) {\n return d;\n };\n LinearScale.prototype.ticks = function () {\n var _a;\n var count = (_a = this.tickCount) !== null && _a !== void 0 ? _a : ContinuousScale.defaultTickCount;\n if (!this.domain || this.domain.length < 2 || count < 1 || this.domain.some(function (d) { return !isFinite(d); })) {\n return [];\n }\n this.refresh();\n var _b = __read(this.getDomain(), 2), d0 = _b[0], d1 = _b[1];\n var interval = this.interval;\n if (interval) {\n var step = Math.abs(interval);\n if (!this.isDenseInterval({ start: d0, stop: d1, interval: step })) {\n return range(d0, d1, step);\n }\n }\n return ticks(d0, d1, count, this.minTickCount, this.maxTickCount);\n };\n LinearScale.prototype.update = function () {\n if (!this.domain || this.domain.length < 2) {\n return;\n }\n if (this.nice) {\n this.updateNiceDomain();\n }\n };\n /**\n * Extends the domain so that it starts and ends on nice round values.\n * @param count Tick count.\n */\n LinearScale.prototype.updateNiceDomain = function () {\n var _a, _b;\n var count = (_a = this.tickCount) !== null && _a !== void 0 ? _a : ContinuousScale.defaultTickCount;\n var _c = __read(this.domain, 2), start = _c[0], stop = _c[1];\n if (count < 1) {\n this.niceDomain = [start, stop];\n return;\n }\n if (count === 1) {\n this.niceDomain = singleTickDomain(start, stop);\n return;\n }\n var maxAttempts = 4;\n var prev0 = start;\n var prev1 = stop;\n for (var i = 0; i < maxAttempts; i++) {\n var step = (_b = this.interval) !== null && _b !== void 0 ? _b : tickStep(start, stop, count, this.minTickCount, this.maxTickCount);\n var _d = __read(this.domain, 2), d0 = _d[0], d1 = _d[1];\n if (step >= 1) {\n start = Math.floor(d0 / step) * step;\n stop = Math.ceil(d1 / step) * step;\n }\n else {\n // Prevent floating point error\n var s = 1 / step;\n start = Math.floor(d0 * s) / s;\n stop = Math.ceil(d1 * s) / s;\n }\n if (start === prev0 && stop === prev1) {\n break;\n }\n prev0 = start;\n prev1 = stop;\n }\n this.niceDomain = [start, stop];\n };\n LinearScale.prototype.tickFormat = function (_a) {\n var ticks = _a.ticks, specifier = _a.specifier;\n return tickFormat(ticks || this.ticks(), specifier);\n };\n return LinearScale;\n}(ContinuousScale));\nexport { LinearScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { Axis } from '../axis';\nimport { ChartAxisDirection } from './chartAxisDirection';\nimport { LinearScale } from '../scale/linearScale';\nimport { ContinuousScale } from '../scale/continuousScale';\nimport { POSITION, STRING_ARRAY, Validate } from '../util/validation';\nexport function flipChartAxisDirection(direction) {\n if (direction === ChartAxisDirection.X) {\n return ChartAxisDirection.Y;\n }\n else {\n return ChartAxisDirection.X;\n }\n}\nvar ChartAxis = /** @class */ (function (_super) {\n __extends(ChartAxis, _super);\n function ChartAxis(moduleCtx, scale) {\n var _this = _super.call(this, scale) || this;\n _this.moduleCtx = moduleCtx;\n _this.keys = [];\n _this.direction = ChartAxisDirection.Y;\n _this.boundSeries = [];\n _this.includeInvisibleDomains = false;\n _this.modules = {};\n _this._position = 'left';\n return _this;\n }\n Object.defineProperty(ChartAxis.prototype, \"type\", {\n get: function () {\n return this.constructor.type || '';\n },\n enumerable: false,\n configurable: true\n });\n ChartAxis.prototype.useCalculatedTickCount = function () {\n // We only want to use the new algorithm for number axes. Category axes don't use a\n // calculated or user-supplied tick-count, and time axes need special handling depending on\n // the time-range involved.\n return this.scale instanceof LinearScale;\n };\n Object.defineProperty(ChartAxis.prototype, \"position\", {\n get: function () {\n return this._position;\n },\n set: function (value) {\n if (this._position !== value) {\n this._position = value;\n switch (value) {\n case 'top':\n this.direction = ChartAxisDirection.X;\n this.rotation = -90;\n this.label.mirrored = true;\n this.label.parallel = true;\n break;\n case 'right':\n this.direction = ChartAxisDirection.Y;\n this.rotation = 0;\n this.label.mirrored = true;\n this.label.parallel = false;\n break;\n case 'bottom':\n this.direction = ChartAxisDirection.X;\n this.rotation = -90;\n this.label.mirrored = false;\n this.label.parallel = true;\n break;\n case 'left':\n this.direction = ChartAxisDirection.Y;\n this.rotation = 0;\n this.label.mirrored = false;\n this.label.parallel = false;\n break;\n }\n if (this.axisContext) {\n this.axisContext.position = value;\n this.axisContext.direction = this.direction;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n ChartAxis.prototype.calculateDomain = function () {\n var _a;\n var _b = this, direction = _b.direction, boundSeries = _b.boundSeries, includeInvisibleDomains = _b.includeInvisibleDomains;\n if (this.linkedTo) {\n this.dataDomain = this.linkedTo.dataDomain;\n }\n else {\n var domains_1 = [];\n boundSeries\n .filter(function (s) { return includeInvisibleDomains || s.isEnabled(); })\n .forEach(function (series) {\n domains_1.push(series.getDomain(direction));\n });\n var domain = (_a = new Array()).concat.apply(_a, __spread(domains_1));\n this.dataDomain = this.normaliseDataDomain(domain);\n }\n };\n ChartAxis.prototype.normaliseDataDomain = function (d) {\n return d;\n };\n ChartAxis.prototype.isAnySeriesActive = function () {\n var _this = this;\n return this.boundSeries.some(function (s) { return _this.includeInvisibleDomains || s.isEnabled(); });\n };\n ChartAxis.prototype.getLayoutState = function () {\n return __assign({ rect: this.computeBBox(), gridPadding: this.gridPadding, seriesAreaPadding: this.seriesAreaPadding, tickSize: this.tick.size }, this.layout);\n };\n ChartAxis.prototype.addModule = function (module) {\n var _this = this;\n if (this.modules[module.optionsKey] != null) {\n throw new Error('AG Charts - module already initialised: ' + module.optionsKey);\n }\n if (this.axisContext == null) {\n var keys = function () {\n return _this.boundSeries\n .map(function (s) { return s.getKeys(_this.direction); })\n .reduce(function (keys, seriesKeys) {\n keys.push.apply(keys, __spread(seriesKeys));\n return keys;\n }, []);\n };\n this.axisContext = {\n axisId: this.id,\n position: this.position,\n direction: this.direction,\n continuous: this.scale instanceof ContinuousScale,\n keys: keys,\n scaleValueFormatter: function (specifier) { var _a, _b, _c; return (_c = (_b = (_a = _this.scale).tickFormat) === null || _b === void 0 ? void 0 : _b.call(_a, { specifier: specifier })) !== null && _c !== void 0 ? _c : undefined; },\n scaleBandwidth: function () { var _a; return (_a = _this.scale.bandwidth) !== null && _a !== void 0 ? _a : 0; },\n scaleConvert: function (val) { return _this.scale.convert(val); },\n scaleInvert: function (val) { var _a, _b, _c; return (_c = (_b = (_a = _this.scale).invert) === null || _b === void 0 ? void 0 : _b.call(_a, val)) !== null && _c !== void 0 ? _c : undefined; },\n };\n }\n var moduleMeta = module.initialiseModule(__assign(__assign({}, this.moduleCtx), { parent: this.axisContext }));\n this.modules[module.optionsKey] = moduleMeta;\n this[module.optionsKey] = moduleMeta.instance;\n };\n ChartAxis.prototype.removeModule = function (module) {\n var _a, _b;\n (_b = (_a = this.modules[module.optionsKey]) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.destroy();\n delete this.modules[module.optionsKey];\n delete this[module.optionsKey];\n };\n ChartAxis.prototype.isModuleEnabled = function (module) {\n return this.modules[module.optionsKey] != null;\n };\n ChartAxis.prototype.destroy = function () {\n var e_1, _a;\n _super.prototype.destroy.call(this);\n try {\n for (var _b = __values(Object.entries(this.modules)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], module_1 = _d[1];\n module_1.instance.destroy();\n delete this.modules[key];\n delete this[key];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n __decorate([\n Validate(STRING_ARRAY)\n ], ChartAxis.prototype, \"keys\", void 0);\n __decorate([\n Validate(POSITION)\n ], ChartAxis.prototype, \"_position\", void 0);\n return ChartAxis;\n}(Axis));\nexport { ChartAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { NUMBER, Validate } from '../../util/validation';\nimport { BandScale } from '../../scale/bandScale';\nimport { ChartAxis } from '../chartAxis';\nvar CategoryAxis = /** @class */ (function (_super) {\n __extends(CategoryAxis, _super);\n function CategoryAxis(moduleCtx) {\n var _this = _super.call(this, moduleCtx, new BandScale()) || this;\n _this._paddingOverrideEnabled = false;\n _this.groupPaddingInner = 0.1;\n _this.includeInvisibleDomains = true;\n return _this;\n }\n Object.defineProperty(CategoryAxis.prototype, \"paddingInner\", {\n get: function () {\n this._paddingOverrideEnabled = true;\n return this.scale.paddingInner;\n },\n set: function (value) {\n this._paddingOverrideEnabled = true;\n this.scale.paddingInner = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryAxis.prototype, \"paddingOuter\", {\n get: function () {\n return this.scale.paddingOuter;\n },\n set: function (value) {\n this.scale.paddingOuter = value;\n },\n enumerable: false,\n configurable: true\n });\n CategoryAxis.prototype.normaliseDataDomain = function (d) {\n // Prevent duplicate categories.\n var valuesSet = new Set(d);\n return new (Array.bind.apply(Array, __spread([void 0], valuesSet.values())))();\n };\n CategoryAxis.prototype.calculateDomain = function () {\n if (!this._paddingOverrideEnabled) {\n var boundSeries = this.boundSeries;\n var paddings = boundSeries.map(function (s) { var _a; return (_a = s.getBandScalePadding) === null || _a === void 0 ? void 0 : _a.call(s); }).filter(function (p) { return p != null; });\n if (paddings.length > 0) {\n this.scale.paddingInner = Math.min.apply(Math, __spread(paddings.map(function (p) { return p.inner; })));\n this.scale.paddingOuter = Math.max.apply(Math, __spread(paddings.map(function (p) { return p.outer; })));\n }\n }\n return _super.prototype.calculateDomain.call(this);\n };\n CategoryAxis.className = 'CategoryAxis';\n CategoryAxis.type = 'category';\n __decorate([\n Validate(NUMBER(0, 1))\n ], CategoryAxis.prototype, \"groupPaddingInner\", void 0);\n return CategoryAxis;\n}(ChartAxis));\nexport { CategoryAxis };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { Logger } from './logger';\n/**\n * Performs a JSON-diff between a source and target JSON structure.\n *\n * On a per property basis, takes the target property value where:\n * - types are different.\n * - type is primitive.\n * - type is array and length or content have changed.\n *\n * Recurses for object types.\n *\n * @param source starting point for diff\n * @param target target for diff vs. source\n *\n * @returns `null` if no differences, or an object with the subset of properties that have changed.\n */\nexport function jsonDiff(source, target) {\n var e_1, _a;\n var sourceType = classify(source);\n var targetType = classify(target);\n if (targetType === 'array') {\n var targetArray = target;\n if (sourceType !== 'array' || source.length !== targetArray.length) {\n return __spread(targetArray);\n }\n if (targetArray.some(function (targetElement, i) { var _a; return jsonDiff((_a = source) === null || _a === void 0 ? void 0 : _a[i], targetElement) != null; })) {\n return __spread(targetArray);\n }\n return null;\n }\n if (targetType === 'primitive') {\n if (sourceType !== 'primitive') {\n return __assign({}, target);\n }\n if (source !== target) {\n return target;\n }\n return null;\n }\n var lhs = source || {};\n var rhs = target || {};\n var allProps = new Set(__spread(Object.keys(lhs), Object.keys(rhs)));\n var propsChangedCount = 0;\n var result = {};\n var _loop_1 = function (prop) {\n // Cheap-and-easy equality check.\n if (lhs[prop] === rhs[prop]) {\n return \"continue\";\n }\n var take = function (v) {\n result[prop] = v;\n propsChangedCount++;\n };\n var lhsType = classify(lhs[prop]);\n var rhsType = classify(rhs[prop]);\n if (lhsType !== rhsType) {\n // Types changed, just take RHS.\n take(rhs[prop]);\n return \"continue\";\n }\n if (rhsType === 'primitive' || rhsType === null) {\n take(rhs[prop]);\n return \"continue\";\n }\n if (rhsType === 'array' && lhs[prop].length !== rhs[prop].length) {\n // Arrays are different sizes, so just take target array.\n take(rhs[prop]);\n return \"continue\";\n }\n if (rhsType === 'class-instance') {\n // Don't try to do anything tricky with array diffs!\n take(rhs[prop]);\n return \"continue\";\n }\n if (rhsType === 'function' && lhs[prop] !== rhs[prop]) {\n take(rhs[prop]);\n return \"continue\";\n }\n var diff = jsonDiff(lhs[prop], rhs[prop]);\n if (diff !== null) {\n take(diff);\n }\n };\n try {\n for (var allProps_1 = __values(allProps), allProps_1_1 = allProps_1.next(); !allProps_1_1.done; allProps_1_1 = allProps_1.next()) {\n var prop = allProps_1_1.value;\n _loop_1(prop);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allProps_1_1 && !allProps_1_1.done && (_a = allProps_1.return)) _a.call(allProps_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return propsChangedCount === 0 ? null : result;\n}\n/**\n * Special value used by `jsonMerge` to signal that a property should be removed from the merged\n * output.\n */\nexport var DELETE = Symbol('');\nvar NOT_SPECIFIED = Symbol('');\n/**\n * Merge together the provide JSON object structures, with the precedence of application running\n * from higher indexes to lower indexes.\n *\n * Deep-clones all objects to avoid mutation of the inputs changing the output object. For arrays,\n * just performs a deep-clone of the entire array, no merging of elements attempted.\n *\n * @param json all json objects to merge\n * @param opts merge options\n * @param opts.avoidDeepClone contains a list of properties where deep clones should be avoided\n *\n * @returns the combination of all of the json inputs\n */\nexport function jsonMerge(json, opts) {\n var e_2, _a;\n var avoidDeepClone = (opts === null || opts === void 0 ? void 0 : opts.avoidDeepClone) || [];\n var jsonTypes = json.map(function (v) { return classify(v); });\n if (jsonTypes.some(function (v) { return v === 'array'; })) {\n // Clone final array.\n var finalValue = json[json.length - 1];\n if (finalValue instanceof Array) {\n return finalValue.map(function (v) {\n var type = classify(v);\n if (type === 'array')\n return jsonMerge([[], v], opts);\n if (type === 'object')\n return jsonMerge([{}, v], opts);\n return v;\n });\n }\n return finalValue;\n }\n var result = {};\n var props = new Set(json.map(function (v) { return (v != null ? Object.keys(v) : []); }).reduce(function (r, n) { return r.concat(n); }, []));\n var _loop_2 = function (nextProp) {\n var values = json\n .map(function (j) { return (j != null && nextProp in j ? j[nextProp] : NOT_SPECIFIED); })\n .filter(function (v) { return v !== NOT_SPECIFIED; });\n if (values.length === 0) {\n return \"continue\";\n }\n var lastValue = values[values.length - 1];\n if (lastValue === DELETE) {\n return \"continue\";\n }\n var types = values.map(function (v) { return classify(v); });\n var type = types[0];\n if (types.some(function (t) { return t !== type; })) {\n // Short-circuit if mismatching types.\n result[nextProp] = lastValue;\n return \"continue\";\n }\n if ((type === 'array' || type === 'object') && !avoidDeepClone.includes(nextProp)) {\n result[nextProp] = jsonMerge(values, opts);\n }\n else if (type === 'array') {\n // Arrays need to be shallow copied to avoid external mutation and allow jsonDiff to\n // detect changes.\n result[nextProp] = __spread(lastValue);\n }\n else {\n // Just directly assign/overwrite.\n result[nextProp] = lastValue;\n }\n };\n try {\n for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n var nextProp = props_1_1.value;\n _loop_2(nextProp);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return result;\n}\n/**\n * Recursively apply a JSON object into a class-hierarchy, optionally instantiating certain classes\n * by property name.\n *\n * @param target to apply source JSON properties into\n * @param source to be applied\n * @param params.path path for logging/error purposes, to aid with pinpointing problems\n * @param params.matcherPath path for pattern matching, to lookup allowedTypes override.\n * @param params.skip property names to skip from the source\n * @param params.constructors dictionary of property name to class constructors for properties that\n * require object construction\n * @param params.allowedTypes overrides by path for allowed property types\n */\nexport function jsonApply(target, source, params) {\n var _a;\n if (params === void 0) { params = {}; }\n var _b = params.path, path = _b === void 0 ? undefined : _b, _c = params.matcherPath, matcherPath = _c === void 0 ? path ? path.replace(/(\\[[0-9+]+\\])/i, '[]') : undefined : _c, _d = params.skip, skip = _d === void 0 ? [] : _d, _e = params.constructors, constructors = _e === void 0 ? {} : _e, _f = params.allowedTypes, allowedTypes = _f === void 0 ? {} : _f, idx = params.idx;\n if (target == null) {\n throw new Error(\"AG Charts - target is uninitialised: \" + (path || ''));\n }\n if (source == null) {\n return target;\n }\n var targetAny = target;\n if (idx != null && '_declarationOrder' in targetAny) {\n targetAny['_declarationOrder'] = idx;\n }\n var targetType = classify(target);\n var _loop_3 = function (property) {\n var propertyMatcherPath = \"\" + (matcherPath ? matcherPath + '.' : '') + property;\n if (skip.indexOf(propertyMatcherPath) >= 0) {\n return \"continue\";\n }\n var newValue = source[property];\n var propertyPath = \"\" + (path ? path + '.' : '') + property;\n var targetClass = targetAny.constructor;\n var currentValue = targetAny[property];\n var ctr = (_a = constructors[property]) !== null && _a !== void 0 ? _a : constructors[propertyMatcherPath];\n try {\n var currentValueType = classify(currentValue);\n var newValueType = classify(newValue);\n if (targetType === 'class-instance' &&\n !(property in target || Object.prototype.hasOwnProperty.call(targetAny, property))) {\n Logger.warn(\"unable to set [\" + propertyPath + \"] in \" + (targetClass === null || targetClass === void 0 ? void 0 : targetClass.name) + \" - property is unknown\");\n return \"continue\";\n }\n var allowableTypes = allowedTypes[propertyMatcherPath] || [currentValueType];\n if (currentValueType === 'class-instance' && newValueType === 'object') {\n // Allowed, this is the common case! - do not error.\n }\n else if (currentValueType != null && newValueType != null && !allowableTypes.includes(newValueType)) {\n Logger.warn(\"unable to set [\" + propertyPath + \"] in \" + (targetClass === null || targetClass === void 0 ? void 0 : targetClass.name) + \" - can't apply type of [\" + newValueType + \"], allowed types are: [\" + allowableTypes + \"]\");\n return \"continue\";\n }\n if (newValueType === 'array') {\n ctr = ctr !== null && ctr !== void 0 ? ctr : constructors[propertyMatcherPath + \"[]\"];\n if (ctr != null) {\n var newValueArray = newValue;\n targetAny[property] = newValueArray.map(function (v, idx) {\n return jsonApply(new ctr(), v, __assign(__assign({}, params), { path: propertyPath, matcherPath: propertyMatcherPath + '[]', idx: idx }));\n });\n }\n else {\n targetAny[property] = newValue;\n }\n }\n else if (newValueType === 'class-instance') {\n targetAny[property] = newValue;\n }\n else if (newValueType === 'object') {\n if (currentValue != null) {\n jsonApply(currentValue, newValue, __assign(__assign({}, params), { path: propertyPath, matcherPath: propertyMatcherPath, idx: undefined }));\n }\n else if (ctr != null) {\n targetAny[property] = jsonApply(new ctr(), newValue, __assign(__assign({}, params), { path: propertyPath, matcherPath: propertyMatcherPath, idx: undefined }));\n }\n else {\n targetAny[property] = newValue;\n }\n }\n else {\n targetAny[property] = newValue;\n }\n }\n catch (error) {\n var err = error;\n Logger.warn(\"unable to set [\" + propertyPath + \"] in [\" + (targetClass === null || targetClass === void 0 ? void 0 : targetClass.name) + \"]; nested error is: \" + err.message);\n return \"continue\";\n }\n };\n for (var property in source) {\n _loop_3(property);\n }\n return target;\n}\n/**\n * Walk the given JSON object graphs, invoking the visit() callback for every object encountered.\n * Arrays are descended into without a callback, however their elements will have the visit()\n * callback invoked if they are objects.\n *\n * @param json to traverse\n * @param visit callback for each non-primitive and non-array object found\n * @param opts.skip property names to skip when walking\n * @param jsons to traverse in parallel\n */\nexport function jsonWalk(json, visit, opts) {\n var jsons = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n jsons[_i - 3] = arguments[_i];\n }\n var jsonType = classify(json);\n var skip = opts.skip || [];\n if (jsonType === 'array') {\n json.forEach(function (element, index) {\n jsonWalk.apply(void 0, __spread([element, visit, opts], (jsons !== null && jsons !== void 0 ? jsons : []).map(function (o) { return o === null || o === void 0 ? void 0 : o[index]; })));\n });\n return;\n }\n else if (jsonType !== 'object') {\n return;\n }\n visit.apply(void 0, __spread([jsonType, json], jsons));\n var _loop_4 = function (property) {\n if (skip.indexOf(property) >= 0) {\n return \"continue\";\n }\n var value = json[property];\n var otherValues = jsons === null || jsons === void 0 ? void 0 : jsons.map(function (o) { return o === null || o === void 0 ? void 0 : o[property]; });\n var valueType = classify(value);\n if (valueType === 'object' || valueType === 'array') {\n jsonWalk.apply(void 0, __spread([value, visit, opts], otherValues));\n }\n };\n for (var property in json) {\n _loop_4(property);\n }\n}\n/**\n * Classify the type of a value to assist with handling for merge purposes.\n */\nfunction classify(value) {\n if (value == null) {\n return null;\n }\n else if (value instanceof HTMLElement) {\n return 'primitive';\n }\n else if (value instanceof Array) {\n return 'array';\n }\n else if (value instanceof Date) {\n return 'primitive';\n }\n else if (typeof value === 'object' && value.constructor === Object) {\n return 'object';\n }\n else if (typeof value === 'function') {\n return 'function';\n }\n else if (typeof value === 'object' && value.constructor != null) {\n return 'class-instance';\n }\n return 'primitive';\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar _a;\nimport { Series, SeriesNodeBaseClickEvent, } from '../series';\nimport { SeriesMarker } from '../seriesMarker';\nimport { isContinuous, isDiscrete } from '../../../util/value';\nimport { ContinuousScale } from '../../../scale/continuousScale';\nimport { Path } from '../../../scene/shape/path';\nimport { Selection } from '../../../scene/selection';\nimport { Group } from '../../../scene/group';\nimport { Text } from '../../../scene/shape/text';\nimport { RedrawType, SceneChangeDetection } from '../../../scene/changeDetectable';\nimport { CategoryAxis } from '../../axis/categoryAxis';\nimport { Layers } from '../../layers';\nimport { OPT_FUNCTION, Validate } from '../../../util/validation';\nimport { jsonDiff } from '../../../util/json';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { getMarker } from '../../marker/util';\nimport { Logger } from '../../../util/logger';\nvar DEFAULT_DIRECTION_KEYS = (_a = {},\n _a[ChartAxisDirection.X] = ['xKey'],\n _a[ChartAxisDirection.Y] = ['yKey'],\n _a);\nvar CartesianSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n __extends(CartesianSeriesNodeBaseClickEvent, _super);\n function CartesianSeriesNodeBaseClickEvent(xKey, yKey, nativeEvent, datum, series) {\n var _this = _super.call(this, nativeEvent, datum, series) || this;\n _this.xKey = xKey;\n _this.yKey = yKey;\n return _this;\n }\n return CartesianSeriesNodeBaseClickEvent;\n}(SeriesNodeBaseClickEvent));\nexport { CartesianSeriesNodeBaseClickEvent };\nvar CartesianSeriesNodeClickEvent = /** @class */ (function (_super) {\n __extends(CartesianSeriesNodeClickEvent, _super);\n function CartesianSeriesNodeClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeClick';\n return _this;\n }\n return CartesianSeriesNodeClickEvent;\n}(CartesianSeriesNodeBaseClickEvent));\nexport { CartesianSeriesNodeClickEvent };\nvar CartesianSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n __extends(CartesianSeriesNodeDoubleClickEvent, _super);\n function CartesianSeriesNodeDoubleClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeDoubleClick';\n return _this;\n }\n return CartesianSeriesNodeDoubleClickEvent;\n}(CartesianSeriesNodeBaseClickEvent));\nexport { CartesianSeriesNodeDoubleClickEvent };\nvar CartesianSeries = /** @class */ (function (_super) {\n __extends(CartesianSeries, _super);\n function CartesianSeries(opts) {\n if (opts === void 0) { opts = {}; }\n var _a;\n var _this = _super.call(this, {\n useSeriesGroupLayer: true,\n pickModes: opts.pickModes,\n directionKeys: (_a = opts.directionKeys) !== null && _a !== void 0 ? _a : DEFAULT_DIRECTION_KEYS,\n }) || this;\n _this._contextNodeData = [];\n _this.nodeDataDependencies = {};\n _this.highlightSelection = Selection.select(_this.highlightNode, function () {\n return _this.opts.hasMarkers ? _this.markerFactory() : _this.nodeFactory();\n });\n _this.highlightLabelSelection = Selection.select(_this.highlightLabel, Text);\n _this.subGroups = [];\n _this.subGroupId = 0;\n /**\n * The assumption is that the values will be reset (to `true`)\n * in the {@link yKeys} setter.\n */\n _this.seriesItemEnabled = new Map();\n var _b = opts.pathsPerSeries, pathsPerSeries = _b === void 0 ? 1 : _b, _c = opts.hasMarkers, hasMarkers = _c === void 0 ? false : _c, _d = opts.pathsZIndexSubOrderOffset, pathsZIndexSubOrderOffset = _d === void 0 ? [] : _d, _e = opts.renderLayerPerSubSeries, renderLayerPerSubSeries = _e === void 0 ? true : _e;\n _this.opts = { pathsPerSeries: pathsPerSeries, hasMarkers: hasMarkers, pathsZIndexSubOrderOffset: pathsZIndexSubOrderOffset, renderLayerPerSubSeries: renderLayerPerSubSeries };\n return _this;\n }\n Object.defineProperty(CartesianSeries.prototype, \"contextNodeData\", {\n get: function () {\n var _a;\n return (_a = this._contextNodeData) === null || _a === void 0 ? void 0 : _a.slice();\n },\n enumerable: false,\n configurable: true\n });\n CartesianSeries.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this._contextNodeData.splice(0, this._contextNodeData.length);\n this.subGroups.splice(0, this.subGroups.length);\n };\n /**\n * Note: we are passing `isContinuousX` and `isContinuousY` into this method because it will\n * typically be called inside a loop and this check only needs to happen once.\n * @param x A domain value to be plotted along the x-axis.\n * @param y A domain value to be plotted along the y-axis.\n * @param isContinuousX Typically this will be the value of `xAxis.scale instanceof ContinuousScale`.\n * @param isContinuousY Typically this will be the value of `yAxis.scale instanceof ContinuousScale`.\n * @returns `[x, y]`, if both x and y are valid domain values for their respective axes/scales, or `undefined`.\n */\n CartesianSeries.prototype.checkDomainXY = function (x, y, isContinuousX, isContinuousY) {\n var isValidDatum = ((isContinuousX && isContinuous(x)) || (!isContinuousX && isDiscrete(x))) &&\n ((isContinuousY && isContinuous(y)) || (!isContinuousY && isDiscrete(y)));\n return isValidDatum ? [x, y] : undefined;\n };\n /**\n * Note: we are passing the xAxis and yAxis because the calling code is supposed to make sure\n * that series has both of them defined, and also to avoid one level of indirection,\n * e.g. `this.xAxis!.inRange(x)`, both of which are suboptimal in tight loops where this method is used.\n * @param x A range value to be plotted along the x-axis.\n * @param y A range value to be plotted along the y-axis.\n * @param xAxis The series' x-axis.\n * @param yAxis The series' y-axis.\n * @returns\n */\n CartesianSeries.prototype.checkRangeXY = function (x, y, xAxis, yAxis) {\n return !isNaN(x) && !isNaN(y) && xAxis.inRange(x) && yAxis.inRange(y);\n };\n CartesianSeries.prototype.update = function (_a) {\n var _b, _c;\n var seriesRect = _a.seriesRect;\n return __awaiter(this, void 0, void 0, function () {\n var _d, seriesItemEnabled, visible, series, seriesHighlighted, anySeriesItemEnabled, newNodeDataDependencies;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _d = this, seriesItemEnabled = _d.seriesItemEnabled, visible = _d.visible;\n series = ((_c = (_b = this.highlightManager) === null || _b === void 0 ? void 0 : _b.getActiveHighlight()) !== null && _c !== void 0 ? _c : {}).series;\n seriesHighlighted = series ? series === this : undefined;\n anySeriesItemEnabled = (visible && seriesItemEnabled.size === 0) || __spread(seriesItemEnabled.values()).some(function (v) { return v === true; });\n newNodeDataDependencies = {\n seriesRectWidth: seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width,\n seriesRectHeight: seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.height,\n };\n if (jsonDiff(this.nodeDataDependencies, newNodeDataDependencies) != null) {\n this.nodeDataDependencies = newNodeDataDependencies;\n this.markNodeDataDirty();\n }\n return [4 /*yield*/, this.updateSelections(seriesHighlighted, anySeriesItemEnabled)];\n case 1:\n _e.sent();\n return [4 /*yield*/, this.updateNodes(seriesHighlighted, anySeriesItemEnabled)];\n case 2:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CartesianSeries.prototype.updateSelections = function (seriesHighlighted, anySeriesItemEnabled) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.updateHighlightSelection(seriesHighlighted)];\n case 1:\n _b.sent();\n if (!anySeriesItemEnabled) {\n return [2 /*return*/];\n }\n if (!this.nodeDataRefresh && !this.isPathOrSelectionDirty()) {\n return [2 /*return*/];\n }\n if (!this.nodeDataRefresh) return [3 /*break*/, 4];\n this.nodeDataRefresh = false;\n _a = this;\n return [4 /*yield*/, this.createNodeData()];\n case 2:\n _a._contextNodeData = _b.sent();\n return [4 /*yield*/, this.updateSeriesGroups()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [4 /*yield*/, Promise.all(this.subGroups.map(function (g, i) { return _this.updateSeriesGroupSelections(g, i, seriesHighlighted); }))];\n case 5:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CartesianSeries.prototype.updateSeriesGroupSelections = function (subGroup, seriesIdx, seriesHighlighted) {\n return __awaiter(this, void 0, void 0, function () {\n var datumSelection, labelSelection, markerSelection, paths, contextData, nodeData, labelData, itemId, _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n datumSelection = subGroup.datumSelection, labelSelection = subGroup.labelSelection, markerSelection = subGroup.markerSelection, paths = subGroup.paths;\n contextData = this._contextNodeData[seriesIdx];\n nodeData = contextData.nodeData, labelData = contextData.labelData, itemId = contextData.itemId;\n return [4 /*yield*/, this.updatePaths({ seriesHighlighted: seriesHighlighted, itemId: itemId, contextData: contextData, paths: paths, seriesIdx: seriesIdx })];\n case 1:\n _d.sent();\n _a = subGroup;\n return [4 /*yield*/, this.updateDatumSelection({ nodeData: nodeData, datumSelection: datumSelection, seriesIdx: seriesIdx })];\n case 2:\n _a.datumSelection = _d.sent();\n _b = subGroup;\n return [4 /*yield*/, this.updateLabelSelection({ labelData: labelData, labelSelection: labelSelection, seriesIdx: seriesIdx })];\n case 3:\n _b.labelSelection = _d.sent();\n if (!markerSelection) return [3 /*break*/, 5];\n _c = subGroup;\n return [4 /*yield*/, this.updateMarkerSelection({\n nodeData: nodeData,\n markerSelection: markerSelection,\n seriesIdx: seriesIdx,\n })];\n case 4:\n _c.markerSelection = _d.sent();\n _d.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n CartesianSeries.prototype.nodeFactory = function () {\n return new Group();\n };\n CartesianSeries.prototype.markerFactory = function () {\n var MarkerShape = getMarker();\n return new MarkerShape();\n };\n CartesianSeries.prototype.updateSeriesGroups = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var _b, contextNodeData, contentGroup, subGroups, _c, pathsPerSeries, hasMarkers, pathsZIndexSubOrderOffset, renderLayerPerSubSeries, totalGroups, layer, subGroupId, subGroupZOffset, dataNodeGroup, markerGroup, labelGroup, pathParentGroup, paths, index;\n var _this = this;\n return __generator(this, function (_d) {\n _b = this, contextNodeData = _b._contextNodeData, contentGroup = _b.contentGroup, subGroups = _b.subGroups, _c = _b.opts, pathsPerSeries = _c.pathsPerSeries, hasMarkers = _c.hasMarkers, pathsZIndexSubOrderOffset = _c.pathsZIndexSubOrderOffset, renderLayerPerSubSeries = _c.renderLayerPerSubSeries;\n if (contextNodeData.length === subGroups.length) {\n return [2 /*return*/];\n }\n if (contextNodeData.length < subGroups.length) {\n subGroups.splice(contextNodeData.length).forEach(function (_a) {\n var e_1, _b;\n var dataNodeGroup = _a.dataNodeGroup, markerGroup = _a.markerGroup, labelGroup = _a.labelGroup, paths = _a.paths;\n contentGroup.removeChild(dataNodeGroup);\n if (markerGroup) {\n contentGroup.removeChild(markerGroup);\n }\n if (labelGroup) {\n contentGroup.removeChild(labelGroup);\n }\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var path = paths_1_1.value;\n contentGroup.removeChild(path);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_b = paths_1.return)) _b.call(paths_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n });\n }\n totalGroups = contextNodeData.length;\n while (totalGroups > subGroups.length) {\n layer = renderLayerPerSubSeries;\n subGroupId = this.subGroupId++;\n subGroupZOffset = subGroupId;\n dataNodeGroup = new Group({\n name: this.id + \"-series-sub\" + subGroupId + \"-dataNodes\",\n layer: layer,\n zIndex: Layers.SERIES_LAYER_ZINDEX,\n zIndexSubOrder: [function () { return _this._declarationOrder; }, subGroupZOffset],\n });\n markerGroup = hasMarkers\n ? new Group({\n name: this.id + \"-series-sub\" + this.subGroupId++ + \"-markers\",\n layer: layer,\n zIndex: Layers.SERIES_LAYER_ZINDEX,\n zIndexSubOrder: [function () { return _this._declarationOrder; }, 10000 + subGroupId],\n })\n : undefined;\n labelGroup = new Group({\n name: this.id + \"-series-sub\" + this.subGroupId++ + \"-labels\",\n layer: layer,\n zIndex: Layers.SERIES_LABEL_ZINDEX,\n zIndexSubOrder: [function () { return _this._declarationOrder; }, subGroupId],\n });\n contentGroup.appendChild(dataNodeGroup);\n contentGroup.appendChild(labelGroup);\n if (markerGroup) {\n contentGroup.appendChild(markerGroup);\n }\n pathParentGroup = renderLayerPerSubSeries ? dataNodeGroup : contentGroup;\n paths = [];\n for (index = 0; index < pathsPerSeries; index++) {\n paths[index] = new Path();\n paths[index].zIndex = Layers.SERIES_LAYER_ZINDEX;\n paths[index].zIndexSubOrder = [\n function () { return _this._declarationOrder; },\n ((_a = pathsZIndexSubOrderOffset[index]) !== null && _a !== void 0 ? _a : 0) + subGroupZOffset,\n ];\n pathParentGroup.appendChild(paths[index]);\n }\n subGroups.push({\n paths: paths,\n dataNodeGroup: dataNodeGroup,\n markerGroup: markerGroup,\n labelGroup: labelGroup,\n labelSelection: Selection.select(labelGroup, Text),\n datumSelection: Selection.select(dataNodeGroup, function () { return _this.nodeFactory(); }),\n markerSelection: markerGroup ? Selection.select(markerGroup, function () { return _this.markerFactory(); }) : undefined,\n });\n }\n return [2 /*return*/];\n });\n });\n };\n CartesianSeries.prototype.updateNodes = function (seriesHighlighted, anySeriesItemEnabled) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var _b, highlightSelection, highlightLabelSelection, contextNodeData, seriesItemEnabled, _c, hasMarkers, renderLayerPerSubSeries, visible, seriesOpacity, subGroupOpacities, isSubGroupOpacityDifferent;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _b = this, highlightSelection = _b.highlightSelection, highlightLabelSelection = _b.highlightLabelSelection, contextNodeData = _b._contextNodeData, seriesItemEnabled = _b.seriesItemEnabled, _c = _b.opts, hasMarkers = _c.hasMarkers, renderLayerPerSubSeries = _c.renderLayerPerSubSeries;\n visible = this.visible && ((_a = this._contextNodeData) === null || _a === void 0 ? void 0 : _a.length) > 0 && anySeriesItemEnabled;\n this.rootGroup.visible = visible;\n this.contentGroup.visible = visible;\n this.highlightGroup.visible = visible && !!seriesHighlighted;\n seriesOpacity = this.getOpacity();\n subGroupOpacities = this.subGroups.map(function (_, index) {\n var itemId = contextNodeData[index].itemId;\n return _this.getOpacity({ itemId: itemId });\n });\n isSubGroupOpacityDifferent = subGroupOpacities.some(function (subOp) { return subOp !== seriesOpacity; });\n this.contentGroup.opacity = isSubGroupOpacityDifferent ? 1 : seriesOpacity;\n if (!hasMarkers) return [3 /*break*/, 2];\n return [4 /*yield*/, this.updateMarkerNodes({\n markerSelection: highlightSelection,\n isHighlight: true,\n seriesIdx: -1,\n })];\n case 1:\n _d.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.updateDatumNodes({ datumSelection: highlightSelection, isHighlight: true, seriesIdx: -1 })];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4: return [4 /*yield*/, this.updateLabelNodes({ labelSelection: highlightLabelSelection, seriesIdx: -1 })];\n case 5:\n _d.sent();\n return [4 /*yield*/, Promise.all(this.subGroups.map(function (subGroup, seriesIdx) { return __awaiter(_this, void 0, void 0, function () {\n var dataNodeGroup, markerGroup, datumSelection, labelSelection, markerSelection, paths, labelGroup, itemId, subGroupVisible, subGroupOpacity, paths_2, paths_2_1, path;\n var e_2, _a;\n var _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n dataNodeGroup = subGroup.dataNodeGroup, markerGroup = subGroup.markerGroup, datumSelection = subGroup.datumSelection, labelSelection = subGroup.labelSelection, markerSelection = subGroup.markerSelection, paths = subGroup.paths, labelGroup = subGroup.labelGroup;\n itemId = contextNodeData[seriesIdx].itemId;\n subGroupVisible = visible && ((_b = seriesItemEnabled.get(itemId)) !== null && _b !== void 0 ? _b : true);\n subGroupOpacity = isSubGroupOpacityDifferent ? subGroupOpacities[seriesIdx] : 1;\n dataNodeGroup.opacity = subGroupOpacity;\n dataNodeGroup.visible = subGroupVisible;\n labelGroup.visible = subGroupVisible;\n if (markerGroup) {\n markerGroup.opacity = subGroupOpacity;\n markerGroup.zIndex =\n dataNodeGroup.zIndex >= Layers.SERIES_LAYER_ZINDEX\n ? dataNodeGroup.zIndex\n : dataNodeGroup.zIndex + 1;\n markerGroup.visible = subGroupVisible;\n }\n if (labelGroup) {\n labelGroup.opacity = subGroupOpacity;\n }\n try {\n for (paths_2 = __values(paths), paths_2_1 = paths_2.next(); !paths_2_1.done; paths_2_1 = paths_2.next()) {\n path = paths_2_1.value;\n if (!renderLayerPerSubSeries) {\n path.opacity = subGroupOpacity;\n path.visible = subGroupVisible;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (paths_2_1 && !paths_2_1.done && (_a = paths_2.return)) _a.call(paths_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (!dataNodeGroup.visible) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.updatePathNodes({ seriesHighlighted: seriesHighlighted, itemId: itemId, paths: paths, seriesIdx: seriesIdx })];\n case 1:\n _c.sent();\n return [4 /*yield*/, this.updateDatumNodes({ datumSelection: datumSelection, isHighlight: false, seriesIdx: seriesIdx })];\n case 2:\n _c.sent();\n return [4 /*yield*/, this.updateLabelNodes({ labelSelection: labelSelection, seriesIdx: seriesIdx })];\n case 3:\n _c.sent();\n if (!(hasMarkers && markerSelection)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.updateMarkerNodes({ markerSelection: markerSelection, isHighlight: false, seriesIdx: seriesIdx })];\n case 4:\n _c.sent();\n _c.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n }); }))];\n case 6:\n _d.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CartesianSeries.prototype.updateHighlightSelection = function (seriesHighlighted) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var _b, highlightSelection, highlightLabelSelection, contextNodeData, highlightedDatum, item, _c, labelItem, _d, itemId_1, contextNodeData_1, contextNodeData_1_1, labelData, _e;\n var e_3, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0:\n _b = this, highlightSelection = _b.highlightSelection, highlightLabelSelection = _b.highlightLabelSelection, contextNodeData = _b._contextNodeData;\n highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n item = seriesHighlighted && (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.datum) ? highlightedDatum : undefined;\n _c = this;\n return [4 /*yield*/, this.updateHighlightSelectionItem({ item: item, highlightSelection: highlightSelection })];\n case 1:\n _c.highlightSelection = _g.sent();\n if (this.isLabelEnabled() && item != null) {\n _d = item.itemId, itemId_1 = _d === void 0 ? undefined : _d;\n try {\n for (contextNodeData_1 = __values(contextNodeData), contextNodeData_1_1 = contextNodeData_1.next(); !contextNodeData_1_1.done; contextNodeData_1_1 = contextNodeData_1.next()) {\n labelData = contextNodeData_1_1.value.labelData;\n labelItem = labelData.find(function (ld) { return ld.datum === item.datum && ld.itemId === itemId_1; });\n if (labelItem != null) {\n break;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (contextNodeData_1_1 && !contextNodeData_1_1.done && (_f = contextNodeData_1.return)) _f.call(contextNodeData_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n }\n _e = this;\n return [4 /*yield*/, this.updateHighlightSelectionLabel({\n item: labelItem,\n highlightLabelSelection: highlightLabelSelection,\n })];\n case 2:\n _e.highlightLabelSelection = _g.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CartesianSeries.prototype.pickNodeExactShape = function (point) {\n var e_4, _a;\n var result = _super.prototype.pickNodeExactShape.call(this, point);\n if (result) {\n return result;\n }\n var x = point.x, y = point.y;\n var hasMarkers = this.opts.hasMarkers;\n try {\n for (var _b = __values(this.subGroups), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = _c.value, dataNodeGroup = _d.dataNodeGroup, markerGroup = _d.markerGroup;\n var match = dataNodeGroup.pickNode(x, y);\n if (!match && hasMarkers) {\n match = markerGroup === null || markerGroup === void 0 ? void 0 : markerGroup.pickNode(x, y);\n }\n if (match) {\n return { datum: match.datum, distance: 0 };\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_4) throw e_4.error; }\n }\n };\n CartesianSeries.prototype.pickNodeClosestDatum = function (point) {\n var e_5, _a, e_6, _b;\n var _c, _d;\n var x = point.x, y = point.y;\n var _e = this, xAxis = _e.xAxis, yAxis = _e.yAxis, rootGroup = _e.rootGroup, contextNodeData = _e._contextNodeData;\n var hitPoint = rootGroup.transformPoint(x, y);\n var minDistance = Infinity;\n var closestDatum;\n try {\n for (var contextNodeData_2 = __values(contextNodeData), contextNodeData_2_1 = contextNodeData_2.next(); !contextNodeData_2_1.done; contextNodeData_2_1 = contextNodeData_2.next()) {\n var context = contextNodeData_2_1.value;\n try {\n for (var _f = (e_6 = void 0, __values(context.nodeData)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var datum = _g.value;\n var _h = datum.point, _j = _h === void 0 ? {} : _h, _k = _j.x, datumX = _k === void 0 ? NaN : _k, _l = _j.y, datumY = _l === void 0 ? NaN : _l;\n if (isNaN(datumX) || isNaN(datumY)) {\n continue;\n }\n var isInRange = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.inRange(datumX)) && (yAxis === null || yAxis === void 0 ? void 0 : yAxis.inRange(datumY));\n if (!isInRange) {\n continue;\n }\n // No need to use Math.sqrt() since x < y implies Math.sqrt(x) < Math.sqrt(y) for\n // values > 1\n var distance = Math.max(Math.pow((hitPoint.x - datumX), 2) + Math.pow((hitPoint.y - datumY), 2), 0);\n if (distance < minDistance) {\n minDistance = distance;\n closestDatum = datum;\n }\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n }\n finally { if (e_6) throw e_6.error; }\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (contextNodeData_2_1 && !contextNodeData_2_1.done && (_a = contextNodeData_2.return)) _a.call(contextNodeData_2);\n }\n finally { if (e_5) throw e_5.error; }\n }\n if (closestDatum) {\n var distance = Math.max(Math.sqrt(minDistance) - ((_d = (_c = closestDatum.point) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : 0), 0);\n return { datum: closestDatum, distance: distance };\n }\n };\n CartesianSeries.prototype.pickNodeMainAxisFirst = function (point, requireCategoryAxis) {\n var e_7, _a, e_8, _b;\n var _c, _d;\n var x = point.x, y = point.y;\n var _e = this, xAxis = _e.xAxis, yAxis = _e.yAxis, rootGroup = _e.rootGroup, contextNodeData = _e._contextNodeData;\n // Prefer to start search with any available category axis.\n var directions = [xAxis, yAxis]\n .filter(function (a) { return a instanceof CategoryAxis; })\n .map(function (a) { return a.direction; });\n if (requireCategoryAxis && directions.length === 0) {\n return;\n }\n // Default to X-axis unless we found a suitable category axis.\n var _f = __read(directions, 1), _g = _f[0], primaryDirection = _g === void 0 ? ChartAxisDirection.X : _g;\n var hitPoint = rootGroup.transformPoint(x, y);\n var hitPointCoords = primaryDirection === ChartAxisDirection.X ? [hitPoint.x, hitPoint.y] : [hitPoint.y, hitPoint.x];\n var minDistance = [Infinity, Infinity];\n var closestDatum = undefined;\n try {\n for (var contextNodeData_3 = __values(contextNodeData), contextNodeData_3_1 = contextNodeData_3.next(); !contextNodeData_3_1.done; contextNodeData_3_1 = contextNodeData_3.next()) {\n var context = contextNodeData_3_1.value;\n try {\n for (var _h = (e_8 = void 0, __values(context.nodeData)), _j = _h.next(); !_j.done; _j = _h.next()) {\n var datum = _j.value;\n var _k = datum.point, _l = _k === void 0 ? {} : _k, _m = _l.x, datumX = _m === void 0 ? NaN : _m, _o = _l.y, datumY = _o === void 0 ? NaN : _o;\n if (isNaN(datumX) || isNaN(datumY)) {\n continue;\n }\n var isInRange = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.inRange(datumX)) && (yAxis === null || yAxis === void 0 ? void 0 : yAxis.inRange(datumY));\n if (!isInRange) {\n continue;\n }\n var point_1 = primaryDirection === ChartAxisDirection.X ? [datumX, datumY] : [datumY, datumX];\n // Compare distances from most significant dimension to least.\n var newMinDistance = true;\n for (var i = 0; i < point_1.length; i++) {\n var dist = Math.abs(point_1[i] - hitPointCoords[i]);\n if (dist > minDistance[i]) {\n newMinDistance = false;\n break;\n }\n if (dist < minDistance[i]) {\n minDistance[i] = dist;\n minDistance.fill(Infinity, i + 1, minDistance.length);\n }\n }\n if (newMinDistance) {\n closestDatum = datum;\n }\n }\n }\n catch (e_8_1) { e_8 = { error: e_8_1 }; }\n finally {\n try {\n if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n }\n finally { if (e_8) throw e_8.error; }\n }\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (contextNodeData_3_1 && !contextNodeData_3_1.done && (_a = contextNodeData_3.return)) _a.call(contextNodeData_3);\n }\n finally { if (e_7) throw e_7.error; }\n }\n if (closestDatum) {\n var distance = Math.max(Math.sqrt(Math.pow(minDistance[0], 2) + Math.pow(minDistance[1], 2)) - ((_d = (_c = closestDatum.point) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : 0), 0);\n return { datum: closestDatum, distance: distance };\n }\n };\n CartesianSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n if (this.seriesItemEnabled.size > 0) {\n this.seriesItemEnabled.set(itemId, enabled);\n this.nodeDataRefresh = true;\n }\n else {\n _super.prototype.toggleSeriesItem.call(this, itemId, enabled);\n }\n };\n CartesianSeries.prototype.isEnabled = function () {\n var e_9, _a;\n if (this.seriesItemEnabled.size > 0) {\n try {\n for (var _b = __values(this.seriesItemEnabled), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), enabled = _d[1];\n if (enabled) {\n return true;\n }\n }\n }\n catch (e_9_1) { e_9 = { error: e_9_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_9) throw e_9.error; }\n }\n return false;\n }\n return _super.prototype.isEnabled.call(this);\n };\n CartesianSeries.prototype.isPathOrSelectionDirty = function () {\n // Override point to allow more sophisticated dirty selection detection.\n return false;\n };\n CartesianSeries.prototype.getLabelData = function () {\n return [];\n };\n CartesianSeries.prototype.isAnySeriesVisible = function () {\n var e_10, _a;\n try {\n for (var _b = __values(this.seriesItemEnabled.values()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var visible = _c.value;\n if (visible) {\n return true;\n }\n }\n }\n catch (e_10_1) { e_10 = { error: e_10_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_10) throw e_10.error; }\n }\n return false;\n };\n CartesianSeries.prototype.validateXYData = function (xKey, yKey, data, xAxis, yAxis, xData, yData, yDepth) {\n var _a;\n if (yDepth === void 0) { yDepth = 1; }\n if (((_a = this.chart) === null || _a === void 0 ? void 0 : _a.mode) === 'integrated') {\n // Integrated Charts use-cases do not require this validation.\n return true;\n }\n if (!xAxis || !yAxis || data.length === 0 || (this.seriesItemEnabled.size > 0 && !this.isAnySeriesVisible())) {\n return true;\n }\n var hasNumber = function (items, depth, maxDepth) {\n if (depth === void 0) { depth = 0; }\n if (maxDepth === void 0) { maxDepth = 0; }\n return items.some(depth === maxDepth ? function (y) { return isContinuous(y); } : function (arr) { return hasNumber(arr, depth + 1, maxDepth); });\n };\n var isContinuousX = xAxis.scale instanceof ContinuousScale;\n var isContinuousY = yAxis.scale instanceof ContinuousScale;\n var validationResult = true;\n if (isContinuousX && !hasNumber(xData)) {\n Logger.warnOnce(\"the number axis has no numeric data supplied for xKey: [\" + xKey + \"].\");\n validationResult = false;\n }\n if (isContinuousY && !hasNumber(yData, 0, yDepth - 1)) {\n Logger.warnOnce(\"the number axis has no numeric data supplied for yKey: [\" + yKey + \"].\");\n validationResult = false;\n }\n return validationResult;\n };\n CartesianSeries.prototype.updatePaths = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n // Override point for sub-classes.\n opts.paths.forEach(function (p) { return (p.visible = false); });\n return [2 /*return*/];\n });\n });\n };\n CartesianSeries.prototype.updatePathNodes = function (_opts) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n CartesianSeries.prototype.updateHighlightSelectionItem = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var hasMarkers, item, highlightSelection, nodeData, markerSelection;\n return __generator(this, function (_a) {\n hasMarkers = this.opts.hasMarkers;\n item = opts.item, highlightSelection = opts.highlightSelection;\n nodeData = item ? [item] : [];\n if (hasMarkers) {\n markerSelection = highlightSelection;\n return [2 /*return*/, this.updateMarkerSelection({ nodeData: nodeData, markerSelection: markerSelection, seriesIdx: -1 })];\n }\n else {\n return [2 /*return*/, this.updateDatumSelection({ nodeData: nodeData, datumSelection: highlightSelection, seriesIdx: -1 })];\n }\n return [2 /*return*/];\n });\n });\n };\n CartesianSeries.prototype.updateHighlightSelectionLabel = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var item, highlightLabelSelection, labelData;\n return __generator(this, function (_a) {\n item = opts.item, highlightLabelSelection = opts.highlightLabelSelection;\n labelData = item ? [item] : [];\n return [2 /*return*/, this.updateLabelSelection({ labelData: labelData, labelSelection: highlightLabelSelection, seriesIdx: -1 })];\n });\n });\n };\n CartesianSeries.prototype.updateDatumSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n // Override point for sub-classes.\n return [2 /*return*/, opts.datumSelection];\n });\n });\n };\n CartesianSeries.prototype.updateDatumNodes = function (_opts) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n CartesianSeries.prototype.updateMarkerSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n // Override point for sub-classes.\n return [2 /*return*/, opts.markerSelection];\n });\n });\n };\n CartesianSeries.prototype.updateMarkerNodes = function (_opts) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n return CartesianSeries;\n}(Series));\nexport { CartesianSeries };\nvar CartesianSeriesMarker = /** @class */ (function (_super) {\n __extends(CartesianSeriesMarker, _super);\n function CartesianSeriesMarker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.formatter = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], CartesianSeriesMarker.prototype, \"formatter\", void 0);\n return CartesianSeriesMarker;\n}(SeriesMarker));\nexport { CartesianSeriesMarker };\n","export function sleep(sleepTimeoutMs) {\n return new Promise(function (resolve) {\n setTimeout(function () { return resolve(undefined); }, sleepTimeoutMs);\n });\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { OPT_FUNCTION, OPT_STRING, Validate } from '../../util/validation';\nvar Overlay = /** @class */ (function () {\n function Overlay(className, parent) {\n this.renderer = undefined;\n this.text = undefined;\n this.className = className;\n this.parentElement = parent;\n }\n Overlay.prototype.show = function (rect) {\n var _a, _b;\n var element = this.element;\n if (!this.element) {\n element = document.createElement('div');\n element.className = this.className;\n this.element = element;\n }\n element.style.position = 'absolute';\n element.style.left = rect.x + \"px\";\n element.style.top = rect.y + \"px\";\n element.style.width = rect.width + \"px\";\n element.style.height = rect.height + \"px\";\n if (this.renderer) {\n this.element.innerHTML = this.renderer();\n }\n else {\n var content = document.createElement('div');\n content.style.alignItems = 'center';\n content.style.boxSizing = 'border-box';\n content.style.display = 'flex';\n content.style.justifyContent = 'center';\n content.style.margin = '8px';\n content.style.height = '100%';\n content.style.font = '12px Verdana, sans-serif';\n content.innerText = (_a = this.text) !== null && _a !== void 0 ? _a : 'No data to display';\n element.append(content);\n }\n (_b = this.parentElement) === null || _b === void 0 ? void 0 : _b.append(element);\n };\n Overlay.prototype.hide = function () {\n var _a;\n (_a = this.element) === null || _a === void 0 ? void 0 : _a.remove();\n this.element = undefined;\n };\n __decorate([\n Validate(OPT_FUNCTION)\n ], Overlay.prototype, \"renderer\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], Overlay.prototype, \"text\", void 0);\n return Overlay;\n}());\nexport { Overlay };\n","import { Overlay } from './overlay';\nvar ChartOverlays = /** @class */ (function () {\n function ChartOverlays(parent) {\n this.noData = new Overlay('ag-chart-no-data-overlay', parent);\n }\n return ChartOverlays;\n}());\nexport { ChartOverlays };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar Listeners = /** @class */ (function () {\n function Listeners() {\n this.registeredListeners = {};\n }\n Listeners.prototype.addListener = function (type, cb) {\n var _a;\n var symbol = Symbol(type);\n if (!this.registeredListeners[type]) {\n this.registeredListeners[type] = [];\n }\n (_a = this.registeredListeners[type]) === null || _a === void 0 ? void 0 : _a.push({ symbol: symbol, handler: cb });\n return symbol;\n };\n Listeners.prototype.dispatch = function (type) {\n var _a;\n var params = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n var listeners = (_a = this.registeredListeners[type]) !== null && _a !== void 0 ? _a : [];\n return listeners.map(function (l) { return l.handler.apply(l, __spread(params)); });\n };\n Listeners.prototype.cancellableDispatch = function (type, cancelled) {\n var e_1, _a;\n var _b;\n var params = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n params[_i - 2] = arguments[_i];\n }\n var listeners = (_b = this.registeredListeners[type]) !== null && _b !== void 0 ? _b : [];\n var results = [];\n try {\n for (var listeners_1 = __values(listeners), listeners_1_1 = listeners_1.next(); !listeners_1_1.done; listeners_1_1 = listeners_1.next()) {\n var listener = listeners_1_1.value;\n if (cancelled())\n break;\n results.push(listener.handler.apply(listener, __spread(params)));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (listeners_1_1 && !listeners_1_1.done && (_a = listeners_1.return)) _a.call(listeners_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return results;\n };\n Listeners.prototype.reduceDispatch = function (type, reduceFn) {\n var e_2, _a;\n var _b;\n var params = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n params[_i - 2] = arguments[_i];\n }\n var listeners = (_b = this.registeredListeners[type]) !== null && _b !== void 0 ? _b : [];\n var listenerResult = undefined;\n try {\n for (var listeners_2 = __values(listeners), listeners_2_1 = listeners_2.next(); !listeners_2_1.done; listeners_2_1 = listeners_2.next()) {\n var listener = listeners_2_1.value;\n listenerResult = listener.handler.apply(listener, __spread(params));\n params = reduceFn.apply(void 0, __spread([listenerResult], params));\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (listeners_2_1 && !listeners_2_1.done && (_a = listeners_2.return)) _a.call(listeners_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return listenerResult;\n };\n Listeners.prototype.removeListener = function (listenerSymbol) {\n for (var type in this.registeredListeners) {\n var listeners = this.registeredListeners[type];\n var match = listeners === null || listeners === void 0 ? void 0 : listeners.findIndex(function (entry) { return entry.symbol === listenerSymbol; });\n if (match != null && match >= 0) {\n listeners === null || listeners === void 0 ? void 0 : listeners.splice(match, 1);\n }\n if (match != null && (listeners === null || listeners === void 0 ? void 0 : listeners.length) === 0) {\n delete this.registeredListeners[type];\n }\n }\n };\n return Listeners;\n}());\nexport { Listeners };\n","import { Listeners } from '../../util/listeners';\nvar BaseManager = /** @class */ (function () {\n function BaseManager() {\n this.listeners = new Listeners();\n }\n BaseManager.prototype.addListener = function (type, cb) {\n return this.listeners.addListener(type, cb);\n };\n BaseManager.prototype.removeListener = function (listenerSymbol) {\n this.listeners.removeListener(listenerSymbol);\n };\n return BaseManager;\n}());\nexport { BaseManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { isNumber } from '../../util/value';\nimport { BaseManager } from './baseManager';\nvar WINDOW_EVENT_HANDLERS = ['pagehide', 'mousemove', 'mouseup', 'wheel'];\nvar EVENT_HANDLERS = [\n 'click',\n 'dblclick',\n 'contextmenu',\n 'mousedown',\n 'mouseout',\n 'mouseenter',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n];\nvar CSS = \"\\n.ag-chart-wrapper {\\n touch-action: none;\\n}\\n\";\n/**\n * Manages user interactions with a specific HTMLElement (or interactions that bubble from it's\n * children)\n */\nvar InteractionManager = /** @class */ (function (_super) {\n __extends(InteractionManager, _super);\n function InteractionManager(element, doc) {\n var e_1, _a, e_2, _b;\n if (doc === void 0) { doc = document; }\n var _this = _super.call(this) || this;\n _this.eventHandler = function (event) { return _this.processEvent(event); };\n _this.mouseDown = false;\n _this.touchDown = false;\n _this.rootElement = doc.body;\n _this.element = element;\n try {\n for (var EVENT_HANDLERS_1 = __values(EVENT_HANDLERS), EVENT_HANDLERS_1_1 = EVENT_HANDLERS_1.next(); !EVENT_HANDLERS_1_1.done; EVENT_HANDLERS_1_1 = EVENT_HANDLERS_1.next()) {\n var type = EVENT_HANDLERS_1_1.value;\n if (type.startsWith('touch')) {\n element.addEventListener(type, _this.eventHandler, { passive: true });\n }\n else {\n element.addEventListener(type, _this.eventHandler);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (EVENT_HANDLERS_1_1 && !EVENT_HANDLERS_1_1.done && (_a = EVENT_HANDLERS_1.return)) _a.call(EVENT_HANDLERS_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n try {\n for (var WINDOW_EVENT_HANDLERS_1 = __values(WINDOW_EVENT_HANDLERS), WINDOW_EVENT_HANDLERS_1_1 = WINDOW_EVENT_HANDLERS_1.next(); !WINDOW_EVENT_HANDLERS_1_1.done; WINDOW_EVENT_HANDLERS_1_1 = WINDOW_EVENT_HANDLERS_1.next()) {\n var type = WINDOW_EVENT_HANDLERS_1_1.value;\n window.addEventListener(type, _this.eventHandler);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (WINDOW_EVENT_HANDLERS_1_1 && !WINDOW_EVENT_HANDLERS_1_1.done && (_b = WINDOW_EVENT_HANDLERS_1.return)) _b.call(WINDOW_EVENT_HANDLERS_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (InteractionManager.interactionDocuments.indexOf(doc) < 0) {\n var styleElement = document.createElement('style');\n styleElement.innerHTML = CSS;\n document.head.insertBefore(styleElement, document.head.querySelector('style'));\n InteractionManager.interactionDocuments.push(doc);\n }\n return _this;\n }\n InteractionManager.prototype.destroy = function () {\n var e_3, _a, e_4, _b;\n try {\n for (var WINDOW_EVENT_HANDLERS_2 = __values(WINDOW_EVENT_HANDLERS), WINDOW_EVENT_HANDLERS_2_1 = WINDOW_EVENT_HANDLERS_2.next(); !WINDOW_EVENT_HANDLERS_2_1.done; WINDOW_EVENT_HANDLERS_2_1 = WINDOW_EVENT_HANDLERS_2.next()) {\n var type = WINDOW_EVENT_HANDLERS_2_1.value;\n window.removeEventListener(type, this.eventHandler);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (WINDOW_EVENT_HANDLERS_2_1 && !WINDOW_EVENT_HANDLERS_2_1.done && (_a = WINDOW_EVENT_HANDLERS_2.return)) _a.call(WINDOW_EVENT_HANDLERS_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n try {\n for (var EVENT_HANDLERS_2 = __values(EVENT_HANDLERS), EVENT_HANDLERS_2_1 = EVENT_HANDLERS_2.next(); !EVENT_HANDLERS_2_1.done; EVENT_HANDLERS_2_1 = EVENT_HANDLERS_2.next()) {\n var type = EVENT_HANDLERS_2_1.value;\n this.element.removeEventListener(type, this.eventHandler);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (EVENT_HANDLERS_2_1 && !EVENT_HANDLERS_2_1.done && (_b = EVENT_HANDLERS_2.return)) _b.call(EVENT_HANDLERS_2);\n }\n finally { if (e_4) throw e_4.error; }\n }\n };\n InteractionManager.prototype.processEvent = function (event) {\n var types = this.decideInteractionEventTypes(event);\n if (types.length > 0) {\n // Async dispatch to avoid blocking the event-processing thread.\n this.dispatchEvent(event, types);\n }\n };\n InteractionManager.prototype.dispatchEvent = function (event, types) {\n return __awaiter(this, void 0, void 0, function () {\n var coords, _loop_1, this_1, types_1, types_1_1, type;\n var e_5, _a;\n return __generator(this, function (_b) {\n coords = this.calculateCoordinates(event);\n if (coords == null) {\n return [2 /*return*/];\n }\n _loop_1 = function (type) {\n var interactionEvent = this_1.buildEvent(__assign(__assign({ event: event }, coords), { type: type }));\n this_1.listeners.cancellableDispatch(type, function () { return interactionEvent.consumed; }, interactionEvent);\n };\n this_1 = this;\n try {\n for (types_1 = __values(types), types_1_1 = types_1.next(); !types_1_1.done; types_1_1 = types_1.next()) {\n type = types_1_1.value;\n _loop_1(type);\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (types_1_1 && !types_1_1.done && (_a = types_1.return)) _a.call(types_1);\n }\n finally { if (e_5) throw e_5.error; }\n }\n return [2 /*return*/];\n });\n });\n };\n InteractionManager.prototype.decideInteractionEventTypes = function (event) {\n switch (event.type) {\n case 'click':\n return ['click'];\n case 'dblclick':\n return ['dblclick'];\n case 'contextmenu':\n return ['contextmenu'];\n case 'mousedown':\n this.mouseDown = true;\n this.dragStartElement = event.target;\n return ['drag-start'];\n case 'touchstart':\n this.touchDown = true;\n this.dragStartElement = event.target;\n return ['drag-start'];\n case 'touchmove':\n case 'mousemove':\n if (!this.mouseDown && !this.touchDown && !this.isEventOverElement(event)) {\n // We only care about these events if the target is the canvas, unless\n // we're in the middle of a drag/slide.\n return [];\n }\n return this.mouseDown || this.touchDown ? ['drag'] : ['hover'];\n case 'mouseup':\n if (!this.mouseDown && !this.isEventOverElement(event)) {\n // We only care about these events if the target is the canvas, unless\n // we're in the middle of a drag.\n return [];\n }\n this.mouseDown = false;\n this.dragStartElement = undefined;\n return ['drag-end'];\n case 'touchend':\n if (!this.touchDown && !this.isEventOverElement(event)) {\n // We only care about these events if the target is the canvas, unless\n // we're in the middle of a slide.\n return [];\n }\n this.touchDown = false;\n this.dragStartElement = undefined;\n return ['drag-end'];\n case 'mouseout':\n case 'touchcancel':\n return ['leave'];\n case 'mouseenter':\n var mouseButtonDown = event instanceof MouseEvent && (event.buttons & 1) === 1;\n if (this.mouseDown !== mouseButtonDown) {\n this.mouseDown = mouseButtonDown;\n return [mouseButtonDown ? 'drag-start' : 'drag-end'];\n }\n return [];\n case 'pagehide':\n return ['page-left'];\n case 'wheel':\n return ['wheel'];\n }\n return [];\n };\n InteractionManager.prototype.isEventOverElement = function (event) {\n var _a;\n return event.target === this.element || ((_a = event.target) === null || _a === void 0 ? void 0 : _a.parentElement) === this.element;\n };\n InteractionManager.prototype.calculateCoordinates = function (event) {\n var _a;\n if (event instanceof MouseEvent) {\n var clientX = event.clientX, clientY = event.clientY, pageX = event.pageX, pageY = event.pageY, offsetX = event.offsetX, offsetY = event.offsetY;\n return this.fixOffsets(event, { clientX: clientX, clientY: clientY, pageX: pageX, pageY: pageY, offsetX: offsetX, offsetY: offsetY });\n }\n else if (typeof TouchEvent !== 'undefined' && event instanceof TouchEvent) {\n var lastTouch = (_a = event.touches[0]) !== null && _a !== void 0 ? _a : event.changedTouches[0];\n var clientX = lastTouch.clientX, clientY = lastTouch.clientY, pageX = lastTouch.pageX, pageY = lastTouch.pageY;\n return __assign(__assign({}, InteractionManager.NULL_COORDS), { clientX: clientX, clientY: clientY, pageX: pageX, pageY: pageY });\n }\n else if (event instanceof PageTransitionEvent) {\n if (event.persisted) {\n // Don't fire the page-left event since the page maybe revisited.\n return;\n }\n return InteractionManager.NULL_COORDS;\n }\n // Unsupported event - abort.\n };\n InteractionManager.prototype.fixOffsets = function (event, coords) {\n var offsets = function (el) {\n var x = 0;\n var y = 0;\n while (el) {\n x += el.offsetLeft;\n y += el.offsetTop;\n el = el.offsetParent;\n }\n return { x: x, y: y };\n };\n if (this.dragStartElement != null && event.target !== this.dragStartElement) {\n // Offsets need to be relative to the drag-start element to avoid jumps when\n // the pointer moves between element boundaries.\n var offsetDragStart = offsets(this.dragStartElement);\n var offsetEvent = offsets(event.target);\n coords.offsetX -= offsetDragStart.x - offsetEvent.x;\n coords.offsetY -= offsetDragStart.y - offsetEvent.y;\n }\n return coords;\n };\n InteractionManager.prototype.buildEvent = function (opts) {\n var type = opts.type, event = opts.event, clientX = opts.clientX, clientY = opts.clientY;\n var offsetX = opts.offsetX, offsetY = opts.offsetY, pageX = opts.pageX, pageY = opts.pageY;\n if (!isNumber(offsetX) || !isNumber(offsetY)) {\n var rect = this.element.getBoundingClientRect();\n offsetX = clientX - rect.left;\n offsetY = clientY - rect.top;\n }\n if (!isNumber(pageX) || !isNumber(pageY)) {\n var pageRect = this.rootElement.getBoundingClientRect();\n pageX = clientX - pageRect.left;\n pageY = clientY - pageRect.top;\n }\n var builtEvent = {\n type: type,\n offsetX: offsetX,\n offsetY: offsetY,\n pageX: pageX,\n pageY: pageY,\n sourceEvent: event,\n consumed: false,\n consume: function () { return (builtEvent.consumed = true); },\n };\n return builtEvent;\n };\n InteractionManager.interactionDocuments = [];\n InteractionManager.NULL_COORDS = {\n clientX: -Infinity,\n clientY: -Infinity,\n pageX: -Infinity,\n pageY: -Infinity,\n offsetX: -Infinity,\n offsetY: -Infinity,\n };\n return InteractionManager;\n}(BaseManager));\nexport { InteractionManager };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\n/**\n * Manages the cursor styling for an element. Tracks the requested styling from distinct\n * dependents and handles conflicting styling requests.\n */\nvar CursorManager = /** @class */ (function () {\n function CursorManager(element) {\n this.states = {};\n this.element = element;\n }\n CursorManager.prototype.updateCursor = function (callerId, style) {\n delete this.states[callerId];\n if (style != null) {\n this.states[callerId] = { style: style };\n }\n this.applyStates();\n };\n CursorManager.prototype.applyStates = function () {\n var styleToApply = 'default';\n // Last added entry wins.\n Object.entries(this.states)\n .reverse()\n .slice(0, 1)\n .forEach(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], style = _b[1].style;\n return (styleToApply = style);\n });\n this.element.style.cursor = styleToApply;\n };\n return CursorManager;\n}());\nexport { CursorManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { BaseManager } from './baseManager';\nfunction isEqual(a, b) {\n if (a === b)\n return true;\n if ((a === null || a === void 0 ? void 0 : a.series) !== (b === null || b === void 0 ? void 0 : b.series))\n return false;\n if ((a === null || a === void 0 ? void 0 : a.itemId) !== (b === null || b === void 0 ? void 0 : b.itemId))\n return false;\n if ((a === null || a === void 0 ? void 0 : a.datum) !== (b === null || b === void 0 ? void 0 : b.datum))\n return false;\n return true;\n}\n/**\n * Manages the actively highlighted series/datum for a chart. Tracks the requested highlights from\n * distinct dependents and handles conflicting highlight requests.\n */\nvar HighlightManager = /** @class */ (function (_super) {\n __extends(HighlightManager, _super);\n function HighlightManager() {\n var _this = _super.call(this) || this;\n _this.states = {};\n _this.activeHighlight = undefined;\n return _this;\n }\n HighlightManager.prototype.updateHighlight = function (callerId, highlightedDatum) {\n delete this.states[callerId];\n if (highlightedDatum != null) {\n this.states[callerId] = { highlightedDatum: highlightedDatum };\n }\n this.applyStates();\n };\n HighlightManager.prototype.getActiveHighlight = function () {\n return this.activeHighlight;\n };\n HighlightManager.prototype.applyStates = function () {\n var previousHighlight = this.activeHighlight;\n var highlightToApply = undefined;\n // Last added entry wins.\n Object.entries(this.states)\n .reverse()\n .slice(0, 1)\n .forEach(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], highlightedDatum = _b[1].highlightedDatum;\n return (highlightToApply = highlightedDatum);\n });\n this.activeHighlight = highlightToApply;\n var changed = !isEqual(previousHighlight, this.activeHighlight);\n if (changed) {\n var event_1 = {\n type: 'highlight-change',\n previousHighlight: previousHighlight,\n currentHighlight: this.activeHighlight,\n };\n this.listeners.dispatch('highlight-change', event_1);\n }\n };\n return HighlightManager;\n}(BaseManager));\nexport { HighlightManager };\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\n/**\n * Manages the tooltip HTML an element. Tracks the requested HTML from distinct dependents and\n * handles conflicting tooltip requests.\n */\nvar TooltipManager = /** @class */ (function () {\n function TooltipManager(tooltip, interactionManager) {\n var _this = this;\n this.states = {};\n this.exclusiveAreas = {};\n this.destroyFns = [];\n this.tooltip = tooltip;\n var hoverRef = interactionManager.addListener('hover', function (e) { return _this.checkExclusiveRects(e); });\n this.destroyFns.push(function () { return interactionManager.removeListener(hoverRef); });\n }\n TooltipManager.prototype.updateTooltip = function (callerId, meta, content) {\n var _a;\n if (content == null) {\n content = (_a = this.states[callerId]) === null || _a === void 0 ? void 0 : _a.content;\n }\n this.states[callerId] = { content: content, meta: meta };\n this.applyStates();\n };\n TooltipManager.prototype.updateExclusiveRect = function (callerId, area) {\n if (area) {\n this.exclusiveAreas[callerId] = area;\n }\n else {\n delete this.exclusiveAreas[callerId];\n }\n };\n TooltipManager.prototype.removeTooltip = function (callerId) {\n delete this.states[callerId];\n this.applyStates();\n };\n TooltipManager.prototype.getTooltipMeta = function (callerId) {\n var _a;\n return (_a = this.states[callerId]) === null || _a === void 0 ? void 0 : _a.meta;\n };\n TooltipManager.prototype.destroy = function () {\n var e_1, _a;\n try {\n for (var _b = __values(this.destroyFns), _c = _b.next(); !_c.done; _c = _b.next()) {\n var destroyFn = _c.value;\n destroyFn();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n TooltipManager.prototype.checkExclusiveRects = function (e) {\n var e_2, _a;\n var newAppliedExclusiveArea;\n try {\n for (var _b = __values(Object.entries(this.exclusiveAreas)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), entryId = _d[0], area = _d[1];\n if (!area.containsPoint(e.offsetX, e.offsetY)) {\n continue;\n }\n newAppliedExclusiveArea = entryId;\n break;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (newAppliedExclusiveArea === this.appliedExclusiveArea) {\n return;\n }\n this.appliedExclusiveArea = newAppliedExclusiveArea;\n this.applyStates();\n };\n TooltipManager.prototype.applyStates = function () {\n var _this = this;\n var _a;\n var ids = this.appliedExclusiveArea ? [this.appliedExclusiveArea] : Object.keys(this.states);\n var contentToApply = undefined;\n var metaToApply = undefined;\n // Last added entry wins.\n ids.reverse()\n .slice(0, 1)\n .forEach(function (id) {\n var _a;\n var _b = (_a = _this.states[id]) !== null && _a !== void 0 ? _a : {}, content = _b.content, meta = _b.meta;\n contentToApply = content;\n metaToApply = meta;\n });\n if (metaToApply === undefined || contentToApply === undefined) {\n this.appliedState = undefined;\n this.tooltip.toggle(false);\n return;\n }\n if (((_a = this.appliedState) === null || _a === void 0 ? void 0 : _a.content) === contentToApply) {\n var renderInstantly = this.tooltip.isVisible();\n this.tooltip.show(metaToApply, undefined, renderInstantly);\n }\n else {\n this.tooltip.show(metaToApply, contentToApply);\n }\n this.appliedState = { content: contentToApply, meta: metaToApply };\n };\n return TooltipManager;\n}());\nexport { TooltipManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { BaseManager } from './baseManager';\nfunction isEqual(a, b) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (a === b)\n return true;\n if (((_a = a === null || a === void 0 ? void 0 : a.x) === null || _a === void 0 ? void 0 : _a.min) !== ((_b = b === null || b === void 0 ? void 0 : b.x) === null || _b === void 0 ? void 0 : _b.min))\n return false;\n if (((_c = a === null || a === void 0 ? void 0 : a.x) === null || _c === void 0 ? void 0 : _c.max) !== ((_d = b === null || b === void 0 ? void 0 : b.x) === null || _d === void 0 ? void 0 : _d.max))\n return false;\n if (((_e = a === null || a === void 0 ? void 0 : a.y) === null || _e === void 0 ? void 0 : _e.max) !== ((_f = b === null || b === void 0 ? void 0 : b.y) === null || _f === void 0 ? void 0 : _f.max))\n return false;\n if (((_g = a === null || a === void 0 ? void 0 : a.y) === null || _g === void 0 ? void 0 : _g.min) !== ((_h = b === null || b === void 0 ? void 0 : b.y) === null || _h === void 0 ? void 0 : _h.min))\n return false;\n return true;\n}\n/**\n * Manages the current zoom state for a chart. Tracks the requested zoom from distinct dependents\n * and handles conflicting zoom requests.\n */\nvar ZoomManager = /** @class */ (function (_super) {\n __extends(ZoomManager, _super);\n function ZoomManager() {\n var _this = _super.call(this) || this;\n _this.states = {};\n _this.currentZoom = undefined;\n return _this;\n }\n ZoomManager.prototype.updateZoom = function (callerId, newZoom) {\n delete this.states[callerId];\n if (newZoom != null) {\n this.states[callerId] = __assign({}, newZoom);\n }\n this.applyStates();\n };\n ZoomManager.prototype.getZoom = function () {\n return this.currentZoom;\n };\n ZoomManager.prototype.applyStates = function () {\n var e_1, _a;\n var currentZoom = this.currentZoom;\n var zoomToApply = {};\n try {\n // Last added entry wins.\n for (var _b = __values(Object.entries(this.states)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), _ = _d[0], _e = _d[1], x = _e.x, y = _e.y;\n zoomToApply.x = x !== null && x !== void 0 ? x : zoomToApply.x;\n zoomToApply.y = y !== null && y !== void 0 ? y : zoomToApply.y;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.currentZoom = zoomToApply.x != null || zoomToApply.y != null ? zoomToApply : undefined;\n var changed = !isEqual(currentZoom, this.currentZoom);\n if (!changed) {\n return;\n }\n var event = __assign({ type: 'zoom-change' }, (currentZoom !== null && currentZoom !== void 0 ? currentZoom : {}));\n this.listeners.dispatch('zoom-change', event);\n };\n return ZoomManager;\n}(BaseManager));\nexport { ZoomManager };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { Listeners } from '../../util/listeners';\nfunction isLayoutStage(t) {\n return t !== 'layout-complete';\n}\nfunction isLayoutComplete(t) {\n return t === 'layout-complete';\n}\nvar LayoutService = /** @class */ (function () {\n function LayoutService() {\n this.layoutProcessors = new Listeners();\n this.listeners = new Listeners();\n }\n LayoutService.prototype.addListener = function (type, cb) {\n if (isLayoutStage(type)) {\n return this.layoutProcessors.addListener(type, cb);\n }\n else if (isLayoutComplete(type)) {\n return this.listeners.addListener(type, cb);\n }\n throw new Error('AG Charts - unsupported listener type: ' + type);\n };\n LayoutService.prototype.removeListener = function (listenerSymbol) {\n this.listeners.removeListener(listenerSymbol);\n this.layoutProcessors.removeListener(listenerSymbol);\n };\n LayoutService.prototype.dispatchPerformLayout = function (stage, ctx) {\n var result = this.layoutProcessors.reduceDispatch(stage, function (_a, ctx) {\n var shrinkRect = _a.shrinkRect;\n return [__assign(__assign({}, ctx), { shrinkRect: shrinkRect })];\n }, ctx);\n return result !== null && result !== void 0 ? result : ctx;\n };\n LayoutService.prototype.dispatchLayoutComplete = function (event) {\n this.listeners.dispatch('layout-complete', event);\n };\n return LayoutService;\n}());\nexport { LayoutService };\n","import { ChartUpdateType } from './chartUpdateType';\nvar UpdateService = /** @class */ (function () {\n function UpdateService(updateCallback) {\n this.updateCallback = updateCallback;\n }\n UpdateService.prototype.update = function (type) {\n if (type === void 0) { type = ChartUpdateType.FULL; }\n this.updateCallback(type);\n };\n return UpdateService;\n}());\nexport { UpdateService };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { STRING_UNION, Validate } from '../util/validation';\nvar ChartHighlight = /** @class */ (function () {\n function ChartHighlight() {\n this.range = 'tooltip';\n }\n __decorate([\n Validate(STRING_UNION('tooltip', 'node'))\n ], ChartHighlight.prototype, \"range\", void 0);\n return ChartHighlight;\n}());\nexport { ChartHighlight };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Scene } from '../scene/scene';\nimport { Group } from '../scene/group';\nimport { SeriesNodePickMode } from './series/series';\nimport { Padding } from '../util/padding';\nimport { Legend } from './legend';\nimport { BBox } from '../scene/bbox';\nimport { SizeMonitor } from '../util/sizeMonitor';\nimport { Observable } from '../util/observable';\nimport { ChartAxisDirection } from './chartAxisDirection';\nimport { createId } from '../util/id';\nimport { isPointLabelDatum, placeLabels } from '../util/labelPlacement';\nimport { debouncedAnimationFrame, debouncedCallback } from '../util/render';\nimport { CartesianSeries } from './series/cartesian/cartesianSeries';\nimport { BOOLEAN, STRING_UNION, Validate } from '../util/validation';\nimport { sleep } from '../util/async';\nimport { Tooltip } from './tooltip/tooltip';\nimport { ChartOverlays } from './overlay/chartOverlays';\nimport { InteractionManager } from './interaction/interactionManager';\nimport { jsonMerge } from '../util/json';\nimport { Layers } from './layers';\nimport { CursorManager } from './interaction/cursorManager';\nimport { HighlightManager } from './interaction/highlightManager';\nimport { TooltipManager } from './interaction/tooltipManager';\nimport { ZoomManager } from './interaction/zoomManager';\nimport { LayoutService } from './layout/layoutService';\nimport { UpdateService } from './updateService';\nimport { ChartUpdateType } from './chartUpdateType';\nimport { Logger } from '../util/logger';\nimport { ActionOnSet } from '../util/proxy';\nimport { ChartHighlight } from './chartHighlight';\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n function Chart(document, overrideDevicePixelRatio, resources) {\n if (document === void 0) { document = window.document; }\n var _a;\n var _this = _super.call(this) || this;\n _this.id = createId(_this);\n _this.processedOptions = {};\n _this.userOptions = {};\n _this.queuedUserOptions = [];\n _this.seriesRoot = new Group({ name: _this.id + \"-Series-root\" });\n _this.extraDebugStats = {};\n _this._container = undefined;\n _this.data = [];\n _this.padding = new Padding(20);\n _this.seriesAreaPadding = new Padding(0);\n _this.title = undefined;\n _this.subtitle = undefined;\n _this.footnote = undefined;\n _this.mode = 'standalone';\n _this._destroyed = false;\n _this.modules = {};\n _this._pendingFactoryUpdates = [];\n _this._performUpdateNoRenderCount = 0;\n _this._performUpdateType = ChartUpdateType.NONE;\n _this.seriesToUpdate = new Set();\n _this.performUpdateTrigger = debouncedCallback(function (_a) {\n var count = _a.count;\n return __awaiter(_this, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (this._destroyed)\n return [2 /*return*/];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.performUpdate(count)];\n case 2:\n _b.sent();\n return [3 /*break*/, 4];\n case 3:\n error_1 = _b.sent();\n this._lastPerformUpdateError = error_1;\n Logger.error('update error', error_1);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n });\n _this._axes = [];\n _this._series = [];\n _this.lastInteractionEvent = undefined;\n _this.pointerScheduler = debouncedAnimationFrame(function () {\n if (_this.lastInteractionEvent) {\n _this.handlePointer(_this.lastInteractionEvent);\n }\n _this.lastInteractionEvent = undefined;\n });\n _this.onSeriesNodeClick = function (event) {\n var seriesNodeClickEvent = __assign(__assign({}, event), { type: 'seriesNodeClick' });\n Object.defineProperty(seriesNodeClickEvent, 'series', {\n enumerable: false,\n // Should display the deprecation warning\n get: function () { return event.series; },\n });\n _this.fireEvent(seriesNodeClickEvent);\n };\n _this.onSeriesNodeDoubleClick = function (event) {\n var seriesNodeDoubleClick = __assign(__assign({}, event), { type: 'seriesNodeDoubleClick' });\n _this.fireEvent(seriesNodeDoubleClick);\n };\n var scene = resources === null || resources === void 0 ? void 0 : resources.scene;\n var element = (_a = resources === null || resources === void 0 ? void 0 : resources.element) !== null && _a !== void 0 ? _a : document.createElement('div');\n var container = resources === null || resources === void 0 ? void 0 : resources.container;\n var root = new Group({ name: 'root' });\n // Prevent the scene from rendering chart components in an invalid state\n // (before first layout is performed).\n root.visible = false;\n root.append(_this.seriesRoot);\n _this.axisGroup = new Group({ name: 'Axes', layer: true, zIndex: Layers.AXIS_ZINDEX });\n root.appendChild(_this.axisGroup);\n _this.element = element;\n element.classList.add('ag-chart-wrapper');\n element.style.position = 'relative';\n _this.scene = scene !== null && scene !== void 0 ? scene : new Scene({ document: document, overrideDevicePixelRatio: overrideDevicePixelRatio });\n _this.debug = false;\n _this.scene.debug.consoleLog = false;\n _this.scene.root = root;\n _this.scene.container = element;\n _this.autoSize = true;\n _this.interactionManager = new InteractionManager(element);\n _this.cursorManager = new CursorManager(element);\n _this.highlightManager = new HighlightManager();\n _this.zoomManager = new ZoomManager();\n _this.layoutService = new LayoutService();\n _this.updateService = new UpdateService(function (type) {\n if (type === void 0) { type = ChartUpdateType.FULL; }\n return _this.update(type);\n });\n SizeMonitor.observe(_this.element, function (size) {\n var width = size.width, height = size.height;\n if (!_this.autoSize) {\n return;\n }\n if (width === 0 && height === 0) {\n return;\n }\n if (width === _this.width && height === _this.height) {\n return;\n }\n _this._lastAutoSize = [width, height];\n _this.resize(width, height);\n });\n _this.layoutService.addListener('start-layout', function (e) { return _this.positionPadding(e.shrinkRect); });\n _this.layoutService.addListener('start-layout', function (e) { return _this.positionCaptions(e.shrinkRect); });\n _this.tooltip = new Tooltip(_this.scene.canvas.element, document, document.body);\n _this.tooltipManager = new TooltipManager(_this.tooltip, _this.interactionManager);\n _this.legend = new Legend(_this, _this.interactionManager, _this.cursorManager, _this.highlightManager, _this.tooltipManager, _this.layoutService);\n _this.overlays = new ChartOverlays(_this.element);\n _this.highlight = new ChartHighlight();\n _this.container = container;\n // Add interaction listeners last so child components are registered first.\n _this.interactionManager.addListener('click', function (event) { return _this.onClick(event); });\n _this.interactionManager.addListener('dblclick', function (event) { return _this.onDoubleClick(event); });\n _this.interactionManager.addListener('hover', function (event) { return _this.onMouseMove(event); });\n _this.interactionManager.addListener('leave', function (event) { return _this.onLeave(event); });\n _this.interactionManager.addListener('page-left', function () { return _this.destroy(); });\n _this.interactionManager.addListener('wheel', function () { return _this.disablePointer(); });\n _this.zoomManager.addListener('zoom-change', function (_) {\n return _this.update(ChartUpdateType.PROCESS_DATA, { forceNodeDataRefresh: true });\n });\n _this.highlightManager.addListener('highlight-change', function (event) { return _this.changeHighlightDatum(event); });\n return _this;\n }\n Chart.prototype.getOptions = function () {\n var _a;\n var queuedUserOptions = this.queuedUserOptions;\n var lastUpdateOptions = (_a = queuedUserOptions[queuedUserOptions.length - 1]) !== null && _a !== void 0 ? _a : this.userOptions;\n return jsonMerge([lastUpdateOptions]);\n };\n Object.defineProperty(Chart.prototype, \"container\", {\n get: function () {\n return this._container;\n },\n set: function (value) {\n if (this._container !== value) {\n var parentNode = this.element.parentNode;\n if (parentNode != null) {\n parentNode.removeChild(this.element);\n }\n if (value && !this.destroyed) {\n value.appendChild(this.element);\n }\n this._container = value;\n }\n },\n enumerable: false,\n configurable: true\n });\n Chart.prototype.autoSizeChanged = function (value) {\n var style = this.element.style;\n if (value) {\n style.display = 'block';\n style.width = '100%';\n style.height = '100%';\n if (!this._lastAutoSize) {\n return;\n }\n this.resize(this._lastAutoSize[0], this._lastAutoSize[1]);\n }\n else {\n style.display = 'inline-block';\n style.width = 'auto';\n style.height = 'auto';\n }\n };\n Chart.prototype.download = function (fileName, fileFormat) {\n this.scene.download(fileName, fileFormat);\n };\n Object.defineProperty(Chart.prototype, \"destroyed\", {\n get: function () {\n return this._destroyed;\n },\n enumerable: false,\n configurable: true\n });\n Chart.prototype.addModule = function (module) {\n if (this.modules[module.optionsKey] != null) {\n throw new Error('AG Charts - module already initialised: ' + module.optionsKey);\n }\n var moduleMeta = module.initialiseModule(this.getModuleContext());\n this.modules[module.optionsKey] = moduleMeta;\n this[module.optionsKey] = moduleMeta.instance;\n };\n Chart.prototype.removeModule = function (module) {\n var _a, _b;\n (_b = (_a = this.modules[module.optionsKey]) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.destroy();\n delete this.modules[module.optionsKey];\n delete this[module.optionsKey];\n };\n Chart.prototype.isModuleEnabled = function (module) {\n return this.modules[module.optionsKey] != null;\n };\n Chart.prototype.getModuleContext = function () {\n var _a = this, scene = _a.scene, interactionManager = _a.interactionManager, zoomManager = _a.zoomManager, cursorManager = _a.cursorManager, highlightManager = _a.highlightManager, tooltipManager = _a.tooltipManager, layoutService = _a.layoutService, updateService = _a.updateService;\n return {\n scene: scene,\n interactionManager: interactionManager,\n zoomManager: zoomManager,\n cursorManager: cursorManager,\n highlightManager: highlightManager,\n tooltipManager: tooltipManager,\n layoutService: layoutService,\n updateService: updateService,\n };\n };\n Chart.prototype.destroy = function (opts) {\n var e_1, _a;\n if (this._destroyed) {\n return;\n }\n var keepTransferableResources = opts === null || opts === void 0 ? void 0 : opts.keepTransferableResources;\n var result = undefined;\n this._performUpdateType = ChartUpdateType.NONE;\n this._pendingFactoryUpdates.splice(0);\n this.tooltipManager.destroy();\n this.tooltip.destroy();\n this.legend.destroy();\n SizeMonitor.unobserve(this.element);\n try {\n for (var _b = __values(Object.entries(this.modules)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], module_1 = _d[1];\n module_1.instance.destroy();\n delete this.modules[key];\n delete this[key];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.interactionManager.destroy();\n if (keepTransferableResources) {\n this.scene.strip();\n result = { container: this.container, scene: this.scene, element: this.element };\n }\n else {\n this.scene.destroy();\n this.container = undefined;\n }\n this.series.forEach(function (s) { return s.destroy(); });\n this.series = [];\n this.axes.forEach(function (a) { return a.destroy(); });\n this.axes = [];\n this._destroyed = true;\n return result;\n };\n Chart.prototype.log = function (opts) {\n if (this.debug) {\n Logger.debug(opts);\n }\n };\n Chart.prototype.disablePointer = function (highlightOnly) {\n if (highlightOnly === void 0) { highlightOnly = false; }\n if (!highlightOnly) {\n this.tooltipManager.removeTooltip(this.id);\n }\n this.highlightManager.updateHighlight(this.id);\n if (this.lastInteractionEvent) {\n this.lastInteractionEvent = undefined;\n }\n };\n Chart.prototype.requestFactoryUpdate = function (cb) {\n var callbacks = this._pendingFactoryUpdates;\n var count = callbacks.length;\n if (count === 0) {\n callbacks.push(cb);\n this._processCallbacks();\n }\n else {\n // Factory callback process already running, the callback will be invoked asynchronously.\n // Clear the queue after the first callback to prevent unnecessary re-renderings.\n callbacks.splice(1, count - 1, cb);\n }\n };\n Chart.prototype._processCallbacks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var callbacks, e_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n callbacks = this._pendingFactoryUpdates;\n _a.label = 1;\n case 1:\n if (!(callbacks.length > 0)) return [3 /*break*/, 7];\n if (!this.updatePending) return [3 /*break*/, 3];\n return [4 /*yield*/, sleep(1)];\n case 2:\n _a.sent();\n return [3 /*break*/, 1]; // Make sure to check queue has an item before continuing.\n case 3:\n _a.trys.push([3, 5, , 6]);\n return [4 /*yield*/, callbacks[0]()];\n case 4:\n _a.sent();\n return [3 /*break*/, 6];\n case 5:\n e_2 = _a.sent();\n Logger.error('update error', e_2);\n return [3 /*break*/, 6];\n case 6:\n callbacks.shift();\n return [3 /*break*/, 1];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(Chart.prototype, \"performUpdateType\", {\n get: function () {\n return this._performUpdateType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"updatePending\", {\n get: function () {\n return this._performUpdateType !== ChartUpdateType.NONE || this.lastInteractionEvent != null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"lastPerformUpdateError\", {\n get: function () {\n return this._lastPerformUpdateError;\n },\n enumerable: false,\n configurable: true\n });\n Chart.prototype.awaitUpdateCompletion = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.performUpdateTrigger.await()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Chart.prototype.update = function (type, opts) {\n var e_3, _a;\n if (type === void 0) { type = ChartUpdateType.FULL; }\n var _b = opts || {}, _c = _b.forceNodeDataRefresh, forceNodeDataRefresh = _c === void 0 ? false : _c, _d = _b.seriesToUpdate, seriesToUpdate = _d === void 0 ? this.series : _d;\n if (forceNodeDataRefresh) {\n this.series.forEach(function (series) { return series.markNodeDataDirty(); });\n }\n try {\n for (var seriesToUpdate_1 = __values(seriesToUpdate), seriesToUpdate_1_1 = seriesToUpdate_1.next(); !seriesToUpdate_1_1.done; seriesToUpdate_1_1 = seriesToUpdate_1.next()) {\n var series = seriesToUpdate_1_1.value;\n this.seriesToUpdate.add(series);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (seriesToUpdate_1_1 && !seriesToUpdate_1_1.done && (_a = seriesToUpdate_1.return)) _a.call(seriesToUpdate_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n if (type < this._performUpdateType) {\n this._performUpdateType = type;\n this.performUpdateTrigger.schedule();\n }\n };\n Chart.prototype.performUpdate = function (count) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var _b, performUpdateType, extraDebugStats, splits, _c, count_1, seriesRect_1, seriesUpdates, tooltipMeta, end;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _b = this, performUpdateType = _b._performUpdateType, extraDebugStats = _b.extraDebugStats;\n splits = [performance.now()];\n _c = performUpdateType;\n switch (_c) {\n case ChartUpdateType.FULL: return [3 /*break*/, 1];\n case ChartUpdateType.PROCESS_DATA: return [3 /*break*/, 1];\n case ChartUpdateType.PERFORM_LAYOUT: return [3 /*break*/, 3];\n case ChartUpdateType.SERIES_UPDATE: return [3 /*break*/, 5];\n case ChartUpdateType.TOOLTIP_RECALCULATION: return [3 /*break*/, 7];\n case ChartUpdateType.SCENE_RENDER: return [3 /*break*/, 8];\n case ChartUpdateType.NONE: return [3 /*break*/, 10];\n }\n return [3 /*break*/, 11];\n case 1: return [4 /*yield*/, this.processData()];\n case 2:\n _d.sent();\n this.disablePointer(true);\n splits.push(performance.now());\n _d.label = 3;\n case 3:\n if (this.autoSize && !this._lastAutoSize) {\n count_1 = this._performUpdateNoRenderCount++;\n if (count_1 < 5) {\n // Reschedule if canvas size hasn't been set yet to avoid a race.\n this._performUpdateType = ChartUpdateType.PERFORM_LAYOUT;\n this.performUpdateTrigger.schedule();\n return [3 /*break*/, 11];\n }\n // After several failed passes, continue and accept there maybe a redundant\n // render. Sometimes this case happens when we already have the correct\n // width/height, and we end up never rendering the chart in that scenario.\n }\n this._performUpdateNoRenderCount = 0;\n return [4 /*yield*/, this.performLayout()];\n case 4:\n _d.sent();\n this.handleOverlays();\n splits.push(performance.now());\n _d.label = 5;\n case 5:\n seriesRect_1 = this.seriesRect;\n seriesUpdates = __spread(this.seriesToUpdate).map(function (series) { return series.update({ seriesRect: seriesRect_1 }); });\n this.seriesToUpdate.clear();\n return [4 /*yield*/, Promise.all(seriesUpdates)];\n case 6:\n _d.sent();\n splits.push(performance.now());\n _d.label = 7;\n case 7:\n tooltipMeta = this.tooltipManager.getTooltipMeta(this.id);\n if (performUpdateType < ChartUpdateType.SERIES_UPDATE && ((_a = tooltipMeta === null || tooltipMeta === void 0 ? void 0 : tooltipMeta.event) === null || _a === void 0 ? void 0 : _a.type) === 'hover') {\n this.handlePointer(tooltipMeta.event);\n }\n _d.label = 8;\n case 8: return [4 /*yield*/, this.scene.render({ debugSplitTimes: splits, extraDebugStats: extraDebugStats })];\n case 9:\n _d.sent();\n this.extraDebugStats = {};\n _d.label = 10;\n case 10:\n // Do nothing.\n this._performUpdateType = ChartUpdateType.NONE;\n _d.label = 11;\n case 11:\n end = performance.now();\n this.log({\n chart: this,\n durationMs: Math.round((end - splits[0]) * 100) / 100,\n count: count,\n performUpdateType: ChartUpdateType[performUpdateType],\n });\n return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(Chart.prototype, \"axes\", {\n get: function () {\n return this._axes;\n },\n set: function (values) {\n var _this = this;\n var removedAxes = new Set();\n this._axes.forEach(function (axis) {\n axis.detachAxis(_this.axisGroup);\n removedAxes.add(axis);\n });\n // make linked axes go after the regular ones (simulates stable sort by `linkedTo` property)\n this._axes = values.filter(function (a) { return !a.linkedTo; }).concat(values.filter(function (a) { return a.linkedTo; }));\n this._axes.forEach(function (axis) {\n axis.attachAxis(_this.axisGroup);\n removedAxes.delete(axis);\n });\n removedAxes.forEach(function (axis) { return axis.destroy(); });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"series\", {\n get: function () {\n return this._series;\n },\n set: function (values) {\n var _this = this;\n this.removeAllSeries();\n values.forEach(function (series) { return _this.addSeries(series); });\n },\n enumerable: false,\n configurable: true\n });\n Chart.prototype.addSeries = function (series, before) {\n var _a = this, allSeries = _a.series, seriesRoot = _a.seriesRoot;\n var canAdd = allSeries.indexOf(series) < 0;\n if (canAdd) {\n var beforeIndex = before ? allSeries.indexOf(before) : -1;\n if (beforeIndex >= 0) {\n allSeries.splice(beforeIndex, 0, series);\n seriesRoot.insertBefore(series.rootGroup, before.rootGroup);\n }\n else {\n allSeries.push(series);\n seriesRoot.append(series.rootGroup);\n }\n this.initSeries(series);\n return true;\n }\n return false;\n };\n Chart.prototype.initSeries = function (series) {\n series.chart = this;\n series.highlightManager = this.highlightManager;\n if (!series.data) {\n series.data = this.data;\n }\n this.addSeriesListeners(series);\n };\n Chart.prototype.freeSeries = function (series) {\n series.chart = undefined;\n series.removeEventListener('nodeClick', this.onSeriesNodeClick);\n series.removeEventListener('nodeDoubleClick', this.onSeriesNodeDoubleClick);\n };\n Chart.prototype.removeAllSeries = function () {\n var _this = this;\n this.series.forEach(function (series) {\n _this.freeSeries(series);\n _this.seriesRoot.removeChild(series.rootGroup);\n });\n this._series = []; // using `_series` instead of `series` to prevent infinite recursion\n };\n Chart.prototype.addSeriesListeners = function (series) {\n if (this.hasEventListener('seriesNodeClick')) {\n series.addEventListener('nodeClick', this.onSeriesNodeClick);\n }\n if (this.hasEventListener('seriesNodeDoubleClick')) {\n series.addEventListener('nodeDoubleClick', this.onSeriesNodeDoubleClick);\n }\n };\n Chart.prototype.updateAllSeriesListeners = function () {\n var _this = this;\n this.series.forEach(function (series) {\n series.removeEventListener('nodeClick', _this.onSeriesNodeClick);\n series.removeEventListener('nodeDoubleClick', _this.onSeriesNodeDoubleClick);\n _this.addSeriesListeners(series);\n });\n };\n Chart.prototype.assignSeriesToAxes = function () {\n var _this = this;\n this.axes.forEach(function (axis) {\n axis.boundSeries = _this.series.filter(function (s) {\n var seriesAxis = axis.direction === ChartAxisDirection.X ? s.xAxis : s.yAxis;\n return seriesAxis === axis;\n });\n });\n };\n Chart.prototype.assignAxesToSeries = function (force) {\n var _this = this;\n if (force === void 0) { force = false; }\n // This method has to run before `assignSeriesToAxes`.\n var directionToAxesMap = {};\n this.axes.forEach(function (axis) {\n var direction = axis.direction;\n var directionAxes = directionToAxesMap[direction] || (directionToAxesMap[direction] = []);\n directionAxes.push(axis);\n });\n this.series.forEach(function (series) {\n series.directions.forEach(function (direction) {\n var currentAxis = direction === ChartAxisDirection.X ? series.xAxis : series.yAxis;\n if (currentAxis && !force) {\n return;\n }\n var directionAxes = directionToAxesMap[direction];\n if (!directionAxes) {\n Logger.warn(\"no available axis for direction [\" + direction + \"]; check series and axes configuration.\");\n return;\n }\n var seriesKeys = series.getKeys(direction);\n var newAxis = _this.findMatchingAxis(directionAxes, series.getKeys(direction));\n if (!newAxis) {\n Logger.warn(\"no matching axis for direction [\" + direction + \"] and keys [\" + seriesKeys + \"]; check series and axes configuration.\");\n return;\n }\n if (direction === ChartAxisDirection.X) {\n series.xAxis = newAxis;\n }\n else {\n series.yAxis = newAxis;\n }\n });\n });\n };\n Chart.prototype.findMatchingAxis = function (directionAxes, directionKeys) {\n var e_4, _a, e_5, _b;\n try {\n for (var directionAxes_1 = __values(directionAxes), directionAxes_1_1 = directionAxes_1.next(); !directionAxes_1_1.done; directionAxes_1_1 = directionAxes_1.next()) {\n var axis = directionAxes_1_1.value;\n var axisKeys = axis.keys;\n if (!axisKeys.length) {\n return axis;\n }\n if (!directionKeys) {\n continue;\n }\n try {\n for (var directionKeys_1 = (e_5 = void 0, __values(directionKeys)), directionKeys_1_1 = directionKeys_1.next(); !directionKeys_1_1.done; directionKeys_1_1 = directionKeys_1.next()) {\n var directionKey = directionKeys_1_1.value;\n if (axisKeys.indexOf(directionKey) >= 0) {\n return axis;\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (directionKeys_1_1 && !directionKeys_1_1.done && (_b = directionKeys_1.return)) _b.call(directionKeys_1);\n }\n finally { if (e_5) throw e_5.error; }\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (directionAxes_1_1 && !directionAxes_1_1.done && (_a = directionAxes_1.return)) _a.call(directionAxes_1);\n }\n finally { if (e_4) throw e_4.error; }\n }\n };\n Chart.prototype.resize = function (width, height) {\n if (!width || !height || !Number.isFinite(width) || !Number.isFinite(height))\n return;\n if (this.scene.resize(width, height)) {\n this.disablePointer();\n this.update(ChartUpdateType.PERFORM_LAYOUT, { forceNodeDataRefresh: true });\n }\n };\n Chart.prototype.processData = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.axes.length > 0 || this.series.some(function (s) { return s instanceof CartesianSeries; })) {\n this.assignAxesToSeries(true);\n this.assignSeriesToAxes();\n }\n return [4 /*yield*/, Promise.all(this.series.map(function (s) { return s.processData(); }))];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.updateLegend()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Chart.prototype.placeLabels = function () {\n var e_6, _a;\n var visibleSeries = [];\n var data = [];\n try {\n for (var _b = __values(this.series), _c = _b.next(); !_c.done; _c = _b.next()) {\n var series = _c.value;\n if (!series.visible) {\n continue;\n }\n var labelData = series.getLabelData();\n if (!(labelData && isPointLabelDatum(labelData[0]))) {\n continue;\n }\n data.push(labelData);\n visibleSeries.push(series);\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_6) throw e_6.error; }\n }\n var seriesRect = this.seriesRect;\n var labels = seriesRect && data.length > 0\n ? placeLabels(data, { x: 0, y: 0, width: seriesRect.width, height: seriesRect.height })\n : [];\n return new Map(labels.map(function (l, i) { return [visibleSeries[i], l]; }));\n };\n Chart.prototype.updateLegend = function () {\n return __awaiter(this, void 0, void 0, function () {\n var legendData, formatter;\n return __generator(this, function (_a) {\n legendData = [];\n this.series\n .filter(function (s) { return s.showInLegend; })\n .forEach(function (series) {\n legendData.push.apply(legendData, __spread(series.getLegendData()));\n });\n formatter = this.legend.item.label.formatter;\n if (formatter) {\n legendData.forEach(function (datum) {\n return (datum.label.text = formatter({\n get id() {\n Logger.warnOnce(\"LegendLabelFormatterParams.id is deprecated, use seriesId instead\");\n return datum.seriesId;\n },\n itemId: datum.itemId,\n value: datum.label.text,\n seriesId: datum.seriesId,\n }));\n });\n }\n this.legend.data = legendData;\n return [2 /*return*/];\n });\n });\n };\n Chart.prototype.performLayout = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, width, height, shrinkRect;\n return __generator(this, function (_b) {\n this.scene.root.visible = true;\n _a = this.scene, width = _a.width, height = _a.height;\n shrinkRect = new BBox(0, 0, width, height);\n (shrinkRect = this.layoutService.dispatchPerformLayout('start-layout', { shrinkRect: shrinkRect }).shrinkRect);\n (shrinkRect = this.layoutService.dispatchPerformLayout('before-series', { shrinkRect: shrinkRect }).shrinkRect);\n return [2 /*return*/, shrinkRect];\n });\n });\n };\n Chart.prototype.positionPadding = function (shrinkRect) {\n var padding = this.padding;\n shrinkRect.shrink(padding.left, 'left');\n shrinkRect.shrink(padding.top, 'top');\n shrinkRect.shrink(padding.right, 'right');\n shrinkRect.shrink(padding.bottom, 'bottom');\n return { shrinkRect: shrinkRect };\n };\n Chart.prototype.positionCaptions = function (shrinkRect) {\n var _a = this, title = _a.title, subtitle = _a.subtitle, footnote = _a.footnote;\n var newShrinkRect = shrinkRect.clone();\n var positionTopAndShrinkBBox = function (caption) {\n var _a;\n var baseY = newShrinkRect.y;\n caption.node.x = newShrinkRect.x + newShrinkRect.width / 2;\n caption.node.y = baseY;\n caption.node.textBaseline = 'top';\n var bbox = caption.node.computeBBox();\n // As the bbox (x,y) ends up at a different location than specified above, we need to\n // take it into consideration when calculating how much space needs to be reserved to\n // accommodate the caption.\n var bboxHeight = Math.ceil(bbox.y - baseY + bbox.height + ((_a = caption.spacing) !== null && _a !== void 0 ? _a : 0));\n newShrinkRect.shrink(bboxHeight, 'top');\n };\n var positionBottomAndShrinkBBox = function (caption) {\n var _a;\n var baseY = newShrinkRect.y + newShrinkRect.height;\n caption.node.x = newShrinkRect.x + newShrinkRect.width / 2;\n caption.node.y = baseY;\n caption.node.textBaseline = 'bottom';\n var bbox = caption.node.computeBBox();\n var bboxHeight = Math.ceil(baseY - bbox.y + ((_a = caption.spacing) !== null && _a !== void 0 ? _a : 0));\n newShrinkRect.shrink(bboxHeight, 'bottom');\n };\n if (title) {\n title.node.visible = title.enabled;\n if (title.node.visible) {\n positionTopAndShrinkBBox(title);\n }\n }\n if (subtitle) {\n subtitle.node.visible = title !== undefined && title.enabled && subtitle.enabled;\n if (subtitle.node.visible) {\n positionTopAndShrinkBBox(subtitle);\n }\n }\n if (footnote) {\n footnote.node.visible = footnote.enabled;\n if (footnote.node.visible) {\n positionBottomAndShrinkBBox(footnote);\n }\n }\n return { shrinkRect: newShrinkRect };\n };\n Chart.prototype.getSeriesRect = function () {\n return this.seriesRect;\n };\n // x/y are local canvas coordinates in CSS pixels, not actual pixels\n Chart.prototype.pickSeriesNode = function (point, exactMatchOnly, maxDistance) {\n var e_7, _a;\n var _b, _c;\n var start = performance.now();\n // Disable 'nearest match' options if looking for exact matches only\n var pickModes = exactMatchOnly ? [SeriesNodePickMode.EXACT_SHAPE_MATCH] : undefined;\n // Iterate through series in reverse, as later declared series appears on top of earlier\n // declared series.\n var reverseSeries = __spread(this.series).reverse();\n var result = undefined;\n try {\n for (var reverseSeries_1 = __values(reverseSeries), reverseSeries_1_1 = reverseSeries_1.next(); !reverseSeries_1_1.done; reverseSeries_1_1 = reverseSeries_1.next()) {\n var series = reverseSeries_1_1.value;\n if (!series.visible || !series.rootGroup.visible) {\n continue;\n }\n var _d = (_b = series.pickNode(point, pickModes)) !== null && _b !== void 0 ? _b : {}, match = _d.match, distance = _d.distance;\n if (!match || distance == null) {\n continue;\n }\n if ((!result || result.distance > distance) && distance <= (maxDistance !== null && maxDistance !== void 0 ? maxDistance : Infinity)) {\n result = { series: series, distance: distance, datum: match };\n }\n if (distance === 0) {\n break;\n }\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (reverseSeries_1_1 && !reverseSeries_1_1.done && (_a = reverseSeries_1.return)) _a.call(reverseSeries_1);\n }\n finally { if (e_7) throw e_7.error; }\n }\n this.extraDebugStats['pickSeriesNode'] = Math.round(((_c = this.extraDebugStats['pickSeriesNode']) !== null && _c !== void 0 ? _c : 0) + (performance.now() - start));\n return result;\n };\n Chart.prototype.onMouseMove = function (event) {\n this.lastInteractionEvent = event;\n this.pointerScheduler.schedule();\n this.extraDebugStats['mouseX'] = event.offsetX;\n this.extraDebugStats['mouseY'] = event.offsetY;\n this.update(ChartUpdateType.SCENE_RENDER);\n };\n Chart.prototype.onLeave = function (event) {\n if (this.tooltip.pointerLeftOntoTooltip(event)) {\n return;\n }\n this.disablePointer();\n };\n Chart.prototype.handlePointer = function (event) {\n var _this = this;\n var _a = this, lastPick = _a.lastPick, hoverRect = _a.hoverRect;\n var offsetX = event.offsetX, offsetY = event.offsetY;\n var disablePointer = function (highlightOnly) {\n if (highlightOnly === void 0) { highlightOnly = false; }\n if (lastPick) {\n // Cursor moved from a non-marker node to empty space.\n _this.disablePointer(highlightOnly);\n }\n };\n if (!(hoverRect === null || hoverRect === void 0 ? void 0 : hoverRect.containsPoint(offsetX, offsetY))) {\n disablePointer();\n return;\n }\n // Handle node highlighting and tooltip toggling when pointer within `tooltip.range`\n this.handlePointerTooltip(event, disablePointer);\n // Handle node highlighting and mouse cursor when pointer withing `series[].nodeClickRange`\n this.handlePointerNode(event);\n };\n Chart.prototype.handlePointerTooltip = function (event, disablePointer) {\n var _a, _b;\n var _c = this, lastPick = _c.lastPick, tooltip = _c.tooltip;\n var range = tooltip.range;\n var pageX = event.pageX, pageY = event.pageY, offsetX = event.offsetX, offsetY = event.offsetY;\n var pixelRange;\n if (typeof range === 'number' && Number.isFinite(range)) {\n pixelRange = range;\n }\n var pick = this.pickSeriesNode({ x: offsetX, y: offsetY }, range === 'exact', pixelRange);\n if (!pick) {\n this.tooltipManager.updateTooltip(this.id);\n if (this.highlight.range === 'tooltip')\n disablePointer(true);\n return;\n }\n var isNewDatum = this.highlight.range === 'node' || !lastPick || lastPick.datum !== pick.datum;\n var html;\n if (isNewDatum) {\n html = pick.series.getTooltipHtml(pick.datum);\n if (this.highlight.range === 'tooltip') {\n this.highlightManager.updateHighlight(this.id, pick.datum);\n }\n }\n else if (lastPick) {\n lastPick.event = event.sourceEvent;\n }\n var isPixelRange = pixelRange != null;\n var tooltipEnabled = this.tooltip.enabled && pick.series.tooltip.enabled;\n var exactlyMatched = range === 'exact' && pick.distance === 0;\n var rangeMatched = range === 'nearest' || isPixelRange || exactlyMatched;\n var shouldUpdateTooltip = tooltipEnabled && rangeMatched && (!isNewDatum || html !== undefined);\n var position = {\n xOffset: pick.datum.series.tooltip.position.xOffset,\n yOffset: pick.datum.series.tooltip.position.yOffset,\n };\n var meta = this.mergePointerDatum({ pageX: pageX, pageY: pageY, offsetX: offsetX, offsetY: offsetY, event: event, position: position }, pick.datum);\n meta.enableInteraction = (_b = (_a = pick.series.tooltip.interaction) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : false;\n if (shouldUpdateTooltip) {\n this.tooltipManager.updateTooltip(this.id, meta, html);\n }\n };\n Chart.prototype.handlePointerNode = function (event) {\n var _this = this;\n var found = this.checkSeriesNodeRange(event, function (series, datum) {\n if (series.hasEventListener('nodeClick') || series.hasEventListener('nodeDoubleClick')) {\n _this.cursorManager.updateCursor('chart', 'pointer');\n }\n if (_this.highlight.range === 'node') {\n _this.highlightManager.updateHighlight(_this.id, datum);\n }\n });\n if (!found) {\n this.cursorManager.updateCursor('chart');\n if (this.highlight.range === 'node') {\n this.highlightManager.updateHighlight(this.id);\n }\n }\n };\n Chart.prototype.onClick = function (event) {\n if (this.checkSeriesNodeClick(event)) {\n this.update(ChartUpdateType.SERIES_UPDATE);\n return;\n }\n this.fireEvent({\n type: 'click',\n event: event.sourceEvent,\n });\n };\n Chart.prototype.onDoubleClick = function (event) {\n if (this.checkSeriesNodeDoubleClick(event)) {\n this.update(ChartUpdateType.SERIES_UPDATE);\n return;\n }\n this.fireEvent({\n type: 'doubleClick',\n event: event.sourceEvent,\n });\n };\n Chart.prototype.checkSeriesNodeClick = function (event) {\n return this.checkSeriesNodeRange(event, function (series, datum) {\n return series.fireNodeClickEvent(event.sourceEvent, datum);\n });\n };\n Chart.prototype.checkSeriesNodeDoubleClick = function (event) {\n return this.checkSeriesNodeRange(event, function (series, datum) {\n return series.fireNodeDoubleClickEvent(event.sourceEvent, datum);\n });\n };\n Chart.prototype.checkSeriesNodeRange = function (event, callback) {\n var nearestNode = this.pickSeriesNode({ x: event.offsetX, y: event.offsetY }, false);\n var datum = nearestNode === null || nearestNode === void 0 ? void 0 : nearestNode.datum;\n var nodeClickRange = datum === null || datum === void 0 ? void 0 : datum.series.nodeClickRange;\n // First check if we should trigger the callback based on nearest node\n if (datum && nodeClickRange === 'nearest') {\n callback(datum.series, datum);\n return true;\n }\n // Then check for an exact match or within the given range\n var pixelRange;\n if (typeof nodeClickRange === 'number' && Number.isFinite(nodeClickRange)) {\n pixelRange = nodeClickRange;\n }\n var pick = this.pickSeriesNode({ x: event.offsetX, y: event.offsetY }, nodeClickRange === 'exact', pixelRange);\n if (!pick)\n return false;\n // Then if we've picked a node within the pixel range, or exactly, trigger the callback\n var isPixelRange = pixelRange != null;\n var exactlyMatched = nodeClickRange === 'exact' && pick.distance === 0;\n if (isPixelRange || exactlyMatched) {\n callback(pick.series, pick.datum);\n return true;\n }\n return false;\n };\n Chart.prototype.mergePointerDatum = function (meta, datum) {\n var type = datum.series.tooltip.position.type;\n if (type === 'node' && datum.nodeMidPoint) {\n var _a = datum.nodeMidPoint, x = _a.x, y = _a.y;\n var canvas = this.scene.canvas;\n var point = datum.series.rootGroup.inverseTransformPoint(x, y);\n var canvasRect = canvas.element.getBoundingClientRect();\n return __assign(__assign({}, meta), { pageX: Math.round(canvasRect.left + window.scrollX + point.x), pageY: Math.round(canvasRect.top + window.scrollY + point.y), offsetX: Math.round(point.x), offsetY: Math.round(point.y) });\n }\n return meta;\n };\n Chart.prototype.changeHighlightDatum = function (event) {\n var seriesToUpdate = new Set();\n var _a = event.currentHighlight || {}, _b = _a.series, newSeries = _b === void 0 ? undefined : _b, newDatum = _a.datum;\n var _c = event.previousHighlight || {}, _d = _c.series, lastSeries = _d === void 0 ? undefined : _d, lastDatum = _c.datum;\n if (lastSeries) {\n seriesToUpdate.add(lastSeries);\n }\n if (newSeries) {\n seriesToUpdate.add(newSeries);\n }\n // Adjust cursor if a specific datum is highlighted, rather than just a series.\n if ((lastSeries === null || lastSeries === void 0 ? void 0 : lastSeries.cursor) && lastDatum) {\n this.cursorManager.updateCursor(lastSeries.id);\n }\n if ((newSeries === null || newSeries === void 0 ? void 0 : newSeries.cursor) && newDatum) {\n this.cursorManager.updateCursor(newSeries.id, newSeries.cursor);\n }\n this.lastPick = event.currentHighlight ? { datum: event.currentHighlight } : undefined;\n var updateAll = newSeries == null || lastSeries == null;\n if (updateAll) {\n this.update(ChartUpdateType.SERIES_UPDATE);\n }\n else {\n this.update(ChartUpdateType.SERIES_UPDATE, { seriesToUpdate: seriesToUpdate });\n }\n };\n Chart.prototype.waitForUpdate = function (timeoutMs) {\n if (timeoutMs === void 0) { timeoutMs = 5000; }\n return __awaiter(this, void 0, void 0, function () {\n var start;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n start = performance.now();\n _a.label = 1;\n case 1:\n if (!(this._pendingFactoryUpdates.length > 0 || this.updatePending)) return [3 /*break*/, 3];\n if (performance.now() - start > timeoutMs) {\n throw new Error('waitForUpdate() timeout reached.');\n }\n return [4 /*yield*/, sleep(5)];\n case 2:\n _a.sent();\n return [3 /*break*/, 1];\n case 3: return [4 /*yield*/, this.awaitUpdateCompletion()];\n case 4:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Chart.prototype.handleOverlays = function () {\n this.handleNoDataOverlay();\n };\n Chart.prototype.handleNoDataOverlay = function () {\n var shouldDisplayNoDataOverlay = !this.series.some(function (s) { return s.hasData(); });\n var rect = this.getSeriesRect();\n if (shouldDisplayNoDataOverlay && rect) {\n this.overlays.noData.show(rect);\n }\n else {\n this.overlays.noData.hide();\n }\n };\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n this.scene.debug.consoleLog = value;\n },\n })\n ], Chart.prototype, \"debug\", void 0);\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n var _a;\n (_a = this.series) === null || _a === void 0 ? void 0 : _a.forEach(function (series) { return (series.data = value); });\n },\n })\n ], Chart.prototype, \"data\", void 0);\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n this.autoSize = false;\n this.resize(value, this.height);\n },\n })\n ], Chart.prototype, \"width\", void 0);\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n this.autoSize = false;\n this.resize(this.width, value);\n },\n })\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n ActionOnSet({\n changeValue: function (value) {\n this.autoSizeChanged(value);\n },\n }),\n Validate(BOOLEAN)\n ], Chart.prototype, \"autoSize\", void 0);\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n var _a;\n (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(value.node);\n },\n oldValue: function (oldValue) {\n var _a;\n (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(oldValue.node);\n },\n })\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n var _a;\n (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(value.node);\n },\n oldValue: function (oldValue) {\n var _a;\n (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(oldValue.node);\n },\n })\n ], Chart.prototype, \"subtitle\", void 0);\n __decorate([\n ActionOnSet({\n newValue: function (value) {\n var _a;\n (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(value.node);\n },\n oldValue: function (oldValue) {\n var _a;\n (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(oldValue.node);\n },\n })\n ], Chart.prototype, \"footnote\", void 0);\n __decorate([\n Validate(STRING_UNION('standalone', 'integrated'))\n ], Chart.prototype, \"mode\", void 0);\n return Chart;\n}(Observable));\nexport { Chart };\n","/**\n * The tree layout is calculated in abstract x/y coordinates, where the root is at (0, 0)\n * and the tree grows downward from the root.\n */\nvar TreeNode = /** @class */ (function () {\n function TreeNode(label, parent, number) {\n if (label === void 0) { label = ''; }\n if (number === void 0) { number = 0; }\n this.x = 0;\n this.y = 0;\n this.subtreeLeft = NaN;\n this.subtreeRight = NaN;\n this.screenX = 0;\n this.screenY = 0;\n this.children = [];\n this.leafCount = 0;\n this.prelim = 0;\n this.mod = 0;\n this.ancestor = this;\n this.change = 0;\n this.shift = 0;\n this.label = label;\n // screenX and screenY are meant to be recomputed from (layout) x and y\n // when the tree is resized (without performing another layout)\n this.parent = parent;\n this.depth = parent ? parent.depth + 1 : 0;\n this.number = number;\n }\n TreeNode.prototype.getLeftSibling = function () {\n return this.number > 0 && this.parent ? this.parent.children[this.number - 1] : undefined;\n };\n TreeNode.prototype.getLeftmostSibling = function () {\n return this.number > 0 && this.parent ? this.parent.children[0] : undefined;\n };\n // traverse the left contour of a subtree, return the successor of v on this contour\n TreeNode.prototype.nextLeft = function () {\n return this.children ? this.children[0] : this.thread;\n };\n // traverse the right contour of a subtree, return the successor of v on this contour\n TreeNode.prototype.nextRight = function () {\n return this.children ? this.children[this.children.length - 1] : this.thread;\n };\n TreeNode.prototype.getSiblings = function () {\n var _this = this;\n return this.parent ? this.parent.children.filter(function (_, i) { return i !== _this.number; }) : [];\n };\n return TreeNode;\n}());\n/**\n * Converts an array of ticks, where each tick has an array of labels, to a label tree.\n * If `pad` is `true`, will ensure that every branch matches the depth of the tree by\n * creating empty labels.\n */\nexport function ticksToTree(ticks, pad) {\n if (pad === void 0) { pad = true; }\n var root = new TreeNode();\n var depth = 0;\n if (pad) {\n ticks.forEach(function (tick) { return (depth = Math.max(depth, tick.labels.length)); });\n }\n ticks.forEach(function (tick) {\n if (pad) {\n while (tick.labels.length < depth) {\n tick.labels.unshift('');\n }\n }\n insertTick(root, tick);\n });\n return root;\n}\nfunction insertTick(root, tick) {\n var pathParts = tick.labels.slice().reverse(); // path elements from root to leaf label\n var lastPartIndex = pathParts.length - 1;\n pathParts.forEach(function (pathPart, partIndex) {\n var children = root.children;\n var existingNode = children.find(function (child) { return child.label === pathPart; });\n var isNotLeaf = partIndex !== lastPartIndex;\n if (existingNode && isNotLeaf) {\n // the isNotLeaf check is to allow duplicate leafs\n root = existingNode;\n }\n else {\n var node = new TreeNode(pathPart, root);\n node.number = children.length;\n children.push(node);\n if (isNotLeaf) {\n root = node;\n }\n }\n });\n}\n// Shift the subtree.\nfunction moveSubtree(wm, wp, shift) {\n var subtrees = wp.number - wm.number;\n var ratio = shift / subtrees;\n wp.change -= ratio;\n wp.shift += shift;\n wm.change += ratio;\n wp.prelim += shift;\n wp.mod += shift;\n}\nfunction ancestor(vim, v, defaultAncestor) {\n return v.getSiblings().indexOf(vim.ancestor) >= 0 ? vim.ancestor : defaultAncestor;\n}\n// Spaces out the children.\nfunction executeShifts(v) {\n var children = v.children;\n if (children) {\n var shift = 0;\n var change = 0;\n for (var i = children.length - 1; i >= 0; i--) {\n var w = children[i];\n w.prelim += shift;\n w.mod += shift;\n change += w.change;\n shift += w.shift + change;\n }\n }\n}\n// Moves current subtree with v as the root if some nodes are conflicting in space.\nfunction apportion(v, defaultAncestor, distance) {\n var w = v.getLeftSibling();\n if (w) {\n var vop = v;\n var vip = v;\n var vim = w;\n var vom = vip.getLeftmostSibling();\n var sip = vip.mod;\n var sop = vop.mod;\n var sim = vim.mod;\n var som = vom.mod;\n while (vim.nextRight() && vip.nextLeft()) {\n vim = vim.nextRight();\n vip = vip.nextLeft();\n vom = vom.nextLeft();\n vop = vop.nextRight();\n vop.ancestor = v;\n var shift = vim.prelim + sim - (vip.prelim + sip) + distance;\n if (shift > 0) {\n moveSubtree(ancestor(vim, v, defaultAncestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.mod;\n sip += vip.mod;\n som += vom.mod;\n sop += vop.mod;\n }\n if (vim.nextRight() && !vop.nextRight()) {\n vop.thread = vim.nextRight();\n vop.mod += sim - sop;\n }\n else {\n if (vip.nextLeft() && !vom.nextLeft()) {\n vom.thread = vip.nextLeft();\n vom.mod += sip - som;\n }\n defaultAncestor = v;\n }\n }\n return defaultAncestor;\n}\n// Compute the preliminary x-coordinate of node and its children (recursively).\nfunction firstWalk(node, distance) {\n var children = node.children;\n if (children.length) {\n var defaultAncestor_1 = children[0];\n children.forEach(function (child) {\n firstWalk(child, distance);\n defaultAncestor_1 = apportion(child, defaultAncestor_1, distance);\n });\n executeShifts(node);\n var midpoint = (children[0].prelim + children[children.length - 1].prelim) / 2;\n var leftSibling = node.getLeftSibling();\n if (leftSibling) {\n node.prelim = leftSibling.prelim + distance;\n node.mod = node.prelim - midpoint;\n }\n else {\n node.prelim = midpoint;\n }\n }\n else {\n var leftSibling = node.getLeftSibling();\n node.prelim = leftSibling ? leftSibling.prelim + distance : 0;\n }\n}\nvar Dimensions = /** @class */ (function () {\n function Dimensions() {\n this.top = Infinity;\n this.right = -Infinity;\n this.bottom = -Infinity;\n this.left = Infinity;\n }\n Dimensions.prototype.update = function (node, xy) {\n var _a = xy(node), x = _a.x, y = _a.y;\n if (x > this.right) {\n this.right = x;\n }\n if (x < this.left) {\n this.left = x;\n }\n if (y > this.bottom) {\n this.bottom = y;\n }\n if (y < this.top) {\n this.top = y;\n }\n };\n return Dimensions;\n}());\nfunction secondWalk(v, m, layout) {\n v.x = v.prelim + m;\n v.y = v.depth;\n layout.update(v);\n v.children.forEach(function (w) { return secondWalk(w, m + v.mod, layout); });\n}\n// After the second walk the parent nodes are positioned at the center of their immediate children.\n// If we want the parent nodes to be positioned at the center of the subtree for which they are roots,\n// we need a third walk to adjust the positions.\nfunction thirdWalk(v) {\n var children = v.children;\n var leafCount = 0;\n children.forEach(function (w) {\n thirdWalk(w);\n if (w.children.length) {\n leafCount += w.leafCount;\n }\n else {\n leafCount++;\n }\n });\n v.leafCount = leafCount;\n if (children.length) {\n v.subtreeLeft = children[0].subtreeLeft;\n v.subtreeRight = children[v.children.length - 1].subtreeRight;\n v.x = (v.subtreeLeft + v.subtreeRight) / 2;\n }\n else {\n v.subtreeLeft = v.x;\n v.subtreeRight = v.x;\n }\n}\nexport function treeLayout(root) {\n var layout = new TreeLayout();\n firstWalk(root, 1);\n secondWalk(root, -root.prelim, layout);\n thirdWalk(root);\n return layout;\n}\nvar TreeLayout = /** @class */ (function () {\n function TreeLayout() {\n this.dimensions = new Dimensions();\n this.leafCount = 0;\n this.nodes = [];\n // One might want to process leaf nodes separately from the rest of the tree.\n // For example, position labels corresponding to leafs vertically, rather than horizontally.\n this.leafNodes = [];\n this.nonLeafNodes = [];\n this.depth = 0;\n }\n TreeLayout.prototype.update = function (node) {\n this.dimensions.update(node, function (node) { return ({ x: node.x, y: node.y }); });\n if (!node.children.length) {\n this.leafCount++;\n this.leafNodes.push(node);\n }\n else {\n this.nonLeafNodes.push(node);\n }\n if (node.depth > this.depth) {\n this.depth = node.depth;\n }\n this.nodes.push(node);\n };\n TreeLayout.prototype.resize = function (width, height, shiftX, shiftY, flipX) {\n if (shiftX === void 0) { shiftX = 0; }\n if (shiftY === void 0) { shiftY = 0; }\n if (flipX === void 0) { flipX = false; }\n var xSteps = this.leafCount - 1;\n var ySteps = this.depth;\n var dimensions = this.dimensions;\n var scalingX = 1;\n var scalingY = 1;\n if (width > 0 && xSteps) {\n var existingSpacingX = (dimensions.right - dimensions.left) / xSteps;\n var desiredSpacingX = width / xSteps;\n scalingX = desiredSpacingX / existingSpacingX;\n if (flipX) {\n scalingX = -scalingX;\n }\n }\n if (height > 0 && ySteps) {\n var existingSpacingY = (dimensions.bottom - dimensions.top) / ySteps;\n var desiredSpacingY = height / ySteps;\n scalingY = desiredSpacingY / existingSpacingY;\n }\n var screenDimensions = new Dimensions();\n this.nodes.forEach(function (node) {\n node.screenX = node.x * scalingX;\n node.screenY = node.y * scalingY;\n screenDimensions.update(node, function (node) { return ({ x: node.screenX, y: node.screenY }); });\n });\n // Normalize so that root top and leftmost leaf left start at zero.\n var offsetX = -screenDimensions.left;\n var offsetY = -screenDimensions.top;\n this.nodes.forEach(function (node) {\n node.screenX += offsetX + shiftX;\n node.screenY += offsetY + shiftY;\n });\n };\n return TreeLayout;\n}());\nexport { TreeLayout };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Selection } from '../../scene/selection';\nimport { Line } from '../../scene/shape/line';\nimport { normalizeAngle360, toRadians } from '../../util/angle';\nimport { Text } from '../../scene/shape/text';\nimport { BandScale } from '../../scale/bandScale';\nimport { ticksToTree, treeLayout } from '../../layout/tree';\nimport { AxisLabel, AxisLine } from '../../axis';\nimport { ChartAxis } from '../chartAxis';\nimport { ChartAxisDirection } from '../chartAxisDirection';\nimport { extent } from '../../util/array';\nimport { BOOLEAN, OPT_COLOR_STRING, Validate } from '../../util/validation';\nimport { calculateLabelRotation } from '../label';\nvar GroupedCategoryAxisLabel = /** @class */ (function (_super) {\n __extends(GroupedCategoryAxisLabel, _super);\n function GroupedCategoryAxisLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.grid = false;\n return _this;\n }\n __decorate([\n Validate(BOOLEAN)\n ], GroupedCategoryAxisLabel.prototype, \"grid\", void 0);\n return GroupedCategoryAxisLabel;\n}(AxisLabel));\nvar GroupedCategoryAxis = /** @class */ (function (_super) {\n __extends(GroupedCategoryAxis, _super);\n function GroupedCategoryAxis(moduleCtx) {\n var _this = _super.call(this, moduleCtx, new BandScale()) || this;\n // Label scale (labels are positioned between ticks, tick count = label count + 1).\n // We don't call is `labelScale` for consistency with other axes.\n _this.tickScale = new BandScale();\n _this.translation = {\n x: 0,\n y: 0,\n };\n _this.line = new AxisLine();\n _this.label = new GroupedCategoryAxisLabel();\n /**\n * The color of the labels.\n * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make labels invisible.\n */\n _this.labelColor = 'rgba(87, 87, 87, 1)';\n _this.includeInvisibleDomains = true;\n var _a = _this, tickLineGroup = _a.tickLineGroup, tickLabelGroup = _a.tickLabelGroup, gridLineGroup = _a.gridLineGroup, tickScale = _a.tickScale, scale = _a.scale;\n scale.paddingOuter = 0.1;\n scale.paddingInner = scale.paddingOuter * 2;\n _this.requestedRange = scale.range.slice();\n _this.refreshScale();\n tickScale.paddingInner = 1;\n tickScale.paddingOuter = 0;\n _this.gridLineSelection = Selection.select(gridLineGroup, Line);\n _this.axisLineSelection = Selection.select(tickLineGroup, Line);\n _this.separatorSelection = Selection.select(tickLineGroup, Line);\n _this.labelSelection = Selection.select(tickLabelGroup, Text);\n return _this;\n }\n Object.defineProperty(GroupedCategoryAxis.prototype, \"range\", {\n get: function () {\n return this.requestedRange.slice();\n },\n set: function (value) {\n this.requestedRange = value.slice();\n this.updateRange();\n },\n enumerable: false,\n configurable: true\n });\n GroupedCategoryAxis.prototype.updateRange = function () {\n var _a = this, rr = _a.requestedRange, vr = _a.visibleRange, scale = _a.scale;\n var span = (rr[1] - rr[0]) / (vr[1] - vr[0]);\n var shift = span * vr[0];\n var start = rr[0] - shift;\n this.tickScale.range = scale.range = [start, start + span];\n this.resizeTickTree();\n };\n GroupedCategoryAxis.prototype.resizeTickTree = function () {\n var s = this.scale;\n var range = s.domain.length ? [s.convert(s.domain[0]), s.convert(s.domain[s.domain.length - 1])] : s.range;\n var layout = this.tickTreeLayout;\n var lineHeight = this.lineHeight;\n if (layout) {\n layout.resize(Math.abs(range[1] - range[0]), layout.depth * lineHeight, (Math.min(range[0], range[1]) || 0) + (s.bandwidth || 0) / 2, -layout.depth * lineHeight, range[1] - range[0] < 0);\n }\n };\n Object.defineProperty(GroupedCategoryAxis.prototype, \"lineHeight\", {\n get: function () {\n return this.label.fontSize * 1.5;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(GroupedCategoryAxis.prototype, \"gridLength\", {\n get: function () {\n return this._gridLength;\n },\n /**\n * The length of the grid. The grid is only visible in case of a non-zero value.\n */\n set: function (value) {\n // Was visible and now invisible, or was invisible and now visible.\n if ((this._gridLength && !value) || (!this._gridLength && value)) {\n this.gridLineSelection.clear();\n this.labelSelection.clear();\n }\n this._gridLength = value;\n },\n enumerable: false,\n configurable: true\n });\n GroupedCategoryAxis.prototype.calculateDomain = function () {\n var _a;\n var _b = this, direction = _b.direction, boundSeries = _b.boundSeries;\n var domains = [];\n var isNumericX = undefined;\n boundSeries\n .filter(function (s) { return s.visible; })\n .forEach(function (series) {\n if (direction === ChartAxisDirection.X) {\n if (isNumericX === undefined) {\n // always add first X domain\n var domain_1 = series.getDomain(direction);\n domains.push(domain_1);\n isNumericX = typeof domain_1[0] === 'number';\n }\n else if (isNumericX) {\n // only add further X domains if the axis is numeric\n domains.push(series.getDomain(direction));\n }\n }\n else {\n domains.push(series.getDomain(direction));\n }\n });\n var domain = (_a = new Array()).concat.apply(_a, __spread(domains));\n var values = extent(domain) || domain;\n this.dataDomain = this.normaliseDataDomain(values);\n };\n GroupedCategoryAxis.prototype.normaliseDataDomain = function (d) {\n // Prevent duplicate categories.\n var values = d.filter(function (s, i, arr) { return arr.indexOf(s) === i; });\n var tickTree = ticksToTree(values);\n this.tickTreeLayout = treeLayout(tickTree);\n var tickScaleDomain = values.slice();\n tickScaleDomain.push('');\n this.tickScale.domain = tickScaleDomain;\n this.resizeTickTree();\n return values;\n };\n /**\n * Creates/removes/updates the scene graph nodes that constitute the axis.\n * Supposed to be called _manually_ after changing _any_ of the axis properties.\n * This allows to bulk set axis properties before updating the nodes.\n * The node changes made by this method are rendered on the next animation frame.\n * We could schedule this method call automatically on the next animation frame\n * when any of the axis properties change (the way we do when properties of scene graph's\n * nodes change), but this will mean that we first wait for the next animation\n * frame to make changes to the nodes of the axis, then wait for another animation\n * frame to render those changes. It's nice to have everything update automatically,\n * but this extra level of async indirection will not just introduce an unwanted delay,\n * it will also make it harder to reason about the program.\n */\n GroupedCategoryAxis.prototype.update = function (primaryTickCount) {\n var _this = this;\n this.calculateDomain();\n var _a = this, scale = _a.scale, label = _a.label, parallel = _a.label.parallel, tickScale = _a.tickScale, requestedRange = _a.requestedRange;\n scale.domain = this.dataDomain;\n var rangeStart = scale.range[0];\n var rangeEnd = scale.range[1];\n var rangeLength = Math.abs(rangeEnd - rangeStart);\n var bandwidth = rangeLength / scale.domain.length || 0;\n var rotation = toRadians(this.rotation);\n var isHorizontal = Math.abs(Math.cos(rotation)) < 1e-8;\n this.updatePosition();\n var title = this.title;\n // The Text `node` of the Caption is not used to render the title of the grouped category axis.\n // The phantom root of the tree layout is used instead.\n if (title) {\n title.node.visible = false;\n }\n var lineHeight = this.lineHeight;\n // Render ticks and labels.\n var tickTreeLayout = this.tickTreeLayout;\n var labels = scale.ticks();\n var treeLabels = tickTreeLayout ? tickTreeLayout.nodes : [];\n var isLabelTree = tickTreeLayout ? tickTreeLayout.depth > 1 : false;\n var ticks = tickScale.ticks();\n // The side of the axis line to position the labels on.\n // -1 = left (default)\n // 1 = right\n var sideFlag = label.mirrored ? 1 : -1;\n // When labels are parallel to the axis line, the `parallelFlipFlag` is used to\n // flip the labels to avoid upside-down text, when the axis is rotated\n // such that it is in the right hemisphere, i.e. the angle of rotation\n // is in the [0, π] interval.\n // The rotation angle is normalized, so that we have an easier time checking\n // if it's in the said interval. Since the axis is always rendered vertically\n // and then rotated, zero rotation means 12 (not 3) o-clock.\n // -1 = flip\n // 1 = don't flip (default)\n var _b = calculateLabelRotation({\n rotation: label.rotation,\n parallel: parallel,\n regularFlipRotation: normalizeAngle360(rotation - Math.PI / 2),\n parallelFlipRotation: normalizeAngle360(rotation),\n }), autoRotation = _b.autoRotation, labelRotation = _b.labelRotation, parallelFlipFlag = _b.parallelFlipFlag;\n var gridLineSelection = this.gridLineSelection.update(this.gridLength ? ticks : []);\n var labelSelection = this.labelSelection.update(treeLabels);\n var labelFormatter = label.formatter;\n var labelBBoxes = new Map();\n var maxLeafLabelWidth = 0;\n labelSelection.each(function (node, datum, index) {\n node.fontStyle = label.fontStyle;\n node.fontWeight = label.fontWeight;\n node.fontSize = label.fontSize;\n node.fontFamily = label.fontFamily;\n node.fill = label.color;\n node.textBaseline = parallelFlipFlag === -1 ? 'bottom' : 'hanging';\n node.textAlign = 'center';\n node.translationX = datum.screenY - label.fontSize * 0.25;\n node.translationY = datum.screenX;\n if (index === 0) {\n // use the phantom root as the axis title\n if (title && title.enabled && labels.length > 0) {\n node.visible = true;\n node.text = title.text;\n node.fontSize = title.fontSize;\n node.fontStyle = title.fontStyle;\n node.fontWeight = title.fontWeight;\n node.fontFamily = title.fontFamily;\n node.textBaseline = 'hanging';\n }\n else {\n node.visible = false;\n }\n }\n else {\n node.text = labelFormatter\n ? labelFormatter({\n value: String(datum.label),\n index: index,\n })\n : String(datum.label);\n node.visible = datum.screenX >= requestedRange[0] && datum.screenX <= requestedRange[1];\n }\n var bbox = node.computeBBox();\n labelBBoxes.set(node.id, bbox);\n if (bbox.width > maxLeafLabelWidth) {\n maxLeafLabelWidth = bbox.width;\n }\n });\n var labelX = sideFlag * label.padding;\n var labelGrid = this.label.grid;\n var separatorData = [];\n labelSelection.each(function (label, datum, index) {\n label.x = labelX;\n label.rotationCenterX = labelX;\n if (!datum.children.length) {\n label.rotation = labelRotation;\n label.textAlign = 'end';\n label.textBaseline = 'middle';\n var bbox = labelBBoxes.get(label.id);\n if (bbox && bbox.height > bandwidth) {\n label.visible = false;\n }\n }\n else {\n label.translationX -= maxLeafLabelWidth - lineHeight + _this.label.padding;\n var availableRange = datum.leafCount * bandwidth;\n var bbox = labelBBoxes.get(label.id);\n if (bbox && bbox.width > availableRange) {\n label.visible = false;\n }\n else if (isHorizontal) {\n label.rotation = autoRotation;\n }\n else {\n label.rotation = -Math.PI / 2;\n }\n }\n // Calculate positions of label separators for all nodes except the root.\n // Each separator is placed to the top of the current label.\n if (datum.parent && isLabelTree) {\n var y = !datum.children.length\n ? datum.screenX - bandwidth / 2\n : datum.screenX - (datum.leafCount * bandwidth) / 2;\n if (!datum.children.length) {\n if (datum.number !== datum.children.length - 1 || labelGrid) {\n separatorData.push({\n y: y,\n x1: 0,\n x2: -maxLeafLabelWidth - _this.label.padding * 2,\n toString: function () { return String(index); },\n });\n }\n }\n else {\n var x = -maxLeafLabelWidth - _this.label.padding * 2 + datum.screenY;\n separatorData.push({\n y: y,\n x1: x + lineHeight,\n x2: x,\n toString: function () { return String(index); },\n });\n }\n }\n });\n // Calculate the position of the long separator on the far bottom of the axis.\n var minX = 0;\n separatorData.forEach(function (d) { return (minX = Math.min(minX, d.x2)); });\n separatorData.push({\n y: Math.max(rangeStart, rangeEnd),\n x1: 0,\n x2: minX,\n toString: function () { return String(separatorData.length); },\n });\n var separatorSelection = this.separatorSelection.update(separatorData);\n var epsilon = 0.0000001;\n separatorSelection.each(function (line, datum) {\n line.x1 = datum.x1;\n line.x2 = datum.x2;\n line.y1 = datum.y;\n line.y2 = datum.y;\n line.visible = datum.y >= requestedRange[0] - epsilon && datum.y <= requestedRange[1] + epsilon;\n line.stroke = _this.tick.color;\n line.fill = undefined;\n line.strokeWidth = 1;\n });\n this.gridLineSelection = gridLineSelection;\n this.labelSelection = labelSelection;\n // Render axis lines.\n var lineCount = tickTreeLayout ? tickTreeLayout.depth + 1 : 1;\n var lines = [];\n for (var i = 0; i < lineCount; i++) {\n lines.push(i);\n }\n var axisLineSelection = this.axisLineSelection.update(lines);\n axisLineSelection.each(function (line, _, index) {\n var x = index > 0 ? -maxLeafLabelWidth - _this.label.padding * 2 - (index - 1) * lineHeight : 0;\n line.x1 = x;\n line.x2 = x;\n line.y1 = requestedRange[0];\n line.y2 = requestedRange[1];\n line.strokeWidth = _this.line.width;\n line.stroke = _this.line.color;\n line.visible = labels.length > 0 && (index === 0 || (labelGrid && isLabelTree));\n });\n if (this.gridLength) {\n var styles_1 = this.gridStyle;\n var styleCount_1 = styles_1.length;\n gridLineSelection.each(function (line, datum, index) {\n var y = Math.round(tickScale.convert(datum));\n line.x1 = 0;\n line.x2 = -sideFlag * _this.gridLength;\n line.y1 = y;\n line.y2 = y;\n line.visible = y >= requestedRange[0] && y <= requestedRange[1];\n var style = styles_1[index % styleCount_1];\n line.stroke = style.stroke;\n line.strokeWidth = _this.tick.width;\n line.lineDash = style.lineDash;\n line.fill = undefined;\n });\n }\n return primaryTickCount;\n };\n GroupedCategoryAxis.className = 'GroupedCategoryAxis';\n GroupedCategoryAxis.type = 'groupedCategory';\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], GroupedCategoryAxis.prototype, \"labelColor\", void 0);\n return GroupedCategoryAxis;\n}(ChartAxis));\nexport { GroupedCategoryAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { Chart } from './chart';\nimport { CategoryAxis } from './axis/categoryAxis';\nimport { GroupedCategoryAxis } from './axis/groupedCategoryAxis';\nimport { ChartAxisDirection } from './chartAxisDirection';\nimport { Logger } from '../util/logger';\nvar directions = ['top', 'right', 'bottom', 'left'];\nvar CartesianChart = /** @class */ (function (_super) {\n __extends(CartesianChart, _super);\n function CartesianChart(document, overrideDevicePixelRatio, resources) {\n if (document === void 0) { document = window.document; }\n var _this = _super.call(this, document, overrideDevicePixelRatio, resources) || this;\n /** Integrated Charts feature state - not used in Standalone Charts. */\n _this.paired = true;\n _this._lastAxisWidths = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n _this._lastVisibility = {\n crossLines: true,\n series: true,\n };\n var root = _this.scene.root;\n _this.legend.attachLegend(root);\n return _this;\n }\n CartesianChart.prototype.performLayout = function () {\n return __awaiter(this, void 0, void 0, function () {\n var shrinkRect, _a, seriesRect, visibility, clipSeries, _b, seriesRoot, seriesAreaPadding, seriesPaddedRect, hoverRectPadding, hoverRect;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, _super.prototype.performLayout.call(this)];\n case 1:\n shrinkRect = _c.sent();\n _a = this.updateAxes(shrinkRect), seriesRect = _a.seriesRect, visibility = _a.visibility, clipSeries = _a.clipSeries;\n this.seriesRoot.visible = visibility.series;\n this.seriesRect = seriesRect;\n this.series.forEach(function (series) {\n series.rootGroup.translationX = Math.floor(seriesRect.x);\n series.rootGroup.translationY = Math.floor(seriesRect.y);\n });\n _b = this, seriesRoot = _b.seriesRoot, seriesAreaPadding = _b.seriesAreaPadding;\n seriesPaddedRect = seriesRect.clone().grow(seriesAreaPadding);\n hoverRectPadding = 20;\n hoverRect = seriesPaddedRect.clone().grow(hoverRectPadding);\n this.hoverRect = hoverRect;\n this.layoutService.dispatchLayoutComplete({\n type: 'layout-complete',\n chart: { width: this.scene.width, height: this.scene.height },\n series: { rect: seriesRect, paddedRect: seriesPaddedRect, hoverRect: hoverRect, visible: visibility.series },\n axes: this.axes.map(function (axis) { return (__assign({ id: axis.id }, axis.getLayoutState())); }),\n });\n if (clipSeries) {\n seriesRoot.setClipRectInGroupCoordinateSpace(seriesPaddedRect);\n }\n else {\n seriesRoot.setClipRectInGroupCoordinateSpace();\n }\n return [2 /*return*/, shrinkRect];\n }\n });\n });\n };\n CartesianChart.prototype.updateAxes = function (inputShrinkRect) {\n var e_1, _a;\n var _b;\n // Start with a good approximation from the last update - this should mean that in many resize\n // cases that only a single pass is needed \\o/.\n var axisWidths = __assign({}, this._lastAxisWidths);\n var visibility = __assign({}, this._lastVisibility);\n // Clean any positions which aren't valid with the current axis status (otherwise we end up\n // never being able to find a stable result).\n var liveAxisWidths = new Set(this._axes.map(function (a) { return a.position; }));\n try {\n for (var _c = __values(Object.keys(axisWidths)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var position = _d.value;\n if (!liveAxisWidths.has(position)) {\n delete axisWidths[position];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n var stableOutputs = function (otherAxisWidths, otherVisibility) {\n // Check for new axis positions.\n if (Object.keys(otherAxisWidths).some(function (k) { return axisWidths[k] == null; })) {\n return false;\n }\n return (visibility.crossLines === otherVisibility.crossLines &&\n visibility.series === otherVisibility.series &&\n // Check for existing axis positions and equality.\n Object.entries(axisWidths).every(function (_a) {\n var _b = __read(_a, 2), p = _b[0], w = _b[1];\n var otherW = otherAxisWidths[p];\n if (w != null || otherW != null) {\n return w === otherW;\n }\n return true;\n }));\n };\n var ceilValues = function (records) {\n return Object.entries(records).reduce(function (out, _a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n if (value && Math.abs(value) === Infinity) {\n value = 0;\n }\n out[key] = value != null ? Math.ceil(value) : value;\n return out;\n }, {});\n };\n // Iteratively try to resolve axis widths - since X axis width affects Y axis range,\n // and vice-versa, we need to iteratively try and find a fit for the axes and their\n // ticks/labels.\n var lastPassAxisWidths = {};\n var lastPassVisibility = {};\n var clipSeries = false;\n var seriesRect = (_b = this.seriesRect) === null || _b === void 0 ? void 0 : _b.clone();\n var count = 0;\n do {\n Object.assign(axisWidths, lastPassAxisWidths);\n Object.assign(visibility, lastPassVisibility);\n var result = this.updateAxesPass(axisWidths, inputShrinkRect.clone(), seriesRect);\n lastPassAxisWidths = ceilValues(result.axisWidths);\n lastPassVisibility = result.visibility;\n clipSeries = result.clipSeries;\n seriesRect = result.seriesRect;\n if (count++ > 10) {\n Logger.warn('unable to find stable axis layout.');\n break;\n }\n } while (!stableOutputs(lastPassAxisWidths, lastPassVisibility));\n var clipRectPadding = 5;\n this.axes.forEach(function (axis) {\n // update visibility of crosslines\n axis.setCrossLinesVisible(visibility.crossLines);\n if (!seriesRect) {\n return;\n }\n axis.clipGrid(seriesRect.x, seriesRect.y, seriesRect.width + clipRectPadding, seriesRect.height + clipRectPadding);\n switch (axis.position) {\n case 'left':\n case 'right':\n axis.clipTickLines(inputShrinkRect.x, seriesRect.y, inputShrinkRect.width + clipRectPadding, seriesRect.height + clipRectPadding);\n break;\n case 'top':\n case 'bottom':\n axis.clipTickLines(seriesRect.x, inputShrinkRect.y, seriesRect.width + clipRectPadding, inputShrinkRect.height + clipRectPadding);\n break;\n }\n });\n this._lastAxisWidths = axisWidths;\n this._lastVisibility = visibility;\n return { seriesRect: seriesRect, visibility: visibility, clipSeries: clipSeries };\n };\n CartesianChart.prototype.updateAxesPass = function (axisWidths, bounds, lastPassSeriesRect) {\n var _this = this;\n var axes = this.axes;\n var visited = {};\n var newAxisWidths = {};\n var visibility = {\n series: true,\n crossLines: true,\n };\n var clipSeries = false;\n var primaryTickCounts = {};\n var paddedBounds = this.applySeriesPadding(bounds);\n var crossLinePadding = lastPassSeriesRect ? this.buildCrossLinePadding(lastPassSeriesRect, axisWidths) : {};\n var axisBound = this.buildAxisBound(paddedBounds, axisWidths, crossLinePadding, visibility);\n var seriesRect = this.buildSeriesRect(axisBound, axisWidths);\n // Set the number of ticks for continuous axes based on the available range\n // before updating the axis domain via `this.updateAxes()` as the tick count has an effect on the calculated `nice` domain extent\n axes.forEach(function (axis) {\n var _a, _b;\n var position = axis.position;\n var _c = _this.calculateAxisDimensions({\n axis: axis,\n seriesRect: seriesRect,\n axisWidths: axisWidths,\n newAxisWidths: newAxisWidths,\n primaryTickCounts: primaryTickCounts,\n clipSeries: clipSeries,\n addInterAxisPadding: ((_a = visited[position]) !== null && _a !== void 0 ? _a : 0) > 0,\n }), newClipSeries = _c.clipSeries, axisThickness = _c.axisThickness, axisOffset = _c.axisOffset;\n visited[position] = ((_b = visited[position]) !== null && _b !== void 0 ? _b : 0) + 1;\n clipSeries = clipSeries || newClipSeries;\n _this.positionAxis({\n axis: axis,\n axisBound: axisBound,\n axisOffset: axisOffset,\n axisThickness: axisThickness,\n axisWidths: axisWidths,\n primaryTickCounts: primaryTickCounts,\n seriesRect: seriesRect,\n });\n });\n return { clipSeries: clipSeries, seriesRect: seriesRect, axisWidths: newAxisWidths, visibility: visibility };\n };\n CartesianChart.prototype.buildCrossLinePadding = function (lastPassSeriesRect, axisWidths) {\n var e_2, _a;\n var _b;\n var crossLinePadding = {};\n this.axes.forEach(function (axis) {\n if (axis.crossLines) {\n axis.crossLines.forEach(function (crossLine) {\n crossLine.calculatePadding(crossLinePadding, lastPassSeriesRect);\n });\n }\n });\n try {\n // Reduce cross-line padding to account for overlap with axes.\n for (var _c = __values(Object.entries(crossLinePadding)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var _e = __read(_d.value, 2), side = _e[0], _f = _e[1], padding = _f === void 0 ? 0 : _f;\n crossLinePadding[side] = Math.max(padding - ((_b = axisWidths[side]) !== null && _b !== void 0 ? _b : 0), 0);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return crossLinePadding;\n };\n CartesianChart.prototype.applySeriesPadding = function (bounds) {\n var _this = this;\n var paddedRect = bounds.clone();\n var reversedAxes = this.axes.slice().reverse();\n directions.forEach(function (dir) {\n var padding = _this.seriesAreaPadding[dir];\n var axis = reversedAxes.find(function (axis) { return axis.position === dir; });\n if (axis) {\n axis.seriesAreaPadding = padding;\n }\n else {\n paddedRect.shrink(padding, dir);\n }\n });\n return paddedRect;\n };\n CartesianChart.prototype.buildAxisBound = function (bounds, axisWidths, crossLinePadding, visibility) {\n var _a, _b, _c, _d;\n var result = bounds.clone();\n var _e = crossLinePadding.top, top = _e === void 0 ? 0 : _e, _f = crossLinePadding.right, right = _f === void 0 ? 0 : _f, _g = crossLinePadding.bottom, bottom = _g === void 0 ? 0 : _g, _h = crossLinePadding.left, left = _h === void 0 ? 0 : _h;\n var horizontalPadding = left + right;\n var verticalPadding = top + bottom;\n var totalWidth = ((_a = axisWidths.left) !== null && _a !== void 0 ? _a : 0) + ((_b = axisWidths.right) !== null && _b !== void 0 ? _b : 0) + horizontalPadding;\n var totalHeight = ((_c = axisWidths.top) !== null && _c !== void 0 ? _c : 0) + ((_d = axisWidths.bottom) !== null && _d !== void 0 ? _d : 0) + verticalPadding;\n if (result.width <= totalWidth || result.height <= totalHeight) {\n // Not enough space for crossLines and series\n visibility.crossLines = false;\n visibility.series = false;\n return result;\n }\n result.x += left;\n result.y += top;\n result.width -= horizontalPadding;\n result.height -= verticalPadding;\n return result;\n };\n CartesianChart.prototype.buildSeriesRect = function (axisBound, axisWidths) {\n var result = axisBound.clone();\n var top = axisWidths.top, bottom = axisWidths.bottom, left = axisWidths.left, right = axisWidths.right;\n result.x += left !== null && left !== void 0 ? left : 0;\n result.y += top !== null && top !== void 0 ? top : 0;\n result.width -= (left !== null && left !== void 0 ? left : 0) + (right !== null && right !== void 0 ? right : 0);\n result.height -= (top !== null && top !== void 0 ? top : 0) + (bottom !== null && bottom !== void 0 ? bottom : 0);\n // Width and height should not be negative.\n result.width = Math.max(0, result.width);\n result.height = Math.max(0, result.height);\n return result;\n };\n CartesianChart.prototype.clampToOutsideSeriesRect = function (seriesRect, value, dimension, direction) {\n var x = seriesRect.x, y = seriesRect.y, width = seriesRect.width, height = seriesRect.height;\n var clampBounds = [x, y, x + width, y + height];\n var fn = direction === 1 ? Math.min : Math.max;\n var compareTo = clampBounds[(dimension === 'x' ? 0 : 1) + (direction === 1 ? 0 : 2)];\n return fn(value, compareTo);\n };\n CartesianChart.prototype.calculateAxisDimensions = function (opts) {\n var _a, _b, _c, _d, _e, _f;\n var axis = opts.axis, seriesRect = opts.seriesRect, axisWidths = opts.axisWidths, newAxisWidths = opts.newAxisWidths, primaryTickCounts = opts.primaryTickCounts, addInterAxisPadding = opts.addInterAxisPadding;\n var clipSeries = opts.clipSeries;\n var position = axis.position, direction = axis.direction;\n var axisLeftRightRange = function (axis) {\n if (axis instanceof CategoryAxis || axis instanceof GroupedCategoryAxis) {\n return [0, seriesRect.height];\n }\n return [seriesRect.height, 0];\n };\n axis.label.mirrored = ['top', 'right'].includes(position);\n var axisOffset = (_a = newAxisWidths[position]) !== null && _a !== void 0 ? _a : 0;\n switch (position) {\n case 'top':\n case 'bottom':\n axis.range = [0, seriesRect.width];\n axis.gridLength = seriesRect.height;\n break;\n case 'right':\n case 'left':\n axis.range = axisLeftRightRange(axis);\n axis.gridLength = seriesRect.width;\n break;\n }\n var zoom = (_b = this.zoomManager.getZoom()) === null || _b === void 0 ? void 0 : _b[axis.direction];\n var _g = zoom !== null && zoom !== void 0 ? zoom : {}, _h = _g.min, min = _h === void 0 ? 0 : _h, _j = _g.max, max = _j === void 0 ? 1 : _j;\n axis.visibleRange = [min, max];\n if (!clipSeries && (axis.visibleRange[0] > 0 || axis.visibleRange[1] < 1)) {\n clipSeries = true;\n }\n var primaryTickCount = axis.nice ? primaryTickCounts[direction] : undefined;\n primaryTickCount = axis.update(primaryTickCount);\n primaryTickCounts[direction] = (_c = primaryTickCounts[direction]) !== null && _c !== void 0 ? _c : primaryTickCount;\n var axisThickness = 0;\n if (axis.thickness) {\n axisThickness = axis.thickness;\n }\n else {\n var bbox = axis.computeBBox();\n axisThickness = direction === ChartAxisDirection.X ? bbox.height : bbox.width;\n }\n // for multiple axes in the same direction and position, apply padding at the top of each inner axis (i.e. between axes).\n var axisPadding = 15;\n if (addInterAxisPadding) {\n axisThickness += axisPadding;\n }\n axisThickness = Math.ceil(axisThickness);\n newAxisWidths[position] = ((_d = newAxisWidths[position]) !== null && _d !== void 0 ? _d : 0) + axisThickness;\n axis.gridPadding = ((_e = axisWidths[position]) !== null && _e !== void 0 ? _e : 0) - ((_f = newAxisWidths[position]) !== null && _f !== void 0 ? _f : 0);\n return { clipSeries: clipSeries, axisThickness: axisThickness, axisOffset: axisOffset };\n };\n CartesianChart.prototype.positionAxis = function (opts) {\n var _a, _b, _c, _d;\n var axis = opts.axis, axisBound = opts.axisBound, axisWidths = opts.axisWidths, seriesRect = opts.seriesRect, axisOffset = opts.axisOffset, axisThickness = opts.axisThickness;\n var position = axis.position;\n switch (position) {\n case 'top':\n axis.translation.x = axisBound.x + ((_a = axisWidths.left) !== null && _a !== void 0 ? _a : 0);\n axis.translation.y = this.clampToOutsideSeriesRect(seriesRect, axisBound.y + 1 + axisOffset + axisThickness, 'y', 1);\n break;\n case 'bottom':\n axis.translation.x = axisBound.x + ((_b = axisWidths.left) !== null && _b !== void 0 ? _b : 0);\n axis.translation.y = this.clampToOutsideSeriesRect(seriesRect, axisBound.y + axisBound.height + 1 - axisThickness - axisOffset, 'y', -1);\n break;\n case 'left':\n axis.translation.y = axisBound.y + ((_c = axisWidths.top) !== null && _c !== void 0 ? _c : 0);\n axis.translation.x = this.clampToOutsideSeriesRect(seriesRect, axisBound.x + axisOffset + axisThickness, 'x', 1);\n break;\n case 'right':\n axis.translation.y = axisBound.y + ((_d = axisWidths.top) !== null && _d !== void 0 ? _d : 0);\n axis.translation.x = this.clampToOutsideSeriesRect(seriesRect, axisBound.x + axisBound.width - axisThickness - axisOffset, 'x', -1);\n break;\n }\n axis.updatePosition();\n };\n CartesianChart.className = 'CartesianChart';\n CartesianChart.type = 'cartesian';\n return CartesianChart;\n}(Chart));\nexport { CartesianChart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series, SeriesNodePickMode } from '../series';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries(_a) {\n var _b;\n var _c = _a.useLabelLayer, useLabelLayer = _c === void 0 ? false : _c;\n var _this = _super.call(this, {\n useLabelLayer: useLabelLayer,\n pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH],\n directionKeys: (_b = {},\n _b[ChartAxisDirection.X] = ['angleKey'],\n _b[ChartAxisDirection.Y] = ['radiusKey'],\n _b),\n }) || this;\n /**\n * The center of the polar series (for example, the center of a pie).\n * If the polar chart has multiple series, all of them will have their\n * center set to the same value as a result of the polar chart layout.\n * The center coordinates are not supposed to be set by the user.\n */\n _this.centerX = 0;\n _this.centerY = 0;\n /**\n * The maximum radius the series can use.\n * This value is set automatically as a result of the polar chart layout\n * and is not supposed to be set by the user.\n */\n _this.radius = 0;\n return _this;\n }\n PolarSeries.prototype.getLabelData = function () {\n return [];\n };\n PolarSeries.prototype.computeLabelsBBox = function (_options) {\n return null;\n };\n return PolarSeries;\n}(Series));\nexport { PolarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { Chart } from './chart';\nimport { PolarSeries } from './series/polar/polarSeries';\nimport { Padding } from '../util/padding';\nimport { BBox } from '../scene/bbox';\nvar PolarChart = /** @class */ (function (_super) {\n __extends(PolarChart, _super);\n function PolarChart(document, overrideDevicePixelRatio, resources) {\n if (document === void 0) { document = window.document; }\n var _this = _super.call(this, document, overrideDevicePixelRatio, resources) || this;\n _this.padding = new Padding(40);\n var root = _this.scene.root;\n _this.legend.attachLegend(root);\n return _this;\n }\n PolarChart.prototype.performLayout = function () {\n return __awaiter(this, void 0, void 0, function () {\n var shrinkRect, fullSeriesRect, hoverRectPadding, hoverRect;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.performLayout.call(this)];\n case 1:\n shrinkRect = _a.sent();\n fullSeriesRect = shrinkRect.clone();\n this.computeSeriesRect(shrinkRect);\n this.computeCircle();\n hoverRectPadding = 20;\n hoverRect = shrinkRect.clone().grow(hoverRectPadding);\n this.hoverRect = hoverRect;\n this.layoutService.dispatchLayoutComplete({\n type: 'layout-complete',\n chart: { width: this.scene.width, height: this.scene.height },\n series: { rect: fullSeriesRect, paddedRect: shrinkRect, hoverRect: hoverRect, visible: true },\n axes: [],\n });\n return [2 /*return*/, shrinkRect];\n }\n });\n });\n };\n PolarChart.prototype.computeSeriesRect = function (shrinkRect) {\n var seriesAreaPadding = this.seriesAreaPadding;\n shrinkRect.shrink(seriesAreaPadding.left, 'left');\n shrinkRect.shrink(seriesAreaPadding.top, 'top');\n shrinkRect.shrink(seriesAreaPadding.right, 'right');\n shrinkRect.shrink(seriesAreaPadding.bottom, 'bottom');\n this.seriesRect = shrinkRect;\n };\n PolarChart.prototype.computeCircle = function () {\n var _this = this;\n var seriesBox = this.seriesRect;\n var polarSeries = this.series.filter(function (series) {\n return series instanceof PolarSeries;\n });\n var setSeriesCircle = function (cx, cy, r) {\n polarSeries.forEach(function (series) {\n series.centerX = cx;\n series.centerY = cy;\n series.radius = r;\n });\n };\n var centerX = seriesBox.x + seriesBox.width / 2;\n var centerY = seriesBox.y + seriesBox.height / 2;\n var initialRadius = Math.max(0, Math.min(seriesBox.width, seriesBox.height) / 2);\n var radius = initialRadius;\n setSeriesCircle(centerX, centerY, radius);\n var shake = function (_a) {\n var _b = (_a === void 0 ? {} : _a).hideWhenNecessary, hideWhenNecessary = _b === void 0 ? false : _b;\n var labelBoxes = polarSeries\n .map(function (series) { return series.computeLabelsBBox({ hideWhenNecessary: hideWhenNecessary }); })\n .filter(function (box) { return box != null; });\n if (labelBoxes.length === 0) {\n setSeriesCircle(centerX, centerY, initialRadius);\n return;\n }\n var labelBox = BBox.merge(labelBoxes);\n var refined = _this.refineCircle(labelBox, radius);\n setSeriesCircle(refined.centerX, refined.centerY, refined.radius);\n if (refined.radius === radius) {\n return;\n }\n radius = refined.radius;\n };\n shake(); // Initial attempt\n shake(); // Precise attempt\n shake(); // Just in case\n shake({ hideWhenNecessary: true }); // Hide unnecessary labels\n shake({ hideWhenNecessary: true }); // Final result\n };\n PolarChart.prototype.refineCircle = function (labelsBox, radius) {\n var minCircleRatio = 0.5; // Prevents reduced circle to be too small\n var seriesBox = this.seriesRect;\n var circleLeft = -radius;\n var circleTop = -radius;\n var circleRight = radius;\n var circleBottom = radius;\n // Label padding around the circle\n var padLeft = Math.max(0, circleLeft - labelsBox.x);\n var padTop = Math.max(0, circleTop - labelsBox.y);\n var padRight = Math.max(0, labelsBox.x + labelsBox.width - circleRight);\n var padBottom = Math.max(0, labelsBox.y + labelsBox.height - circleBottom);\n // Available area for the circle (after the padding will be applied)\n var availCircleWidth = seriesBox.width - padLeft - padRight;\n var availCircleHeight = seriesBox.height - padTop - padBottom;\n var newRadius = Math.min(availCircleWidth, availCircleHeight) / 2;\n var minHorizontalRadius = (minCircleRatio * seriesBox.width) / 2;\n var minVerticalRadius = (minCircleRatio * seriesBox.height) / 2;\n var minRadius = Math.min(minHorizontalRadius, minVerticalRadius);\n if (newRadius < minRadius) {\n // If the radius is too small, reduce the label padding\n newRadius = minRadius;\n var horizontalPadding = padLeft + padRight;\n var verticalPadding = padTop + padBottom;\n if (2 * newRadius + verticalPadding > seriesBox.height) {\n var padHeight = seriesBox.height - 2 * newRadius;\n if (Math.min(padTop, padBottom) * 2 > padHeight) {\n padTop = padHeight / 2;\n padBottom = padHeight / 2;\n }\n else if (padTop > padBottom) {\n padTop = padHeight - padBottom;\n }\n else {\n padBottom = padHeight - padTop;\n }\n }\n if (2 * newRadius + horizontalPadding > seriesBox.width) {\n var padWidth = seriesBox.width - 2 * newRadius;\n if (Math.min(padLeft, padRight) * 2 > padWidth) {\n padLeft = padWidth / 2;\n padRight = padWidth / 2;\n }\n else if (padLeft > padRight) {\n padLeft = padWidth - padRight;\n }\n else {\n padRight = padWidth - padLeft;\n }\n }\n }\n var newWidth = padLeft + 2 * newRadius + padRight;\n var newHeight = padTop + 2 * newRadius + padBottom;\n return {\n centerX: seriesBox.x + (seriesBox.width - newWidth) / 2 + padLeft + newRadius,\n centerY: seriesBox.y + (seriesBox.height - newHeight) / 2 + padTop + newRadius,\n radius: newRadius,\n };\n };\n PolarChart.className = 'PolarChart';\n PolarChart.type = 'polar';\n return PolarChart;\n}(Chart));\nexport { PolarChart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { BBox } from '../scene/bbox';\nimport { Chart } from './chart';\nvar HierarchyChart = /** @class */ (function (_super) {\n __extends(HierarchyChart, _super);\n function HierarchyChart(document, overrideDevicePixelRatio, resources) {\n if (document === void 0) { document = window.document; }\n var _this = _super.call(this, document, overrideDevicePixelRatio, resources) || this;\n _this._data = {};\n var root = _this.scene.root;\n _this.legend.attachLegend(root);\n return _this;\n }\n HierarchyChart.prototype.performLayout = function () {\n return __awaiter(this, void 0, void 0, function () {\n var shrinkRect, seriesAreaPadding, fullSeriesRect, hoverRectPadding, hoverRect, seriesRoot;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.performLayout.call(this)];\n case 1:\n shrinkRect = _a.sent();\n seriesAreaPadding = this.seriesAreaPadding;\n fullSeriesRect = shrinkRect.clone();\n shrinkRect.shrink(seriesAreaPadding.left, 'left');\n shrinkRect.shrink(seriesAreaPadding.top, 'top');\n shrinkRect.shrink(seriesAreaPadding.right, 'right');\n shrinkRect.shrink(seriesAreaPadding.bottom, 'bottom');\n this.seriesRect = shrinkRect;\n hoverRectPadding = 20;\n hoverRect = shrinkRect.clone().grow(hoverRectPadding);\n this.hoverRect = hoverRect;\n this.series.forEach(function (series) {\n series.rootGroup.translationX = Math.floor(shrinkRect.x);\n series.rootGroup.translationY = Math.floor(shrinkRect.y);\n series.update({ seriesRect: shrinkRect }); // this has to happen after the `updateAxes` call\n });\n seriesRoot = this.seriesRoot;\n seriesRoot.setClipRectInGroupCoordinateSpace(new BBox(shrinkRect.x, shrinkRect.y, shrinkRect.width, shrinkRect.height));\n this.layoutService.dispatchLayoutComplete({\n type: 'layout-complete',\n chart: { width: this.scene.width, height: this.scene.height },\n series: { rect: fullSeriesRect, paddedRect: shrinkRect, hoverRect: hoverRect, visible: true },\n axes: [],\n });\n return [2 /*return*/, shrinkRect];\n }\n });\n });\n };\n HierarchyChart.className = 'HierarchyChart';\n HierarchyChart.type = 'hierarchy';\n return HierarchyChart;\n}(Chart));\nexport { HierarchyChart };\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { buildFormatter } from './timeFormat';\nvar interpolatePattern = /(#\\{(.*?)\\})/g;\nexport function interpolate(input, values, formats) {\n return input.replace(interpolatePattern, function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var name = args[2];\n var _a = __read(name.split(':'), 2), valueName = _a[0], formatName = _a[1];\n var value = values[valueName];\n if (typeof value === 'number') {\n var format = formatName && formats && formats[formatName];\n if (format) {\n var _b = format, locales = _b.locales, options = _b.options;\n return value.toLocaleString(locales, options);\n }\n return String(value);\n }\n if (value instanceof Date) {\n var format = formatName && formats && formats[formatName];\n if (typeof format === 'string') {\n var formatter = buildFormatter(format);\n return formatter(value);\n }\n return value.toDateString();\n }\n if (typeof value === 'string' || (value && value.toString)) {\n return String(value);\n }\n return '';\n });\n}\n","var element = null;\nexport function sanitizeHtml(text) {\n element = element || document.createElement('div');\n if (!text) {\n return '';\n }\n element.textContent = text;\n return element.innerHTML;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { LinearScale } from '../../scale/linearScale';\nimport { extent } from '../../util/array';\nimport { ChartAxis } from '../chartAxis';\nimport { Validate, GREATER_THAN, AND, LESS_THAN, NUMBER_OR_NAN } from '../../util/validation';\nimport { Default } from '../../util/default';\nimport { calculateNiceSecondaryAxis } from '../../util/secondaryAxisTicks';\nimport { Logger } from '../../util/logger';\nvar NumberAxis = /** @class */ (function (_super) {\n __extends(NumberAxis, _super);\n function NumberAxis(moduleCtx, scale) {\n if (scale === void 0) { scale = new LinearScale(); }\n var _this = _super.call(this, moduleCtx, scale) || this;\n _this.min = NaN;\n _this.max = NaN;\n scale.strictClampByDefault = true;\n return _this;\n }\n NumberAxis.prototype.normaliseDataDomain = function (d) {\n var _a = this, min = _a.min, max = _a.max;\n if (d.length > 2) {\n d = extent(d) || [NaN, NaN];\n }\n if (!isNaN(min)) {\n d = [min, d[1]];\n }\n if (!isNaN(max)) {\n d = [d[0], max];\n }\n if (d[0] > d[1]) {\n d = [];\n }\n return d;\n };\n NumberAxis.prototype.formatDatum = function (datum) {\n if (typeof datum === 'number') {\n return datum.toFixed(2);\n }\n else {\n Logger.warnOnce('data contains Date objects which are being plotted against a number axis, please only use a number axis for numbers.');\n return String(datum);\n }\n };\n NumberAxis.prototype.updateSecondaryAxisTicks = function (primaryTickCount) {\n if (this.dataDomain == null) {\n throw new Error('AG Charts - dataDomain not calculated, cannot perform tick calculation.');\n }\n var _a = __read(calculateNiceSecondaryAxis(this.dataDomain, primaryTickCount !== null && primaryTickCount !== void 0 ? primaryTickCount : 0), 2), d = _a[0], ticks = _a[1];\n this.scale.nice = false;\n this.scale.domain = d;\n this.scale.update();\n return ticks;\n };\n NumberAxis.className = 'NumberAxis';\n NumberAxis.type = 'number';\n __decorate([\n Validate(AND(NUMBER_OR_NAN(), LESS_THAN('max'))),\n Default(NaN)\n ], NumberAxis.prototype, \"min\", void 0);\n __decorate([\n Validate(AND(NUMBER_OR_NAN(), GREATER_THAN('min'))),\n Default(NaN)\n ], NumberAxis.prototype, \"max\", void 0);\n return NumberAxis;\n}(ChartAxis));\nexport { NumberAxis };\n","import { NumericTicks } from './ticks';\nexport function calculateNiceSecondaryAxis(domain, primaryTickCount) {\n // Make secondary axis domain nice using strict tick count, matching the tick count from the primary axis.\n // This is to make the secondary axis grid lines/ tick positions align with the ones from the primary axis.\n var start = Math.floor(domain[0]);\n var stop = domain[1];\n start = calculateNiceStart(start, stop, primaryTickCount);\n var step = getTickStep(start, stop, primaryTickCount);\n var segments = primaryTickCount - 1;\n stop = start + segments * step;\n var d = [start, stop];\n var ticks = getTicks(start, step, primaryTickCount);\n return [d, ticks];\n}\nfunction calculateNiceStart(a, b, count) {\n var rawStep = Math.abs(b - a) / (count - 1);\n var order = Math.floor(Math.log10(rawStep));\n var magnitude = Math.pow(10, order);\n return Math.floor(a / magnitude) * magnitude;\n}\nfunction getTicks(start, step, count) {\n // power of the step will be negative if the step is a fraction (between 0 and 1)\n var stepPower = Math.floor(Math.log10(step));\n var fractionDigits = step > 0 && step < 1 ? Math.abs(stepPower) : 0;\n var f = Math.pow(10, fractionDigits);\n var ticks = new NumericTicks(fractionDigits);\n for (var i = 0; i < count; i++) {\n var tick = start + step * i;\n ticks[i] = Math.round(tick * f) / f;\n }\n return ticks;\n}\nfunction getTickStep(start, stop, count) {\n var segments = count - 1;\n var rawStep = (stop - start) / segments;\n return calculateNextNiceStep(rawStep);\n}\nfunction calculateNextNiceStep(rawStep) {\n var order = Math.floor(Math.log10(rawStep));\n var magnitude = Math.pow(10, order);\n // Make order 1\n var step = (rawStep / magnitude) * 10;\n if (step > 0 && step <= 1) {\n return magnitude / 10;\n }\n if (step > 1 && step <= 2) {\n return (2 * magnitude) / 10;\n }\n if (step > 1 && step <= 5) {\n return (5 * magnitude) / 10;\n }\n if (step > 5 && step <= 10) {\n return (10 * magnitude) / 10;\n }\n if (step > 10 && step <= 20) {\n return (20 * magnitude) / 10;\n }\n if (step > 20 && step <= 40) {\n return (40 * magnitude) / 10;\n }\n if (step > 40 && step <= 50) {\n return (50 * magnitude) / 10;\n }\n if (step > 50 && step <= 100) {\n return (100 * magnitude) / 10;\n }\n return step;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { AND, GREATER_THAN, LESS_THAN, NUMBER_OR_NAN, predicateWithMessage, Validate } from '../../util/validation';\nimport { Default } from '../../util/default';\nimport { LogScale } from '../../scale/logScale';\nimport { NumberAxis } from './numberAxis';\nimport { extent } from '../../util/array';\nimport { Logger } from '../../util/logger';\nfunction NON_ZERO_NUMBER() {\n // Cannot be 0\n var message = \"expecting a non-zero Number\";\n return predicateWithMessage(function (v) { return typeof v === 'number' && v !== 0; }, message);\n}\nvar LogAxis = /** @class */ (function (_super) {\n __extends(LogAxis, _super);\n function LogAxis(moduleCtx) {\n var _this = _super.call(this, moduleCtx, new LogScale()) || this;\n _this.min = NaN;\n _this.max = NaN;\n _this.scale.strictClampByDefault = true;\n return _this;\n }\n LogAxis.prototype.normaliseDataDomain = function (d) {\n var _a = this, min = _a.min, max = _a.max;\n if (d.length > 2) {\n d = extent(d) || [NaN, NaN];\n }\n if (!isNaN(min)) {\n d = [min, d[1]];\n }\n if (!isNaN(max)) {\n d = [d[0], max];\n }\n var isInverted = d[0] > d[1];\n var crossesZero = d[0] < 0 && d[1] > 0;\n var hasZeroExtent = d[0] === 0 && d[1] === 0;\n var invalidDomain = isInverted || crossesZero || hasZeroExtent;\n if (invalidDomain) {\n d = [];\n if (crossesZero) {\n Logger.warn(\"the data domain crosses zero, the chart data cannot be rendered. See log axis documentation for more information.\");\n }\n else if (hasZeroExtent) {\n Logger.warn(\"the data domain has 0 extent, no data is rendered.\");\n }\n }\n if (d[0] === 0) {\n d[0] = 1;\n }\n if (d[1] === 0) {\n d[1] = -1;\n }\n return d;\n };\n Object.defineProperty(LogAxis.prototype, \"base\", {\n get: function () {\n return this.scale.base;\n },\n set: function (value) {\n this.scale.base = value;\n },\n enumerable: false,\n configurable: true\n });\n LogAxis.className = 'LogAxis';\n LogAxis.type = 'log';\n __decorate([\n Validate(AND(NUMBER_OR_NAN(), LESS_THAN('max'), NON_ZERO_NUMBER())),\n Default(NaN)\n ], LogAxis.prototype, \"min\", void 0);\n __decorate([\n Validate(AND(NUMBER_OR_NAN(), GREATER_THAN('min'), NON_ZERO_NUMBER())),\n Default(NaN)\n ], LogAxis.prototype, \"max\", void 0);\n return LogAxis;\n}(NumberAxis));\nexport { LogAxis };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Logger } from '../../util/logger';\nfunction extendDomain(values, domain) {\n var e_1, _a;\n if (domain === void 0) { domain = [Infinity, -Infinity]; }\n try {\n for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n var value = values_1_1.value;\n if (typeof value !== 'number') {\n continue;\n }\n if (value < domain[0]) {\n domain[0] = value;\n }\n if (value > domain[1]) {\n domain[1] = value;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return domain;\n}\nfunction sumValues(values, accumulator) {\n var e_2, _a;\n if (accumulator === void 0) { accumulator = [0, 0]; }\n try {\n for (var values_2 = __values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {\n var value = values_2_1.value;\n if (typeof value !== 'number') {\n continue;\n }\n if (value < 0) {\n accumulator[0] += value;\n }\n if (value > 0) {\n accumulator[1] += value;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return accumulator;\n}\nfunction toKeyString(keys) {\n return keys\n .map(function (v) {\n if (v == null) {\n return v;\n }\n else if (typeof v === 'number' || typeof v === 'string' || typeof v === 'boolean') {\n return v;\n }\n else if (typeof v === 'object') {\n return JSON.stringify(v);\n }\n return v;\n })\n .join('-');\n}\nexport var SMALLEST_KEY_INTERVAL = {\n type: 'reducer',\n property: 'smallestKeyInterval',\n initialValue: Infinity,\n reducer: function () {\n var prevX = NaN;\n return function (smallestSoFar, next) {\n var nextX = next.keys[0];\n var interval = Math.abs(nextX - prevX);\n prevX = nextX;\n if (!isNaN(interval) && interval > 0 && interval < smallestSoFar) {\n return interval;\n }\n return smallestSoFar;\n };\n },\n};\nexport var SUM_VALUE_EXTENT = {\n type: 'processor',\n property: 'sumValueExtent',\n calculate: function (processedData) {\n var e_3, _a;\n var _b, _c, _d, _e;\n var result = __spread(((_c = (_b = processedData.domain.sumValues) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : [0, 0]));\n try {\n for (var _f = __values((_e = (_d = processedData.domain.sumValues) === null || _d === void 0 ? void 0 : _d.slice(1)) !== null && _e !== void 0 ? _e : []), _g = _f.next(); !_g.done; _g = _f.next()) {\n var _h = __read(_g.value, 2), min = _h[0], max = _h[1];\n if (min < result[0]) {\n result[0] = min;\n }\n if (max > result[1]) {\n result[1] = max;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return result;\n },\n};\nvar INVALID_VALUE = Symbol('invalid');\nvar DataModel = /** @class */ (function () {\n function DataModel(opts) {\n var e_4, _a, e_5, _b;\n var _this = this;\n var _c;\n var props = opts.props;\n // Validate that keys appear before values in the definitions, as output ordering depends\n // on configuration ordering, but we process keys before values.\n var keys = true;\n try {\n for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n var next = props_1_1.value;\n if (next.type === 'key' && !keys) {\n throw new Error('AG Charts - internal config error: keys must come before values.');\n }\n if (next.type === 'value' && keys) {\n keys = false;\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n }\n finally { if (e_4) throw e_4.error; }\n }\n this.opts = __assign({ dataVisible: true }, opts);\n this.keys = props\n .filter(function (def) { return def.type === 'key'; })\n .map(function (def, index) { return (__assign(__assign({}, def), { index: index, missing: false })); });\n this.values = props\n .filter(function (def) { return def.type === 'value'; })\n .map(function (def, index) { return (__assign(__assign({}, def), { index: index, missing: false })); });\n this.sums = props.filter(function (def) { return def.type === 'sum'; });\n this.reducers = props.filter(function (def) { return def.type === 'reducer'; });\n this.processors = props.filter(function (def) { return def.type === 'processor'; });\n try {\n for (var _d = __values((_c = this.sums) !== null && _c !== void 0 ? _c : []), _e = _d.next(); !_e.done; _e = _d.next()) {\n var properties = _e.value.properties;\n if (properties.length === 0)\n continue;\n if (!properties.some(function (prop) { return _this.values.some(function (def) { return def.property === prop; }); })) {\n throw new Error(\"AG Charts - internal config error: sum properties must match defined properties (\" + properties + \").\");\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n }\n finally { if (e_5) throw e_5.error; }\n }\n }\n DataModel.prototype.resolveProcessedDataIndex = function (propName) {\n var def = this.resolveProcessedDataDef(propName);\n if ((def === null || def === void 0 ? void 0 : def.type) === 'key' || (def === null || def === void 0 ? void 0 : def.type) === 'value') {\n return { type: def.type, index: def.index };\n }\n };\n DataModel.prototype.resolveProcessedDataDef = function (propName) {\n var _a = this, keys = _a.keys, values = _a.values;\n var def = __spread(keys, values).find(function (_a) {\n var property = _a.property;\n return property === propName;\n });\n if (!def)\n return undefined;\n return def;\n };\n DataModel.prototype.getDomain = function (propName, processedData) {\n var idx = this.resolveProcessedDataIndex(propName);\n if (!idx) {\n return [];\n }\n return processedData.domain[idx.type === 'key' ? 'keys' : 'values'][idx.index];\n };\n DataModel.prototype.processData = function (data) {\n var e_6, _a, e_7, _b;\n var _c = this, _d = _c.opts, groupByKeys = _d.groupByKeys, normaliseTo = _d.normaliseTo, sums = _c.sums, reducers = _c.reducers, processors = _c.processors;\n var start = performance.now();\n try {\n for (var _e = __values(__spread(this.keys, this.values)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var def = _f.value;\n def.missing = false;\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n }\n finally { if (e_6) throw e_6.error; }\n }\n if (groupByKeys && this.keys.length === 0) {\n return undefined;\n }\n var processedData = this.extractData(data);\n if (groupByKeys) {\n processedData = this.groupData(processedData);\n }\n if (sums.length > 0) {\n this.sumData(processedData);\n }\n if (typeof normaliseTo === 'number') {\n this.normaliseData(processedData);\n }\n if (reducers.length > 0) {\n this.reduceData(processedData);\n }\n if (processors.length > 0) {\n this.postProcessData(processedData);\n }\n try {\n for (var _g = __values(__spread(this.keys, this.values)), _h = _g.next(); !_h.done; _h = _g.next()) {\n var def = _h.value;\n if (def.missing) {\n Logger.warnOnce(\"the key '\" + def.property + \"' was not found in at least one data element.\");\n }\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_7) throw e_7.error; }\n }\n var end = performance.now();\n processedData.time = end - start;\n return processedData;\n };\n DataModel.prototype.extractData = function (data) {\n var e_8, _a, e_9, _b, e_10, _c;\n var _d = this, keyDefs = _d.keys, valueDefs = _d.values, dataVisible = _d.opts.dataVisible;\n var _e = this.initDataDomainProcessor(), dataDomain = _e.dataDomain, processValue = _e.processValue;\n var resultData = new Array(dataVisible ? data.length : 0);\n var resultDataIdx = 0;\n try {\n dataLoop: for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var datum = data_1_1.value;\n var keys = dataVisible ? new Array(keyDefs.length) : undefined;\n var keyIdx = 0;\n try {\n for (var keyDefs_1 = (e_9 = void 0, __values(keyDefs)), keyDefs_1_1 = keyDefs_1.next(); !keyDefs_1_1.done; keyDefs_1_1 = keyDefs_1.next()) {\n var def = keyDefs_1_1.value;\n var key = processValue(def, datum);\n if (key === INVALID_VALUE) {\n continue dataLoop;\n }\n if (keys) {\n keys[keyIdx++] = key;\n }\n }\n }\n catch (e_9_1) { e_9 = { error: e_9_1 }; }\n finally {\n try {\n if (keyDefs_1_1 && !keyDefs_1_1.done && (_b = keyDefs_1.return)) _b.call(keyDefs_1);\n }\n finally { if (e_9) throw e_9.error; }\n }\n var values = dataVisible ? new Array(valueDefs.length) : undefined;\n var valueIdx = 0;\n try {\n for (var valueDefs_1 = (e_10 = void 0, __values(valueDefs)), valueDefs_1_1 = valueDefs_1.next(); !valueDefs_1_1.done; valueDefs_1_1 = valueDefs_1.next()) {\n var def = valueDefs_1_1.value;\n var value = processValue(def, datum);\n if (value === INVALID_VALUE) {\n continue dataLoop;\n }\n if (values) {\n values[valueIdx++] = value;\n }\n }\n }\n catch (e_10_1) { e_10 = { error: e_10_1 }; }\n finally {\n try {\n if (valueDefs_1_1 && !valueDefs_1_1.done && (_c = valueDefs_1.return)) _c.call(valueDefs_1);\n }\n finally { if (e_10) throw e_10.error; }\n }\n if (dataVisible) {\n resultData[resultDataIdx++] = {\n datum: datum,\n keys: keys,\n values: values,\n };\n }\n }\n }\n catch (e_8_1) { e_8 = { error: e_8_1 }; }\n finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n }\n finally { if (e_8) throw e_8.error; }\n }\n resultData.length = resultDataIdx;\n var propertyDomain = function (def) {\n var result = dataDomain.get(def.property).domain;\n if (Array.isArray(result) && result[0] > result[1]) {\n // Ignore starting values.\n return [];\n }\n return __spread(result);\n };\n return {\n type: 'ungrouped',\n data: resultData,\n domain: {\n keys: keyDefs.map(function (def) { return propertyDomain(def); }),\n values: valueDefs.map(function (def) { return propertyDomain(def); }),\n },\n indices: {\n keys: keyDefs.reduce(function (r, _a) {\n var property = _a.property, index = _a.index;\n r[property] = index;\n return r;\n }, {}),\n values: valueDefs.reduce(function (r, _a) {\n var property = _a.property, index = _a.index;\n r[property] = index;\n return r;\n }, {}),\n },\n defs: {\n keys: keyDefs,\n values: valueDefs,\n },\n time: 0,\n };\n };\n DataModel.prototype.groupData = function (data) {\n var e_11, _a, e_12, _b;\n var processedData = new Map();\n try {\n for (var _c = __values(data.data), _d = _c.next(); !_d.done; _d = _c.next()) {\n var _e = _d.value, keys = _e.keys, values = _e.values, datum = _e.datum;\n var keyStr = toKeyString(keys);\n if (processedData.has(keyStr)) {\n var existingData = processedData.get(keyStr);\n existingData.values.push(values);\n existingData.datum.push(datum);\n }\n else {\n processedData.set(keyStr, { keys: keys, values: [values], datum: [datum] });\n }\n }\n }\n catch (e_11_1) { e_11 = { error: e_11_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_11) throw e_11.error; }\n }\n var resultData = new Array(processedData.size);\n var dataIndex = 0;\n try {\n for (var _f = __values(processedData.entries()), _g = _f.next(); !_g.done; _g = _f.next()) {\n var _h = __read(_g.value, 2), _j = _h[1], keys = _j.keys, values = _j.values, datum = _j.datum;\n resultData[dataIndex++] = {\n keys: keys,\n values: values,\n datum: datum,\n };\n }\n }\n catch (e_12_1) { e_12 = { error: e_12_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n }\n finally { if (e_12) throw e_12.error; }\n }\n return __assign(__assign({}, data), { type: 'grouped', data: resultData });\n };\n DataModel.prototype.sumData = function (processedData) {\n var e_13, _a, e_14, _b, e_15, _c;\n var _d;\n var _e = this, valueDefs = _e.values, sumDefs = _e.sums;\n if (!sumDefs)\n return;\n var resultSumValues = sumDefs.map(function () { return [Infinity, -Infinity]; });\n var resultSumValueIndices = sumDefs.map(function (defs) {\n return defs.properties.map(function (prop) { return valueDefs.findIndex(function (def) { return def.property === prop; }); });\n });\n try {\n for (var _f = __values(processedData.data), _g = _f.next(); !_g.done; _g = _f.next()) {\n var group = _g.value;\n var values = group.values;\n (_d = group.sumValues) !== null && _d !== void 0 ? _d : (group.sumValues = new Array(resultSumValueIndices.length));\n if (processedData.type === 'ungrouped') {\n values = [values];\n }\n var resultIdx = 0;\n try {\n for (var resultSumValueIndices_1 = (e_14 = void 0, __values(resultSumValueIndices)), resultSumValueIndices_1_1 = resultSumValueIndices_1.next(); !resultSumValueIndices_1_1.done; resultSumValueIndices_1_1 = resultSumValueIndices_1.next()) {\n var indices = resultSumValueIndices_1_1.value;\n var groupDomain = extendDomain([]);\n var _loop_1 = function (distinctValues) {\n var valuesToSum = indices.map(function (valueIdx) { return distinctValues[valueIdx]; });\n var range = sumValues(valuesToSum);\n if (range) {\n extendDomain(range, groupDomain);\n }\n };\n try {\n for (var values_3 = (e_15 = void 0, __values(values)), values_3_1 = values_3.next(); !values_3_1.done; values_3_1 = values_3.next()) {\n var distinctValues = values_3_1.value;\n _loop_1(distinctValues);\n }\n }\n catch (e_15_1) { e_15 = { error: e_15_1 }; }\n finally {\n try {\n if (values_3_1 && !values_3_1.done && (_c = values_3.return)) _c.call(values_3);\n }\n finally { if (e_15) throw e_15.error; }\n }\n extendDomain(groupDomain, resultSumValues[resultIdx]);\n group.sumValues[resultIdx++] = groupDomain;\n }\n }\n catch (e_14_1) { e_14 = { error: e_14_1 }; }\n finally {\n try {\n if (resultSumValueIndices_1_1 && !resultSumValueIndices_1_1.done && (_b = resultSumValueIndices_1.return)) _b.call(resultSumValueIndices_1);\n }\n finally { if (e_14) throw e_14.error; }\n }\n }\n }\n catch (e_13_1) { e_13 = { error: e_13_1 }; }\n finally {\n try {\n if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n }\n finally { if (e_13) throw e_13.error; }\n }\n processedData.domain.sumValues = resultSumValues;\n };\n DataModel.prototype.normaliseData = function (processedData) {\n var e_16, _a, e_17, _b, e_18, _c, e_19, _d, e_20, _e, e_21, _f, e_22, _g;\n var _h;\n var _j = this, sumDefs = _j.sums, valueDefs = _j.values, normaliseTo = _j.opts.normaliseTo;\n if (normaliseTo == null)\n return;\n var sumValues = processedData.domain.sumValues;\n var resultSumValueIndices = sumDefs.map(function (defs) {\n return defs.properties.map(function (prop) { return valueDefs.findIndex(function (def) { return def.property === prop; }); });\n });\n // const normalisedRange = [-normaliseTo, normaliseTo];\n var normalise = function (val, extent) {\n var result = (val * normaliseTo) / extent;\n if (result >= 0) {\n return Math.min(normaliseTo, result);\n }\n return Math.max(-normaliseTo, result);\n };\n for (var sumIdx = 0; sumIdx < sumDefs.length; sumIdx++) {\n var sums = sumValues === null || sumValues === void 0 ? void 0 : sumValues[sumIdx];\n if (sums == null)\n continue;\n var sumAbsExtent = -Infinity;\n try {\n for (var sums_1 = (e_16 = void 0, __values(sums)), sums_1_1 = sums_1.next(); !sums_1_1.done; sums_1_1 = sums_1.next()) {\n var sum = sums_1_1.value;\n var sumAbs = Math.abs(sum);\n if (sumAbsExtent < sumAbs) {\n sumAbsExtent = sumAbs;\n }\n }\n }\n catch (e_16_1) { e_16 = { error: e_16_1 }; }\n finally {\n try {\n if (sums_1_1 && !sums_1_1.done && (_a = sums_1.return)) _a.call(sums_1);\n }\n finally { if (e_16) throw e_16.error; }\n }\n var sumRangeIdx = 0;\n try {\n for (var sums_2 = (e_17 = void 0, __values(sums)), sums_2_1 = sums_2.next(); !sums_2_1.done; sums_2_1 = sums_2.next()) {\n var _ = sums_2_1.value;\n sums[sumRangeIdx] = normalise(sums[sumRangeIdx], sumAbsExtent);\n sumRangeIdx++;\n }\n }\n catch (e_17_1) { e_17 = { error: e_17_1 }; }\n finally {\n try {\n if (sums_2_1 && !sums_2_1.done && (_b = sums_2.return)) _b.call(sums_2);\n }\n finally { if (e_17) throw e_17.error; }\n }\n try {\n for (var _k = (e_18 = void 0, __values(processedData.data)), _l = _k.next(); !_l.done; _l = _k.next()) {\n var next = _l.value;\n var sumValues_1 = next.sumValues;\n var values = next.values;\n if (processedData.type === 'ungrouped') {\n values = [values];\n }\n var valuesSumExtent = 0;\n try {\n for (var _m = (e_19 = void 0, __values((_h = sumValues_1 === null || sumValues_1 === void 0 ? void 0 : sumValues_1[sumIdx]) !== null && _h !== void 0 ? _h : [])), _o = _m.next(); !_o.done; _o = _m.next()) {\n var sum = _o.value;\n var sumAbs = Math.abs(sum);\n if (valuesSumExtent < sumAbs) {\n valuesSumExtent = sumAbs;\n }\n }\n }\n catch (e_19_1) { e_19 = { error: e_19_1 }; }\n finally {\n try {\n if (_o && !_o.done && (_d = _m.return)) _d.call(_m);\n }\n finally { if (e_19) throw e_19.error; }\n }\n try {\n for (var values_4 = (e_20 = void 0, __values(values)), values_4_1 = values_4.next(); !values_4_1.done; values_4_1 = values_4.next()) {\n var row = values_4_1.value;\n try {\n for (var _p = (e_21 = void 0, __values(resultSumValueIndices[sumIdx])), _q = _p.next(); !_q.done; _q = _p.next()) {\n var indices = _q.value;\n row[indices] = normalise(row[indices], valuesSumExtent);\n }\n }\n catch (e_21_1) { e_21 = { error: e_21_1 }; }\n finally {\n try {\n if (_q && !_q.done && (_f = _p.return)) _f.call(_p);\n }\n finally { if (e_21) throw e_21.error; }\n }\n }\n }\n catch (e_20_1) { e_20 = { error: e_20_1 }; }\n finally {\n try {\n if (values_4_1 && !values_4_1.done && (_e = values_4.return)) _e.call(values_4);\n }\n finally { if (e_20) throw e_20.error; }\n }\n if (sumValues_1 == null)\n continue;\n sumRangeIdx = 0;\n try {\n for (var _r = (e_22 = void 0, __values(sumValues_1[sumIdx])), _s = _r.next(); !_s.done; _s = _r.next()) {\n var _ = _s.value;\n sumValues_1[sumIdx][sumRangeIdx] = normalise(sumValues_1[sumIdx][sumRangeIdx], valuesSumExtent);\n sumRangeIdx++;\n }\n }\n catch (e_22_1) { e_22 = { error: e_22_1 }; }\n finally {\n try {\n if (_s && !_s.done && (_g = _r.return)) _g.call(_r);\n }\n finally { if (e_22) throw e_22.error; }\n }\n }\n }\n catch (e_18_1) { e_18 = { error: e_18_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_18) throw e_18.error; }\n }\n }\n };\n DataModel.prototype.reduceData = function (processedData) {\n var e_23, _a, e_24, _b;\n var _c;\n var reducerDefs = this.reducers;\n var reducers = reducerDefs.map(function (def) { return def.reducer(); });\n var accValues = reducerDefs.map(function (def) { return def.initialValue; });\n try {\n for (var _d = __values(processedData.data), _e = _d.next(); !_e.done; _e = _d.next()) {\n var group = _e.value;\n var reducerIndex = 0;\n try {\n for (var reducers_1 = (e_24 = void 0, __values(reducers)), reducers_1_1 = reducers_1.next(); !reducers_1_1.done; reducers_1_1 = reducers_1.next()) {\n var reducer = reducers_1_1.value;\n accValues[reducerIndex] = reducer(accValues[reducerIndex], group);\n reducerIndex++;\n }\n }\n catch (e_24_1) { e_24 = { error: e_24_1 }; }\n finally {\n try {\n if (reducers_1_1 && !reducers_1_1.done && (_b = reducers_1.return)) _b.call(reducers_1);\n }\n finally { if (e_24) throw e_24.error; }\n }\n }\n }\n catch (e_23_1) { e_23 = { error: e_23_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_23) throw e_23.error; }\n }\n for (var accIdx = 0; accIdx < accValues.length; accIdx++) {\n (_c = processedData.reduced) !== null && _c !== void 0 ? _c : (processedData.reduced = {});\n processedData.reduced[reducerDefs[accIdx].property] = accValues[accIdx];\n }\n };\n DataModel.prototype.postProcessData = function (processedData) {\n var e_25, _a;\n var _b;\n var processorDefs = this.processors;\n try {\n for (var processorDefs_1 = __values(processorDefs), processorDefs_1_1 = processorDefs_1.next(); !processorDefs_1_1.done; processorDefs_1_1 = processorDefs_1.next()) {\n var def = processorDefs_1_1.value;\n (_b = processedData.reduced) !== null && _b !== void 0 ? _b : (processedData.reduced = {});\n processedData.reduced[def.property] = def.calculate(processedData);\n }\n }\n catch (e_25_1) { e_25 = { error: e_25_1 }; }\n finally {\n try {\n if (processorDefs_1_1 && !processorDefs_1_1.done && (_a = processorDefs_1.return)) _a.call(processorDefs_1);\n }\n finally { if (e_25) throw e_25.error; }\n }\n };\n DataModel.prototype.initDataDomainProcessor = function () {\n var _a = this, keyDefs = _a.keys, valueDefs = _a.values;\n var dataDomain = new Map();\n var initDataDomainKey = function (key, type, updateDataDomain) {\n if (type === 'category') {\n updateDataDomain.set(key, { type: type, domain: new Set() });\n }\n else {\n updateDataDomain.set(key, { type: type, domain: [Infinity, -Infinity] });\n }\n };\n var initDataDomain = function (updateDataDomain) {\n if (updateDataDomain === void 0) { updateDataDomain = dataDomain; }\n keyDefs.forEach(function (def) { return initDataDomainKey(def.property, def.valueType, updateDataDomain); });\n valueDefs.forEach(function (def) { return initDataDomainKey(def.property, def.valueType, updateDataDomain); });\n return updateDataDomain;\n };\n initDataDomain();\n var processValue = function (def, datum, updateDataDomain) {\n var _a, _b;\n if (updateDataDomain === void 0) { updateDataDomain = dataDomain; }\n var valueInDatum = def.property in datum;\n var missingValueDef = 'missingValue' in def;\n if (!def.missing && !valueInDatum && !missingValueDef) {\n def.missing = true;\n }\n if (!updateDataDomain.has(def.property)) {\n initDataDomain(updateDataDomain);\n }\n var value = valueInDatum ? datum[def.property] : def.missingValue;\n if (valueInDatum) {\n var valid = (_b = (_a = def.validation) === null || _a === void 0 ? void 0 : _a.call(def, value)) !== null && _b !== void 0 ? _b : true;\n if (!valid) {\n if ('invalidValue' in def) {\n value = def.invalidValue;\n }\n else {\n return INVALID_VALUE;\n }\n }\n }\n var meta = updateDataDomain.get(def.property);\n if ((meta === null || meta === void 0 ? void 0 : meta.type) === 'category') {\n meta.domain.add(value);\n }\n else if ((meta === null || meta === void 0 ? void 0 : meta.type) === 'range') {\n if (meta.domain[0] > value) {\n meta.domain[0] = value;\n }\n if (meta.domain[1] < value) {\n meta.domain[1] = value;\n }\n }\n return value;\n };\n return { dataDomain: dataDomain, processValue: processValue, initDataDomain: initDataDomain };\n };\n return DataModel;\n}());\nexport { DataModel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Validate, AND, LESS_THAN, GREATER_THAN, OPT_DATE_OR_DATETIME_MS } from '../../util/validation';\nimport { TimeScale } from '../../scale/timeScale';\nimport { extent } from '../../util/array';\nimport { ChartAxis } from '../chartAxis';\nvar TimeAxis = /** @class */ (function (_super) {\n __extends(TimeAxis, _super);\n function TimeAxis(moduleCtx) {\n var _this = _super.call(this, moduleCtx, new TimeScale()) || this;\n _this.datumFormat = '%m/%d/%y, %H:%M:%S';\n _this.min = undefined;\n _this.max = undefined;\n var scale = _this.scale;\n scale.strictClampByDefault = true;\n _this.refreshScale();\n _this.datumFormatter = scale.tickFormat({\n specifier: _this.datumFormat,\n });\n return _this;\n }\n TimeAxis.prototype.normaliseDataDomain = function (d) {\n var _a = this, min = _a.min, max = _a.max;\n if (typeof min === 'number') {\n min = new Date(min);\n }\n if (typeof max === 'number') {\n max = new Date(max);\n }\n if (d.length > 2) {\n d = (extent(d) || [0, 1000]).map(function (x) { return new Date(x); });\n }\n if (min instanceof Date) {\n d = [min, d[1]];\n }\n if (max instanceof Date) {\n d = [d[0], max];\n }\n if (d[0] > d[1]) {\n d = [];\n }\n return d;\n };\n TimeAxis.prototype.onLabelFormatChange = function (ticks, format) {\n if (format) {\n _super.prototype.onLabelFormatChange.call(this, ticks, format);\n }\n else {\n // For time axis labels to look nice, even if date format wasn't set.\n this.labelFormatter = this.scale.tickFormat({ ticks: ticks });\n }\n };\n TimeAxis.prototype.formatDatum = function (datum) {\n return this.datumFormatter(datum);\n };\n TimeAxis.prototype.calculatePadding = function (_min, _max) {\n // numbers in domain correspond to Unix timestamps\n // automatically expand domain by 1 in each direction\n return 1;\n };\n TimeAxis.className = 'TimeAxis';\n TimeAxis.type = 'time';\n __decorate([\n Validate(AND(OPT_DATE_OR_DATETIME_MS, LESS_THAN('max')))\n ], TimeAxis.prototype, \"min\", void 0);\n __decorate([\n Validate(AND(OPT_DATE_OR_DATETIME_MS, GREATER_THAN('min')))\n ], TimeAxis.prototype, \"max\", void 0);\n return TimeAxis;\n}(ChartAxis));\nexport { TimeAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { SeriesTooltip, keyProperty, valueProperty, sumProperties } from '../series';\nimport { PointerEvents } from '../../../scene/node';\nimport { CartesianSeries, CartesianSeriesMarker, CartesianSeriesNodeClickEvent, CartesianSeriesNodeDoubleClickEvent, } from './cartesianSeries';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { getMarker } from '../../marker/util';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { extent } from '../../../util/array';\nimport { areArrayItemsStrictlyEqual } from '../../../util/equal';\nimport { interpolate } from '../../../util/string';\nimport { Label } from '../../label';\nimport { sanitizeHtml } from '../../../util/sanitize';\nimport { isContinuous, isNumber } from '../../../util/value';\nimport { ContinuousScale } from '../../../scale/continuousScale';\nimport { BOOLEAN_ARRAY, NUMBER, OPT_FUNCTION, OPT_LINE_DASH, OPT_STRING, STRING, STRING_ARRAY, COLOR_STRING_ARRAY, Validate, OPT_NUMBER, } from '../../../util/validation';\nimport { LogAxis } from '../../axis/logAxis';\nimport { DataModel, SUM_VALUE_EXTENT } from '../../data/dataModel';\nimport { TimeAxis } from '../../axis/timeAxis';\nvar AreaSeriesLabel = /** @class */ (function (_super) {\n __extends(AreaSeriesLabel, _super);\n function AreaSeriesLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.formatter = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], AreaSeriesLabel.prototype, \"formatter\", void 0);\n return AreaSeriesLabel;\n}(Label));\nvar AreaSeriesTooltip = /** @class */ (function (_super) {\n __extends(AreaSeriesTooltip, _super);\n function AreaSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n _this.format = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], AreaSeriesTooltip.prototype, \"renderer\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], AreaSeriesTooltip.prototype, \"format\", void 0);\n return AreaSeriesTooltip;\n}(SeriesTooltip));\nvar AreaSeriesTag;\n(function (AreaSeriesTag) {\n AreaSeriesTag[AreaSeriesTag[\"Fill\"] = 0] = \"Fill\";\n AreaSeriesTag[AreaSeriesTag[\"Stroke\"] = 1] = \"Stroke\";\n AreaSeriesTag[AreaSeriesTag[\"Marker\"] = 2] = \"Marker\";\n AreaSeriesTag[AreaSeriesTag[\"Label\"] = 3] = \"Label\";\n})(AreaSeriesTag || (AreaSeriesTag = {}));\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n var _this = _super.call(this, {\n pathsPerSeries: 2,\n pathsZIndexSubOrderOffset: [0, 1000],\n hasMarkers: true,\n renderLayerPerSubSeries: false,\n directionKeys: {\n x: ['xKey'],\n y: ['yKeys'],\n },\n }) || this;\n _this.tooltip = new AreaSeriesTooltip();\n _this.marker = new CartesianSeriesMarker();\n _this.label = new AreaSeriesLabel();\n _this.fills = ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'];\n _this.strokes = ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'];\n _this.fillOpacity = 1;\n _this.strokeOpacity = 1;\n _this.lineDash = [0];\n _this.lineDashOffset = 0;\n _this._xKey = '';\n _this.xName = '';\n _this._yKeys = [];\n _this._visibles = [];\n _this.yNames = [];\n _this.strokeWidth = 2;\n _this.shadow = undefined;\n var _a = _this, marker = _a.marker, label = _a.label;\n marker.enabled = false;\n label.enabled = false;\n return _this;\n }\n Object.defineProperty(AreaSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n this._xKey = value;\n this.processedData = undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"yKeys\", {\n get: function () {\n return this._yKeys;\n },\n set: function (values) {\n if (!areArrayItemsStrictlyEqual(this._yKeys, values)) {\n this._yKeys = values;\n this.processedData = undefined;\n this.processSeriesItemEnabled();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"visibles\", {\n get: function () {\n return this._visibles;\n },\n set: function (visibles) {\n this._visibles = visibles;\n this.processSeriesItemEnabled();\n },\n enumerable: false,\n configurable: true\n });\n AreaSeries.prototype.processSeriesItemEnabled = function () {\n var _a = this, seriesItemEnabled = _a.seriesItemEnabled, _b = _a._visibles, visibles = _b === void 0 ? [] : _b;\n seriesItemEnabled.clear();\n this._yKeys.forEach(function (key, idx) { var _a; return seriesItemEnabled.set(key, (_a = visibles[idx]) !== null && _a !== void 0 ? _a : true); });\n };\n Object.defineProperty(AreaSeries.prototype, \"normalizedTo\", {\n get: function () {\n return this._normalizedTo;\n },\n set: function (value) {\n var absValue = value ? Math.abs(value) : undefined;\n if (this._normalizedTo !== absValue) {\n this._normalizedTo = absValue;\n }\n },\n enumerable: false,\n configurable: true\n });\n AreaSeries.prototype.processData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, xKey, yKeys, seriesItemEnabled, xAxis, yAxis, normalizedTo, data, isContinuousX, isContinuousY, enabledYKeys, normaliseTo;\n return __generator(this, function (_b) {\n _a = this, xKey = _a.xKey, yKeys = _a.yKeys, seriesItemEnabled = _a.seriesItemEnabled, xAxis = _a.xAxis, yAxis = _a.yAxis, normalizedTo = _a.normalizedTo;\n data = xKey && yKeys.length && this.data ? this.data : [];\n isContinuousX = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) instanceof ContinuousScale;\n isContinuousY = (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) instanceof ContinuousScale;\n enabledYKeys = __spread(seriesItemEnabled.entries()).filter(function (_a) {\n var _b = __read(_a, 2), enabled = _b[1];\n return enabled;\n }).map(function (_a) {\n var _b = __read(_a, 1), yKey = _b[0];\n return yKey;\n });\n normaliseTo = normalizedTo && isFinite(normalizedTo) ? normalizedTo : undefined;\n this.dataModel = new DataModel({\n props: __spread([\n keyProperty(xKey, isContinuousX)\n ], enabledYKeys.map(function (yKey) {\n return valueProperty(yKey, isContinuousY, {\n missingValue: NaN,\n invalidValue: undefined,\n });\n }), [\n sumProperties(enabledYKeys),\n SUM_VALUE_EXTENT,\n ]),\n groupByKeys: true,\n dataVisible: this.visible && enabledYKeys.length > 0,\n normaliseTo: normaliseTo,\n });\n this.processedData = this.dataModel.processData(data);\n return [2 /*return*/];\n });\n });\n };\n AreaSeries.prototype.getDomain = function (direction) {\n var _a = this, processedData = _a.processedData, xAxis = _a.xAxis, yAxis = _a.yAxis;\n if (!processedData)\n return [];\n var _b = processedData, _c = __read(_b.defs.keys, 1), keyDef = _c[0], _d = _b.domain, _e = __read(_d.keys, 1), keys = _e[0], _f = __read(_d.values, 1), yExtent = _f[0], _g = _b.reduced, _h = SUM_VALUE_EXTENT.property, ySumExtent = (_g === void 0 ? {} : _g)[_h];\n if (direction === ChartAxisDirection.X) {\n if (keyDef.valueType === 'category') {\n return keys;\n }\n return this.fixNumericExtent(extent(keys), xAxis);\n }\n else if (yAxis instanceof LogAxis || yAxis instanceof TimeAxis) {\n return this.fixNumericExtent(yExtent, yAxis);\n }\n else {\n return this.fixNumericExtent(ySumExtent, yAxis);\n }\n };\n AreaSeries.prototype.createNodeData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, xAxis, yAxis, data, _b, groupedData, contexts, _c, yKeys, xKey, marker, label, fills, strokes, seriesId, xScale, yScale, continuousY, xOffset, xDataCount, cumulativePathValues, cumulativeMarkerValues, createPathCoordinates, createMarkerCoordinate;\n var _this = this;\n return __generator(this, function (_d) {\n _a = this, xAxis = _a.xAxis, yAxis = _a.yAxis, data = _a.data, _b = _a.processedData, groupedData = (_b === void 0 ? {} : _b).data;\n if (!xAxis || !yAxis || !data) {\n return [2 /*return*/, []];\n }\n contexts = [];\n _c = this, yKeys = _c.yKeys, xKey = _c.xKey, marker = _c.marker, label = _c.label, fills = _c.fills, strokes = _c.strokes, seriesId = _c.id;\n xScale = xAxis.scale;\n yScale = yAxis.scale;\n continuousY = yScale instanceof ContinuousScale;\n xOffset = (xScale.bandwidth || 0) / 2;\n xDataCount = data.length;\n cumulativePathValues = new Array(xDataCount)\n .fill(null)\n .map(function () { return ({ left: 0, right: 0 }); });\n cumulativeMarkerValues = new Array(xDataCount).fill(0);\n createPathCoordinates = function (xDatum, yDatum, idx, side) {\n var x = xScale.convert(xDatum) + xOffset;\n var prevY = cumulativePathValues[idx][side];\n var currY = cumulativePathValues[idx][side] + yDatum;\n var prevYCoordinate = yScale.convert(prevY, { strict: false });\n var currYCoordinate = yScale.convert(currY, { strict: false });\n cumulativePathValues[idx][side] = currY;\n return [\n { x: x, y: currYCoordinate, size: marker.size },\n { x: x, y: prevYCoordinate, size: marker.size },\n ];\n };\n createMarkerCoordinate = function (xDatum, yDatum, idx, rawYDatum) {\n var currY;\n // if not normalized, the invalid data points will be processed as `undefined` in processData()\n // if normalized, the invalid data points will be processed as 0 rather than `undefined`\n // check if unprocessed datum is valid as we only want to show markers for valid points\n var normalized = _this.normalizedTo && isFinite(_this.normalizedTo);\n var normalizedAndValid = normalized && continuousY && isContinuous(rawYDatum);\n var valid = (!normalized && !isNaN(rawYDatum)) || normalizedAndValid;\n if (valid) {\n currY = cumulativeMarkerValues[idx] += yDatum;\n }\n var x = xScale.convert(xDatum) + xOffset;\n var y = yScale.convert(currY, { strict: false });\n return { x: x, y: y, size: marker.size };\n };\n yKeys.forEach(function (yKey, seriesIdx) {\n var _a;\n var yKeyDataIndex = (_a = _this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndex(yKey);\n var labelSelectionData = [];\n var markerSelectionData = [];\n var strokeSelectionData = { itemId: yKey, points: [], yValues: [] };\n var fillSelectionData = { itemId: yKey, points: [] };\n contexts[seriesIdx] = {\n itemId: yKey,\n fillSelectionData: fillSelectionData,\n labelData: labelSelectionData,\n nodeData: markerSelectionData,\n strokeSelectionData: strokeSelectionData,\n };\n if (!yKeyDataIndex) {\n return;\n }\n var fillPoints = fillSelectionData.points;\n var fillPhantomPoints = [];\n var strokePoints = strokeSelectionData.points;\n var yValues = strokeSelectionData.yValues;\n var datumIdx = -1;\n groupedData === null || groupedData === void 0 ? void 0 : groupedData.forEach(function (datumGroup, dataIdx) {\n var _a = __read(datumGroup.keys, 1), xDatum = _a[0], datumArray = datumGroup.datum, valuesArray = datumGroup.values;\n valuesArray.forEach(function (values, valueIdx) {\n datumIdx++;\n var seriesDatum = datumArray[valueIdx];\n var rawYDatum = values[yKeyDataIndex.index];\n var yDatum = isNaN(rawYDatum) ? undefined : rawYDatum;\n var nextValuesSameGroup = valueIdx < valuesArray.length - 1;\n var nextDatumGroup = nextValuesSameGroup ? datumGroup : groupedData[dataIdx + 1];\n var nextXDatum = nextDatumGroup === null || nextDatumGroup === void 0 ? void 0 : nextDatumGroup.keys[0];\n var rawNextYIdx = nextValuesSameGroup ? valueIdx + 1 : 0;\n var rawNextYDatum = nextDatumGroup === null || nextDatumGroup === void 0 ? void 0 : nextDatumGroup.values[rawNextYIdx][yKeyDataIndex.index];\n var nextYDatum = isNaN(rawNextYDatum) ? undefined : rawNextYDatum;\n // marker data\n var point = createMarkerCoordinate(xDatum, +yDatum, datumIdx, seriesDatum[yKey]);\n if (marker) {\n markerSelectionData.push({\n index: datumIdx,\n series: _this,\n itemId: yKey,\n datum: seriesDatum,\n nodeMidPoint: { x: point.x, y: point.y },\n cumulativeValue: cumulativeMarkerValues[datumIdx],\n yValue: yDatum,\n yKey: yKey,\n xKey: xKey,\n point: point,\n fill: fills[seriesIdx % fills.length],\n stroke: strokes[seriesIdx % strokes.length],\n });\n }\n // label data\n var labelText;\n if (label.formatter) {\n labelText = label.formatter({ value: yDatum, seriesId: seriesId });\n }\n else {\n labelText = isNumber(yDatum) ? Number(yDatum).toFixed(2) : String(yDatum);\n }\n if (label) {\n labelSelectionData.push({\n index: datumIdx,\n itemId: yKey,\n point: point,\n label: labelText\n ? {\n text: labelText,\n fontStyle: label.fontStyle,\n fontWeight: label.fontWeight,\n fontSize: label.fontSize,\n fontFamily: label.fontFamily,\n textAlign: 'center',\n textBaseline: 'bottom',\n fill: label.color,\n }\n : undefined,\n });\n }\n // fill data\n // Handle data in pairs of current and next x and y values\n var windowX = [xDatum, nextXDatum];\n var windowY = [yDatum, nextYDatum];\n if (windowX.some(function (v) { return v == undefined; })) {\n return;\n }\n if (windowY.some(function (v) { return v == undefined; })) {\n windowY[0] = 0;\n windowY[1] = 0;\n }\n var currCoordinates = createPathCoordinates(windowX[0], +windowY[0], datumIdx, 'right');\n fillPoints.push(currCoordinates[0]);\n fillPhantomPoints.push(currCoordinates[1]);\n var nextCoordinates = createPathCoordinates(windowX[1], +windowY[1], datumIdx, 'left');\n fillPoints.push(nextCoordinates[0]);\n fillPhantomPoints.push(nextCoordinates[1]);\n // stroke data\n strokePoints.push({ x: NaN, y: NaN }); // moveTo\n yValues.push(undefined);\n strokePoints.push(currCoordinates[0]);\n yValues.push(yDatum);\n if (nextYDatum !== undefined) {\n strokePoints.push(nextCoordinates[0]);\n yValues.push(yDatum);\n }\n });\n });\n for (var i = fillPhantomPoints.length - 1; i >= 0; i--) {\n fillPoints.push(fillPhantomPoints[i]);\n }\n });\n return [2 /*return*/, contexts];\n });\n });\n };\n AreaSeries.prototype.isPathOrSelectionDirty = function () {\n return this.marker.isDirty();\n };\n AreaSeries.prototype.updatePaths = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, fillSelectionData, strokeSelectionData, _b, fill, stroke;\n return __generator(this, function (_c) {\n _a = opts.contextData, fillSelectionData = _a.fillSelectionData, strokeSelectionData = _a.strokeSelectionData, _b = __read(opts.paths, 2), fill = _b[0], stroke = _b[1];\n fill.datum = fillSelectionData;\n fill.tag = AreaSeriesTag.Fill;\n fill.lineJoin = 'round';\n fill.stroke = undefined;\n fill.pointerEvents = PointerEvents.None;\n stroke.datum = strokeSelectionData;\n stroke.tag = AreaSeriesTag.Stroke;\n stroke.fill = undefined;\n stroke.lineJoin = stroke.lineCap = 'round';\n stroke.pointerEvents = PointerEvents.None;\n return [2 /*return*/];\n });\n });\n };\n AreaSeries.prototype.updatePathNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, fill, stroke, seriesIdx, itemId, _b, strokes, fills, fillOpacity, strokeOpacity, strokeWidth, shadow, points, path, i, points_1, points_1_1, p, _c, points, yValues, moveTo_1, path, i, points_2, points_2_1, p;\n var e_1, _d, e_2, _e;\n return __generator(this, function (_f) {\n _a = __read(opts.paths, 2), fill = _a[0], stroke = _a[1], seriesIdx = opts.seriesIdx, itemId = opts.itemId;\n _b = this, strokes = _b.strokes, fills = _b.fills, fillOpacity = _b.fillOpacity, strokeOpacity = _b.strokeOpacity, strokeWidth = _b.strokeWidth, shadow = _b.shadow;\n {\n points = fill.datum.points;\n fill.fill = fills[seriesIdx % fills.length];\n fill.fillOpacity = fillOpacity;\n fill.strokeOpacity = strokeOpacity;\n fill.strokeWidth = strokeWidth;\n fill.lineDash = this.lineDash;\n fill.lineDashOffset = this.lineDashOffset;\n fill.fillShadow = shadow;\n path = fill.path;\n path.clear({ trackChanges: true });\n i = 0;\n try {\n for (points_1 = __values(points), points_1_1 = points_1.next(); !points_1_1.done; points_1_1 = points_1.next()) {\n p = points_1_1.value;\n if (i++ > 0) {\n path.lineTo(p.x, p.y);\n }\n else {\n path.moveTo(p.x, p.y);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (points_1_1 && !points_1_1.done && (_d = points_1.return)) _d.call(points_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n path.closePath();\n fill.checkPathDirty();\n }\n {\n _c = stroke.datum, points = _c.points, yValues = _c.yValues;\n moveTo_1 = true;\n stroke.stroke = strokes[seriesIdx % strokes.length];\n stroke.strokeWidth = this.getStrokeWidth(this.strokeWidth, { itemId: itemId });\n stroke.strokeOpacity = strokeOpacity;\n stroke.lineDash = this.lineDash;\n stroke.lineDashOffset = this.lineDashOffset;\n path = stroke.path;\n path.clear({ trackChanges: true });\n i = 0;\n try {\n for (points_2 = __values(points), points_2_1 = points_2.next(); !points_2_1.done; points_2_1 = points_2.next()) {\n p = points_2_1.value;\n if (yValues[i++] === undefined) {\n moveTo_1 = true;\n }\n else if (moveTo_1) {\n path.moveTo(p.x, p.y);\n moveTo_1 = false;\n }\n else {\n path.lineTo(p.x, p.y);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (points_2_1 && !points_2_1.done && (_e = points_2.return)) _e.call(points_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n stroke.checkPathDirty();\n }\n return [2 /*return*/];\n });\n });\n };\n AreaSeries.prototype.markerFactory = function () {\n var shape = this.marker.shape;\n var MarkerShape = getMarker(shape);\n return new MarkerShape();\n };\n AreaSeries.prototype.updateMarkerSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var nodeData, markerSelection, enabled, data;\n return __generator(this, function (_a) {\n nodeData = opts.nodeData, markerSelection = opts.markerSelection;\n enabled = this.marker.enabled;\n data = enabled && nodeData ? nodeData : [];\n if (this.marker.isDirty()) {\n markerSelection.clear();\n }\n return [2 /*return*/, markerSelection.update(data, function (marker) {\n marker.tag = AreaSeriesTag.Marker;\n })];\n });\n });\n };\n AreaSeries.prototype.updateMarkerNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var markerSelection, isDatumHighlighted, _a, seriesId, xKey, marker, seriesItemEnabled, yKeys, fills, strokes, seriesFillOpacity, _b, markerFillOpacity, strokeOpacity, _c, highlightedFill, _d, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, size, formatter, markerStrokeWidth, customMarker;\n return __generator(this, function (_e) {\n markerSelection = opts.markerSelection, isDatumHighlighted = opts.isHighlight;\n _a = this, seriesId = _a.id, xKey = _a.xKey, marker = _a.marker, seriesItemEnabled = _a.seriesItemEnabled, yKeys = _a.yKeys, fills = _a.fills, strokes = _a.strokes, seriesFillOpacity = _a.fillOpacity, _b = _a.marker.fillOpacity, markerFillOpacity = _b === void 0 ? seriesFillOpacity : _b, strokeOpacity = _a.strokeOpacity, _c = _a.highlightStyle.item, highlightedFill = _c.fill, _d = _c.fillOpacity, highlightFillOpacity = _d === void 0 ? markerFillOpacity : _d, highlightedStroke = _c.stroke, highlightedDatumStrokeWidth = _c.strokeWidth;\n size = marker.size, formatter = marker.formatter;\n markerStrokeWidth = marker.strokeWidth !== undefined ? marker.strokeWidth : this.strokeWidth;\n customMarker = typeof marker.shape === 'function';\n markerSelection.each(function (node, datum) {\n var _a, _b;\n var yKeyIndex = yKeys.indexOf(datum.yKey);\n var fill = isDatumHighlighted && highlightedFill !== undefined\n ? highlightedFill\n : marker.fill || fills[yKeyIndex % fills.length];\n var fillOpacity = isDatumHighlighted ? highlightFillOpacity : markerFillOpacity;\n var stroke = isDatumHighlighted && highlightedStroke !== undefined\n ? highlightedStroke\n : marker.stroke || strokes[yKeyIndex % fills.length];\n var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n ? highlightedDatumStrokeWidth\n : markerStrokeWidth;\n var format = undefined;\n if (formatter) {\n format = formatter({\n datum: datum.datum,\n xKey: xKey,\n yKey: datum.yKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n size: size,\n highlighted: isDatumHighlighted,\n seriesId: seriesId,\n });\n }\n node.fill = (format && format.fill) || fill;\n node.stroke = (format && format.stroke) || stroke;\n node.strokeWidth = format && format.strokeWidth !== undefined ? format.strokeWidth : strokeWidth;\n node.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n node.strokeOpacity = (_b = (_a = marker.strokeOpacity) !== null && _a !== void 0 ? _a : strokeOpacity) !== null && _b !== void 0 ? _b : 1;\n node.size = format && format.size !== undefined ? format.size : size;\n node.translationX = datum.point.x;\n node.translationY = datum.point.y;\n node.visible =\n node.size > 0 && !!seriesItemEnabled.get(datum.yKey) && !isNaN(datum.point.x) && !isNaN(datum.point.y);\n if (!customMarker || node.dirtyPath) {\n return;\n }\n // Only for cutom marker shapes\n node.path.clear({ trackChanges: true });\n node.updatePath();\n node.checkPathDirty();\n });\n if (!isDatumHighlighted) {\n this.marker.markClean();\n }\n return [2 /*return*/];\n });\n });\n };\n AreaSeries.prototype.updateLabelSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelData, labelSelection;\n return __generator(this, function (_a) {\n labelData = opts.labelData, labelSelection = opts.labelSelection;\n return [2 /*return*/, labelSelection.update(labelData, function (text) {\n text.tag = AreaSeriesTag.Label;\n })];\n });\n });\n };\n AreaSeries.prototype.updateLabelNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelSelection, _a, labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color;\n return __generator(this, function (_b) {\n labelSelection = opts.labelSelection;\n _a = this.label, labelEnabled = _a.enabled, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontSize = _a.fontSize, fontFamily = _a.fontFamily, color = _a.color;\n labelSelection.each(function (text, datum) {\n var point = datum.point, label = datum.label;\n if (label && labelEnabled) {\n text.fontStyle = fontStyle;\n text.fontWeight = fontWeight;\n text.fontSize = fontSize;\n text.fontFamily = fontFamily;\n text.textAlign = label.textAlign;\n text.textBaseline = label.textBaseline;\n text.text = label.text;\n text.x = point.x;\n text.y = point.y - 10;\n text.fill = color;\n text.visible = true;\n }\n else {\n text.visible = false;\n }\n });\n return [2 /*return*/];\n });\n });\n };\n AreaSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new CartesianSeriesNodeClickEvent(this.xKey, datum.yKey, event, datum, this);\n };\n AreaSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new CartesianSeriesNodeDoubleClickEvent(this.xKey, datum.yKey, event, datum, this);\n };\n AreaSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a, _b, _c;\n var _d = this, xKey = _d.xKey, seriesId = _d.id;\n var yKey = nodeDatum.yKey;\n var yKeyDataIndex = (_a = this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndex(yKey);\n if (!(xKey && yKey) || !yKeyDataIndex) {\n return '';\n }\n var datum = nodeDatum.datum;\n var xValue = datum[xKey];\n var yValue = datum[yKey];\n var _e = this, xAxis = _e.xAxis, yAxis = _e.yAxis, yKeys = _e.yKeys;\n if (!(xAxis && yAxis && isNumber(yValue)) || !yKeyDataIndex) {\n return '';\n }\n var _f = this, xName = _f.xName, yNames = _f.yNames, fills = _f.fills, strokes = _f.strokes, tooltip = _f.tooltip, marker = _f.marker;\n var size = marker.size, markerFormatter = marker.formatter, markerStrokeWidth = marker.strokeWidth, markerFill = marker.fill, markerStroke = marker.stroke;\n var xString = xAxis.formatDatum(xValue);\n var yString = yAxis.formatDatum(yValue);\n var yKeyIndex = yKeys.indexOf(yKey);\n var processedYValue = (_c = (_b = this.processedData) === null || _b === void 0 ? void 0 : _b.data[nodeDatum.index]) === null || _c === void 0 ? void 0 : _c.values[0][yKeyDataIndex === null || yKeyDataIndex === void 0 ? void 0 : yKeyDataIndex.index];\n var yName = yNames[yKeyIndex];\n var title = sanitizeHtml(yName);\n var content = sanitizeHtml(xString + ': ' + yString);\n var strokeWidth = markerStrokeWidth !== undefined ? markerStrokeWidth : this.strokeWidth;\n var fill = markerFill || fills[yKeyIndex % fills.length];\n var stroke = markerStroke || strokes[yKeyIndex % fills.length];\n var format = undefined;\n if (markerFormatter) {\n format = markerFormatter({\n datum: datum,\n xKey: xKey,\n yKey: yKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n size: size,\n highlighted: false,\n seriesId: seriesId,\n });\n }\n var color = (format && format.fill) || fill;\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n var tooltipRenderer = tooltip.renderer, tooltipFormat = tooltip.format;\n if (tooltipFormat || tooltipRenderer) {\n var params = {\n datum: datum,\n xKey: xKey,\n xName: xName,\n xValue: xValue,\n yKey: yKey,\n yValue: yValue,\n processedYValue: processedYValue,\n yName: yName,\n color: color,\n title: title,\n seriesId: seriesId,\n };\n if (tooltipFormat) {\n return toTooltipHtml({\n content: interpolate(tooltipFormat, params),\n }, defaults);\n }\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer(params), defaults);\n }\n }\n return toTooltipHtml(defaults);\n };\n AreaSeries.prototype.getLegendData = function () {\n var _a, _b;\n var _c = this, data = _c.data, id = _c.id, xKey = _c.xKey, yKeys = _c.yKeys, yNames = _c.yNames, seriesItemEnabled = _c.seriesItemEnabled, marker = _c.marker, fills = _c.fills, strokes = _c.strokes, fillOpacity = _c.fillOpacity, strokeOpacity = _c.strokeOpacity;\n if (!data || !data.length || !xKey || !yKeys.length) {\n return [];\n }\n var legendData = [];\n // Area stacks should be listed in the legend in reverse order, for symmetry with the\n // vertical stack display order.\n for (var index = yKeys.length - 1; index >= 0; index--) {\n var yKey = yKeys[index];\n legendData.push({\n id: id,\n itemId: yKey,\n seriesId: id,\n enabled: seriesItemEnabled.get(yKey) || false,\n label: {\n text: yNames[index] || yKeys[index],\n },\n marker: {\n shape: marker.shape,\n fill: marker.fill || fills[index % fills.length],\n stroke: marker.stroke || strokes[index % strokes.length],\n fillOpacity: (_a = marker.fillOpacity) !== null && _a !== void 0 ? _a : fillOpacity,\n strokeOpacity: (_b = marker.strokeOpacity) !== null && _b !== void 0 ? _b : strokeOpacity,\n },\n });\n }\n return legendData;\n };\n AreaSeries.prototype.isLabelEnabled = function () {\n return this.label.enabled;\n };\n AreaSeries.className = 'AreaSeries';\n AreaSeries.type = 'area';\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], AreaSeries.prototype, \"fills\", void 0);\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], AreaSeries.prototype, \"strokes\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], AreaSeries.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], AreaSeries.prototype, \"strokeOpacity\", void 0);\n __decorate([\n Validate(OPT_LINE_DASH)\n ], AreaSeries.prototype, \"lineDash\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], AreaSeries.prototype, \"lineDashOffset\", void 0);\n __decorate([\n Validate(STRING)\n ], AreaSeries.prototype, \"_xKey\", void 0);\n __decorate([\n Validate(STRING)\n ], AreaSeries.prototype, \"xName\", void 0);\n __decorate([\n Validate(STRING_ARRAY)\n ], AreaSeries.prototype, \"_yKeys\", void 0);\n __decorate([\n Validate(BOOLEAN_ARRAY)\n ], AreaSeries.prototype, \"_visibles\", void 0);\n __decorate([\n Validate(STRING_ARRAY)\n ], AreaSeries.prototype, \"yNames\", void 0);\n __decorate([\n Validate(OPT_NUMBER())\n ], AreaSeries.prototype, \"_normalizedTo\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], AreaSeries.prototype, \"strokeWidth\", void 0);\n return AreaSeries;\n}(CartesianSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Path, ScenePathChangeDetection } from './path';\nimport { BBox } from '../bbox';\nimport { Shape } from './shape';\nimport { Path2D } from '../path2D';\nvar Rect = /** @class */ (function (_super) {\n __extends(Rect, _super);\n function Rect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.borderPath = new Path2D();\n _this.x = 0;\n _this.y = 0;\n _this.width = 10;\n _this.height = 10;\n _this.radius = 0;\n /**\n * If `true`, the rect is aligned to the pixel grid for crisp looking lines.\n * Animated rects may not look nice with this option enabled, for example\n * when a rect is translated by a sub-pixel value on each frame.\n */\n _this.crisp = false;\n _this.lastUpdatePathStrokeWidth = Shape.defaultStyles.strokeWidth;\n _this.effectiveStrokeWidth = Shape.defaultStyles.strokeWidth;\n /**\n * When the rectangle's width or height is less than a pixel\n * and crisp mode is on, the rectangle will still fit into the pixel,\n * but will be less opaque to make an effect of holding less space.\n */\n _this.microPixelEffectOpacity = 1;\n return _this;\n }\n Rect.prototype.isDirtyPath = function () {\n var _a;\n if (this.lastUpdatePathStrokeWidth !== this.strokeWidth) {\n return true;\n }\n if (this.path.isDirty() || this.borderPath.isDirty() || ((_a = this.clipPath) === null || _a === void 0 ? void 0 : _a.isDirty())) {\n return true;\n }\n return false;\n };\n Rect.prototype.updatePath = function () {\n var _a, _b, _c;\n var _d = this, path = _d.path, borderPath = _d.borderPath, crisp = _d.crisp;\n var _e = this, x = _e.x, y = _e.y, w = _e.width, h = _e.height, strokeWidth = _e.strokeWidth;\n var pixelRatio = (_b = (_a = this.layerManager) === null || _a === void 0 ? void 0 : _a.canvas.pixelRatio) !== null && _b !== void 0 ? _b : 1;\n var pixelSize = 1 / pixelRatio;\n var microPixelEffectOpacity = 1;\n path.clear({ trackChanges: true });\n borderPath.clear({ trackChanges: true });\n if (crisp) {\n if (w <= pixelSize) {\n microPixelEffectOpacity *= w / pixelSize;\n }\n if (h <= pixelSize) {\n microPixelEffectOpacity *= h / pixelSize;\n }\n w = this.align(x, w);\n h = this.align(y, h);\n x = this.align(x);\n y = this.align(y);\n }\n if (strokeWidth) {\n if (w < pixelSize) {\n // Too narrow, draw a vertical stroke\n var lx = x + pixelSize / 2;\n borderPath.moveTo(lx, y);\n borderPath.lineTo(lx, y + h);\n strokeWidth = pixelSize;\n this.borderClipPath = undefined;\n }\n else if (h < pixelSize) {\n // Too narrow, draw a horizontal stroke\n var ly = y + pixelSize / 2;\n borderPath.moveTo(x, ly);\n borderPath.lineTo(x + w, ly);\n strokeWidth = pixelSize;\n this.borderClipPath = undefined;\n }\n else if (strokeWidth < w && strokeWidth < h) {\n var halfStrokeWidth = strokeWidth / 2;\n x += halfStrokeWidth;\n y += halfStrokeWidth;\n w -= strokeWidth;\n h -= strokeWidth;\n // Clipping not needed in this case; fill to center of stroke.\n this.borderClipPath = undefined;\n path.rect(x, y, w, h);\n borderPath.rect(x, y, w, h);\n }\n else {\n // Skip the fill and just render the stroke.\n this.borderClipPath = (_c = this.borderClipPath) !== null && _c !== void 0 ? _c : new Path2D();\n this.borderClipPath.clear({ trackChanges: true });\n this.borderClipPath.rect(x, y, w, h);\n borderPath.rect(x, y, w, h);\n }\n }\n else {\n // No borderPath needed, and thus no clipPath needed either. Fill to full extent of\n // Rect.\n this.borderClipPath = undefined;\n path.rect(x, y, w, h);\n }\n this.effectiveStrokeWidth = strokeWidth;\n this.lastUpdatePathStrokeWidth = strokeWidth;\n this.microPixelEffectOpacity = microPixelEffectOpacity;\n };\n Rect.prototype.computeBBox = function () {\n var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n return new BBox(x, y, width, height);\n };\n Rect.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return bbox.containsPoint(point.x, point.y);\n };\n Rect.prototype.applyFillAlpha = function (ctx) {\n var _a = this, fillOpacity = _a.fillOpacity, microPixelEffectOpacity = _a.microPixelEffectOpacity, opacity = _a.opacity;\n ctx.globalAlpha = opacity * fillOpacity * microPixelEffectOpacity;\n };\n Rect.prototype.renderStroke = function (ctx) {\n var _a = this, stroke = _a.stroke, effectiveStrokeWidth = _a.effectiveStrokeWidth, borderPath = _a.borderPath, borderClipPath = _a.borderClipPath, opacity = _a.opacity, microPixelEffectOpacity = _a.microPixelEffectOpacity;\n var borderActive = !!stroke && !!effectiveStrokeWidth;\n if (borderActive) {\n var _b = this, strokeOpacity = _b.strokeOpacity, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, lineCap = _b.lineCap, lineJoin = _b.lineJoin;\n if (borderClipPath) {\n // strokeWidth is larger than width or height, so use clipping to render correctly.\n // This is the simplest way to achieve the correct rendering due to nuances with ~0\n // width/height lines in Canvas operations.\n borderClipPath.draw(ctx);\n ctx.clip();\n }\n borderPath.draw(ctx);\n var globalAlpha = ctx.globalAlpha;\n ctx.strokeStyle = stroke;\n ctx.globalAlpha = globalAlpha * opacity * strokeOpacity * microPixelEffectOpacity;\n ctx.lineWidth = effectiveStrokeWidth;\n if (lineDash) {\n ctx.setLineDash(lineDash);\n }\n if (lineDashOffset) {\n ctx.lineDashOffset = lineDashOffset;\n }\n if (lineCap) {\n ctx.lineCap = lineCap;\n }\n if (lineJoin) {\n ctx.lineJoin = lineJoin;\n }\n ctx.stroke();\n ctx.globalAlpha = globalAlpha;\n }\n };\n Rect.className = 'Rect';\n __decorate([\n ScenePathChangeDetection()\n ], Rect.prototype, \"x\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Rect.prototype, \"y\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Rect.prototype, \"width\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Rect.prototype, \"height\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Rect.prototype, \"radius\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Rect.prototype, \"crisp\", void 0);\n return Rect;\n}(Path));\nexport { Rect };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Rect } from '../../../scene/shape/rect';\nimport { BandScale } from '../../../scale/bandScale';\nimport { SeriesTooltip, SeriesNodePickMode, keyProperty, valueProperty, sumProperties, } from '../series';\nimport { Label } from '../../label';\nimport { PointerEvents } from '../../../scene/node';\nimport { CartesianSeries, CartesianSeriesNodeClickEvent, CartesianSeriesNodeDoubleClickEvent, } from './cartesianSeries';\nimport { flipChartAxisDirection } from '../../chartAxis';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { extent } from '../../../util/array';\nimport { areArrayItemsStrictlyEqual } from '../../../util/equal';\nimport { sanitizeHtml } from '../../../util/sanitize';\nimport { isNumber } from '../../../util/value';\nimport { ContinuousScale } from '../../../scale/continuousScale';\nimport { BOOLEAN, BOOLEAN_ARRAY, NUMBER, OPT_FUNCTION, OPT_LINE_DASH, OPT_NUMBER, STRING, STRING_ARRAY, COLOR_STRING_ARRAY, Validate, OPTIONAL, } from '../../../util/validation';\nimport { CategoryAxis } from '../../axis/categoryAxis';\nimport { GroupedCategoryAxis } from '../../axis/groupedCategoryAxis';\nimport { LogAxis } from '../../axis/logAxis';\nimport { DataModel, SMALLEST_KEY_INTERVAL, SUM_VALUE_EXTENT } from '../../data/dataModel';\nvar BAR_LABEL_PLACEMENTS = ['inside', 'outside'];\nvar OPT_BAR_LABEL_PLACEMENT = function (v, ctx) {\n return OPTIONAL(v, ctx, function (v) { return BAR_LABEL_PLACEMENTS.includes(v); });\n};\nvar BarSeriesNodeTag;\n(function (BarSeriesNodeTag) {\n BarSeriesNodeTag[BarSeriesNodeTag[\"Bar\"] = 0] = \"Bar\";\n BarSeriesNodeTag[BarSeriesNodeTag[\"Label\"] = 1] = \"Label\";\n})(BarSeriesNodeTag || (BarSeriesNodeTag = {}));\nvar BarSeriesLabel = /** @class */ (function (_super) {\n __extends(BarSeriesLabel, _super);\n function BarSeriesLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.formatter = undefined;\n _this.placement = 'inside';\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], BarSeriesLabel.prototype, \"formatter\", void 0);\n __decorate([\n Validate(OPT_BAR_LABEL_PLACEMENT)\n ], BarSeriesLabel.prototype, \"placement\", void 0);\n return BarSeriesLabel;\n}(Label));\nvar BarSeriesTooltip = /** @class */ (function (_super) {\n __extends(BarSeriesTooltip, _super);\n function BarSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], BarSeriesTooltip.prototype, \"renderer\", void 0);\n return BarSeriesTooltip;\n}(SeriesTooltip));\nfunction is2dArray(array) {\n return array.length > 0 && Array.isArray(array[0]);\n}\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n var _a;\n var _this = _super.call(this, {\n pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH],\n pathsPerSeries: 0,\n directionKeys: (_a = {},\n _a[ChartAxisDirection.X] = ['xKey'],\n _a[ChartAxisDirection.Y] = ['yKeys'],\n _a),\n }) || this;\n _this.label = new BarSeriesLabel();\n _this.tooltip = new BarSeriesTooltip();\n _this.flipXY = false;\n _this.fills = ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'];\n _this.strokes = ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'];\n _this.fillOpacity = 1;\n _this.strokeOpacity = 1;\n _this.lineDash = [0];\n _this.lineDashOffset = 0;\n _this.formatter = undefined;\n /**\n * Used to get the position of bars within each group.\n */\n _this.groupScale = new BandScale();\n _this._xKey = '';\n _this.xName = '';\n _this.cumYKeyCount = [];\n _this.flatYKeys = undefined; // only set when a user used a flat array for yKeys\n _this.hideInLegend = [];\n _this.yKeys = [];\n _this.yKeysCache = [];\n _this.visibles = [];\n _this._grouped = false;\n _this.stackGroups = {};\n /**\n * A map of `yKeys` to their names (used in legends and tooltips).\n * For example, if a key is `product_name` it's name can be a more presentable `Product Name`.\n */\n _this.yNames = {};\n _this.strokeWidth = 1;\n _this.shadow = undefined;\n _this.smallestDataInterval = undefined;\n _this.label.enabled = false;\n return _this;\n }\n BarSeries.prototype.resolveKeyDirection = function (direction) {\n return this.flipXY ? flipChartAxisDirection(direction) : direction;\n };\n Object.defineProperty(BarSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n this._xKey = value;\n this.processedData = undefined;\n },\n enumerable: false,\n configurable: true\n });\n BarSeries.prototype.processYKeys = function () {\n var _this = this;\n var yKeys = this.yKeys;\n var flatYKeys = undefined;\n // Convert from flat y-keys to grouped y-keys.\n if (!is2dArray(yKeys)) {\n flatYKeys = yKeys;\n yKeys = this.grouped ? flatYKeys.map(function (k) { return [k]; }) : [flatYKeys];\n }\n var stackGroups = Object.values(this.stackGroups);\n if (stackGroups.length > 0) {\n var flattenKeys = function (keys) { return keys.reduce(function (res, k) { return res.concat(k); }, []); };\n // Create a stack for items without a group\n var flatKeys_1 = flattenKeys(yKeys);\n var keysInStacks_1 = new Set(flattenKeys(stackGroups));\n var ungroupedKeys = flatKeys_1.filter(function (k) { return !keysInStacks_1.has(k); });\n yKeys = stackGroups.map(function (keys) { return keys; });\n if (ungroupedKeys.length > 0) {\n yKeys.push(ungroupedKeys);\n }\n // Preserve the order of colours and other properties\n var indexMap = function (items) {\n return items.reduce(function (map, key, index) { return map.set(key, index); }, new Map());\n };\n var newKeys = flattenKeys(yKeys);\n var newKeysIndices_1 = indexMap(newKeys);\n var sort = function (items) {\n var result = Array.from({ length: items.length });\n items.forEach(function (item, index) {\n var key = flatKeys_1[index];\n var newIndex = newKeysIndices_1.get(key);\n result[newIndex] = item;\n });\n return result;\n };\n this.fills = sort(this.fills);\n this.strokes = sort(this.strokes);\n this.visibles = sort(this.visibles);\n }\n if (!areArrayItemsStrictlyEqual(this.yKeysCache, yKeys)) {\n this.flatYKeys = flatYKeys ? flatYKeys : undefined;\n this.yKeys = yKeys;\n var prevYKeyCount_1 = 0;\n this.cumYKeyCount = [];\n var visibleStacks_1 = [];\n yKeys.forEach(function (stack, index) {\n if (stack.length > 0) {\n visibleStacks_1.push(String(index));\n }\n _this.cumYKeyCount.push(prevYKeyCount_1);\n prevYKeyCount_1 += stack.length;\n });\n this.processSeriesItemEnabled();\n var groupScale = this.groupScale;\n groupScale.domain = visibleStacks_1;\n }\n this.yKeysCache = yKeys;\n };\n BarSeries.prototype.processSeriesItemEnabled = function () {\n var seriesItemEnabled = this.seriesItemEnabled;\n var flattenFn = function (r, n) { return r.concat.apply(r, __spread((Array.isArray(n) ? n : [n]))); };\n var visibles = this.visibles.reduce(flattenFn, []);\n seriesItemEnabled.clear();\n var visiblesIdx = 0;\n this.yKeys.forEach(function (stack) {\n stack.forEach(function (yKey) { var _a; return seriesItemEnabled.set(yKey, (_a = visibles[visiblesIdx++]) !== null && _a !== void 0 ? _a : true); });\n });\n };\n Object.defineProperty(BarSeries.prototype, \"grouped\", {\n get: function () {\n return this._grouped;\n },\n set: function (value) {\n this._grouped = value;\n },\n enumerable: false,\n configurable: true\n });\n BarSeries.prototype.getStackGroup = function (yKey) {\n var _a;\n var stackGroups = this.stackGroups;\n return (_a = Object.entries(stackGroups).find(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], keys = _b[1];\n return keys.includes(yKey);\n })) === null || _a === void 0 ? void 0 : _a[0];\n };\n BarSeries.prototype.processYNames = function () {\n var values = this.yNames;\n if (Array.isArray(values) && this.flatYKeys) {\n var map_1 = {};\n this.flatYKeys.forEach(function (k, i) {\n map_1[k] = values[i];\n });\n this.yNames = map_1;\n }\n };\n Object.defineProperty(BarSeries.prototype, \"normalizedTo\", {\n get: function () {\n return this._normalizedTo;\n },\n set: function (value) {\n var absValue = value ? Math.abs(value) : undefined;\n this._normalizedTo = absValue;\n },\n enumerable: false,\n configurable: true\n });\n BarSeries.prototype.processData = function () {\n var _a, _b, _c, _d, _e;\n return __awaiter(this, void 0, void 0, function () {\n var _f, xKey, seriesItemEnabled, normalizedTo, _g, data, isContinuousX, isContinuousY, activeSeriesItems, activeStacks, normaliseTo;\n return __generator(this, function (_h) {\n this.processYKeys();\n this.processYNames();\n _f = this, xKey = _f.xKey, seriesItemEnabled = _f.seriesItemEnabled, normalizedTo = _f.normalizedTo, _g = _f.data, data = _g === void 0 ? [] : _g;\n isContinuousX = ((_a = this.getCategoryAxis()) === null || _a === void 0 ? void 0 : _a.scale) instanceof ContinuousScale;\n isContinuousY = ((_b = this.getValueAxis()) === null || _b === void 0 ? void 0 : _b.scale) instanceof ContinuousScale;\n activeSeriesItems = __spread(seriesItemEnabled.entries()).filter(function (_a) {\n var _b = __read(_a, 2), enabled = _b[1];\n return enabled;\n })\n .map(function (_a) {\n var _b = __read(_a, 1), yKey = _b[0];\n return yKey;\n });\n activeStacks = this.yKeys\n .map(function (stack) { return stack.filter(function (key) { return seriesItemEnabled.get(key); }); })\n .filter(function (stack) { return stack.length > 0; });\n normaliseTo = normalizedTo && isFinite(normalizedTo) ? normalizedTo : undefined;\n this.dataModel = new DataModel({\n props: __spread([\n keyProperty(xKey, isContinuousX)\n ], activeSeriesItems.map(function (yKey) { return valueProperty(yKey, isContinuousY, { invalidValue: null }); }), activeStacks.map(function (stack) { return sumProperties(stack); }), (isContinuousX ? [SMALLEST_KEY_INTERVAL] : []), [\n SUM_VALUE_EXTENT,\n ]),\n groupByKeys: true,\n dataVisible: this.visible && activeSeriesItems.length > 0,\n normaliseTo: normaliseTo,\n });\n this.processedData = this.dataModel.processData(data);\n this.smallestDataInterval = {\n x: (_e = (_d = (_c = this.processedData) === null || _c === void 0 ? void 0 : _c.reduced) === null || _d === void 0 ? void 0 : _d[SMALLEST_KEY_INTERVAL.property]) !== null && _e !== void 0 ? _e : Infinity,\n y: Infinity,\n };\n return [2 /*return*/];\n });\n });\n };\n BarSeries.prototype.getDomain = function (direction) {\n var _a = this, flipXY = _a.flipXY, processedData = _a.processedData;\n if (!processedData)\n return [];\n if (flipXY) {\n direction = flipChartAxisDirection(direction);\n }\n var _b = processedData, _c = __read(_b.defs.keys, 1), keyDef = _c[0], _d = _b.domain, _e = __read(_d.keys, 1), keys = _e[0], _f = __read(_d.values, 1), yExtent = _f[0], _g = _b.reduced, _h = _g === void 0 ? {} : _g, _j = SMALLEST_KEY_INTERVAL.property, smallestX = _h[_j], _k = SUM_VALUE_EXTENT.property, ySumExtent = _h[_k];\n if (direction === ChartAxisDirection.X) {\n if (keyDef.valueType === 'category') {\n return keys;\n }\n var keysExtent = extent(keys) || [NaN, NaN];\n if (flipXY) {\n return [keysExtent[0] + -smallestX, keysExtent[1]];\n }\n return [keysExtent[0], keysExtent[1] + smallestX];\n }\n else if (this.getValueAxis() instanceof LogAxis) {\n return this.fixNumericExtent(yExtent);\n }\n else {\n return this.fixNumericExtent(ySumExtent);\n }\n };\n BarSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new CartesianSeriesNodeClickEvent(this.xKey, datum.yKey, event, datum, this);\n };\n BarSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new CartesianSeriesNodeDoubleClickEvent(this.xKey, datum.yKey, event, datum, this);\n };\n BarSeries.prototype.getCategoryAxis = function () {\n return this.flipXY ? this.yAxis : this.xAxis;\n };\n BarSeries.prototype.getValueAxis = function () {\n return this.flipXY ? this.xAxis : this.yAxis;\n };\n BarSeries.prototype.calculateStep = function (range) {\n var _a;\n var smallestInterval = this.smallestDataInterval;\n var xAxis = this.getCategoryAxis();\n if (!xAxis) {\n return;\n }\n // calculate step\n var domainLength = xAxis.dataDomain[1] - xAxis.dataDomain[0];\n var intervals = domainLength / ((_a = smallestInterval === null || smallestInterval === void 0 ? void 0 : smallestInterval.x) !== null && _a !== void 0 ? _a : 1) + 1;\n // The number of intervals/bands is used to determine the width of individual bands by dividing the available range.\n // Allow a maximum number of bands to ensure the step does not fall below 1 pixel.\n // This means there could be some overlap of the bands in the chart.\n var maxBands = Math.floor(range); // A minimum of 1px per bar/column means the maximum number of bands will equal the available range\n var bands = Math.min(intervals, maxBands);\n var step = range / Math.max(1, bands);\n return step;\n };\n BarSeries.prototype.createNodeData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, data, visible, xAxis, yAxis, xScale, yScale, _b, groupScale, yKeys, xKey, cumYKeyCount, fills, strokes, strokeWidth, seriesItemEnabled, label, flipXY, seriesId, processedData, labelFontStyle, labelFontWeight, labelFontSize, labelFontFamily, labelColor, labelFormatter, labelPlacement, xBandWidth, availableRange, step, barWidth, contexts;\n var _this = this;\n return __generator(this, function (_c) {\n _a = this, data = _a.data, visible = _a.visible;\n xAxis = this.getCategoryAxis();\n yAxis = this.getValueAxis();\n if (!(data && visible && xAxis && yAxis)) {\n return [2 /*return*/, []];\n }\n xScale = xAxis.scale;\n yScale = yAxis.scale;\n _b = this, groupScale = _b.groupScale, yKeys = _b.yKeys, xKey = _b.xKey, cumYKeyCount = _b.cumYKeyCount, fills = _b.fills, strokes = _b.strokes, strokeWidth = _b.strokeWidth, seriesItemEnabled = _b.seriesItemEnabled, label = _b.label, flipXY = _b.flipXY, seriesId = _b.id, processedData = _b.processedData;\n labelFontStyle = label.fontStyle, labelFontWeight = label.fontWeight, labelFontSize = label.fontSize, labelFontFamily = label.fontFamily, labelColor = label.color, labelFormatter = label.formatter, labelPlacement = label.placement;\n xBandWidth = xScale.bandwidth;\n if (xScale instanceof ContinuousScale) {\n availableRange = Math.max(xAxis.range[0], xAxis.range[1]);\n step = this.calculateStep(availableRange);\n xBandWidth = step;\n }\n groupScale.range = [0, xBandWidth];\n if (xAxis instanceof CategoryAxis) {\n groupScale.padding = xAxis.groupPaddingInner;\n }\n else if (xAxis instanceof GroupedCategoryAxis) {\n groupScale.padding = 0.1;\n }\n else {\n // Number or Time axis\n groupScale.padding = 0;\n }\n // To get exactly `0` padding we need to turn off rounding\n if (groupScale.padding === 0) {\n groupScale.round = false;\n }\n else {\n groupScale.round = true;\n }\n barWidth = groupScale.bandwidth >= 1\n ? // Pixel-rounded value for low-volume bar charts.\n groupScale.bandwidth\n : // Handle high-volume bar charts gracefully.\n groupScale.rawBandwidth;\n contexts = [];\n processedData === null || processedData === void 0 ? void 0 : processedData.data.forEach(function (_a, dataIndex) {\n var _b, _c, _d, _e, _f;\n var _g;\n var keys = _a.keys, seriesDatum = _a.datum, values = _a.values;\n var x = xScale.convert(keys[0]);\n for (var stackIndex = 0; stackIndex < ((_b = yKeys === null || yKeys === void 0 ? void 0 : yKeys.length) !== null && _b !== void 0 ? _b : 0); stackIndex++) {\n var stackYKeys = (_c = yKeys === null || yKeys === void 0 ? void 0 : yKeys[stackIndex]) !== null && _c !== void 0 ? _c : []; // y-data for a stack within a group\n (_d = contexts[stackIndex]) !== null && _d !== void 0 ? _d : (contexts[stackIndex] = []);\n var prevMinY = 0;\n var prevMaxY = 0;\n for (var levelIndex = 0; levelIndex < stackYKeys.length; levelIndex++) {\n var yKey = stackYKeys[levelIndex];\n var yIndex = (_e = processedData === null || processedData === void 0 ? void 0 : processedData.indices.values[yKey]) !== null && _e !== void 0 ? _e : -1;\n (_f = (_g = contexts[stackIndex])[levelIndex]) !== null && _f !== void 0 ? _f : (_g[levelIndex] = {\n itemId: yKey,\n nodeData: [],\n labelData: [],\n });\n if (yIndex === undefined)\n continue;\n var yValue = values[0][yIndex];\n var currY = +yValue;\n var barX = x + groupScale.convert(String(stackIndex));\n // Bars outside of visible range are not rendered, so we create node data\n // only for the visible subset of user data.\n if (!xAxis.inRange(barX, barWidth)) {\n continue;\n }\n if (isNaN(currY)) {\n continue;\n }\n var prevY = currY < 0 ? prevMinY : prevMaxY;\n var y = yScale.convert(prevY + currY, { strict: false });\n var bottomY = yScale.convert(prevY, { strict: false });\n var labelText = void 0;\n if (labelFormatter) {\n labelText = labelFormatter({\n value: isNumber(yValue) ? yValue : undefined,\n seriesId: seriesId,\n });\n }\n else {\n labelText = isNumber(yValue) ? yValue.toFixed(2) : '';\n }\n var labelX = void 0;\n var labelY = void 0;\n if (flipXY) {\n labelY = barX + barWidth / 2;\n if (labelPlacement === 'inside') {\n labelX = y + ((yValue >= 0 ? -1 : 1) * Math.abs(bottomY - y)) / 2;\n }\n else {\n labelX = y + (yValue >= 0 ? 1 : -1) * 4;\n }\n }\n else {\n labelX = barX + barWidth / 2;\n if (labelPlacement === 'inside') {\n labelY = y + ((yValue >= 0 ? 1 : -1) * Math.abs(bottomY - y)) / 2;\n }\n else {\n labelY = y + (yValue >= 0 ? -3 : 4);\n }\n }\n var labelTextAlign = void 0;\n var labelTextBaseline = void 0;\n if (labelPlacement === 'inside') {\n labelTextAlign = 'center';\n labelTextBaseline = 'middle';\n }\n else {\n labelTextAlign = flipXY ? (yValue >= 0 ? 'start' : 'end') : 'center';\n labelTextBaseline = flipXY ? 'middle' : yValue >= 0 ? 'bottom' : 'top';\n }\n var colorIndex = cumYKeyCount[stackIndex] + levelIndex;\n var rect = {\n x: flipXY ? Math.min(y, bottomY) : barX,\n y: flipXY ? barX : Math.min(y, bottomY),\n width: flipXY ? Math.abs(bottomY - y) : barWidth,\n height: flipXY ? barWidth : Math.abs(bottomY - y),\n };\n var nodeMidPoint = {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2,\n };\n var nodeData = {\n index: dataIndex,\n series: _this,\n itemId: yKey,\n datum: seriesDatum[0],\n cumulativeValue: prevY + currY,\n yValue: yValue,\n yKey: yKey,\n xKey: xKey,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n nodeMidPoint: nodeMidPoint,\n colorIndex: colorIndex,\n fill: fills[colorIndex % fills.length],\n stroke: strokes[colorIndex % strokes.length],\n strokeWidth: strokeWidth,\n label: seriesItemEnabled.get(yKey) && labelText\n ? {\n text: labelText,\n fontStyle: labelFontStyle,\n fontWeight: labelFontWeight,\n fontSize: labelFontSize,\n fontFamily: labelFontFamily,\n textAlign: labelTextAlign,\n textBaseline: labelTextBaseline,\n fill: labelColor,\n x: labelX,\n y: labelY,\n }\n : undefined,\n };\n contexts[stackIndex][levelIndex].nodeData.push(nodeData);\n contexts[stackIndex][levelIndex].labelData.push(nodeData);\n if (currY < 0) {\n prevMinY += currY;\n }\n else {\n prevMaxY += currY;\n }\n }\n }\n });\n return [2 /*return*/, contexts.reduce(function (r, n) { return r.concat.apply(r, __spread(n)); }, [])];\n });\n });\n };\n BarSeries.prototype.nodeFactory = function () {\n return new Rect();\n };\n BarSeries.prototype.updateDatumSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var nodeData, datumSelection;\n return __generator(this, function (_a) {\n nodeData = opts.nodeData, datumSelection = opts.datumSelection;\n return [2 /*return*/, datumSelection.update(nodeData, function (rect) { return (rect.tag = BarSeriesNodeTag.Bar); })];\n });\n });\n };\n BarSeries.prototype.updateDatumNodes = function (opts) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var datumSelection, isDatumHighlighted, _c, fills, strokes, seriesFillOpacity, strokeOpacity, shadow, formatter, xKey, flipXY, _d, highlightedFill, _e, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, seriesId, _f, visibleMin, visibleMax, isZoomed, crisp;\n var _this = this;\n return __generator(this, function (_g) {\n datumSelection = opts.datumSelection, isDatumHighlighted = opts.isHighlight;\n _c = this, fills = _c.fills, strokes = _c.strokes, seriesFillOpacity = _c.fillOpacity, strokeOpacity = _c.strokeOpacity, shadow = _c.shadow, formatter = _c.formatter, xKey = _c.xKey, flipXY = _c.flipXY, _d = _c.highlightStyle.item, highlightedFill = _d.fill, _e = _d.fillOpacity, highlightFillOpacity = _e === void 0 ? seriesFillOpacity : _e, highlightedStroke = _d.stroke, highlightedDatumStrokeWidth = _d.strokeWidth, seriesId = _c.id;\n _f = __read((_b = (_a = this.xAxis) === null || _a === void 0 ? void 0 : _a.visibleRange) !== null && _b !== void 0 ? _b : [], 2), visibleMin = _f[0], visibleMax = _f[1];\n isZoomed = visibleMin !== 0 || visibleMax !== 1;\n crisp = !isZoomed;\n datumSelection.each(function (rect, datum) {\n var colorIndex = datum.colorIndex;\n var fill = isDatumHighlighted && highlightedFill !== undefined\n ? highlightedFill\n : fills[colorIndex % fills.length];\n var stroke = isDatumHighlighted && highlightedStroke !== undefined\n ? highlightedStroke\n : strokes[colorIndex % fills.length];\n var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n ? highlightedDatumStrokeWidth\n : _this.getStrokeWidth(_this.strokeWidth, datum);\n var fillOpacity = isDatumHighlighted ? highlightFillOpacity : seriesFillOpacity;\n var stackGroup = _this.getStackGroup(datum.yKey);\n var format = undefined;\n if (formatter) {\n format = formatter({\n datum: datum.datum,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n highlighted: isDatumHighlighted,\n xKey: xKey,\n yKey: datum.yKey,\n seriesId: seriesId,\n stackGroup: stackGroup,\n });\n }\n rect.crisp = crisp;\n rect.x = datum.x;\n rect.y = datum.y;\n rect.width = datum.width;\n rect.height = datum.height;\n rect.fill = (format && format.fill) || fill;\n rect.stroke = (format && format.stroke) || stroke;\n rect.strokeWidth = format && format.strokeWidth !== undefined ? format.strokeWidth : strokeWidth;\n rect.fillOpacity = fillOpacity;\n rect.strokeOpacity = strokeOpacity;\n rect.lineDash = _this.lineDash;\n rect.lineDashOffset = _this.lineDashOffset;\n rect.fillShadow = shadow;\n // Prevent stroke from rendering for zero height columns and zero width bars.\n rect.visible = flipXY ? datum.width > 0 : datum.height > 0;\n });\n return [2 /*return*/];\n });\n });\n };\n BarSeries.prototype.updateLabelSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelData, labelSelection, enabled, data;\n return __generator(this, function (_a) {\n labelData = opts.labelData, labelSelection = opts.labelSelection;\n enabled = this.label.enabled;\n data = enabled ? labelData : [];\n return [2 /*return*/, labelSelection.update(data, function (text) {\n text.tag = BarSeriesNodeTag.Label;\n text.pointerEvents = PointerEvents.None;\n })];\n });\n });\n };\n BarSeries.prototype.updateLabelNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelSelection, _a, labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color;\n return __generator(this, function (_b) {\n labelSelection = opts.labelSelection;\n _a = this.label, labelEnabled = _a.enabled, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontSize = _a.fontSize, fontFamily = _a.fontFamily, color = _a.color;\n labelSelection.each(function (text, datum) {\n var label = datum.label;\n if (label && labelEnabled) {\n text.fontStyle = fontStyle;\n text.fontWeight = fontWeight;\n text.fontSize = fontSize;\n text.fontFamily = fontFamily;\n text.textAlign = label.textAlign;\n text.textBaseline = label.textBaseline;\n text.text = label.text;\n text.x = label.x;\n text.y = label.y;\n text.fill = color;\n text.visible = true;\n }\n else {\n text.visible = false;\n }\n });\n return [2 /*return*/];\n });\n });\n };\n BarSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a = this, xKey = _a.xKey, yKeys = _a.yKeys, processedData = _a.processedData;\n var xAxis = this.getCategoryAxis();\n var yAxis = this.getValueAxis();\n var yKey = nodeDatum.yKey;\n if (!processedData || !xKey || !yKey || !xAxis || !yAxis) {\n return '';\n }\n var fillIndex = 0;\n var i = 0;\n var j = 0;\n for (; j < yKeys.length; j++) {\n var stack = yKeys[j];\n i = stack.indexOf(yKey);\n if (i >= 0) {\n fillIndex += i;\n break;\n }\n fillIndex += stack.length;\n }\n var _b = this, xName = _b.xName, yNames = _b.yNames, fills = _b.fills, strokes = _b.strokes, tooltip = _b.tooltip, formatter = _b.formatter, seriesId = _b.id;\n var tooltipRenderer = tooltip.renderer;\n var datum = nodeDatum.datum;\n var yName = yNames[yKey];\n var stackGroup = this.getStackGroup(yKey);\n var fill = fills[fillIndex % fills.length];\n var stroke = strokes[fillIndex % fills.length];\n var strokeWidth = this.getStrokeWidth(this.strokeWidth);\n var xValue = datum[xKey];\n var yValue = datum[yKey];\n var xString = sanitizeHtml(xAxis.formatDatum(xValue));\n var yString = sanitizeHtml(yAxis.formatDatum(yValue));\n var title = sanitizeHtml(yName);\n var content = xString + ': ' + yString;\n var format = undefined;\n if (formatter) {\n format = formatter({\n datum: datum,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n highlighted: false,\n xKey: xKey,\n yKey: yKey,\n seriesId: seriesId,\n stackGroup: stackGroup,\n });\n }\n var color = (format && format.fill) || fill;\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer({\n datum: datum,\n xKey: xKey,\n xValue: xValue,\n xName: xName,\n yKey: yKey,\n yValue: yValue,\n yName: yName,\n color: color,\n title: title,\n seriesId: seriesId,\n stackGroup: stackGroup,\n }), defaults);\n }\n return toTooltipHtml(defaults);\n };\n BarSeries.prototype.getLegendData = function () {\n var _a = this, id = _a.id, data = _a.data, xKey = _a.xKey, yKeys = _a.yKeys, yNames = _a.yNames, cumYKeyCount = _a.cumYKeyCount, seriesItemEnabled = _a.seriesItemEnabled, hideInLegend = _a.hideInLegend, fills = _a.fills, strokes = _a.strokes, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity, flipXY = _a.flipXY;\n if (!data || !data.length || !xKey || !yKeys.length) {\n return [];\n }\n var legendData = [];\n this.yKeys.forEach(function (stack, stackIndex) {\n // Column stacks should be listed in the legend in reverse order, for symmetry with the\n // vertical stack display order. Bar stacks are already consistent left-to-right with\n // the legend.\n var startLevel = flipXY ? 0 : stack.length - 1;\n var direction = flipXY ? 1 : -1;\n for (var levelIndex = startLevel, step = 0; step < stack.length; levelIndex += direction, step++) {\n var yKey = stack[levelIndex];\n if (hideInLegend.indexOf(yKey) >= 0) {\n return;\n }\n var colorIndex = cumYKeyCount[stackIndex] + levelIndex;\n legendData.push({\n id: id,\n itemId: yKey,\n seriesId: id,\n enabled: seriesItemEnabled.get(yKey) || false,\n label: {\n text: yNames[yKey] || yKey,\n },\n marker: {\n fill: fills[colorIndex % fills.length],\n stroke: strokes[colorIndex % strokes.length],\n fillOpacity: fillOpacity,\n strokeOpacity: strokeOpacity,\n },\n });\n }\n });\n return legendData;\n };\n BarSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n _super.prototype.toggleSeriesItem.call(this, itemId, enabled);\n var yKeys = this.yKeys.map(function (stack) { return stack.slice(); }); // deep clone\n this.seriesItemEnabled.forEach(function (enabled, yKey) {\n if (!enabled) {\n yKeys.forEach(function (stack) {\n var index = stack.indexOf(yKey);\n if (index >= 0) {\n stack.splice(index, 1);\n }\n });\n }\n });\n var visibleStacks = [];\n yKeys.forEach(function (stack, index) {\n if (stack.length > 0) {\n visibleStacks.push(String(index));\n }\n });\n this.groupScale.domain = visibleStacks;\n this.nodeDataRefresh = true;\n };\n BarSeries.prototype.isLabelEnabled = function () {\n return this.label.enabled;\n };\n BarSeries.prototype.getBandScalePadding = function () {\n return { inner: 0.2, outer: 0.3 };\n };\n BarSeries.className = 'BarSeries';\n BarSeries.type = 'bar';\n __decorate([\n Validate(BOOLEAN)\n ], BarSeries.prototype, \"flipXY\", void 0);\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], BarSeries.prototype, \"fills\", void 0);\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], BarSeries.prototype, \"strokes\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], BarSeries.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], BarSeries.prototype, \"strokeOpacity\", void 0);\n __decorate([\n Validate(OPT_LINE_DASH)\n ], BarSeries.prototype, \"lineDash\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], BarSeries.prototype, \"lineDashOffset\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], BarSeries.prototype, \"formatter\", void 0);\n __decorate([\n Validate(STRING)\n ], BarSeries.prototype, \"_xKey\", void 0);\n __decorate([\n Validate(STRING)\n ], BarSeries.prototype, \"xName\", void 0);\n __decorate([\n Validate(STRING_ARRAY)\n ], BarSeries.prototype, \"hideInLegend\", void 0);\n __decorate([\n Validate(BOOLEAN_ARRAY)\n ], BarSeries.prototype, \"visibles\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], BarSeries.prototype, \"_grouped\", void 0);\n __decorate([\n Validate(OPT_NUMBER())\n ], BarSeries.prototype, \"_normalizedTo\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], BarSeries.prototype, \"strokeWidth\", void 0);\n return BarSeries;\n}(CartesianSeries));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Rect } from '../../../scene/shape/rect';\nimport { SeriesTooltip, Series, SeriesNodePickMode } from '../series';\nimport { Label } from '../../label';\nimport { PointerEvents } from '../../../scene/node';\nimport { CartesianSeries, CartesianSeriesNodeClickEvent, CartesianSeriesNodeDoubleClickEvent, } from './cartesianSeries';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { extent } from '../../../util/array';\nimport ticks, { tickStep } from '../../../util/ticks';\nimport { sanitizeHtml } from '../../../util/sanitize';\nimport { BOOLEAN, NUMBER, OPT_ARRAY, OPT_FUNCTION, OPT_LINE_DASH, OPT_NUMBER, OPT_COLOR_STRING, STRING, Validate, predicateWithMessage, } from '../../../util/validation';\nvar HISTOGRAM_AGGREGATIONS = ['count', 'sum', 'mean'];\nvar HISTOGRAM_AGGREGATION = predicateWithMessage(function (v) { return HISTOGRAM_AGGREGATIONS.includes(v); }, \"expecting a histogram aggregation keyword such as 'count', 'sum' or 'mean\");\nvar HistogramSeriesNodeTag;\n(function (HistogramSeriesNodeTag) {\n HistogramSeriesNodeTag[HistogramSeriesNodeTag[\"Bin\"] = 0] = \"Bin\";\n HistogramSeriesNodeTag[HistogramSeriesNodeTag[\"Label\"] = 1] = \"Label\";\n})(HistogramSeriesNodeTag || (HistogramSeriesNodeTag = {}));\nvar HistogramSeriesLabel = /** @class */ (function (_super) {\n __extends(HistogramSeriesLabel, _super);\n function HistogramSeriesLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.formatter = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], HistogramSeriesLabel.prototype, \"formatter\", void 0);\n return HistogramSeriesLabel;\n}(Label));\nvar defaultBinCount = 10;\nvar aggregationFunctions = {\n count: function (bin) { return bin.data.length; },\n sum: function (bin, yKey) { return bin.data.reduce(function (acc, datum) { return acc + datum[yKey]; }, 0); },\n mean: function (bin, yKey) { return aggregationFunctions.sum(bin, yKey) / aggregationFunctions.count(bin, yKey); },\n};\nvar HistogramBin = /** @class */ (function () {\n function HistogramBin(_a) {\n var _b = __read(_a, 2), domainMin = _b[0], domainMax = _b[1];\n this.data = [];\n this.aggregatedValue = 0;\n this.frequency = 0;\n this.domain = [domainMin, domainMax];\n }\n HistogramBin.prototype.addDatum = function (datum) {\n this.data.push(datum);\n this.frequency++;\n };\n Object.defineProperty(HistogramBin.prototype, \"domainWidth\", {\n get: function () {\n var _a = __read(this.domain, 2), domainMin = _a[0], domainMax = _a[1];\n return domainMax - domainMin;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HistogramBin.prototype, \"relativeHeight\", {\n get: function () {\n return this.aggregatedValue / this.domainWidth;\n },\n enumerable: false,\n configurable: true\n });\n HistogramBin.prototype.calculateAggregatedValue = function (aggregationName, yKey) {\n if (!yKey) {\n // not having a yKey forces us into a frequency plot\n aggregationName = 'count';\n }\n var aggregationFunction = aggregationFunctions[aggregationName];\n this.aggregatedValue = aggregationFunction(this, yKey);\n };\n HistogramBin.prototype.getY = function (areaPlot) {\n return areaPlot ? this.relativeHeight : this.aggregatedValue;\n };\n return HistogramBin;\n}());\nvar HistogramSeriesTooltip = /** @class */ (function (_super) {\n __extends(HistogramSeriesTooltip, _super);\n function HistogramSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], HistogramSeriesTooltip.prototype, \"renderer\", void 0);\n return HistogramSeriesTooltip;\n}(SeriesTooltip));\nvar HistogramSeries = /** @class */ (function (_super) {\n __extends(HistogramSeries, _super);\n function HistogramSeries() {\n var _this = _super.call(this, { pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH] }) || this;\n _this.binnedData = [];\n _this.xDomain = [];\n _this.yDomain = [];\n _this.label = new HistogramSeriesLabel();\n _this.tooltip = new HistogramSeriesTooltip();\n _this.fill = undefined;\n _this.stroke = undefined;\n _this.fillOpacity = 1;\n _this.strokeOpacity = 1;\n _this.lineDash = [0];\n _this.lineDashOffset = 0;\n _this.xKey = '';\n _this.areaPlot = false;\n _this.bins = undefined;\n _this.aggregation = 'count';\n _this.binCount = undefined;\n _this.xName = '';\n _this.yKey = '';\n _this.yName = '';\n _this.strokeWidth = 1;\n _this.shadow = undefined;\n _this.label.enabled = false;\n return _this;\n }\n // During processData phase, used to unify different ways of the user specifying\n // the bins. Returns bins in format[[min1, max1], [min2, max2], ... ].\n HistogramSeries.prototype.deriveBins = function () {\n var _this = this;\n var bins = this.bins;\n if (!this.data) {\n return [];\n }\n var xData = this.data.map(function (datum) { return datum[_this.xKey]; });\n var xDomain = this.fixNumericExtent(extent(xData));\n if (this.binCount === undefined) {\n if (bins) {\n return bins;\n }\n var binStarts = ticks(xDomain[0], xDomain[1], defaultBinCount);\n var binSize_1 = tickStep(xDomain[0], xDomain[1], defaultBinCount);\n var firstBinEnd = binStarts[0];\n var expandStartToBin = function (n) { return [n, n + binSize_1]; };\n return __spread([[firstBinEnd - binSize_1, firstBinEnd]], binStarts.map(expandStartToBin));\n }\n else {\n return this.calculateNiceBins(xDomain, this.binCount);\n }\n };\n HistogramSeries.prototype.calculateNiceBins = function (domain, binCount) {\n var startGuess = Math.floor(domain[0]);\n var stop = domain[1];\n var segments = binCount || 1;\n var _a = this.calculateNiceStart(startGuess, stop, segments), start = _a.start, binSize = _a.binSize;\n return this.getBins(start, stop, binSize, segments);\n };\n HistogramSeries.prototype.getBins = function (start, stop, step, count) {\n var bins = [];\n for (var i = 0; i < count; i++) {\n var a = Math.round((start + i * step) * 10) / 10;\n var b = Math.round((start + (i + 1) * step) * 10) / 10;\n if (i === count - 1) {\n b = Math.max(b, stop);\n }\n bins[i] = [a, b];\n }\n return bins;\n };\n HistogramSeries.prototype.calculateNiceStart = function (a, b, segments) {\n var binSize = Math.abs(b - a) / segments;\n var order = Math.floor(Math.log10(binSize));\n var magnitude = Math.pow(10, order);\n var start = Math.floor(a / magnitude) * magnitude;\n return {\n start: start,\n binSize: binSize,\n };\n };\n HistogramSeries.prototype.placeDataInBins = function (data) {\n var _this = this;\n var xKey = this.xKey;\n var derivedBins = this.deriveBins();\n this.bins = derivedBins;\n // creating a sorted copy allows binning in O(n) rather than O(n²)\n // but at the expense of more temporary memory\n var sortedData = data.slice().sort(function (a, b) {\n if (a[xKey] < b[xKey]) {\n return -1;\n }\n if (a[xKey] > b[xKey]) {\n return 1;\n }\n return 0;\n });\n var bins = [new HistogramBin(derivedBins[0])];\n var currentBin = 0;\n for (var i = 0; i < sortedData.length && currentBin < derivedBins.length; i++) {\n var datum = sortedData[i];\n while (datum[xKey] > derivedBins[currentBin][1] && currentBin < derivedBins.length) {\n currentBin++;\n bins.push(new HistogramBin(derivedBins[currentBin]));\n }\n if (currentBin < derivedBins.length) {\n bins[currentBin].addDatum(datum);\n }\n }\n bins.forEach(function (b) { return b.calculateAggregatedValue(_this.aggregation, _this.yKey); });\n return bins;\n };\n Object.defineProperty(HistogramSeries.prototype, \"xMax\", {\n get: function () {\n var _this = this;\n return (this.data &&\n this.data.reduce(function (acc, datum) {\n return Math.max(acc, datum[_this.xKey]);\n }, Number.NEGATIVE_INFINITY));\n },\n enumerable: false,\n configurable: true\n });\n HistogramSeries.prototype.processData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, xKey, data, yData, yMinMax, firstBin, lastBin, xMin, xMax;\n var _this = this;\n return __generator(this, function (_b) {\n _a = this, xKey = _a.xKey, data = _a.data;\n this.binnedData = this.placeDataInBins(xKey && data ? data : []);\n yData = this.binnedData.map(function (b) { return b.getY(_this.areaPlot); });\n yMinMax = extent(yData);\n this.yDomain = this.fixNumericExtent([0, yMinMax ? yMinMax[1] : 1]);\n firstBin = this.binnedData[0];\n lastBin = this.binnedData[this.binnedData.length - 1];\n xMin = firstBin.domain[0];\n xMax = lastBin.domain[1];\n this.xDomain = [xMin, xMax];\n return [2 /*return*/];\n });\n });\n };\n HistogramSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.xDomain;\n }\n else {\n return this.yDomain;\n }\n };\n HistogramSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new CartesianSeriesNodeClickEvent(this.xKey, this.yKey, event, datum, this);\n };\n HistogramSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new CartesianSeriesNodeDoubleClickEvent(this.xKey, this.yKey, event, datum, this);\n };\n HistogramSeries.prototype.createNodeData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, xAxis, yAxis, xScale, yScale, _b, fill, stroke, strokeWidth, seriesId, yKey, xKey, nodeData, defaultLabelFormatter, _c, _d, labelFormatter, labelFontStyle, labelFontWeight, labelFontSize, labelFontFamily, labelColor;\n var _this = this;\n return __generator(this, function (_e) {\n _a = this, xAxis = _a.xAxis, yAxis = _a.yAxis;\n if (!this.seriesItemEnabled || !xAxis || !yAxis) {\n return [2 /*return*/, []];\n }\n xScale = xAxis.scale;\n yScale = yAxis.scale;\n _b = this, fill = _b.fill, stroke = _b.stroke, strokeWidth = _b.strokeWidth, seriesId = _b.id, yKey = _b.yKey, xKey = _b.xKey;\n nodeData = [];\n defaultLabelFormatter = function (params) { return String(params.value); };\n _c = this.label, _d = _c.formatter, labelFormatter = _d === void 0 ? defaultLabelFormatter : _d, labelFontStyle = _c.fontStyle, labelFontWeight = _c.fontWeight, labelFontSize = _c.fontSize, labelFontFamily = _c.fontFamily, labelColor = _c.color;\n this.binnedData.forEach(function (binOfData) {\n var total = binOfData.aggregatedValue, frequency = binOfData.frequency, _a = __read(binOfData.domain, 2), xDomainMin = _a[0], xDomainMax = _a[1], relativeHeight = binOfData.relativeHeight;\n var xMinPx = xScale.convert(xDomainMin), xMaxPx = xScale.convert(xDomainMax), \n // note: assuming can't be negative:\n y = _this.areaPlot ? relativeHeight : yKey ? total : frequency, yZeroPx = yScale.convert(0), yMaxPx = yScale.convert(y), w = xMaxPx - xMinPx, h = Math.abs(yMaxPx - yZeroPx);\n var selectionDatumLabel = y !== 0\n ? {\n text: labelFormatter({ value: binOfData.aggregatedValue, seriesId: seriesId }),\n fontStyle: labelFontStyle,\n fontWeight: labelFontWeight,\n fontSize: labelFontSize,\n fontFamily: labelFontFamily,\n fill: labelColor,\n x: xMinPx + w / 2,\n y: yMaxPx + h / 2,\n }\n : undefined;\n var nodeMidPoint = {\n x: xMinPx + w / 2,\n y: yMaxPx + h / 2,\n };\n nodeData.push({\n series: _this,\n datum: binOfData,\n // since each selection is an aggregation of multiple data.\n aggregatedValue: binOfData.aggregatedValue,\n domain: binOfData.domain,\n yKey: yKey,\n xKey: xKey,\n x: xMinPx,\n y: yMaxPx,\n width: w,\n height: h,\n nodeMidPoint: nodeMidPoint,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n label: selectionDatumLabel,\n });\n });\n return [2 /*return*/, [{ itemId: this.yKey, nodeData: nodeData, labelData: nodeData }]];\n });\n });\n };\n HistogramSeries.prototype.nodeFactory = function () {\n return new Rect();\n };\n HistogramSeries.prototype.updateDatumSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var nodeData, datumSelection;\n return __generator(this, function (_a) {\n nodeData = opts.nodeData, datumSelection = opts.datumSelection;\n return [2 /*return*/, datumSelection.update(nodeData, function (rect) {\n rect.tag = HistogramSeriesNodeTag.Bin;\n rect.crisp = true;\n })];\n });\n });\n };\n HistogramSeries.prototype.updateDatumNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var datumSelection, isDatumHighlighted, _a, seriesFillOpacity, strokeOpacity, shadow, _b, highlightedFill, _c, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth;\n var _this = this;\n return __generator(this, function (_d) {\n datumSelection = opts.datumSelection, isDatumHighlighted = opts.isHighlight;\n _a = this, seriesFillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity, shadow = _a.shadow, _b = _a.highlightStyle.item, highlightedFill = _b.fill, _c = _b.fillOpacity, highlightFillOpacity = _c === void 0 ? seriesFillOpacity : _c, highlightedStroke = _b.stroke, highlightedDatumStrokeWidth = _b.strokeWidth;\n datumSelection.each(function (rect, datum, index) {\n var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n ? highlightedDatumStrokeWidth\n : datum.strokeWidth;\n var fillOpacity = isDatumHighlighted ? highlightFillOpacity : seriesFillOpacity;\n rect.x = datum.x;\n rect.y = datum.y;\n rect.width = datum.width;\n rect.height = datum.height;\n rect.fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : datum.fill;\n rect.stroke = isDatumHighlighted && highlightedStroke !== undefined ? highlightedStroke : datum.stroke;\n rect.fillOpacity = fillOpacity;\n rect.strokeOpacity = strokeOpacity;\n rect.strokeWidth = strokeWidth;\n rect.lineDash = _this.lineDash;\n rect.lineDashOffset = _this.lineDashOffset;\n rect.fillShadow = shadow;\n rect.zIndex = isDatumHighlighted ? Series.highlightedZIndex : index;\n rect.visible = datum.height > 0; // prevent stroke from rendering for zero height columns\n });\n return [2 /*return*/];\n });\n });\n };\n HistogramSeries.prototype.updateLabelSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelData, labelSelection;\n return __generator(this, function (_a) {\n labelData = opts.labelData, labelSelection = opts.labelSelection;\n return [2 /*return*/, labelSelection.update(labelData, function (text) {\n text.tag = HistogramSeriesNodeTag.Label;\n text.pointerEvents = PointerEvents.None;\n text.textAlign = 'center';\n text.textBaseline = 'middle';\n })];\n });\n });\n };\n HistogramSeries.prototype.updateLabelNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelSelection, labelEnabled;\n return __generator(this, function (_a) {\n labelSelection = opts.labelSelection;\n labelEnabled = this.label.enabled;\n labelSelection.each(function (text, datum) {\n var label = datum.label;\n if (label && labelEnabled) {\n text.text = label.text;\n text.x = label.x;\n text.y = label.y;\n text.fontStyle = label.fontStyle;\n text.fontWeight = label.fontWeight;\n text.fontSize = label.fontSize;\n text.fontFamily = label.fontFamily;\n text.fill = label.fill;\n text.visible = true;\n }\n else {\n text.visible = false;\n }\n });\n return [2 /*return*/];\n });\n });\n };\n HistogramSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a = this, xKey = _a.xKey, yKey = _a.yKey, xAxis = _a.xAxis, yAxis = _a.yAxis;\n if (!xKey || !xAxis || !yAxis) {\n return '';\n }\n var _b = this, xName = _b.xName, yName = _b.yName, color = _b.fill, tooltip = _b.tooltip, aggregation = _b.aggregation, seriesId = _b.id;\n var tooltipRenderer = tooltip.renderer;\n var bin = nodeDatum.datum;\n var aggregatedValue = bin.aggregatedValue, frequency = bin.frequency, _c = __read(bin.domain, 2), rangeMin = _c[0], rangeMax = _c[1];\n var title = sanitizeHtml(xName || xKey) + \": \" + xAxis.formatDatum(rangeMin) + \" - \" + xAxis.formatDatum(rangeMax);\n var content = yKey\n ? \"\" + sanitizeHtml(yName || yKey) + \" (\" + aggregation + \"): \" + yAxis.formatDatum(aggregatedValue) + \"
\"\n : '';\n content += \"Frequency: \" + frequency;\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer({\n datum: bin,\n xKey: xKey,\n xValue: bin.domain,\n xName: xName,\n yKey: yKey,\n yValue: bin.aggregatedValue,\n yName: yName,\n color: color,\n title: title,\n seriesId: seriesId,\n }), defaults);\n }\n return toTooltipHtml(defaults);\n };\n HistogramSeries.prototype.getLegendData = function () {\n var _a = this, id = _a.id, data = _a.data, xKey = _a.xKey, yName = _a.yName, visible = _a.visible, fill = _a.fill, stroke = _a.stroke, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity;\n if (!data || data.length === 0) {\n return [];\n }\n return [\n {\n id: id,\n itemId: xKey,\n seriesId: id,\n enabled: visible,\n label: {\n text: yName || xKey || 'Frequency',\n },\n marker: {\n fill: fill || 'rgba(0, 0, 0, 0)',\n stroke: stroke || 'rgba(0, 0, 0, 0)',\n fillOpacity: fillOpacity,\n strokeOpacity: strokeOpacity,\n },\n },\n ];\n };\n HistogramSeries.prototype.isLabelEnabled = function () {\n return this.label.enabled;\n };\n HistogramSeries.className = 'HistogramSeries';\n HistogramSeries.type = 'histogram';\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], HistogramSeries.prototype, \"fill\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], HistogramSeries.prototype, \"stroke\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], HistogramSeries.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], HistogramSeries.prototype, \"strokeOpacity\", void 0);\n __decorate([\n Validate(OPT_LINE_DASH)\n ], HistogramSeries.prototype, \"lineDash\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], HistogramSeries.prototype, \"lineDashOffset\", void 0);\n __decorate([\n Validate(STRING)\n ], HistogramSeries.prototype, \"xKey\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], HistogramSeries.prototype, \"areaPlot\", void 0);\n __decorate([\n Validate(OPT_ARRAY())\n ], HistogramSeries.prototype, \"bins\", void 0);\n __decorate([\n Validate(HISTOGRAM_AGGREGATION)\n ], HistogramSeries.prototype, \"aggregation\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], HistogramSeries.prototype, \"binCount\", void 0);\n __decorate([\n Validate(STRING)\n ], HistogramSeries.prototype, \"xName\", void 0);\n __decorate([\n Validate(STRING)\n ], HistogramSeries.prototype, \"yKey\", void 0);\n __decorate([\n Validate(STRING)\n ], HistogramSeries.prototype, \"yName\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], HistogramSeries.prototype, \"strokeWidth\", void 0);\n return HistogramSeries;\n}(CartesianSeries));\nexport { HistogramSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { ContinuousScale } from '../../../scale/continuousScale';\nimport { SeriesTooltip, SeriesNodePickMode } from '../series';\nimport { extent } from '../../../util/array';\nimport { PointerEvents } from '../../../scene/node';\nimport { CartesianSeries, CartesianSeriesMarker, CartesianSeriesNodeClickEvent, CartesianSeriesNodeDoubleClickEvent, } from './cartesianSeries';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { getMarker } from '../../marker/util';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { interpolate } from '../../../util/string';\nimport { Label } from '../../label';\nimport { sanitizeHtml } from '../../../util/sanitize';\nimport { checkDatum } from '../../../util/value';\nimport { NUMBER, OPT_FUNCTION, OPT_LINE_DASH, OPT_STRING, OPT_COLOR_STRING, STRING, Validate, } from '../../../util/validation';\nvar LineSeriesLabel = /** @class */ (function (_super) {\n __extends(LineSeriesLabel, _super);\n function LineSeriesLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.formatter = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], LineSeriesLabel.prototype, \"formatter\", void 0);\n return LineSeriesLabel;\n}(Label));\nvar LineSeriesTooltip = /** @class */ (function (_super) {\n __extends(LineSeriesTooltip, _super);\n function LineSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n _this.format = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], LineSeriesTooltip.prototype, \"renderer\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], LineSeriesTooltip.prototype, \"format\", void 0);\n return LineSeriesTooltip;\n}(SeriesTooltip));\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n var _this = _super.call(this, {\n hasMarkers: true,\n pickModes: [\n SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST,\n SeriesNodePickMode.NEAREST_NODE,\n SeriesNodePickMode.EXACT_SHAPE_MATCH,\n ],\n }) || this;\n _this.xDomain = [];\n _this.yDomain = [];\n _this.pointsData = [];\n _this.marker = new CartesianSeriesMarker();\n _this.label = new LineSeriesLabel();\n _this.title = undefined;\n _this.stroke = '#874349';\n _this.lineDash = [0];\n _this.lineDashOffset = 0;\n _this.strokeWidth = 2;\n _this.strokeOpacity = 1;\n _this.tooltip = new LineSeriesTooltip();\n _this._xKey = '';\n _this.xName = '';\n _this._yKey = '';\n _this.yName = '';\n var _a = _this, marker = _a.marker, label = _a.label;\n marker.fill = '#c16068';\n marker.stroke = '#874349';\n label.enabled = false;\n return _this;\n }\n Object.defineProperty(LineSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n this._xKey = value;\n this.pointsData.splice(0);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"yKey\", {\n get: function () {\n return this._yKey;\n },\n set: function (value) {\n this._yKey = value;\n this.pointsData.splice(0);\n },\n enumerable: false,\n configurable: true\n });\n LineSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.xDomain;\n }\n return this.yDomain;\n };\n LineSeries.prototype.processData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, xAxis, yAxis, xKey, yKey, pointsData, data, isContinuousX, isContinuousY, xData, yData, data_1, data_1_1, datum, x, y, xDatum, yDatum;\n var e_1, _b;\n return __generator(this, function (_c) {\n _a = this, xAxis = _a.xAxis, yAxis = _a.yAxis, xKey = _a.xKey, yKey = _a.yKey, pointsData = _a.pointsData;\n data = xKey && yKey && this.data ? this.data : [];\n if (!xAxis || !yAxis) {\n return [2 /*return*/];\n }\n isContinuousX = xAxis.scale instanceof ContinuousScale;\n isContinuousY = yAxis.scale instanceof ContinuousScale;\n xData = [];\n yData = [];\n pointsData.splice(0);\n try {\n for (data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n datum = data_1_1.value;\n x = datum[xKey];\n y = datum[yKey];\n xDatum = checkDatum(x, isContinuousX);\n if (isContinuousX && xDatum === undefined) {\n continue;\n }\n yDatum = checkDatum(y, isContinuousY);\n xData.push(xDatum);\n yData.push(yDatum);\n pointsData.push({\n xDatum: xDatum,\n yDatum: yDatum,\n datum: datum,\n });\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (data_1_1 && !data_1_1.done && (_b = data_1.return)) _b.call(data_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.validateXYData(this.xKey, this.yKey, data, xAxis, yAxis, xData, yData, 1);\n this.xDomain = isContinuousX ? this.fixNumericExtent(extent(xData), xAxis) : xData;\n this.yDomain = isContinuousY ? this.fixNumericExtent(extent(yData), yAxis) : yData;\n return [2 /*return*/];\n });\n });\n };\n LineSeries.prototype.createNodeData = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var _b, data, xAxis, yAxis, _c, markerEnabled, markerSize, strokeWidth, _d, pointsData, label, yKey, xKey, seriesId, xScale, yScale, xOffset, yOffset, nodeData, size, moveTo, prevXInRange, nextPoint, actualLength, i, point, xDatum, yDatum, datum, x, tolerance, xInRange, nextXInRange, y, labelText;\n return __generator(this, function (_e) {\n _b = this, data = _b.data, xAxis = _b.xAxis, yAxis = _b.yAxis, _c = _b.marker, markerEnabled = _c.enabled, markerSize = _c.size, strokeWidth = _c.strokeWidth;\n if (!data || !xAxis || !yAxis) {\n return [2 /*return*/, []];\n }\n _d = this, pointsData = _d.pointsData, label = _d.label, yKey = _d.yKey, xKey = _d.xKey, seriesId = _d.id;\n xScale = xAxis.scale;\n yScale = yAxis.scale;\n xOffset = (xScale.bandwidth || 0) / 2;\n yOffset = (yScale.bandwidth || 0) / 2;\n nodeData = new Array(data.length);\n size = markerEnabled ? markerSize : 0;\n moveTo = true;\n prevXInRange = undefined;\n nextPoint = undefined;\n actualLength = 0;\n for (i = 0; i < pointsData.length; i++) {\n point = nextPoint || pointsData[i];\n if (point.yDatum === undefined) {\n prevXInRange = undefined;\n moveTo = true;\n }\n else {\n xDatum = point.xDatum, yDatum = point.yDatum, datum = point.datum;\n x = xScale.convert(xDatum) + xOffset;\n if (isNaN(x)) {\n prevXInRange = undefined;\n moveTo = true;\n continue;\n }\n tolerance = (xScale.bandwidth || markerSize * 0.5 + (strokeWidth || 0)) + 1;\n nextPoint = ((_a = pointsData[i + 1]) === null || _a === void 0 ? void 0 : _a.yDatum) === undefined ? undefined : pointsData[i + 1];\n xInRange = xAxis.inRangeEx(x, 0, tolerance);\n nextXInRange = nextPoint && xAxis.inRangeEx(xScale.convert(nextPoint.xDatum) + xOffset, 0, tolerance);\n if (xInRange === -1 && nextXInRange === -1) {\n moveTo = true;\n continue;\n }\n if (xInRange === 1 && prevXInRange === 1) {\n moveTo = true;\n continue;\n }\n prevXInRange = xInRange;\n y = yScale.convert(yDatum) + yOffset;\n labelText = void 0;\n if (label.formatter) {\n labelText = label.formatter({ value: yDatum, seriesId: seriesId });\n }\n else {\n labelText =\n typeof yDatum === 'number' && isFinite(yDatum)\n ? yDatum.toFixed(2)\n : yDatum\n ? String(yDatum)\n : '';\n }\n nodeData[actualLength++] = {\n series: this,\n datum: datum,\n yKey: yKey,\n xKey: xKey,\n point: { x: x, y: y, moveTo: moveTo, size: size },\n nodeMidPoint: { x: x, y: y },\n label: labelText\n ? {\n text: labelText,\n fontStyle: label.fontStyle,\n fontWeight: label.fontWeight,\n fontSize: label.fontSize,\n fontFamily: label.fontFamily,\n textAlign: 'center',\n textBaseline: 'bottom',\n fill: label.color,\n }\n : undefined,\n };\n moveTo = false;\n }\n }\n nodeData.length = actualLength;\n return [2 /*return*/, [{ itemId: yKey, nodeData: nodeData, labelData: nodeData }]];\n });\n });\n };\n LineSeries.prototype.isPathOrSelectionDirty = function () {\n return this.marker.isDirty();\n };\n LineSeries.prototype.updatePaths = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var nodeData, _a, lineNode, linePath, nodeData_1, nodeData_1_1, data;\n var e_2, _b;\n return __generator(this, function (_c) {\n nodeData = opts.contextData.nodeData, _a = __read(opts.paths, 1), lineNode = _a[0];\n linePath = lineNode.path;\n lineNode.fill = undefined;\n lineNode.lineJoin = 'round';\n lineNode.pointerEvents = PointerEvents.None;\n linePath.clear({ trackChanges: true });\n try {\n for (nodeData_1 = __values(nodeData), nodeData_1_1 = nodeData_1.next(); !nodeData_1_1.done; nodeData_1_1 = nodeData_1.next()) {\n data = nodeData_1_1.value;\n if (data.point.moveTo) {\n linePath.moveTo(data.point.x, data.point.y);\n }\n else {\n linePath.lineTo(data.point.x, data.point.y);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (nodeData_1_1 && !nodeData_1_1.done && (_b = nodeData_1.return)) _b.call(nodeData_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n lineNode.checkPathDirty();\n return [2 /*return*/];\n });\n });\n };\n LineSeries.prototype.updatePathNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, lineNode;\n return __generator(this, function (_b) {\n _a = __read(opts.paths, 1), lineNode = _a[0];\n lineNode.stroke = this.stroke;\n lineNode.strokeWidth = this.getStrokeWidth(this.strokeWidth);\n lineNode.strokeOpacity = this.strokeOpacity;\n lineNode.lineDash = this.lineDash;\n lineNode.lineDashOffset = this.lineDashOffset;\n return [2 /*return*/];\n });\n });\n };\n LineSeries.prototype.markerFactory = function () {\n var shape = this.marker.shape;\n var MarkerShape = getMarker(shape);\n return new MarkerShape();\n };\n LineSeries.prototype.updateMarkerSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var nodeData, markerSelection, _a, shape, enabled;\n return __generator(this, function (_b) {\n nodeData = opts.nodeData;\n markerSelection = opts.markerSelection;\n _a = this.marker, shape = _a.shape, enabled = _a.enabled;\n nodeData = shape && enabled ? nodeData : [];\n if (this.marker.isDirty()) {\n markerSelection.clear();\n }\n return [2 /*return*/, markerSelection.update(nodeData)];\n });\n });\n };\n LineSeries.prototype.updateMarkerNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var markerSelection, isDatumHighlighted, _a, marker, markerFillOpacity, xKey, yKey, lineStroke, strokeOpacity, _b, highlightedFill, _c, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, seriesId, size, formatter, markerStrokeWidth, customMarker;\n return __generator(this, function (_d) {\n markerSelection = opts.markerSelection, isDatumHighlighted = opts.isHighlight;\n _a = this, marker = _a.marker, markerFillOpacity = _a.marker.fillOpacity, xKey = _a.xKey, yKey = _a.yKey, lineStroke = _a.stroke, strokeOpacity = _a.strokeOpacity, _b = _a.highlightStyle.item, highlightedFill = _b.fill, _c = _b.fillOpacity, highlightFillOpacity = _c === void 0 ? markerFillOpacity : _c, highlightedStroke = _b.stroke, highlightedDatumStrokeWidth = _b.strokeWidth, seriesId = _a.id;\n size = marker.size, formatter = marker.formatter;\n markerStrokeWidth = marker.strokeWidth !== undefined ? marker.strokeWidth : this.strokeWidth;\n customMarker = typeof marker.shape === 'function';\n markerSelection.each(function (node, datum) {\n var _a, _b;\n var fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : marker.fill;\n var fillOpacity = isDatumHighlighted ? highlightFillOpacity : markerFillOpacity;\n var stroke = isDatumHighlighted && highlightedStroke !== undefined ? highlightedStroke : marker.stroke || lineStroke;\n var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n ? highlightedDatumStrokeWidth\n : markerStrokeWidth;\n var format = undefined;\n if (formatter) {\n format = formatter({\n datum: datum.datum,\n xKey: xKey,\n yKey: yKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n size: size,\n highlighted: isDatumHighlighted,\n seriesId: seriesId,\n });\n }\n node.fill = (format && format.fill) || fill;\n node.stroke = (format && format.stroke) || stroke;\n node.strokeWidth = format && format.strokeWidth !== undefined ? format.strokeWidth : strokeWidth;\n node.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n node.strokeOpacity = (_b = (_a = marker.strokeOpacity) !== null && _a !== void 0 ? _a : strokeOpacity) !== null && _b !== void 0 ? _b : 1;\n node.size = format && format.size !== undefined ? format.size : size;\n node.translationX = datum.point.x;\n node.translationY = datum.point.y;\n node.visible = node.size > 0 && !isNaN(datum.point.x) && !isNaN(datum.point.y);\n if (!customMarker || node.dirtyPath) {\n return;\n }\n // Only for cutom marker shapes\n node.path.clear({ trackChanges: true });\n node.updatePath();\n node.checkPathDirty();\n });\n if (!isDatumHighlighted) {\n this.marker.markClean();\n }\n return [2 /*return*/];\n });\n });\n };\n LineSeries.prototype.updateLabelSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelData, labelSelection, _a, shape, enabled;\n return __generator(this, function (_b) {\n labelData = opts.labelData;\n labelSelection = opts.labelSelection;\n _a = this.marker, shape = _a.shape, enabled = _a.enabled;\n labelData = shape && enabled ? labelData : [];\n return [2 /*return*/, labelSelection.update(labelData)];\n });\n });\n };\n LineSeries.prototype.updateLabelNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelSelection, _a, labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color;\n return __generator(this, function (_b) {\n labelSelection = opts.labelSelection;\n _a = this.label, labelEnabled = _a.enabled, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontSize = _a.fontSize, fontFamily = _a.fontFamily, color = _a.color;\n labelSelection.each(function (text, datum) {\n var point = datum.point, label = datum.label;\n if (datum && label && labelEnabled) {\n text.fontStyle = fontStyle;\n text.fontWeight = fontWeight;\n text.fontSize = fontSize;\n text.fontFamily = fontFamily;\n text.textAlign = label.textAlign;\n text.textBaseline = label.textBaseline;\n text.text = label.text;\n text.x = point.x;\n text.y = point.y - 10;\n text.fill = color;\n text.visible = true;\n }\n else {\n text.visible = false;\n }\n });\n return [2 /*return*/];\n });\n });\n };\n LineSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new CartesianSeriesNodeClickEvent(this.xKey, this.yKey, event, datum, this);\n };\n LineSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new CartesianSeriesNodeDoubleClickEvent(this.xKey, this.yKey, event, datum, this);\n };\n LineSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a = this, xKey = _a.xKey, yKey = _a.yKey, xAxis = _a.xAxis, yAxis = _a.yAxis;\n if (!xKey || !yKey || !xAxis || !yAxis) {\n return '';\n }\n var _b = this, xName = _b.xName, yName = _b.yName, tooltip = _b.tooltip, marker = _b.marker, seriesId = _b.id;\n var tooltipRenderer = tooltip.renderer, tooltipFormat = tooltip.format;\n var datum = nodeDatum.datum;\n var xValue = datum[xKey];\n var yValue = datum[yKey];\n var xString = xAxis.formatDatum(xValue);\n var yString = yAxis.formatDatum(yValue);\n var title = sanitizeHtml(this.title || yName);\n var content = sanitizeHtml(xString + ': ' + yString);\n var markerFormatter = marker.formatter, fill = marker.fill, stroke = marker.stroke, markerStrokeWidth = marker.strokeWidth, size = marker.size;\n var strokeWidth = markerStrokeWidth !== undefined ? markerStrokeWidth : this.strokeWidth;\n var format = undefined;\n if (markerFormatter) {\n format = markerFormatter({\n datum: datum,\n xKey: xKey,\n yKey: yKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n size: size,\n highlighted: false,\n seriesId: seriesId,\n });\n }\n var color = (format && format.fill) || fill;\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n if (tooltipFormat || tooltipRenderer) {\n var params = {\n datum: datum,\n xKey: xKey,\n xValue: xValue,\n xName: xName,\n yKey: yKey,\n yValue: yValue,\n yName: yName,\n title: title,\n color: color,\n seriesId: seriesId,\n };\n if (tooltipFormat) {\n return toTooltipHtml({\n content: interpolate(tooltipFormat, params),\n }, defaults);\n }\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer(params), defaults);\n }\n }\n return toTooltipHtml(defaults);\n };\n LineSeries.prototype.getLegendData = function () {\n var _a, _b, _c;\n var _d = this, id = _d.id, data = _d.data, xKey = _d.xKey, yKey = _d.yKey, yName = _d.yName, visible = _d.visible, title = _d.title, marker = _d.marker, stroke = _d.stroke, strokeOpacity = _d.strokeOpacity;\n if (!(data && data.length && xKey && yKey)) {\n return [];\n }\n return [\n {\n id: id,\n itemId: yKey,\n seriesId: id,\n enabled: visible,\n label: {\n text: title || yName || yKey,\n },\n marker: {\n shape: marker.shape,\n fill: marker.fill || 'rgba(0, 0, 0, 0)',\n stroke: marker.stroke || stroke || 'rgba(0, 0, 0, 0)',\n fillOpacity: (_a = marker.fillOpacity) !== null && _a !== void 0 ? _a : 1,\n strokeOpacity: (_c = (_b = marker.strokeOpacity) !== null && _b !== void 0 ? _b : strokeOpacity) !== null && _c !== void 0 ? _c : 1,\n },\n },\n ];\n };\n LineSeries.prototype.isLabelEnabled = function () {\n return this.label.enabled;\n };\n LineSeries.className = 'LineSeries';\n LineSeries.type = 'line';\n __decorate([\n Validate(OPT_STRING)\n ], LineSeries.prototype, \"title\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], LineSeries.prototype, \"stroke\", void 0);\n __decorate([\n Validate(OPT_LINE_DASH)\n ], LineSeries.prototype, \"lineDash\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LineSeries.prototype, \"lineDashOffset\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], LineSeries.prototype, \"strokeWidth\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], LineSeries.prototype, \"strokeOpacity\", void 0);\n __decorate([\n Validate(STRING)\n ], LineSeries.prototype, \"_xKey\", void 0);\n __decorate([\n Validate(STRING)\n ], LineSeries.prototype, \"xName\", void 0);\n __decorate([\n Validate(STRING)\n ], LineSeries.prototype, \"_yKey\", void 0);\n __decorate([\n Validate(STRING)\n ], LineSeries.prototype, \"yName\", void 0);\n return LineSeries;\n}(CartesianSeries));\nexport { LineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { SeriesTooltip, SeriesNodePickMode, valueProperty } from '../series';\nimport { LinearScale } from '../../../scale/linearScale';\nimport { CartesianSeries, CartesianSeriesMarker, CartesianSeriesNodeBaseClickEvent, } from './cartesianSeries';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { getMarker } from '../../marker/util';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { ContinuousScale } from '../../../scale/continuousScale';\nimport { sanitizeHtml } from '../../../util/sanitize';\nimport { Label } from '../../label';\nimport { HdpiCanvas } from '../../../canvas/hdpiCanvas';\nimport { OPT_FUNCTION, OPT_STRING, STRING, Validate } from '../../../util/validation';\nimport { DataModel } from '../../data/dataModel';\nvar ScatterSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n __extends(ScatterSeriesNodeBaseClickEvent, _super);\n function ScatterSeriesNodeBaseClickEvent(sizeKey, xKey, yKey, nativeEvent, datum, series) {\n var _this = _super.call(this, xKey, yKey, nativeEvent, datum, series) || this;\n _this.sizeKey = sizeKey;\n return _this;\n }\n return ScatterSeriesNodeBaseClickEvent;\n}(CartesianSeriesNodeBaseClickEvent));\nvar ScatterSeriesNodeClickEvent = /** @class */ (function (_super) {\n __extends(ScatterSeriesNodeClickEvent, _super);\n function ScatterSeriesNodeClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeClick';\n return _this;\n }\n return ScatterSeriesNodeClickEvent;\n}(ScatterSeriesNodeBaseClickEvent));\nexport { ScatterSeriesNodeClickEvent };\nvar ScatterSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n __extends(ScatterSeriesNodeDoubleClickEvent, _super);\n function ScatterSeriesNodeDoubleClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeDoubleClick';\n return _this;\n }\n return ScatterSeriesNodeDoubleClickEvent;\n}(ScatterSeriesNodeBaseClickEvent));\nexport { ScatterSeriesNodeDoubleClickEvent };\nvar ScatterSeriesTooltip = /** @class */ (function (_super) {\n __extends(ScatterSeriesTooltip, _super);\n function ScatterSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], ScatterSeriesTooltip.prototype, \"renderer\", void 0);\n return ScatterSeriesTooltip;\n}(SeriesTooltip));\nvar ScatterSeries = /** @class */ (function (_super) {\n __extends(ScatterSeries, _super);\n function ScatterSeries() {\n var _this = _super.call(this, {\n pickModes: [\n SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST,\n SeriesNodePickMode.NEAREST_NODE,\n SeriesNodePickMode.EXACT_SHAPE_MATCH,\n ],\n pathsPerSeries: 0,\n hasMarkers: true,\n }) || this;\n _this.sizeScale = new LinearScale();\n _this.marker = new CartesianSeriesMarker();\n _this.label = new Label();\n _this.title = undefined;\n _this.labelKey = undefined;\n _this.xName = '';\n _this.yName = '';\n _this.sizeName = 'Size';\n _this.labelName = 'Label';\n _this._xKey = '';\n _this._yKey = '';\n _this._sizeKey = undefined;\n _this.tooltip = new ScatterSeriesTooltip();\n var label = _this.label;\n label.enabled = false;\n return _this;\n }\n Object.defineProperty(ScatterSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n this._xKey = value;\n this.processedData = undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ScatterSeries.prototype, \"yKey\", {\n get: function () {\n return this._yKey;\n },\n set: function (value) {\n this._yKey = value;\n this.processedData = undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ScatterSeries.prototype, \"sizeKey\", {\n get: function () {\n return this._sizeKey;\n },\n set: function (value) {\n this._sizeKey = value;\n this.processedData = undefined;\n },\n enumerable: false,\n configurable: true\n });\n ScatterSeries.prototype.processData = function () {\n var _a, _b, _c, _d;\n return __awaiter(this, void 0, void 0, function () {\n var _e, xKey, yKey, sizeKey, xAxis, yAxis, marker, data, isContinuousX, isContinuousY, sizeKeyIdx, processedSize;\n return __generator(this, function (_f) {\n _e = this, xKey = _e.xKey, yKey = _e.yKey, sizeKey = _e.sizeKey, xAxis = _e.xAxis, yAxis = _e.yAxis, marker = _e.marker, data = _e.data;\n isContinuousX = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) instanceof ContinuousScale;\n isContinuousY = (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) instanceof ContinuousScale;\n this.dataModel = new DataModel({\n props: __spread([\n valueProperty(xKey, isContinuousX),\n valueProperty(yKey, isContinuousY)\n ], (sizeKey ? [valueProperty(sizeKey, true)] : [])),\n dataVisible: this.visible,\n });\n this.processedData = this.dataModel.processData(data !== null && data !== void 0 ? data : []);\n if (sizeKey) {\n sizeKeyIdx = (_b = (_a = this.dataModel.resolveProcessedDataIndex(sizeKey)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;\n processedSize = (_d = (_c = this.processedData) === null || _c === void 0 ? void 0 : _c.domain.values[sizeKeyIdx]) !== null && _d !== void 0 ? _d : [];\n this.sizeScale.domain = marker.domain ? marker.domain : processedSize;\n }\n return [2 /*return*/];\n });\n });\n };\n ScatterSeries.prototype.getDomain = function (direction) {\n var _a, _b, _c, _d, _e, _f;\n var xDataIdx = (_a = this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndex(this.xKey);\n var yDataIdx = (_b = this.dataModel) === null || _b === void 0 ? void 0 : _b.resolveProcessedDataIndex(this.yKey);\n if (!xDataIdx || !yDataIdx) {\n return [];\n }\n if (direction === ChartAxisDirection.X) {\n return (_d = (_c = this.processedData) === null || _c === void 0 ? void 0 : _c.domain.values[0]) !== null && _d !== void 0 ? _d : [];\n }\n else {\n return (_f = (_e = this.processedData) === null || _e === void 0 ? void 0 : _e.domain.values[1]) !== null && _f !== void 0 ? _f : [];\n }\n };\n ScatterSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new ScatterSeriesNodeClickEvent(this.sizeKey, this.xKey, this.yKey, event, datum, this);\n };\n ScatterSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new ScatterSeriesNodeDoubleClickEvent(this.sizeKey, this.xKey, this.yKey, event, datum, this);\n };\n ScatterSeries.prototype.createNodeData = function () {\n var _a, _b, _c, _d, _e, _f;\n return __awaiter(this, void 0, void 0, function () {\n var _g, visible, xAxis, yAxis, yKey, xKey, label, labelKey, xDataIdx, yDataIdx, xScale, yScale, xOffset, yOffset, _h, sizeScale, marker, nodeData, font, actualLength, _j, _k, _l, values, datum, x, y, text, size, markerSize;\n var e_1, _m;\n return __generator(this, function (_o) {\n _g = this, visible = _g.visible, xAxis = _g.xAxis, yAxis = _g.yAxis, yKey = _g.yKey, xKey = _g.xKey, label = _g.label, labelKey = _g.labelKey;\n xDataIdx = (_a = this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndex(xKey);\n yDataIdx = (_b = this.dataModel) === null || _b === void 0 ? void 0 : _b.resolveProcessedDataIndex(yKey);\n if (!(xDataIdx && yDataIdx && visible && xAxis && yAxis)) {\n return [2 /*return*/, []];\n }\n xScale = xAxis.scale;\n yScale = yAxis.scale;\n xOffset = (xScale.bandwidth || 0) / 2;\n yOffset = (yScale.bandwidth || 0) / 2;\n _h = this, sizeScale = _h.sizeScale, marker = _h.marker;\n nodeData = new Array((_d = (_c = this.processedData) === null || _c === void 0 ? void 0 : _c.data.length) !== null && _d !== void 0 ? _d : 0);\n sizeScale.range = [marker.size, marker.maxSize];\n font = label.getFont();\n actualLength = 0;\n try {\n for (_j = __values((_f = (_e = this.processedData) === null || _e === void 0 ? void 0 : _e.data) !== null && _f !== void 0 ? _f : []), _k = _j.next(); !_k.done; _k = _j.next()) {\n _l = _k.value, values = _l.values, datum = _l.datum;\n x = xScale.convert(values[xDataIdx.index]) + xOffset;\n y = yScale.convert(values[yDataIdx.index]) + yOffset;\n if (!this.checkRangeXY(x, y, xAxis, yAxis)) {\n continue;\n }\n text = labelKey ? String(datum[labelKey]) : '';\n size = HdpiCanvas.getTextSize(text, font);\n markerSize = values.length > 2 ? sizeScale.convert(values[2]) : marker.size;\n nodeData[actualLength++] = {\n series: this,\n itemId: yKey,\n yKey: yKey,\n xKey: xKey,\n datum: datum,\n point: { x: x, y: y, size: markerSize },\n nodeMidPoint: { x: x, y: y },\n label: __assign({ text: text }, size),\n };\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_k && !_k.done && (_m = _j.return)) _m.call(_j);\n }\n finally { if (e_1) throw e_1.error; }\n }\n nodeData.length = actualLength;\n return [2 /*return*/, [{ itemId: this.yKey, nodeData: nodeData, labelData: nodeData }]];\n });\n });\n };\n ScatterSeries.prototype.isPathOrSelectionDirty = function () {\n return this.marker.isDirty();\n };\n ScatterSeries.prototype.getLabelData = function () {\n var _a;\n return (_a = this.contextNodeData) === null || _a === void 0 ? void 0 : _a.reduce(function (r, n) { return r.concat(n.labelData); }, []);\n };\n ScatterSeries.prototype.markerFactory = function () {\n var shape = this.marker.shape;\n var MarkerShape = getMarker(shape);\n return new MarkerShape();\n };\n ScatterSeries.prototype.updateMarkerSelection = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var nodeData, markerSelection, enabled, data;\n return __generator(this, function (_a) {\n nodeData = opts.nodeData, markerSelection = opts.markerSelection;\n enabled = this.marker.enabled;\n if (this.marker.isDirty()) {\n markerSelection.clear();\n }\n data = enabled ? nodeData : [];\n return [2 /*return*/, markerSelection.update(data)];\n });\n });\n };\n ScatterSeries.prototype.updateMarkerNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var markerSelection, isDatumHighlighted, _a, marker, xKey, yKey, sizeScale, _b, markerFillOpacity, markerStrokeOpacity, markerStrokeWidth, _c, highlightedFill, _d, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, seriesId, formatter, customMarker;\n return __generator(this, function (_e) {\n markerSelection = opts.markerSelection, isDatumHighlighted = opts.isHighlight;\n _a = this, marker = _a.marker, xKey = _a.xKey, yKey = _a.yKey, sizeScale = _a.sizeScale, _b = _a.marker, markerFillOpacity = _b.fillOpacity, markerStrokeOpacity = _b.strokeOpacity, markerStrokeWidth = _b.strokeWidth, _c = _a.highlightStyle.item, highlightedFill = _c.fill, _d = _c.fillOpacity, highlightFillOpacity = _d === void 0 ? markerFillOpacity : _d, highlightedStroke = _c.stroke, highlightedDatumStrokeWidth = _c.strokeWidth, seriesId = _a.id;\n formatter = marker.formatter;\n sizeScale.range = [marker.size, marker.maxSize];\n customMarker = typeof marker.shape === 'function';\n markerSelection.each(function (node, datum) {\n var _a, _b, _c, _d, _e, _f, _g;\n var fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : marker.fill;\n var fillOpacity = isDatumHighlighted ? highlightFillOpacity : markerFillOpacity;\n var stroke = isDatumHighlighted && highlightedStroke !== undefined ? highlightedStroke : marker.stroke;\n var strokeOpacity = markerStrokeOpacity;\n var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n ? highlightedDatumStrokeWidth\n : markerStrokeWidth !== null && markerStrokeWidth !== void 0 ? markerStrokeWidth : 1;\n var size = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n var format = undefined;\n if (formatter) {\n format = formatter({\n datum: datum.datum,\n xKey: xKey,\n yKey: yKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n size: size,\n highlighted: isDatumHighlighted,\n seriesId: seriesId,\n });\n }\n node.fill = (format && format.fill) || fill;\n node.stroke = (format && format.stroke) || stroke;\n node.strokeWidth = (_c = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _c !== void 0 ? _c : strokeWidth;\n node.size = format && format.size !== undefined ? format.size : size;\n node.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n node.strokeOpacity = strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : 1;\n node.translationX = (_e = (_d = datum.point) === null || _d === void 0 ? void 0 : _d.x) !== null && _e !== void 0 ? _e : 0;\n node.translationY = (_g = (_f = datum.point) === null || _f === void 0 ? void 0 : _f.y) !== null && _g !== void 0 ? _g : 0;\n node.visible = node.size > 0;\n if (!customMarker || node.dirtyPath) {\n return;\n }\n // Only for cutom marker shapes\n node.path.clear({ trackChanges: true });\n node.updatePath();\n node.checkPathDirty();\n });\n if (!isDatumHighlighted) {\n this.marker.markClean();\n }\n return [2 /*return*/];\n });\n });\n };\n ScatterSeries.prototype.updateLabelSelection = function (opts) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var labelSelection, enabled, placedLabels, placedNodeDatum;\n return __generator(this, function (_c) {\n labelSelection = opts.labelSelection;\n enabled = this.label.enabled;\n placedLabels = enabled ? (_b = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.placeLabels().get(this)) !== null && _b !== void 0 ? _b : [] : [];\n placedNodeDatum = placedLabels.map(function (v) { return (__assign(__assign({}, v.datum), { point: {\n x: v.x,\n y: v.y,\n size: v.datum.point.size,\n } })); });\n return [2 /*return*/, labelSelection.update(placedNodeDatum)];\n });\n });\n };\n ScatterSeries.prototype.updateLabelNodes = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var labelSelection, label;\n return __generator(this, function (_a) {\n labelSelection = opts.labelSelection;\n label = this.label;\n labelSelection.each(function (text, datum) {\n var _a, _b, _c, _d;\n text.text = datum.label.text;\n text.fill = label.color;\n text.x = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : 0;\n text.y = (_d = (_c = datum.point) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0;\n text.fontStyle = label.fontStyle;\n text.fontWeight = label.fontWeight;\n text.fontSize = label.fontSize;\n text.fontFamily = label.fontFamily;\n text.textAlign = 'left';\n text.textBaseline = 'top';\n });\n return [2 /*return*/];\n });\n });\n };\n ScatterSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a, _b, _c;\n var _d = this, xKey = _d.xKey, yKey = _d.yKey, xAxis = _d.xAxis, yAxis = _d.yAxis;\n if (!xKey || !yKey || !xAxis || !yAxis) {\n return '';\n }\n var _e = this, marker = _e.marker, tooltip = _e.tooltip, xName = _e.xName, yName = _e.yName, sizeKey = _e.sizeKey, sizeName = _e.sizeName, labelKey = _e.labelKey, labelName = _e.labelName, seriesId = _e.id;\n var fill = marker.fill, stroke = marker.stroke;\n var strokeWidth = this.getStrokeWidth((_a = marker.strokeWidth) !== null && _a !== void 0 ? _a : 1);\n var formatter = this.marker.formatter;\n var format = undefined;\n if (formatter) {\n format = formatter({\n datum: nodeDatum,\n xKey: xKey,\n yKey: yKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n size: (_c = (_b = nodeDatum.point) === null || _b === void 0 ? void 0 : _b.size) !== null && _c !== void 0 ? _c : 0,\n highlighted: false,\n seriesId: seriesId,\n });\n }\n var color = (format && format.fill) || fill || 'gray';\n var title = this.title || yName;\n var datum = nodeDatum.datum;\n var xValue = datum[xKey];\n var yValue = datum[yKey];\n var xString = sanitizeHtml(xAxis.formatDatum(xValue));\n var yString = sanitizeHtml(yAxis.formatDatum(yValue));\n var content = \"\" + sanitizeHtml(xName || xKey) + \": \" + xString + \"
\" +\n (\"\" + sanitizeHtml(yName || yKey) + \": \" + yString);\n if (sizeKey) {\n content += \"
\" + sanitizeHtml(sizeName || sizeKey) + \": \" + sanitizeHtml(datum[sizeKey]);\n }\n if (labelKey) {\n content = \"\" + sanitizeHtml(labelName || labelKey) + \": \" + sanitizeHtml(datum[labelKey]) + \"
\" + content;\n }\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n var tooltipRenderer = tooltip.renderer;\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer({\n datum: datum,\n xKey: xKey,\n xValue: xValue,\n xName: xName,\n yKey: yKey,\n yValue: yValue,\n yName: yName,\n sizeKey: sizeKey,\n sizeName: sizeName,\n labelKey: labelKey,\n labelName: labelName,\n title: title,\n color: color,\n seriesId: seriesId,\n }), defaults);\n }\n return toTooltipHtml(defaults);\n };\n ScatterSeries.prototype.getLegendData = function () {\n var _a = this, id = _a.id, data = _a.data, xKey = _a.xKey, yKey = _a.yKey, yName = _a.yName, title = _a.title, visible = _a.visible, marker = _a.marker;\n var fill = marker.fill, stroke = marker.stroke, fillOpacity = marker.fillOpacity, strokeOpacity = marker.strokeOpacity;\n if (!(data && data.length && xKey && yKey)) {\n return [];\n }\n return [\n {\n id: id,\n itemId: yKey,\n seriesId: id,\n enabled: visible,\n label: {\n text: title || yName || yKey,\n },\n marker: {\n shape: marker.shape,\n fill: marker.fill || fill || 'rgba(0, 0, 0, 0)',\n stroke: marker.stroke || stroke || 'rgba(0, 0, 0, 0)',\n fillOpacity: fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1,\n strokeOpacity: strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : 1,\n },\n },\n ];\n };\n ScatterSeries.prototype.isLabelEnabled = function () {\n return this.label.enabled;\n };\n ScatterSeries.className = 'ScatterSeries';\n ScatterSeries.type = 'scatter';\n __decorate([\n Validate(OPT_STRING)\n ], ScatterSeries.prototype, \"title\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], ScatterSeries.prototype, \"labelKey\", void 0);\n __decorate([\n Validate(STRING)\n ], ScatterSeries.prototype, \"xName\", void 0);\n __decorate([\n Validate(STRING)\n ], ScatterSeries.prototype, \"yName\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], ScatterSeries.prototype, \"sizeName\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], ScatterSeries.prototype, \"labelName\", void 0);\n __decorate([\n Validate(STRING)\n ], ScatterSeries.prototype, \"_xKey\", void 0);\n __decorate([\n Validate(STRING)\n ], ScatterSeries.prototype, \"_yKey\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], ScatterSeries.prototype, \"_sizeKey\", void 0);\n return ScatterSeries;\n}(CartesianSeries));\nexport { ScatterSeries };\n","import { segmentIntersection, arcIntersections } from '../scene/intersection';\nexport function isPointInSector(x, y, sector) {\n var radius = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n var innerRadius = sector.innerRadius, outerRadius = sector.outerRadius;\n if (radius < Math.min(innerRadius, outerRadius) || radius > Math.max(innerRadius, outerRadius)) {\n return false;\n }\n // Start and End angles are expected to be [-90, 270]\n // while Math.atan2 returns [-180, 180]\n var angle = Math.atan2(y, x);\n if (angle < -Math.PI / 2) {\n angle += 2 * Math.PI;\n }\n // Start is actually bigger than End clock-wise\n var startAngle = sector.startAngle, endAngle = sector.endAngle;\n if (endAngle === -Math.PI / 2) {\n return angle < startAngle;\n }\n if (startAngle === (3 * Math.PI) / 2) {\n return angle > endAngle;\n }\n return angle >= endAngle && angle <= startAngle;\n}\nfunction lineCollidesSector(line, sector) {\n var startAngle = sector.startAngle, endAngle = sector.endAngle, innerRadius = sector.innerRadius, outerRadius = sector.outerRadius;\n var outerStart = { x: outerRadius * Math.cos(startAngle), y: outerRadius * Math.sin(startAngle) };\n var outerEnd = { x: outerRadius * Math.cos(endAngle), y: outerRadius * Math.sin(endAngle) };\n var innerStart = innerRadius === 0\n ? { x: 0, y: 0 }\n : { x: innerRadius * Math.cos(startAngle), y: innerRadius * Math.sin(startAngle) };\n var innerEnd = innerRadius === 0\n ? { x: 0, y: 0 }\n : { x: innerRadius * Math.cos(endAngle), y: innerRadius * Math.sin(endAngle) };\n return (segmentIntersection(line.start.x, line.start.y, line.end.x, line.end.y, outerStart.x, outerStart.y, innerStart.x, innerStart.y) != null ||\n segmentIntersection(line.start.x, line.start.y, line.end.x, line.end.y, outerEnd.x, outerEnd.y, innerEnd.x, innerEnd.y) != null ||\n arcIntersections(0, 0, outerRadius, startAngle, endAngle, true, line.start.x, line.start.y, line.end.x, line.end.y).length > 0);\n}\nexport function boxCollidesSector(box, sector) {\n var topLeft = { x: box.x, y: box.y };\n var topRight = { x: box.x + box.width, y: box.y };\n var bottomLeft = { x: box.x, y: box.y + box.height };\n var bottomRight = { x: box.x + box.width, y: box.y + box.height };\n return (lineCollidesSector({ start: topLeft, end: topRight }, sector) ||\n lineCollidesSector({ start: bottomLeft, end: bottomRight }, sector));\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Path, ScenePathChangeDetection } from './path';\nimport { normalizeAngle360 } from '../../util/angle';\nimport { isEqual } from '../../util/number';\nimport { isPointInSector } from '../../util/sector';\nimport { BBox } from '../bbox';\nvar Sector = /** @class */ (function (_super) {\n __extends(Sector, _super);\n function Sector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.centerX = 0;\n _this.centerY = 0;\n _this.innerRadius = 10;\n _this.outerRadius = 20;\n _this.startAngle = 0;\n _this.endAngle = Math.PI * 2;\n _this.angleOffset = 0;\n return _this;\n }\n Sector.prototype.computeBBox = function () {\n var radius = this.outerRadius;\n return new BBox(this.centerX - radius, this.centerY - radius, radius * 2, radius * 2);\n };\n Sector.prototype.updatePath = function () {\n var path = this.path;\n var angleOffset = this.angleOffset;\n var startAngle = Math.min(this.startAngle, this.endAngle) + angleOffset;\n var endAngle = Math.max(this.startAngle, this.endAngle) + angleOffset;\n var innerRadius = Math.min(this.innerRadius, this.outerRadius);\n var outerRadius = Math.max(this.innerRadius, this.outerRadius);\n var fullPie = isEqual(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n var centerX = this.centerX;\n var centerY = this.centerY;\n path.clear();\n if (fullPie) {\n path.arc(centerX, centerY, outerRadius, startAngle, endAngle);\n if (innerRadius > 0) {\n path.moveTo(centerX + innerRadius * Math.cos(endAngle), centerY + innerRadius * Math.sin(endAngle));\n path.arc(centerX, centerY, innerRadius, endAngle, startAngle, true);\n }\n }\n else {\n path.moveTo(centerX + innerRadius * Math.cos(startAngle), centerY + innerRadius * Math.sin(startAngle));\n path.arc(centerX, centerY, outerRadius, startAngle, endAngle);\n if (innerRadius > 0) {\n path.arc(centerX, centerY, innerRadius, endAngle, startAngle, true);\n }\n else {\n path.lineTo(centerX, centerY);\n }\n }\n path.closePath();\n this.dirtyPath = false;\n };\n Sector.prototype.isPointInPath = function (x, y) {\n var angleOffset = this.angleOffset;\n var startAngle = this.startAngle + angleOffset;\n var endAngle = this.endAngle + angleOffset;\n var innerRadius = Math.min(this.innerRadius, this.outerRadius);\n var outerRadius = Math.max(this.innerRadius, this.outerRadius);\n var point = this.transformPoint(x, y);\n return isPointInSector(point.x, point.y, { startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius });\n };\n Sector.className = 'Sector';\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"centerX\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"centerY\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"innerRadius\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"outerRadius\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"startAngle\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"endAngle\", void 0);\n __decorate([\n ScenePathChangeDetection()\n ], Sector.prototype, \"angleOffset\", void 0);\n return Sector;\n}(Path));\nexport { Sector };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Group } from '../../../scene/group';\nimport { Line } from '../../../scene/shape/line';\nimport { Text } from '../../../scene/shape/text';\nimport { Circle } from '../../marker/circle';\nimport { Selection } from '../../../scene/selection';\nimport { LinearScale } from '../../../scale/linearScale';\nimport { Sector } from '../../../scene/shape/sector';\nimport { BBox } from '../../../scene/bbox';\nimport { HighlightStyle, SeriesTooltip, SeriesNodeBaseClickEvent } from './../series';\nimport { Label } from '../../label';\nimport { PointerEvents } from '../../../scene/node';\nimport { normalizeAngle180, toRadians } from '../../../util/angle';\nimport { toFixed, mod } from '../../../util/number';\nimport { Layers } from '../../layers';\nimport { Caption } from '../../../caption';\nimport { PolarSeries } from './polarSeries';\nimport { ChartAxisDirection } from '../../chartAxisDirection';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { isPointInSector, boxCollidesSector } from '../../../util/sector';\nimport { DeprecatedAndRenamedTo } from '../../../util/deprecation';\nimport { BOOLEAN, NUMBER, OPT_FUNCTION, OPT_LINE_DASH, OPT_NUMBER, OPT_STRING, STRING, COLOR_STRING_ARRAY, OPT_COLOR_STRING_ARRAY, Validate, COLOR_STRING, } from '../../../util/validation';\nimport { Logger } from '../../../util/logger';\nvar PieSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n __extends(PieSeriesNodeBaseClickEvent, _super);\n function PieSeriesNodeBaseClickEvent(angleKey, calloutLabelKey, sectorLabelKey, radiusKey, nativeEvent, datum, series) {\n var _this = _super.call(this, nativeEvent, datum, series) || this;\n _this.angleKey = angleKey;\n _this.calloutLabelKey = calloutLabelKey;\n _this.sectorLabelKey = sectorLabelKey;\n _this.radiusKey = radiusKey;\n return _this;\n }\n __decorate([\n DeprecatedAndRenamedTo('calloutLabelKey')\n ], PieSeriesNodeBaseClickEvent.prototype, \"labelKey\", void 0);\n return PieSeriesNodeBaseClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar PieSeriesNodeClickEvent = /** @class */ (function (_super) {\n __extends(PieSeriesNodeClickEvent, _super);\n function PieSeriesNodeClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeClick';\n return _this;\n }\n return PieSeriesNodeClickEvent;\n}(PieSeriesNodeBaseClickEvent));\nvar PieSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n __extends(PieSeriesNodeDoubleClickEvent, _super);\n function PieSeriesNodeDoubleClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeDoubleClick';\n return _this;\n }\n return PieSeriesNodeDoubleClickEvent;\n}(PieSeriesNodeBaseClickEvent));\nvar PieNodeTag;\n(function (PieNodeTag) {\n PieNodeTag[PieNodeTag[\"Sector\"] = 0] = \"Sector\";\n PieNodeTag[PieNodeTag[\"Callout\"] = 1] = \"Callout\";\n PieNodeTag[PieNodeTag[\"Label\"] = 2] = \"Label\";\n})(PieNodeTag || (PieNodeTag = {}));\nvar PieSeriesCalloutLabel = /** @class */ (function (_super) {\n __extends(PieSeriesCalloutLabel, _super);\n function PieSeriesCalloutLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.offset = 3; // from the callout line\n _this.minAngle = 0; // in degrees\n _this.formatter = undefined;\n _this.minSpacing = 4;\n _this.maxCollisionOffset = 50;\n return _this;\n }\n __decorate([\n Validate(NUMBER(0))\n ], PieSeriesCalloutLabel.prototype, \"offset\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeriesCalloutLabel.prototype, \"minAngle\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], PieSeriesCalloutLabel.prototype, \"formatter\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeriesCalloutLabel.prototype, \"minSpacing\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeriesCalloutLabel.prototype, \"maxCollisionOffset\", void 0);\n return PieSeriesCalloutLabel;\n}(Label));\nvar PieSeriesSectorLabel = /** @class */ (function (_super) {\n __extends(PieSeriesSectorLabel, _super);\n function PieSeriesSectorLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.positionOffset = 0;\n _this.positionRatio = 0.5;\n _this.formatter = undefined;\n return _this;\n }\n __decorate([\n Validate(NUMBER())\n ], PieSeriesSectorLabel.prototype, \"positionOffset\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], PieSeriesSectorLabel.prototype, \"positionRatio\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], PieSeriesSectorLabel.prototype, \"formatter\", void 0);\n return PieSeriesSectorLabel;\n}(Label));\nvar PieSeriesCalloutLine = /** @class */ (function () {\n function PieSeriesCalloutLine() {\n this.colors = undefined;\n this.length = 10;\n this.strokeWidth = 1;\n }\n __decorate([\n Validate(OPT_COLOR_STRING_ARRAY)\n ], PieSeriesCalloutLine.prototype, \"colors\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeriesCalloutLine.prototype, \"length\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeriesCalloutLine.prototype, \"strokeWidth\", void 0);\n return PieSeriesCalloutLine;\n}());\nvar PieSeriesTooltip = /** @class */ (function (_super) {\n __extends(PieSeriesTooltip, _super);\n function PieSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], PieSeriesTooltip.prototype, \"renderer\", void 0);\n return PieSeriesTooltip;\n}(SeriesTooltip));\nvar PieTitle = /** @class */ (function (_super) {\n __extends(PieTitle, _super);\n function PieTitle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.showInLegend = false;\n return _this;\n }\n __decorate([\n Validate(BOOLEAN)\n ], PieTitle.prototype, \"showInLegend\", void 0);\n return PieTitle;\n}(Caption));\nexport { PieTitle };\nvar DoughnutInnerLabel = /** @class */ (function (_super) {\n __extends(DoughnutInnerLabel, _super);\n function DoughnutInnerLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.text = '';\n _this.margin = 2;\n return _this;\n }\n __decorate([\n Validate(STRING)\n ], DoughnutInnerLabel.prototype, \"text\", void 0);\n __decorate([\n Validate(NUMBER())\n ], DoughnutInnerLabel.prototype, \"margin\", void 0);\n return DoughnutInnerLabel;\n}(Label));\nexport { DoughnutInnerLabel };\nvar DoughnutInnerCircle = /** @class */ (function () {\n function DoughnutInnerCircle() {\n this.fill = 'transparent';\n this.fillOpacity = 1;\n }\n __decorate([\n Validate(COLOR_STRING)\n ], DoughnutInnerCircle.prototype, \"fill\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1))\n ], DoughnutInnerCircle.prototype, \"fillOpacity\", void 0);\n return DoughnutInnerCircle;\n}());\nexport { DoughnutInnerCircle };\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n var _this = _super.call(this, { useLabelLayer: true }) || this;\n _this.radiusScale = new LinearScale();\n _this.groupSelection = Selection.select(_this.contentGroup, Group);\n _this.highlightSelection = Selection.select(_this.highlightGroup, Group);\n /**\n * The processed data that gets visualized.\n */\n _this.groupSelectionData = [];\n _this.sectorFormatData = [];\n _this.angleScale = (function () {\n var scale = new LinearScale();\n // Each sector is a ratio of the whole, where all ratios add up to 1.\n scale.domain = [0, 1];\n // Add 90 deg to start the first pie at 12 o'clock.\n scale.range = [-Math.PI, Math.PI].map(function (angle) { return angle + Math.PI / 2; });\n return scale;\n })();\n // When a user toggles a series item (e.g. from the legend), its boolean state is recorded here.\n _this.seriesItemEnabled = [];\n _this.calloutLabel = new PieSeriesCalloutLabel();\n _this.label = _this.calloutLabel;\n _this.sectorLabel = new PieSeriesSectorLabel();\n _this.calloutLine = new PieSeriesCalloutLine();\n _this.callout = _this.calloutLine;\n _this.tooltip = new PieSeriesTooltip();\n /**\n * The key of the numeric field to use to determine the angle (for example,\n * a pie sector angle).\n */\n _this.angleKey = '';\n _this.angleName = '';\n _this.innerLabels = [];\n /**\n * The key of the numeric field to use to determine the radii of pie sectors.\n * The largest value will correspond to the full radius and smaller values to\n * proportionally smaller radii.\n */\n _this.radiusKey = undefined;\n _this.radiusName = undefined;\n _this.radiusMin = undefined;\n _this.radiusMax = undefined;\n _this.calloutLabelKey = undefined;\n _this.calloutLabelName = undefined;\n _this.labelKey = undefined;\n _this.labelName = undefined;\n _this.sectorLabelKey = undefined;\n _this.sectorLabelName = undefined;\n _this.legendItemKey = undefined;\n _this.fills = ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'];\n _this.strokes = ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'];\n _this.fillOpacity = 1;\n _this.strokeOpacity = 1;\n _this.lineDash = [0];\n _this.lineDashOffset = 0;\n _this.formatter = undefined;\n /**\n * The series rotation in degrees.\n */\n _this.rotation = 0;\n _this.outerRadiusOffset = 0;\n _this.outerRadiusRatio = 1;\n _this.innerRadiusOffset = 0;\n _this.innerRadiusRatio = 1;\n _this.strokeWidth = 1;\n _this.shadow = undefined;\n _this.highlightStyle = new HighlightStyle();\n _this.datumSectorRefs = new WeakMap();\n _this.backgroundGroup = _this.rootGroup.appendChild(new Group({\n name: _this.id + \"-background\",\n layer: true,\n zIndex: Layers.SERIES_BACKGROUND_ZINDEX,\n }));\n var pieCalloutLabels = new Group({ name: 'pieCalloutLabels' });\n var pieSectorLabels = new Group({ name: 'pieSectorLabels' });\n var innerLabels = new Group({ name: 'innerLabels' });\n _this.labelGroup.append(pieCalloutLabels);\n _this.labelGroup.append(pieSectorLabels);\n _this.labelGroup.append(innerLabels);\n _this.calloutLabelSelection = Selection.select(pieCalloutLabels, Group);\n _this.sectorLabelSelection = Selection.select(pieSectorLabels, Text);\n _this.innerLabelsSelection = Selection.select(innerLabels, Text);\n return _this;\n }\n Object.defineProperty(PieSeries.prototype, \"title\", {\n get: function () {\n return this._title;\n },\n set: function (value) {\n var _a, _b;\n var oldTitle = this._title;\n if (oldTitle !== value) {\n if (oldTitle) {\n (_a = this.labelGroup) === null || _a === void 0 ? void 0 : _a.removeChild(oldTitle.node);\n }\n if (value) {\n value.node.textBaseline = 'bottom';\n (_b = this.labelGroup) === null || _b === void 0 ? void 0 : _b.appendChild(value.node);\n }\n this._title = value;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"data\", {\n get: function () {\n return this._data;\n },\n set: function (input) {\n this._data = input;\n this.processSeriesItemEnabled();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"innerCircle\", {\n get: function () {\n return this._innerCircleConfig;\n },\n set: function (value) {\n var _a;\n var oldCircleCfg = this._innerCircleConfig;\n if (oldCircleCfg !== value) {\n var oldNode = this._innerCircleNode;\n var circle = void 0;\n if (oldNode) {\n this.backgroundGroup.removeChild(oldNode);\n }\n if (value) {\n circle = new Circle();\n circle.fill = value.fill;\n circle.fillOpacity = (_a = value.fillOpacity) !== null && _a !== void 0 ? _a : 1;\n this.backgroundGroup.appendChild(circle);\n }\n this._innerCircleConfig = value;\n this._innerCircleNode = circle;\n }\n },\n enumerable: false,\n configurable: true\n });\n PieSeries.prototype.visibleChanged = function () {\n this.processSeriesItemEnabled();\n };\n PieSeries.prototype.processSeriesItemEnabled = function () {\n var _a = this, data = _a.data, visible = _a.visible;\n this.seriesItemEnabled = (data === null || data === void 0 ? void 0 : data.map(function () { return visible; })) || [];\n };\n PieSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.angleScale.domain;\n }\n else {\n return this.radiusScale.domain;\n }\n };\n PieSeries.prototype.processData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, angleKey, radiusKey, seriesItemEnabled, angleScale, groupSelectionData, sectorFormatData, calloutLabel, sectorLabel, seriesId, data, angleData, angleDataTotal, angleDataRatios, labelFormatter, labelKey, sectorLabelKey, labelData, sectorLabelData, radiusData, getLabelFormatterParams, showValueDeprecationWarning_1, sectorLabelFormatter, _b, radiusMin, radiusMax, radii, min_1, max, delta_1, rotation, halfPi, datumIndex, quadrantTextOpts, end;\n var _this = this;\n return __generator(this, function (_c) {\n _a = this, angleKey = _a.angleKey, radiusKey = _a.radiusKey, seriesItemEnabled = _a.seriesItemEnabled, angleScale = _a.angleScale, groupSelectionData = _a.groupSelectionData, sectorFormatData = _a.sectorFormatData, calloutLabel = _a.calloutLabel, sectorLabel = _a.sectorLabel, seriesId = _a.id;\n data = angleKey && this.data ? this.data : [];\n angleData = data.map(function (datum, index) { return (seriesItemEnabled[index] && Math.abs(+datum[angleKey])) || 0; });\n angleDataTotal = angleData.reduce(function (a, b) { return a + b; }, 0);\n angleDataRatios = (function () {\n var sum = 0;\n return angleData.map(function (datum) { return (sum += datum / angleDataTotal); });\n })();\n labelFormatter = calloutLabel.formatter;\n labelKey = calloutLabel.enabled ? this.calloutLabelKey : undefined;\n sectorLabelKey = sectorLabel.enabled ? this.sectorLabelKey : undefined;\n labelData = [];\n sectorLabelData = [];\n radiusData = [];\n getLabelFormatterParams = function (datum) {\n return {\n datum: datum,\n angleKey: angleKey,\n angleValue: datum[angleKey],\n angleName: _this.angleName,\n radiusKey: radiusKey,\n radiusValue: radiusKey ? datum[radiusKey] : undefined,\n radiusName: _this.radiusName,\n labelKey: labelKey,\n labelValue: labelKey ? datum[labelKey] : undefined,\n labelName: _this.calloutLabelName,\n calloutLabelKey: labelKey,\n calloutLabelValue: labelKey ? datum[labelKey] : undefined,\n calloutLabelName: _this.calloutLabelName,\n sectorLabelKey: sectorLabelKey,\n sectorLabelValue: sectorLabelKey ? datum[sectorLabelKey] : undefined,\n sectorLabelName: _this.sectorLabelName,\n seriesId: seriesId,\n };\n };\n if (labelKey) {\n if (labelFormatter) {\n showValueDeprecationWarning_1 = function () {\n return Logger.warnOnce('the use of { value } in the pie chart label formatter function is deprecated. Please use { datum, labelKey, ... } instead.');\n };\n labelData = data.map(function (datum) {\n var deprecatedValue = datum[labelKey];\n var formatterParams = __assign(__assign({}, getLabelFormatterParams(datum)), { get value() {\n showValueDeprecationWarning_1();\n return deprecatedValue;\n },\n set value(v) {\n showValueDeprecationWarning_1();\n deprecatedValue = v;\n } });\n return labelFormatter(formatterParams);\n });\n }\n else {\n labelData = data.map(function (datum) { return String(datum[labelKey]); });\n }\n }\n sectorLabelFormatter = sectorLabel.formatter;\n if (sectorLabelKey) {\n if (sectorLabelFormatter) {\n sectorLabelData = data.map(function (datum) {\n var formatterParams = getLabelFormatterParams(datum);\n return sectorLabelFormatter(formatterParams);\n });\n }\n else {\n sectorLabelData = data.map(function (datum) { return String(datum[sectorLabelKey]); });\n }\n }\n if (radiusKey) {\n _b = this, radiusMin = _b.radiusMin, radiusMax = _b.radiusMax;\n radii = data.map(function (datum) { return Math.abs(datum[radiusKey]); });\n min_1 = radiusMin !== null && radiusMin !== void 0 ? radiusMin : 0;\n max = radiusMax ? radiusMax : Math.max.apply(Math, __spread(radii));\n delta_1 = max - min_1;\n radiusData = radii.map(function (value) { return (delta_1 ? (value - min_1) / delta_1 : 1); });\n }\n groupSelectionData.length = 0;\n sectorFormatData.length = 0;\n sectorFormatData.push.apply(sectorFormatData, __spread(data.map(function (datum, datumIdx) { return _this.getSectorFormat(datum, datumIdx, datumIdx, false); })));\n rotation = toRadians(this.rotation);\n halfPi = Math.PI / 2;\n datumIndex = 0;\n quadrantTextOpts = [\n { textAlign: 'center', textBaseline: 'bottom' },\n { textAlign: 'left', textBaseline: 'middle' },\n { textAlign: 'center', textBaseline: 'hanging' },\n { textAlign: 'right', textBaseline: 'middle' },\n ];\n end = 0;\n angleDataRatios.forEach(function (start) {\n if (isNaN(start)) {\n return;\n } // No sectors displayed - nothing to do.\n var radius = radiusKey ? radiusData[datumIndex] : 1;\n var startAngle = angleScale.convert(start) + rotation;\n var endAngle = angleScale.convert(end) + rotation;\n var midAngle = (startAngle + endAngle) / 2;\n var span = Math.abs(endAngle - startAngle);\n var midCos = Math.cos(midAngle);\n var midSin = Math.sin(midAngle);\n var labelMinAngle = toRadians(calloutLabel.minAngle);\n var labelVisible = labelKey && span > labelMinAngle;\n var midAngle180 = normalizeAngle180(midAngle);\n // Split the circle into quadrants like so: ⊗\n var quadrantStart = (-3 * Math.PI) / 4; // same as `normalizeAngle180(toRadians(-135))`\n var quadrantOffset = midAngle180 - quadrantStart;\n var quadrant = Math.floor(quadrantOffset / halfPi);\n var quadrantIndex = mod(quadrant, quadrantTextOpts.length);\n var _a = quadrantTextOpts[quadrantIndex], textAlign = _a.textAlign, textBaseline = _a.textBaseline;\n var datum = data[datumIndex];\n var itemId = datumIndex;\n groupSelectionData.push({\n series: _this,\n datum: datum,\n itemId: itemId,\n index: datumIndex,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle,\n midAngle: midAngle,\n midCos: midCos,\n midSin: midSin,\n calloutLabel: labelVisible\n ? {\n text: labelData[datumIndex],\n textAlign: textAlign,\n textBaseline: textBaseline,\n hidden: false,\n collisionTextAlign: undefined,\n collisionOffsetY: 0,\n box: undefined,\n }\n : undefined,\n sectorLabel: sectorLabelKey\n ? {\n text: sectorLabelData[datumIndex],\n }\n : undefined,\n sectorFormat: sectorFormatData[datumIndex],\n });\n datumIndex++;\n end = start; // Update for next iteration.\n });\n return [2 /*return*/];\n });\n });\n };\n PieSeries.prototype.getSectorFormat = function (datum, itemId, index, highlight) {\n var _a, _b, _c, _d, _e;\n var _f = this, angleKey = _f.angleKey, radiusKey = _f.radiusKey, fills = _f.fills, strokes = _f.strokes, seriesFillOpacity = _f.fillOpacity, formatter = _f.formatter, seriesId = _f.id;\n var highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n var isDatumHighlighted = highlight && (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.series) === this && itemId === highlightedDatum.itemId;\n var highlightedStyle = isDatumHighlighted ? this.highlightStyle.item : null;\n var fill = (highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.fill) || fills[index % fills.length];\n var fillOpacity = (_b = highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.fillOpacity) !== null && _b !== void 0 ? _b : seriesFillOpacity;\n var stroke = (highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.stroke) || strokes[index % strokes.length];\n var strokeWidth = (_c = highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.strokeWidth) !== null && _c !== void 0 ? _c : this.getStrokeWidth(this.strokeWidth);\n var format;\n if (formatter) {\n format = formatter({\n datum: datum,\n angleKey: angleKey,\n radiusKey: radiusKey,\n fill: fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n highlighted: isDatumHighlighted,\n seriesId: seriesId,\n });\n }\n return {\n fill: (format === null || format === void 0 ? void 0 : format.fill) || fill,\n fillOpacity: (_d = format === null || format === void 0 ? void 0 : format.fillOpacity) !== null && _d !== void 0 ? _d : fillOpacity,\n stroke: (format === null || format === void 0 ? void 0 : format.stroke) || stroke,\n strokeWidth: (_e = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _e !== void 0 ? _e : strokeWidth,\n };\n };\n PieSeries.prototype.createNodeData = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, []];\n });\n });\n };\n PieSeries.prototype.getInnerRadius = function () {\n var _a = this, radius = _a.radius, innerRadiusRatio = _a.innerRadiusRatio, innerRadiusOffset = _a.innerRadiusOffset;\n var innerRadius = radius * (innerRadiusRatio !== null && innerRadiusRatio !== void 0 ? innerRadiusRatio : 1) + (innerRadiusOffset ? innerRadiusOffset : 0);\n if (innerRadius === radius || innerRadius < 0) {\n return 0;\n }\n return innerRadius;\n };\n PieSeries.prototype.getOuterRadius = function () {\n var _a = this, radius = _a.radius, outerRadiusRatio = _a.outerRadiusRatio, outerRadiusOffset = _a.outerRadiusOffset;\n var outerRadius = radius * (outerRadiusRatio !== null && outerRadiusRatio !== void 0 ? outerRadiusRatio : 1) + (outerRadiusOffset ? outerRadiusOffset : 0);\n if (outerRadius < 0) {\n return 0;\n }\n return outerRadius;\n };\n PieSeries.prototype.updateRadiusScale = function () {\n var innerRadius = this.getInnerRadius();\n var outerRadius = this.getOuterRadius();\n this.radiusScale.range = [innerRadius, outerRadius];\n };\n PieSeries.prototype.getTitleTranslationY = function () {\n var _a, _b;\n var outerRadius = Math.max(0, this.radiusScale.range[1]);\n if (outerRadius === 0) {\n return NaN;\n }\n var spacing = (_b = (_a = this.title) === null || _a === void 0 ? void 0 : _a.spacing) !== null && _b !== void 0 ? _b : 0;\n var titleOffset = 2 + spacing;\n var minLabelY = Math.min.apply(Math, __spread([0], this.groupSelectionData.map(function (d) { var _a, _b; return ((_b = (_a = d.calloutLabel) === null || _a === void 0 ? void 0 : _a.box) === null || _b === void 0 ? void 0 : _b.y) || 0; })));\n var dy = Math.max(0, -outerRadius - minLabelY);\n return -outerRadius - titleOffset - dy;\n };\n PieSeries.prototype.update = function () {\n return __awaiter(this, void 0, void 0, function () {\n var title, dy;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n title = this.title;\n this.updateRadiusScale();\n this.rootGroup.translationX = this.centerX;\n this.rootGroup.translationY = this.centerY;\n if (title) {\n dy = this.getTitleTranslationY();\n if (isFinite(dy)) {\n title.node.visible = title.enabled;\n title.node.translationY = dy;\n }\n else {\n title.node.visible = false;\n }\n }\n this.updateNodeMidPoint();\n return [4 /*yield*/, this.updateSelections()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.updateNodes()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n PieSeries.prototype.updateNodeMidPoint = function () {\n var _this = this;\n this.groupSelectionData.forEach(function (d) {\n var radius = _this.radiusScale.convert(d.radius);\n d.nodeMidPoint = {\n x: d.midCos * Math.max(0, radius / 2),\n y: d.midSin * Math.max(0, radius / 2),\n };\n });\n };\n PieSeries.prototype.updateSelections = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.updateGroupSelection()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n PieSeries.prototype.updateGroupSelection = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupSelection, highlightSelection, calloutLabelSelection, sectorLabelSelection, innerLabelsSelection, update;\n var _this = this;\n return __generator(this, function (_b) {\n _a = this, groupSelection = _a.groupSelection, highlightSelection = _a.highlightSelection, calloutLabelSelection = _a.calloutLabelSelection, sectorLabelSelection = _a.sectorLabelSelection, innerLabelsSelection = _a.innerLabelsSelection;\n update = function (selection) {\n return selection.update(_this.groupSelectionData, function (group) {\n var sector = new Sector();\n sector.tag = PieNodeTag.Sector;\n group.appendChild(sector);\n });\n };\n this.groupSelection = update(groupSelection);\n this.highlightSelection = update(highlightSelection);\n calloutLabelSelection.update(this.groupSelectionData, function (group) {\n var line = new Line();\n line.tag = PieNodeTag.Callout;\n line.pointerEvents = PointerEvents.None;\n group.appendChild(line);\n var text = new Text();\n text.tag = PieNodeTag.Label;\n text.pointerEvents = PointerEvents.None;\n group.appendChild(text);\n });\n sectorLabelSelection.update(this.groupSelectionData, function (node) {\n node.pointerEvents = PointerEvents.None;\n });\n innerLabelsSelection.update(this.innerLabels, function (node) {\n node.pointerEvents = PointerEvents.None;\n });\n return [2 /*return*/];\n });\n });\n };\n PieSeries.prototype.updateNodes = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var highlightedDatum, isVisible, radiusScale, innerRadius, updateSectorFn;\n var _this = this;\n return __generator(this, function (_b) {\n highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n isVisible = this.seriesItemEnabled.indexOf(true) >= 0;\n this.rootGroup.visible = isVisible;\n this.backgroundGroup.visible = isVisible;\n this.contentGroup.visible = isVisible;\n this.highlightGroup.visible = isVisible && (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.series) === this;\n this.labelGroup.visible = isVisible;\n this.contentGroup.opacity = this.getOpacity();\n this.updateInnerCircle();\n radiusScale = this.radiusScale;\n innerRadius = radiusScale.convert(0);\n updateSectorFn = function (sector, datum, index, isDatumHighlighted) {\n var radius = radiusScale.convert(datum.radius);\n // Bring highlighted sector's parent group to front.\n var sectorParent = sector.parent;\n var sectorGrandParent = sectorParent === null || sectorParent === void 0 ? void 0 : sectorParent.parent;\n if (isDatumHighlighted && sectorParent && sectorGrandParent) {\n sectorGrandParent.removeChild(sectorParent);\n sectorGrandParent.appendChild(sectorParent);\n }\n sector.innerRadius = Math.max(0, innerRadius);\n sector.outerRadius = Math.max(0, radius);\n sector.startAngle = datum.startAngle;\n sector.endAngle = datum.endAngle;\n var format = _this.getSectorFormat(datum.datum, datum.itemId, index, isDatumHighlighted);\n sector.fill = format.fill;\n sector.stroke = format.stroke;\n sector.strokeWidth = format.strokeWidth;\n sector.fillOpacity = format.fillOpacity;\n sector.strokeOpacity = _this.strokeOpacity;\n sector.lineDash = _this.lineDash;\n sector.lineDashOffset = _this.lineDashOffset;\n sector.fillShadow = _this.shadow;\n sector.lineJoin = 'round';\n sector.visible = _this.seriesItemEnabled[index];\n _this.datumSectorRefs.set(datum, sector);\n };\n this.groupSelection\n .selectByTag(PieNodeTag.Sector)\n .forEach(function (node, index) { return updateSectorFn(node, node.datum, index, false); });\n this.highlightSelection.selectByTag(PieNodeTag.Sector).forEach(function (node, index) {\n var isDatumHighlighted = (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.series) === _this && node.datum.itemId === highlightedDatum.itemId;\n node.visible = isDatumHighlighted;\n if (node.visible) {\n updateSectorFn(node, node.datum, index, isDatumHighlighted);\n }\n });\n this.updateCalloutLineNodes();\n this.updateCalloutLabelNodes();\n this.updateSectorLabelNodes();\n this.updateInnerLabelNodes();\n return [2 /*return*/];\n });\n });\n };\n PieSeries.prototype.updateCalloutLineNodes = function () {\n var _a = this, radiusScale = _a.radiusScale, calloutLine = _a.calloutLine;\n var calloutLength = calloutLine.length;\n var calloutStrokeWidth = calloutLine.strokeWidth;\n var calloutColors = calloutLine.colors || this.strokes;\n var offset = this.calloutLabel.offset;\n this.calloutLabelSelection.selectByTag(PieNodeTag.Callout).forEach(function (line, index) {\n var datum = line.datum;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n var label = datum.calloutLabel;\n if (label && label.text && !label.hidden && outerRadius !== 0) {\n line.visible = true;\n line.strokeWidth = calloutStrokeWidth;\n line.stroke = calloutColors[index % calloutColors.length];\n line.fill = undefined;\n var x1 = datum.midCos * outerRadius;\n var y1 = datum.midSin * outerRadius;\n var x2 = datum.midCos * (outerRadius + calloutLength);\n var y2 = datum.midSin * (outerRadius + calloutLength);\n if (label.collisionTextAlign || label.collisionOffsetY !== 0) {\n // Get the closest point to the text bounding box\n var box = label.box;\n var cx = x2 < box.x ? box.x : x2 > box.x + box.width ? box.x + box.width : x2;\n var cy = y2 < box.y ? box.y : y2 > box.y + box.height ? box.y + box.height : y2;\n // Apply label offset\n var dx = cx - x2;\n var dy = cy - y2;\n var length_1 = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n var paddedLength = length_1 - offset;\n if (paddedLength > 0) {\n x2 = x2 + (dx * paddedLength) / length_1;\n y2 = y2 + (dy * paddedLength) / length_1;\n }\n }\n line.x1 = x1;\n line.y1 = y1;\n line.x2 = x2;\n line.y2 = y2;\n }\n else {\n line.visible = false;\n }\n });\n };\n PieSeries.prototype.getLabelOverflow = function (text, box) {\n var seriesBox = this.chart.getSeriesRect();\n var seriesLeft = seriesBox.x - this.centerX;\n var seriesRight = seriesBox.x + seriesBox.width - this.centerX;\n var seriesTop = seriesBox.y - this.centerY;\n var seriesBottom = seriesBox.y + seriesBox.height - this.centerY;\n var errPx = 1; // Prevents errors related to floating point calculations\n var visibleTextPart = 1;\n if (box.x + errPx < seriesLeft) {\n visibleTextPart = (box.x + box.width - seriesLeft) / box.width;\n }\n else if (box.x + box.width - errPx > seriesRight) {\n visibleTextPart = (seriesRight - box.x) / box.width;\n }\n var hasVerticalOverflow = box.y + errPx < seriesTop || box.y + box.height - errPx > seriesBottom;\n var textLength = Math.floor(text.length * visibleTextPart) - 1;\n return { visibleTextPart: visibleTextPart, textLength: textLength, hasVerticalOverflow: hasVerticalOverflow };\n };\n PieSeries.prototype.computeCalloutLabelCollisionOffsets = function () {\n var _this = this;\n var _a = this, radiusScale = _a.radiusScale, calloutLabel = _a.calloutLabel, calloutLine = _a.calloutLine;\n var offset = calloutLabel.offset, minSpacing = calloutLabel.minSpacing;\n var innerRadius = radiusScale.convert(0);\n var shouldSkip = function (datum) {\n var label = datum.calloutLabel;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n return !label || outerRadius === 0;\n };\n var fullData = this.groupSelectionData;\n var data = this.groupSelectionData.filter(function (text) { return !shouldSkip(text); });\n data.forEach(function (datum) {\n var label = datum.calloutLabel;\n label.hidden = false;\n label.collisionTextAlign = undefined;\n label.collisionOffsetY = 0;\n });\n if (data.length <= 1) {\n return;\n }\n var leftLabels = data.filter(function (d) { return d.midCos < 0; }).sort(function (a, b) { return a.midSin - b.midSin; });\n var rightLabels = data.filter(function (d) { return d.midCos >= 0; }).sort(function (a, b) { return a.midSin - b.midSin; });\n var topLabels = data\n .filter(function (d) { return d.midSin < 0 && d.calloutLabel.textAlign === 'center'; })\n .sort(function (a, b) { return a.midCos - b.midCos; });\n var bottomLabels = data\n .filter(function (d) { return d.midSin >= 0 && d.calloutLabel.textAlign === 'center'; })\n .sort(function (a, b) { return a.midCos - b.midCos; });\n var tempTextNode = new Text();\n var getTextBBox = function (datum) {\n var label = datum.calloutLabel;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n var labelRadius = outerRadius + calloutLine.length + offset;\n var x = datum.midCos * labelRadius;\n var y = datum.midSin * labelRadius + label.collisionOffsetY;\n _this.setTextDimensionalProps(tempTextNode, x, y, _this.calloutLabel, label);\n return tempTextNode.computeBBox();\n };\n var avoidNeighbourYCollision = function (label, next, direction) {\n var box = getTextBBox(label).grow(minSpacing / 2);\n var other = getTextBBox(next).grow(minSpacing / 2);\n // The full collision is not detected, because sometimes\n // the next label can appear behind the label with offset\n var collidesOrBehind = box.x < other.x + other.width &&\n box.x + box.width > other.x &&\n (direction === 'to-top' ? box.y < other.y + other.height : box.y + box.height > other.y);\n if (collidesOrBehind) {\n var dy = direction === 'to-top' ? box.y - other.y - other.height : box.y + box.height - other.y;\n next.calloutLabel.collisionOffsetY = dy;\n }\n };\n var avoidYCollisions = function (labels) {\n var midLabel = labels.slice().sort(function (a, b) { return Math.abs(a.midSin) - Math.abs(b.midSin); })[0];\n var midIndex = labels.indexOf(midLabel);\n for (var i = midIndex - 1; i >= 0; i--) {\n var prev = labels[i + 1];\n var next = labels[i];\n avoidNeighbourYCollision(prev, next, 'to-top');\n }\n for (var i = midIndex + 1; i < labels.length; i++) {\n var prev = labels[i - 1];\n var next = labels[i];\n avoidNeighbourYCollision(prev, next, 'to-bottom');\n }\n };\n var avoidXCollisions = function (labels) {\n var labelsCollideLabelsByY = data.some(function (datum) { return datum.calloutLabel.collisionOffsetY !== 0; });\n var boxes = labels.map(function (label) { return getTextBBox(label); });\n var paddedBoxes = boxes.map(function (box) { return box.clone().grow(minSpacing / 2); });\n var labelsCollideLabelsByX = false;\n loop: for (var i = 0; i < paddedBoxes.length; i++) {\n var box = paddedBoxes[i];\n for (var j = i + 1; j < labels.length; j++) {\n var other = paddedBoxes[j];\n if (box.collidesBBox(other)) {\n labelsCollideLabelsByX = true;\n break loop;\n }\n }\n }\n var sectors = fullData.map(function (datum) {\n var startAngle = datum.startAngle, endAngle = datum.endAngle;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n return { startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius };\n });\n var labelsCollideSectors = boxes.some(function (box) {\n return sectors.some(function (sector) { return boxCollidesSector(box, sector); });\n });\n if (!labelsCollideLabelsByX && !labelsCollideLabelsByY && !labelsCollideSectors) {\n return;\n }\n labels\n .filter(function (datum) { return datum.calloutLabel.textAlign === 'center'; })\n .forEach(function (datum) {\n var label = datum.calloutLabel;\n label.collisionTextAlign = datum.midCos < 0 ? 'right' : datum.midCos > 0 ? 'left' : 'center';\n });\n };\n avoidYCollisions(leftLabels);\n avoidYCollisions(rightLabels);\n avoidXCollisions(topLabels);\n avoidXCollisions(bottomLabels);\n };\n PieSeries.prototype.updateCalloutLabelNodes = function () {\n var _this = this;\n var _a = this, radiusScale = _a.radiusScale, calloutLabel = _a.calloutLabel, calloutLine = _a.calloutLine;\n var calloutLength = calloutLine.length;\n var offset = calloutLabel.offset, color = calloutLabel.color;\n var tempTextNode = new Text();\n this.calloutLabelSelection.selectByTag(PieNodeTag.Label).forEach(function (text) {\n var datum = text.datum;\n var label = datum.calloutLabel;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n if (!label || !label.text || outerRadius === 0 || label.hidden) {\n text.visible = false;\n return;\n }\n var labelRadius = outerRadius + calloutLength + offset;\n var x = datum.midCos * labelRadius;\n var y = datum.midSin * labelRadius + label.collisionOffsetY;\n // Detect text overflow\n _this.setTextDimensionalProps(tempTextNode, x, y, _this.calloutLabel, label);\n var box = tempTextNode.computeBBox();\n var _a = _this.getLabelOverflow(label.text, box), visibleTextPart = _a.visibleTextPart, textLength = _a.textLength, hasVerticalOverflow = _a.hasVerticalOverflow;\n var displayText = visibleTextPart === 1 ? label.text : label.text.substring(0, textLength) + \"\\u2026\";\n _this.setTextDimensionalProps(text, x, y, _this.calloutLabel, __assign(__assign({}, label), { text: displayText }));\n text.fill = color;\n text.visible = !hasVerticalOverflow;\n });\n };\n PieSeries.prototype.computeLabelsBBox = function (options) {\n var _this = this;\n var _a = this, radiusScale = _a.radiusScale, calloutLabel = _a.calloutLabel, calloutLine = _a.calloutLine;\n var calloutLength = calloutLine.length;\n var offset = calloutLabel.offset, maxCollisionOffset = calloutLabel.maxCollisionOffset;\n this.updateRadiusScale();\n this.computeCalloutLabelCollisionOffsets();\n var text = new Text();\n var textBoxes = this.groupSelectionData\n .map(function (datum) {\n var label = datum.calloutLabel;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n if (!label || outerRadius === 0) {\n return null;\n }\n var labelRadius = outerRadius + calloutLength + offset;\n var x = datum.midCos * labelRadius;\n var y = datum.midSin * labelRadius + label.collisionOffsetY;\n _this.setTextDimensionalProps(text, x, y, _this.calloutLabel, label);\n var box = text.computeBBox();\n label.box = box;\n if (Math.abs(label.collisionOffsetY) > maxCollisionOffset) {\n label.hidden = true;\n return null;\n }\n if (options.hideWhenNecessary) {\n var _a = _this.getLabelOverflow(label.text, box), textLength = _a.textLength, hasVerticalOverflow = _a.hasVerticalOverflow;\n var isTooShort = label.text.length > 2 && textLength < 2;\n if (hasVerticalOverflow || isTooShort) {\n label.hidden = true;\n return null;\n }\n }\n label.hidden = false;\n return box;\n })\n .filter(function (box) { return box != null; });\n if (this.title && this.title.text) {\n var dy = this.getTitleTranslationY();\n if (isFinite(dy)) {\n this.setTextDimensionalProps(text, 0, dy, this.title, {\n text: this.title.text,\n textBaseline: 'bottom',\n textAlign: 'center',\n hidden: false,\n collisionTextAlign: undefined,\n collisionOffsetY: 0,\n });\n var box = text.computeBBox();\n textBoxes.push(box);\n }\n }\n if (textBoxes.length === 0) {\n return null;\n }\n return BBox.merge(textBoxes);\n };\n PieSeries.prototype.setTextDimensionalProps = function (textNode, x, y, style, label) {\n var fontStyle = style.fontStyle, fontWeight = style.fontWeight, fontSize = style.fontSize, fontFamily = style.fontFamily;\n textNode.fontStyle = fontStyle;\n textNode.fontWeight = fontWeight;\n textNode.fontSize = fontSize;\n textNode.fontFamily = fontFamily;\n textNode.text = label.text;\n textNode.x = x;\n textNode.y = y;\n textNode.textAlign = label.collisionTextAlign || label.textAlign;\n textNode.textBaseline = label.textBaseline;\n };\n PieSeries.prototype.updateSectorLabelNodes = function () {\n var _this = this;\n var radiusScale = this.radiusScale;\n var innerRadius = radiusScale.convert(0);\n var _a = this.sectorLabel, fontSize = _a.fontSize, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontFamily = _a.fontFamily, positionOffset = _a.positionOffset, positionRatio = _a.positionRatio, color = _a.color;\n var isDoughnut = innerRadius > 0;\n var singleVisibleSector = this.seriesItemEnabled.filter(Boolean).length === 1;\n this.sectorLabelSelection.each(function (text, datum) {\n var sectorLabel = datum.sectorLabel;\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius);\n var isTextVisible = false;\n if (sectorLabel && outerRadius !== 0) {\n var labelRadius = innerRadius * (1 - positionRatio) + radius * positionRatio + positionOffset;\n text.fill = color;\n text.fontStyle = fontStyle;\n text.fontWeight = fontWeight;\n text.fontSize = fontSize;\n text.fontFamily = fontFamily;\n text.text = sectorLabel.text;\n var shouldPutTextInCenter = !isDoughnut && singleVisibleSector;\n if (shouldPutTextInCenter) {\n text.x = 0;\n text.y = 0;\n }\n else {\n text.x = datum.midCos * labelRadius;\n text.y = datum.midSin * labelRadius;\n }\n text.textAlign = 'center';\n text.textBaseline = 'middle';\n var sector = _this.datumSectorRefs.get(datum);\n if (sector) {\n var bbox = text.computeBBox();\n var corners = [\n [bbox.x, bbox.y],\n [bbox.x + bbox.width, bbox.y],\n [bbox.x + bbox.width, bbox.y + bbox.height],\n [bbox.x, bbox.y + bbox.height],\n ];\n var startAngle = datum.startAngle, endAngle = datum.endAngle;\n var sectorBounds_1 = { startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius };\n if (corners.every(function (_a) {\n var _b = __read(_a, 2), x = _b[0], y = _b[1];\n return isPointInSector(x, y, sectorBounds_1);\n })) {\n isTextVisible = true;\n }\n }\n }\n text.visible = isTextVisible;\n });\n };\n PieSeries.prototype.updateInnerCircle = function () {\n var circle = this._innerCircleNode;\n if (!circle) {\n return;\n }\n var innerRadius = this.getInnerRadius();\n if (innerRadius === 0) {\n circle.size = 0;\n }\n else {\n var circleRadius = Math.min(innerRadius, this.getOuterRadius());\n var antiAliasingPadding = 1;\n circle.size = Math.ceil(circleRadius * 2 + antiAliasingPadding);\n }\n };\n PieSeries.prototype.updateInnerLabelNodes = function () {\n var textBBoxes = [];\n var margins = [];\n this.innerLabelsSelection.each(function (text, datum) {\n var fontStyle = datum.fontStyle, fontWeight = datum.fontWeight, fontSize = datum.fontSize, fontFamily = datum.fontFamily, color = datum.color;\n text.fontStyle = fontStyle;\n text.fontWeight = fontWeight;\n text.fontSize = fontSize;\n text.fontFamily = fontFamily;\n text.text = datum.text;\n text.x = 0;\n text.y = 0;\n text.fill = color;\n text.textAlign = 'center';\n text.textBaseline = 'alphabetic';\n textBBoxes.push(text.computeBBox());\n margins.push(datum.margin);\n });\n var getMarginTop = function (index) { return (index === 0 ? 0 : margins[index]); };\n var getMarginBottom = function (index) { return (index === margins.length - 1 ? 0 : margins[index]); };\n var totalHeight = textBBoxes.reduce(function (sum, bbox, i) {\n return sum + bbox.height + getMarginTop(i) + getMarginBottom(i);\n }, 0);\n var totalWidth = Math.max.apply(Math, __spread(textBBoxes.map(function (bbox) { return bbox.width; })));\n var innerRadius = this.getInnerRadius();\n var labelRadius = Math.sqrt(Math.pow(totalWidth / 2, 2) + Math.pow(totalHeight / 2, 2));\n var labelsVisible = labelRadius <= (innerRadius > 0 ? innerRadius : this.getOuterRadius());\n var textBottoms = [];\n for (var i = 0, prev = -totalHeight / 2; i < textBBoxes.length; i++) {\n var bbox = textBBoxes[i];\n var bottom = bbox.height + prev + getMarginTop(i);\n textBottoms.push(bottom);\n prev = bottom + getMarginBottom(i);\n }\n this.innerLabelsSelection.each(function (text, _datum, index) {\n text.y = textBottoms[index];\n text.visible = labelsVisible;\n });\n };\n PieSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new PieSeriesNodeClickEvent(this.angleKey, this.calloutLabelKey, this.sectorLabelKey, this.radiusKey, event, datum, this);\n };\n PieSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new PieSeriesNodeDoubleClickEvent(this.angleKey, this.calloutLabelKey, this.sectorLabelKey, this.radiusKey, event, datum, this);\n };\n PieSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var angleKey = this.angleKey;\n if (!angleKey) {\n return '';\n }\n var _a = this, tooltip = _a.tooltip, angleName = _a.angleName, radiusKey = _a.radiusKey, radiusName = _a.radiusName, calloutLabelKey = _a.calloutLabelKey, sectorLabelKey = _a.sectorLabelKey, calloutLabelName = _a.calloutLabelName, sectorLabelName = _a.sectorLabelName, seriesId = _a.id;\n var tooltipRenderer = tooltip.renderer;\n var color = nodeDatum.sectorFormat.fill;\n var datum = nodeDatum.datum;\n var label = calloutLabelKey ? datum[calloutLabelKey] + \": \" : '';\n var angleValue = datum[angleKey];\n var formattedAngleValue = typeof angleValue === 'number' ? toFixed(angleValue) : angleValue.toString();\n var title = this.title ? this.title.text : undefined;\n var content = label + formattedAngleValue;\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer({\n datum: datum,\n angleKey: angleKey,\n angleValue: angleValue,\n angleName: angleName,\n radiusKey: radiusKey,\n radiusValue: radiusKey ? datum[radiusKey] : undefined,\n radiusName: radiusName,\n labelKey: calloutLabelKey,\n labelName: calloutLabelName,\n calloutLabelKey: calloutLabelKey,\n calloutLabelName: calloutLabelName,\n sectorLabelKey: sectorLabelKey,\n sectorLabelName: sectorLabelName,\n title: title,\n color: color,\n seriesId: seriesId,\n }), defaults);\n }\n return toTooltipHtml(defaults);\n };\n PieSeries.prototype.getLegendData = function () {\n var _this = this;\n var _a = this, calloutLabelKey = _a.calloutLabelKey, legendItemKey = _a.legendItemKey, data = _a.data, id = _a.id, sectorFormatData = _a.sectorFormatData;\n if (!data || data.length === 0 || (!legendItemKey && !calloutLabelKey))\n return [];\n var titleText = this.title && this.title.showInLegend && this.title.text;\n var legendData = data.map(function (datum, index) {\n var labelParts = [];\n titleText && labelParts.push(titleText);\n if (legendItemKey) {\n labelParts.push(String(datum[legendItemKey]));\n }\n else if (calloutLabelKey) {\n labelParts.push(String(datum[calloutLabelKey]));\n }\n return {\n id: id,\n itemId: index,\n seriesId: id,\n enabled: _this.seriesItemEnabled[index],\n label: {\n text: labelParts.join(' - '),\n },\n marker: {\n fill: sectorFormatData[index].fill,\n stroke: sectorFormatData[index].stroke,\n fillOpacity: _this.fillOpacity,\n strokeOpacity: _this.strokeOpacity,\n },\n };\n });\n return legendData;\n };\n PieSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n this.seriesItemEnabled[itemId] = enabled;\n this.nodeDataRefresh = true;\n };\n PieSeries.prototype.toggleOtherSeriesItems = function (seriesToggled, datumToggled, enabled, suggestedEnabled) {\n var _this = this;\n var _a, _b;\n var legendItemKey = this.legendItemKey;\n if (seriesToggled.type !== 'pie')\n return;\n if (legendItemKey === undefined)\n return;\n var pieSeriesToggled = seriesToggled;\n var datumToggledLegendItemValue = datumToggled &&\n pieSeriesToggled.legendItemKey && ((_a = pieSeriesToggled.data) === null || _a === void 0 ? void 0 : _a.find(function (_, index) { return index === datumToggled.itemId; })[pieSeriesToggled.legendItemKey]);\n if (!datumToggledLegendItemValue)\n return;\n (_b = this.data) === null || _b === void 0 ? void 0 : _b.forEach(function (d, itemId) {\n if (enabled !== undefined && d[legendItemKey] === datumToggledLegendItemValue) {\n _this.toggleSeriesItem(itemId, enabled);\n }\n else if (suggestedEnabled !== undefined) {\n _this.toggleSeriesItem(itemId, suggestedEnabled || d[legendItemKey] === datumToggledLegendItemValue);\n }\n });\n };\n PieSeries.className = 'PieSeries';\n PieSeries.type = 'pie';\n __decorate([\n DeprecatedAndRenamedTo('calloutLabel')\n ], PieSeries.prototype, \"label\", void 0);\n __decorate([\n DeprecatedAndRenamedTo('calloutLine')\n ], PieSeries.prototype, \"callout\", void 0);\n __decorate([\n Validate(STRING)\n ], PieSeries.prototype, \"angleKey\", void 0);\n __decorate([\n Validate(STRING)\n ], PieSeries.prototype, \"angleName\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"radiusKey\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"radiusName\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], PieSeries.prototype, \"radiusMin\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], PieSeries.prototype, \"radiusMax\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"calloutLabelKey\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"calloutLabelName\", void 0);\n __decorate([\n DeprecatedAndRenamedTo('calloutLabelKey')\n ], PieSeries.prototype, \"labelKey\", void 0);\n __decorate([\n DeprecatedAndRenamedTo('calloutLabelName')\n ], PieSeries.prototype, \"labelName\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"sectorLabelKey\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"sectorLabelName\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], PieSeries.prototype, \"legendItemKey\", void 0);\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], PieSeries.prototype, \"fills\", void 0);\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], PieSeries.prototype, \"strokes\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], PieSeries.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], PieSeries.prototype, \"strokeOpacity\", void 0);\n __decorate([\n Validate(OPT_LINE_DASH)\n ], PieSeries.prototype, \"lineDash\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeries.prototype, \"lineDashOffset\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], PieSeries.prototype, \"formatter\", void 0);\n __decorate([\n Validate(NUMBER(-360, 360))\n ], PieSeries.prototype, \"rotation\", void 0);\n __decorate([\n Validate(NUMBER())\n ], PieSeries.prototype, \"outerRadiusOffset\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeries.prototype, \"outerRadiusRatio\", void 0);\n __decorate([\n Validate(NUMBER())\n ], PieSeries.prototype, \"innerRadiusOffset\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeries.prototype, \"innerRadiusRatio\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], PieSeries.prototype, \"strokeWidth\", void 0);\n return PieSeries;\n}(PolarSeries));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series, SeriesNodePickMode } from '../series';\nvar HierarchySeries = /** @class */ (function (_super) {\n __extends(HierarchySeries, _super);\n function HierarchySeries() {\n return _super.call(this, { pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH] }) || this;\n }\n HierarchySeries.prototype.getLabelData = function () {\n return [];\n };\n return HierarchySeries;\n}(Series));\nexport { HierarchySeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { BOOLEAN, COLOR_STRING, NUMBER, Validate } from '../util/validation';\nimport { ChangeDetectable, RedrawType } from './changeDetectable';\nimport { SceneChangeDetection } from './node';\nvar DropShadow = /** @class */ (function (_super) {\n __extends(DropShadow, _super);\n function DropShadow() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.enabled = true;\n _this.color = 'rgba(0, 0, 0, 0.5)';\n _this.xOffset = 0;\n _this.yOffset = 0;\n _this.blur = 5;\n return _this;\n }\n __decorate([\n Validate(BOOLEAN),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], DropShadow.prototype, \"enabled\", void 0);\n __decorate([\n Validate(COLOR_STRING),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], DropShadow.prototype, \"color\", void 0);\n __decorate([\n Validate(NUMBER()),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], DropShadow.prototype, \"xOffset\", void 0);\n __decorate([\n Validate(NUMBER()),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], DropShadow.prototype, \"yOffset\", void 0);\n __decorate([\n Validate(NUMBER(0)),\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], DropShadow.prototype, \"blur\", void 0);\n return DropShadow;\n}(ChangeDetectable));\nexport { DropShadow };\n","export default function (a, b) {\n a = +a;\n b = +b;\n return function (t) { return a * (1 - t) + b * t; };\n}\n","import { Color } from '../util/color';\nimport interpolateColor from '../interpolate/color';\nvar ColorScale = /** @class */ (function () {\n function ColorScale() {\n this.domain = [0, 1];\n this._range = ['red', 'green'];\n this.parsedRange = this._range.map(function (v) { return Color.fromString(v); });\n }\n Object.defineProperty(ColorScale.prototype, \"range\", {\n get: function () {\n return this._range;\n },\n set: function (values) {\n this._range = values;\n this.parsedRange = values.map(function (v) { return Color.fromString(v); });\n },\n enumerable: false,\n configurable: true\n });\n ColorScale.prototype.convert = function (x) {\n var _a = this, domain = _a.domain, range = _a.range, parsedRange = _a.parsedRange;\n var d0 = domain[0];\n var d1 = domain[domain.length - 1];\n var r0 = range[0];\n var r1 = range[range.length - 1];\n if (x <= d0) {\n return r0;\n }\n if (x >= d1) {\n return r1;\n }\n var index;\n var q;\n if (domain.length === 2) {\n var t = (x - d0) / (d1 - d0);\n var step = 1 / (range.length - 1);\n index = range.length <= 2 ? 0 : Math.min(Math.floor(t * (range.length - 1)), range.length - 2);\n q = (t - index * step) / step;\n }\n else {\n for (index = 0; index < domain.length - 2; index++) {\n if (x < domain[index + 1]) {\n break;\n }\n }\n var a = domain[index];\n var b = domain[index + 1];\n q = (x - a) / (b - a);\n }\n var c0 = parsedRange[index];\n var c1 = parsedRange[index + 1];\n return interpolateColor(c0, c1)(q);\n };\n return ColorScale;\n}());\nexport { ColorScale };\n","import number from './number';\nimport { Color } from '../util/color';\nexport default function (a, b) {\n if (typeof a === 'string') {\n try {\n a = Color.fromString(a);\n }\n catch (e) {\n a = Color.fromArray([0, 0, 0]);\n }\n }\n if (typeof b === 'string') {\n try {\n b = Color.fromString(b);\n }\n catch (e) {\n b = Color.fromArray([0, 0, 0]);\n }\n }\n var red = number(a.r, b.r);\n var green = number(a.g, b.g);\n var blue = number(a.b, b.b);\n var alpha = number(a.a, b.a);\n return function (t) {\n return Color.fromArray([red(t), green(t), blue(t), alpha(t)]).toRgbaString();\n };\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { Selection } from '../../../scene/selection';\nimport { HdpiCanvas } from '../../../canvas/hdpiCanvas';\nimport { Label } from '../../label';\nimport { SeriesTooltip, HighlightStyle, SeriesNodeBaseClickEvent } from '../series';\nimport { HierarchySeries } from './hierarchySeries';\nimport { toTooltipHtml } from '../../tooltip/tooltip';\nimport { Group } from '../../../scene/group';\nimport { Text } from '../../../scene/shape/text';\nimport { Rect } from '../../../scene/shape/rect';\nimport { DropShadow } from '../../../scene/dropShadow';\nimport { ColorScale } from '../../../scale/colorScale';\nimport { toFixed } from '../../../util/number';\nimport { Path2D } from '../../../scene/path2D';\nimport { BBox } from '../../../scene/bbox';\nimport { Color } from '../../../util/color';\nimport { BOOLEAN, NUMBER, NUMBER_ARRAY, OPT_BOOLEAN, OPT_COLOR_STRING, OPT_FUNCTION, OPT_NUMBER, OPT_STRING, STRING, COLOR_STRING_ARRAY, Validate, } from '../../../util/validation';\nimport { Logger } from '../../../util/logger';\nvar TreemapSeriesTooltip = /** @class */ (function (_super) {\n __extends(TreemapSeriesTooltip, _super);\n function TreemapSeriesTooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderer = undefined;\n return _this;\n }\n __decorate([\n Validate(OPT_FUNCTION)\n ], TreemapSeriesTooltip.prototype, \"renderer\", void 0);\n return TreemapSeriesTooltip;\n}(SeriesTooltip));\nvar TreemapSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n __extends(TreemapSeriesNodeBaseClickEvent, _super);\n function TreemapSeriesNodeBaseClickEvent(labelKey, sizeKey, colorKey, nativeEvent, datum, series) {\n var _this = _super.call(this, nativeEvent, datum, series) || this;\n _this.labelKey = labelKey;\n _this.sizeKey = sizeKey;\n _this.colorKey = colorKey;\n return _this;\n }\n return TreemapSeriesNodeBaseClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar TreemapSeriesNodeClickEvent = /** @class */ (function (_super) {\n __extends(TreemapSeriesNodeClickEvent, _super);\n function TreemapSeriesNodeClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeClick';\n return _this;\n }\n return TreemapSeriesNodeClickEvent;\n}(TreemapSeriesNodeBaseClickEvent));\nvar TreemapSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n __extends(TreemapSeriesNodeDoubleClickEvent, _super);\n function TreemapSeriesNodeDoubleClickEvent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'nodeDoubleClick';\n return _this;\n }\n return TreemapSeriesNodeDoubleClickEvent;\n}(TreemapSeriesNodeBaseClickEvent));\nvar TreemapSeriesLabel = /** @class */ (function (_super) {\n __extends(TreemapSeriesLabel, _super);\n function TreemapSeriesLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.padding = 10;\n return _this;\n }\n __decorate([\n Validate(NUMBER(0))\n ], TreemapSeriesLabel.prototype, \"padding\", void 0);\n return TreemapSeriesLabel;\n}(Label));\nvar TreemapValueLabel = /** @class */ (function () {\n function TreemapValueLabel() {\n this.style = (function () {\n var label = new Label();\n label.color = 'white';\n return label;\n })();\n }\n __decorate([\n Validate(OPT_STRING)\n ], TreemapValueLabel.prototype, \"key\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], TreemapValueLabel.prototype, \"name\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], TreemapValueLabel.prototype, \"formatter\", void 0);\n return TreemapValueLabel;\n}());\nvar TextNodeTag;\n(function (TextNodeTag) {\n TextNodeTag[TextNodeTag[\"Name\"] = 0] = \"Name\";\n TextNodeTag[TextNodeTag[\"Value\"] = 1] = \"Value\";\n})(TextNodeTag || (TextNodeTag = {}));\nfunction getTextSize(text, style) {\n return HdpiCanvas.getTextSize(text, [style.fontWeight, style.fontSize + \"px\", style.fontFamily].join(' '));\n}\nfunction validateColor(color) {\n if (typeof color === 'string' && !Color.validColorString(color)) {\n var fallbackColor = 'black';\n Logger.warnOnce(\"invalid Treemap tile colour string \\\"\" + color + \"\\\". Affected treemap tiles will be coloured \" + fallbackColor + \".\");\n return 'black';\n }\n return color;\n}\nvar TreemapTextHighlightStyle = /** @class */ (function () {\n function TreemapTextHighlightStyle() {\n this.color = 'black';\n }\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], TreemapTextHighlightStyle.prototype, \"color\", void 0);\n return TreemapTextHighlightStyle;\n}());\nvar TreemapHighlightStyle = /** @class */ (function (_super) {\n __extends(TreemapHighlightStyle, _super);\n function TreemapHighlightStyle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.text = new TreemapTextHighlightStyle();\n return _this;\n }\n return TreemapHighlightStyle;\n}(HighlightStyle));\nexport { TreemapHighlightStyle };\nvar TreemapSeries = /** @class */ (function (_super) {\n __extends(TreemapSeries, _super);\n function TreemapSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.groupSelection = Selection.select(_this.contentGroup, Group);\n _this.highlightSelection = Selection.select(_this.highlightGroup, Group);\n _this.title = (function () {\n var label = new TreemapSeriesLabel();\n label.color = 'white';\n label.fontWeight = 'bold';\n label.fontSize = 12;\n label.fontFamily = 'Verdana, sans-serif';\n label.padding = 15;\n return label;\n })();\n _this.subtitle = (function () {\n var label = new TreemapSeriesLabel();\n label.color = 'white';\n label.fontSize = 9;\n label.fontFamily = 'Verdana, sans-serif';\n label.padding = 13;\n return label;\n })();\n _this.labels = {\n large: (function () {\n var label = new Label();\n label.color = 'white';\n label.fontWeight = 'bold';\n label.fontSize = 18;\n return label;\n })(),\n medium: (function () {\n var label = new Label();\n label.color = 'white';\n label.fontWeight = 'bold';\n label.fontSize = 14;\n return label;\n })(),\n small: (function () {\n var label = new Label();\n label.color = 'white';\n label.fontWeight = 'bold';\n label.fontSize = 10;\n return label;\n })(),\n value: new TreemapValueLabel(),\n };\n _this.nodePadding = 2;\n _this.labelKey = 'label';\n _this.sizeKey = 'size';\n _this.colorKey = 'color';\n _this.colorDomain = [-5, 5];\n _this.colorRange = ['#cb4b3f', '#6acb64'];\n _this.groupFill = '#272931';\n _this.groupStroke = 'black';\n _this.groupStrokeWidth = 1;\n _this.tileStroke = 'black';\n _this.tileStrokeWidth = 1;\n _this.gradient = true;\n _this.formatter = undefined;\n _this.colorName = 'Change';\n _this.rootName = 'Root';\n _this.highlightGroups = true;\n _this.tileShadow = new DropShadow();\n _this.labelShadow = new DropShadow();\n _this.tooltip = new TreemapSeriesTooltip();\n _this.highlightStyle = new TreemapHighlightStyle();\n return _this;\n }\n TreemapSeries.prototype.getNodePaddingTop = function (nodeDatum, bbox) {\n var _a = this, title = _a.title, subtitle = _a.subtitle, nodePadding = _a.nodePadding;\n var label = nodeDatum.label;\n if (nodeDatum.isLeaf || !label || nodeDatum.depth === 0) {\n return nodePadding;\n }\n var font = nodeDatum.depth > 1 ? subtitle : title;\n var textSize = getTextSize(label, font);\n var heightRatioThreshold = 3;\n if (font.fontSize > bbox.width / heightRatioThreshold || font.fontSize > bbox.height / heightRatioThreshold) {\n return nodePadding;\n }\n if (textSize.height >= bbox.height) {\n return nodePadding;\n }\n return textSize.height + nodePadding * 2;\n };\n TreemapSeries.prototype.getNodePadding = function (nodeDatum, bbox) {\n var nodePadding = this.nodePadding;\n var top = this.getNodePaddingTop(nodeDatum, bbox);\n return {\n top: top,\n right: nodePadding,\n bottom: nodePadding,\n left: nodePadding,\n };\n };\n /**\n * Squarified Treemap algorithm\n * https://www.win.tue.nl/~vanwijk/stm.pdf\n */\n TreemapSeries.prototype.squarify = function (nodeDatum, bbox, outputNodesBoxes) {\n if (outputNodesBoxes === void 0) { outputNodesBoxes = new Map(); }\n var targetTileAspectRatio = 1; // The width and height will tend to this ratio\n var padding = this.getNodePadding(nodeDatum, bbox);\n outputNodesBoxes.set(nodeDatum, bbox);\n var width = bbox.width - padding.left - padding.right;\n var height = bbox.height - padding.top - padding.bottom;\n if (width <= 0 || height <= 0 || nodeDatum.value <= 0) {\n return outputNodesBoxes;\n }\n var stackSum = 0;\n var startIndex = 0;\n var minRatioDiff = Infinity;\n var partitionSum = nodeDatum.value;\n var children = nodeDatum.children;\n var partition = new BBox(bbox.x + padding.left, bbox.y + padding.top, width, height);\n for (var i = 0; i < children.length; i++) {\n var value = children[i].value;\n var firstValue = children[startIndex].value;\n var isVertical_1 = partition.width < partition.height;\n stackSum += value;\n var partThickness = isVertical_1 ? partition.height : partition.width;\n var partLength = isVertical_1 ? partition.width : partition.height;\n var firstTileLength = (partLength * firstValue) / stackSum;\n var stackThickness = (partThickness * stackSum) / partitionSum;\n var ratio = Math.max(firstTileLength, stackThickness) / Math.min(firstTileLength, stackThickness);\n var diff = Math.abs(targetTileAspectRatio - ratio);\n if (diff < minRatioDiff) {\n minRatioDiff = diff;\n continue;\n }\n // Go one step back and process the best match\n stackSum -= value;\n stackThickness = (partThickness * stackSum) / partitionSum;\n var start_1 = isVertical_1 ? partition.x : partition.y;\n for (var j = startIndex; j < i; j++) {\n var child = children[j];\n var x = isVertical_1 ? start_1 : partition.x;\n var y = isVertical_1 ? partition.y : start_1;\n var length_1 = (partLength * child.value) / stackSum;\n var width_1 = isVertical_1 ? length_1 : stackThickness;\n var height_1 = isVertical_1 ? stackThickness : length_1;\n var childBox = new BBox(x, y, width_1, height_1);\n this.squarify(child, childBox, outputNodesBoxes);\n partitionSum -= child.value;\n start_1 += length_1;\n }\n if (isVertical_1) {\n partition.y += stackThickness;\n partition.height -= stackThickness;\n }\n else {\n partition.x += stackThickness;\n partition.width -= stackThickness;\n }\n startIndex = i;\n stackSum = 0;\n minRatioDiff = Infinity;\n i--;\n }\n // Process remaining space\n var isVertical = partition.width < partition.height;\n var start = isVertical ? partition.x : partition.y;\n for (var i = startIndex; i < children.length; i++) {\n var x = isVertical ? start : partition.x;\n var y = isVertical ? partition.y : start;\n var part = children[i].value / partitionSum;\n var width_2 = partition.width * (isVertical ? part : 1);\n var height_2 = partition.height * (isVertical ? 1 : part);\n var childBox = new BBox(x, y, width_2, height_2);\n this.squarify(children[i], childBox, outputNodesBoxes);\n start += isVertical ? width_2 : height_2;\n }\n return outputNodesBoxes;\n };\n TreemapSeries.prototype.processData = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, data, sizeKey, labelKey, colorKey, colorDomain, colorRange, groupFill, colorScale, createTreeNodeDatum;\n var _this = this;\n return __generator(this, function (_b) {\n if (!this.data) {\n return [2 /*return*/];\n }\n _a = this, data = _a.data, sizeKey = _a.sizeKey, labelKey = _a.labelKey, colorKey = _a.colorKey, colorDomain = _a.colorDomain, colorRange = _a.colorRange, groupFill = _a.groupFill;\n colorScale = new ColorScale();\n colorScale.domain = colorDomain;\n colorScale.range = colorRange;\n createTreeNodeDatum = function (datum, depth, parent) {\n var _a, _b;\n if (depth === void 0) { depth = 0; }\n var label = (labelKey && datum[labelKey]) || '';\n var colorScaleValue = colorKey ? (_a = datum[colorKey]) !== null && _a !== void 0 ? _a : depth : depth;\n colorScaleValue = validateColor(colorScaleValue);\n var isLeaf = !datum.children;\n var fill = typeof colorScaleValue === 'string'\n ? colorScaleValue\n : isLeaf || !groupFill\n ? colorScale.convert(colorScaleValue)\n : groupFill;\n var nodeDatum = {\n datum: datum,\n depth: depth,\n parent: parent,\n value: 0,\n label: label,\n fill: fill,\n series: _this,\n isLeaf: isLeaf,\n children: [],\n };\n if (isLeaf) {\n nodeDatum.value = sizeKey ? (_b = datum[sizeKey]) !== null && _b !== void 0 ? _b : 1 : 1;\n }\n else {\n datum.children.forEach(function (child) {\n var childNodeDatum = createTreeNodeDatum(child, depth + 1, nodeDatum);\n var value = childNodeDatum.value;\n if (isNaN(value) || !isFinite(value) || value === 0) {\n return;\n }\n nodeDatum.value += value;\n nodeDatum.children.push(childNodeDatum);\n });\n nodeDatum.children.sort(function (a, b) {\n return b.value - a.value;\n });\n }\n return nodeDatum;\n };\n this.dataRoot = createTreeNodeDatum(data);\n return [2 /*return*/];\n });\n });\n };\n TreemapSeries.prototype.createNodeData = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, []];\n });\n });\n };\n TreemapSeries.prototype.update = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.updateSelections()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.updateNodes()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n TreemapSeries.prototype.updateSelections = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, chart, dataRoot, seriesRect, descendants, traverse, _b, groupSelection, highlightSelection, update;\n return __generator(this, function (_c) {\n if (!this.nodeDataRefresh) {\n return [2 /*return*/];\n }\n this.nodeDataRefresh = false;\n _a = this, chart = _a.chart, dataRoot = _a.dataRoot;\n if (!chart || !dataRoot) {\n return [2 /*return*/];\n }\n seriesRect = chart.getSeriesRect();\n if (!seriesRect) {\n return [2 /*return*/];\n }\n descendants = [];\n traverse = function (datum) {\n var _a;\n descendants.push(datum);\n (_a = datum.children) === null || _a === void 0 ? void 0 : _a.forEach(traverse);\n };\n traverse(this.dataRoot);\n _b = this, groupSelection = _b.groupSelection, highlightSelection = _b.highlightSelection;\n update = function (selection) {\n return selection.update(descendants, function (group) {\n var rect = new Rect();\n var nameLabel = new Text();\n nameLabel.tag = TextNodeTag.Name;\n var valueLabel = new Text();\n valueLabel.tag = TextNodeTag.Value;\n group.append([rect, nameLabel, valueLabel]);\n });\n };\n this.groupSelection = update(groupSelection);\n this.highlightSelection = update(highlightSelection);\n return [2 /*return*/];\n });\n });\n };\n TreemapSeries.prototype.isDatumHighlighted = function (datum) {\n var _a;\n var highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n return datum === highlightedDatum && (datum.isLeaf || this.highlightGroups);\n };\n TreemapSeries.prototype.getTileFormat = function (datum, isHighlighted) {\n var _a;\n var formatter = this.formatter;\n if (!formatter) {\n return {};\n }\n var _b = this, gradient = _b.gradient, colorKey = _b.colorKey, labelKey = _b.labelKey, sizeKey = _b.sizeKey, tileStroke = _b.tileStroke, tileStrokeWidth = _b.tileStrokeWidth, groupStroke = _b.groupStroke, groupStrokeWidth = _b.groupStrokeWidth;\n var stroke = datum.isLeaf ? tileStroke : groupStroke;\n var strokeWidth = datum.isLeaf ? tileStrokeWidth : groupStrokeWidth;\n return formatter({\n seriesId: this.id,\n datum: datum.datum,\n depth: datum.depth,\n parent: (_a = datum.parent) === null || _a === void 0 ? void 0 : _a.datum,\n colorKey: colorKey,\n sizeKey: sizeKey,\n labelKey: labelKey,\n fill: datum.fill,\n stroke: stroke,\n strokeWidth: strokeWidth,\n gradient: gradient,\n highlighted: isHighlighted,\n });\n };\n TreemapSeries.prototype.updateNodes = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, gradient, _b, _c, highlightedFill, highlightedFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, highlightedTextColor, tileStroke, tileStrokeWidth, groupStroke, groupStrokeWidth, tileShadow, labelShadow, seriesRect, boxes, labelMeta, updateRectFn, updateLabelFn;\n var _this = this;\n return __generator(this, function (_d) {\n if (!this.chart) {\n return [2 /*return*/];\n }\n _a = this, gradient = _a.gradient, _b = _a.highlightStyle, _c = _b.item, highlightedFill = _c.fill, highlightedFillOpacity = _c.fillOpacity, highlightedStroke = _c.stroke, highlightedDatumStrokeWidth = _c.strokeWidth, highlightedTextColor = _b.text.color, tileStroke = _a.tileStroke, tileStrokeWidth = _a.tileStrokeWidth, groupStroke = _a.groupStroke, groupStrokeWidth = _a.groupStrokeWidth, tileShadow = _a.tileShadow, labelShadow = _a.labelShadow;\n seriesRect = this.chart.getSeriesRect();\n boxes = this.squarify(this.dataRoot, new BBox(0, 0, seriesRect.width, seriesRect.height));\n labelMeta = this.buildLabelMeta(boxes);\n this.updateNodeMidPoint(boxes);\n updateRectFn = function (rect, datum, isDatumHighlighted) {\n var _a, _b, _c, _d, _e, _f;\n var box = boxes.get(datum);\n if (!box) {\n rect.visible = false;\n return;\n }\n var fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : datum.fill;\n var fillOpacity = (_a = (isDatumHighlighted ? highlightedFillOpacity : 1)) !== null && _a !== void 0 ? _a : 1;\n var stroke = isDatumHighlighted && highlightedStroke !== undefined\n ? highlightedStroke\n : datum.isLeaf\n ? tileStroke\n : groupStroke;\n var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n ? highlightedDatumStrokeWidth\n : datum.isLeaf\n ? tileStrokeWidth\n : groupStrokeWidth;\n var format = _this.getTileFormat(datum, isDatumHighlighted);\n var fillColor = validateColor((_b = format === null || format === void 0 ? void 0 : format.fill) !== null && _b !== void 0 ? _b : fill);\n if ((_c = format === null || format === void 0 ? void 0 : format.gradient) !== null && _c !== void 0 ? _c : gradient) {\n var start = Color.tryParseFromString(fill).brighter().toString();\n var end = Color.tryParseFromString(fill).darker().toString();\n rect.fill = \"linear-gradient(180deg, \" + start + \", \" + end + \")\";\n }\n else {\n rect.fill = fillColor;\n }\n rect.fillOpacity = (_d = format === null || format === void 0 ? void 0 : format.fillOpacity) !== null && _d !== void 0 ? _d : fillOpacity;\n rect.stroke = validateColor((_e = format === null || format === void 0 ? void 0 : format.stroke) !== null && _e !== void 0 ? _e : stroke);\n rect.strokeWidth = (_f = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _f !== void 0 ? _f : strokeWidth;\n rect.fillShadow = tileShadow;\n rect.crisp = true;\n rect.x = box.x;\n rect.y = box.y;\n rect.width = box.width;\n rect.height = box.height;\n rect.visible = true;\n if (isDatumHighlighted && !datum.isLeaf) {\n var padding = _this.getNodePadding(datum, box);\n var x0 = box.x + padding.left;\n var x1 = box.x + box.width - padding.right;\n var y0 = box.y + padding.top;\n var y1 = box.y + box.height - padding.bottom;\n if (rect.clipPath) {\n rect.clipPath.clear();\n }\n else {\n rect.clipPath = new Path2D();\n }\n rect.clipMode = 'punch-out';\n rect.clipPath.moveTo(x0, y0);\n rect.clipPath.lineTo(x1, y0);\n rect.clipPath.lineTo(x1, y1);\n rect.clipPath.lineTo(x0, y1);\n rect.clipPath.lineTo(x0, y0);\n rect.clipPath.closePath();\n }\n };\n this.groupSelection.selectByClass(Rect).forEach(function (rect) { return updateRectFn(rect, rect.datum, false); });\n this.highlightSelection.selectByClass(Rect).forEach(function (rect) {\n var isDatumHighlighted = _this.isDatumHighlighted(rect.datum);\n rect.visible = isDatumHighlighted;\n if (rect.visible) {\n updateRectFn(rect, rect.datum, isDatumHighlighted);\n }\n });\n updateLabelFn = function (text, datum, highlighted, key) {\n var meta = labelMeta.get(datum);\n var label = meta === null || meta === void 0 ? void 0 : meta[key];\n if (!label) {\n text.visible = false;\n return;\n }\n text.text = label.text;\n text.fontFamily = label.style.fontFamily;\n text.fontSize = label.style.fontSize;\n text.fontWeight = label.style.fontWeight;\n text.fill = highlighted ? highlightedTextColor !== null && highlightedTextColor !== void 0 ? highlightedTextColor : label.style.color : label.style.color;\n text.fillShadow = highlighted ? undefined : labelShadow;\n text.textAlign = label.hAlign;\n text.textBaseline = label.vAlign;\n text.x = label.x;\n text.y = label.y;\n text.visible = true;\n };\n this.groupSelection\n .selectByTag(TextNodeTag.Name)\n .forEach(function (text) { return updateLabelFn(text, text.datum, false, 'label'); });\n this.highlightSelection.selectByTag(TextNodeTag.Name).forEach(function (text) {\n var isDatumHighlighted = _this.isDatumHighlighted(text.datum);\n text.visible = isDatumHighlighted;\n if (text.visible) {\n updateLabelFn(text, text.datum, isDatumHighlighted, 'label');\n }\n });\n this.groupSelection\n .selectByTag(TextNodeTag.Value)\n .forEach(function (text) { return updateLabelFn(text, text.datum, false, 'value'); });\n this.highlightSelection.selectByTag(TextNodeTag.Value).forEach(function (text) {\n var isDatumHighlighted = _this.isDatumHighlighted(text.datum);\n text.visible = isDatumHighlighted;\n if (text.visible) {\n updateLabelFn(text, text.datum, isDatumHighlighted, 'value');\n }\n });\n return [2 /*return*/];\n });\n });\n };\n TreemapSeries.prototype.updateNodeMidPoint = function (boxes) {\n boxes.forEach(function (box, treeNodeDatum) {\n treeNodeDatum.nodeMidPoint = {\n x: box.x + box.width / 2,\n y: box.y,\n };\n });\n };\n TreemapSeries.prototype.buildLabelMeta = function (boxes) {\n var _a = this, labels = _a.labels, title = _a.title, subtitle = _a.subtitle, nodePadding = _a.nodePadding, labelKey = _a.labelKey;\n var labelMeta = new Map();\n boxes.forEach(function (box, datum) {\n if (!labelKey || datum.depth === 0) {\n return;\n }\n var labelText = datum.isLeaf ? datum.label : datum.label.toUpperCase();\n var labelStyle;\n if (datum.isLeaf) {\n // Choose the font size that fits\n labelStyle =\n [labels.large, labels.medium, labels.small].find(function (s) {\n var _a = getTextSize(labelText, s), width = _a.width, height = _a.height;\n return width < box.width && height < box.height;\n }) || labels.small;\n }\n else if (datum.depth === 1) {\n labelStyle = title;\n }\n else {\n labelStyle = subtitle;\n }\n var labelSize = getTextSize(labelText, labelStyle);\n var availTextWidth = box.width - 2 * nodePadding;\n var availTextHeight = box.height - 2 * nodePadding;\n var minSizeRatio = 3;\n if (labelStyle.fontSize > box.width / minSizeRatio || labelStyle.fontSize > box.height / minSizeRatio) {\n // Avoid labels on too small tiles\n return;\n }\n // Crop text if not enough space\n if (labelSize.width > availTextWidth) {\n var textLength = Math.floor((labelText.length * availTextWidth) / labelSize.width) - 1;\n labelText = labelText.substring(0, textLength) + \"\\u2026\";\n }\n var valueConfig = labels.value;\n var valueStyle = valueConfig.style;\n var valueMargin = (labelStyle.fontSize + valueStyle.fontSize) / 8;\n var valueText = String(datum.isLeaf\n ? valueConfig.formatter\n ? valueConfig.formatter({ datum: datum.datum })\n : valueConfig.key\n ? datum.datum[valueConfig.key]\n : ''\n : '');\n var valueSize = getTextSize(valueText, valueStyle);\n var hasValueText = valueText &&\n valueSize.width < availTextWidth &&\n valueSize.height + labelSize.height + valueMargin < availTextHeight;\n labelMeta.set(datum, {\n label: __assign({ text: labelText, style: labelStyle }, (datum.isLeaf\n ? {\n hAlign: 'center',\n vAlign: 'middle',\n x: box.x + box.width / 2,\n y: box.y + box.height / 2 - (hasValueText ? valueSize.height / 2 + valueMargin / 2 : 0),\n }\n : {\n hAlign: 'left',\n vAlign: 'top',\n x: box.x + nodePadding,\n y: box.y + nodePadding,\n })),\n value: hasValueText\n ? {\n text: valueText,\n style: valueStyle,\n hAlign: 'center',\n vAlign: 'middle',\n x: box.x + box.width / 2,\n y: box.y + box.height / 2 + labelSize.height / 2 + valueMargin / 2,\n }\n : undefined,\n });\n });\n return labelMeta;\n };\n TreemapSeries.prototype.getDomain = function (_direction) {\n return [0, 1];\n };\n TreemapSeries.prototype.getNodeClickEvent = function (event, datum) {\n return new TreemapSeriesNodeClickEvent(this.labelKey, this.sizeKey, this.colorKey, event, datum, this);\n };\n TreemapSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n return new TreemapSeriesNodeDoubleClickEvent(this.labelKey, this.sizeKey, this.colorKey, event, datum, this);\n };\n TreemapSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a;\n if (!this.highlightGroups && !nodeDatum.isLeaf) {\n return '';\n }\n var _b = this, tooltip = _b.tooltip, sizeKey = _b.sizeKey, labelKey = _b.labelKey, colorKey = _b.colorKey, rootName = _b.rootName, seriesId = _b.id, labels = _b.labels;\n var datum = nodeDatum.datum;\n var tooltipRenderer = tooltip.renderer;\n var title = nodeDatum.depth ? datum[labelKey] : rootName || datum[labelKey];\n var content = '';\n var format = this.getTileFormat(nodeDatum, false);\n var color = (format === null || format === void 0 ? void 0 : format.fill) || nodeDatum.fill || 'gray';\n var valueKey = labels.value.key;\n var valueFormatter = labels.value.formatter;\n if (valueKey || valueFormatter) {\n var valueText = '';\n if (valueFormatter) {\n valueText = valueFormatter({ datum: datum });\n }\n else {\n var value = datum[valueKey];\n if (typeof value === 'number' && isFinite(value)) {\n valueText = toFixed(value);\n }\n }\n if (valueText) {\n if (labels.value.name) {\n content += \"\" + labels.value.name + \": \";\n }\n content += valueText;\n }\n }\n var defaults = {\n title: title,\n backgroundColor: color,\n content: content,\n };\n if (tooltipRenderer) {\n return toTooltipHtml(tooltipRenderer({\n datum: nodeDatum.datum,\n parent: (_a = nodeDatum.parent) === null || _a === void 0 ? void 0 : _a.datum,\n depth: nodeDatum.depth,\n sizeKey: sizeKey,\n labelKey: labelKey,\n colorKey: colorKey,\n title: title,\n color: color,\n seriesId: seriesId,\n }), defaults);\n }\n if (!title && !content) {\n return '';\n }\n return toTooltipHtml(defaults);\n };\n TreemapSeries.prototype.getLegendData = function () {\n // Override point for subclasses.\n return [];\n };\n TreemapSeries.className = 'TreemapSeries';\n TreemapSeries.type = 'treemap';\n __decorate([\n Validate(NUMBER(0))\n ], TreemapSeries.prototype, \"nodePadding\", void 0);\n __decorate([\n Validate(STRING)\n ], TreemapSeries.prototype, \"labelKey\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], TreemapSeries.prototype, \"sizeKey\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], TreemapSeries.prototype, \"colorKey\", void 0);\n __decorate([\n Validate(NUMBER_ARRAY)\n ], TreemapSeries.prototype, \"colorDomain\", void 0);\n __decorate([\n Validate(COLOR_STRING_ARRAY)\n ], TreemapSeries.prototype, \"colorRange\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], TreemapSeries.prototype, \"groupFill\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], TreemapSeries.prototype, \"groupStroke\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], TreemapSeries.prototype, \"groupStrokeWidth\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], TreemapSeries.prototype, \"tileStroke\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0))\n ], TreemapSeries.prototype, \"tileStrokeWidth\", void 0);\n __decorate([\n Validate(BOOLEAN)\n ], TreemapSeries.prototype, \"gradient\", void 0);\n __decorate([\n Validate(OPT_FUNCTION)\n ], TreemapSeries.prototype, \"formatter\", void 0);\n __decorate([\n Validate(STRING)\n ], TreemapSeries.prototype, \"colorName\", void 0);\n __decorate([\n Validate(STRING)\n ], TreemapSeries.prototype, \"rootName\", void 0);\n __decorate([\n Validate(OPT_BOOLEAN)\n ], TreemapSeries.prototype, \"highlightGroups\", void 0);\n return TreemapSeries;\n}(HierarchySeries));\nexport { TreemapSeries };\n","var types = {\n area: 'cartesian',\n bar: 'cartesian',\n column: 'cartesian',\n histogram: 'cartesian',\n line: 'cartesian',\n scatter: 'cartesian',\n treemap: 'hierarchy',\n pie: 'polar',\n};\nexport var CHART_TYPES = {\n add: function (seriesType, chartType) {\n types[seriesType] = chartType;\n },\n delete: function (seriesType) {\n delete types[seriesType];\n },\n has: function (seriesType) {\n return Object.prototype.hasOwnProperty.call(types, seriesType);\n },\n isCartesian: function (seriesType) {\n return types[seriesType] === 'cartesian';\n },\n isPolar: function (seriesType) {\n return types[seriesType] === 'polar';\n },\n isHierarchy: function (seriesType) {\n return types[seriesType] === 'hierarchy';\n },\n get seriesTypes() {\n return Object.keys(types);\n },\n get cartesianTypes() {\n var _this = this;\n return this.seriesTypes.filter(function (t) { return _this.isCartesian(t); });\n },\n get polarTypes() {\n var _this = this;\n return this.seriesTypes.filter(function (t) { return _this.isPolar(t); });\n },\n get hierarchyTypes() {\n var _this = this;\n return this.seriesTypes.filter(function (t) { return _this.isHierarchy(t); });\n },\n};\n","export function deepMerge(target, source) {\n if (isPlainObject(target) && isPlainObject(source)) {\n var result_1 = {};\n Object.keys(target).forEach(function (key) {\n if (key in source) {\n result_1[key] = deepMerge(target[key], source[key]);\n }\n else {\n result_1[key] = target[key];\n }\n });\n Object.keys(source).forEach(function (key) {\n if (!(key in target)) {\n result_1[key] = source[key];\n }\n });\n return result_1;\n }\n if ((Array.isArray(target) && !Array.isArray(source)) || (isObject(target) && !isObject(source))) {\n return target;\n }\n return source;\n}\nfunction isObject(value) {\n return value && typeof value === 'object';\n}\nfunction isPlainObject(x) {\n return isObject(x) && x.constructor === Object;\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { deepMerge } from '../../util/object';\nimport { CHART_TYPES } from '../chartTypes';\nvar palette = {\n fills: ['#f3622d', '#fba71b', '#57b757', '#41a9c9', '#4258c9', '#9a42c8', '#c84164', '#888888'],\n strokes: ['#aa4520', '#b07513', '#3d803d', '#2d768d', '#2e3e8d', '#6c2e8c', '#8c2d46', '#5f5f5f'],\n};\nvar BOLD = 'bold';\nvar INSIDE = 'inside';\nvar RIGHT = 'right';\nvar ChartTheme = /** @class */ (function () {\n function ChartTheme(options) {\n options = deepMerge({}, options || {});\n var _a = options.overrides, overrides = _a === void 0 ? null : _a, _b = options.palette, palette = _b === void 0 ? null : _b;\n var defaults = this.createChartConfigPerChartType(this.getDefaults());\n if (overrides) {\n var common = overrides.common, cartesian = overrides.cartesian, polar = overrides.polar, hierarchy = overrides.hierarchy;\n var applyOverrides = function (type, seriesTypes, overrideOpts) {\n if (overrideOpts) {\n defaults[type] = deepMerge(defaults[type], overrideOpts);\n seriesTypes.forEach(function (s) {\n var seriesType = s;\n defaults[seriesType] = deepMerge(defaults[seriesType], overrideOpts);\n });\n }\n };\n applyOverrides('common', Object.keys(defaults), common);\n applyOverrides('cartesian', CHART_TYPES.cartesianTypes, cartesian);\n applyOverrides('polar', CHART_TYPES.polarTypes, polar);\n applyOverrides('hierarchy', CHART_TYPES.hierarchyTypes, hierarchy);\n CHART_TYPES.seriesTypes.forEach(function (s) {\n var _a;\n var seriesType = s;\n var chartConfig = overrides[seriesType];\n if (chartConfig) {\n if (chartConfig.series) {\n chartConfig.series = (_a = {}, _a[seriesType] = chartConfig.series, _a);\n }\n defaults[seriesType] = deepMerge(defaults[seriesType], chartConfig);\n }\n });\n }\n this.palette = palette !== null && palette !== void 0 ? palette : this.getPalette();\n this.config = Object.freeze(defaults);\n }\n ChartTheme.prototype.getPalette = function () {\n return palette;\n };\n ChartTheme.getAxisDefaults = function () {\n return {\n top: {},\n right: {},\n bottom: {},\n left: {},\n thickness: 0,\n title: {\n enabled: false,\n text: 'Axis Title',\n fontStyle: undefined,\n fontWeight: BOLD,\n fontSize: 12,\n fontFamily: this.fontFamily,\n color: 'rgb(70, 70, 70)',\n },\n label: {\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: this.fontFamily,\n padding: 5,\n rotation: undefined,\n color: 'rgb(87, 87, 87)',\n formatter: undefined,\n autoRotate: false,\n avoidCollisions: true,\n },\n line: {\n width: 1,\n color: 'rgb(195, 195, 195)',\n },\n tick: {\n width: 1,\n size: 6,\n color: 'rgb(195, 195, 195)',\n },\n gridStyle: [\n {\n stroke: 'rgb(219, 219, 219)',\n lineDash: [4, 2],\n },\n ],\n crossLines: {\n enabled: false,\n fill: 'rgb(187,221,232)',\n stroke: 'rgb(70,162,192)',\n strokeWidth: 1,\n label: {\n enabled: false,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: this.fontFamily,\n padding: 5,\n color: 'rgb(87, 87, 87)',\n rotation: undefined,\n },\n },\n };\n };\n ChartTheme.getSeriesDefaults = function () {\n return {\n tooltip: {\n enabled: true,\n renderer: undefined,\n },\n visible: true,\n showInLegend: true,\n highlightStyle: {\n item: {\n fill: 'yellow',\n fillOpacity: 1,\n },\n series: {\n dimOpacity: 1,\n },\n text: {\n color: 'black',\n },\n },\n nodeClickRange: 'exact',\n };\n };\n ChartTheme.getBarSeriesDefaults = function () {\n return __assign(__assign({}, this.getSeriesDefaults()), { flipXY: false, fillOpacity: 1, strokeOpacity: 1, xKey: '', xName: '', normalizedTo: undefined, strokeWidth: 1, lineDash: [0], lineDashOffset: 0, label: {\n enabled: false,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: this.fontFamily,\n color: 'rgb(70, 70, 70)',\n formatter: undefined,\n placement: INSIDE,\n }, shadow: {\n enabled: false,\n color: 'rgba(0, 0, 0, 0.5)',\n xOffset: 3,\n yOffset: 3,\n blur: 5,\n } });\n };\n ChartTheme.getLineSeriesDefaults = function () {\n var seriesDefaults = this.getSeriesDefaults();\n return __assign(__assign({}, seriesDefaults), { tooltip: __assign(__assign({}, seriesDefaults.tooltip), { format: undefined, position: {\n type: 'node',\n } }) });\n };\n ChartTheme.getAreaSeriesDefaults = function () {\n var seriesDefaults = this.getSeriesDefaults();\n return __assign(__assign({}, seriesDefaults), { nodeClickRange: 'nearest', tooltip: __assign(__assign({}, seriesDefaults.tooltip), { position: {\n type: 'node',\n } }) });\n };\n ChartTheme.getScatterSeriesDefaults = function () {\n var seriesDefaults = this.getSeriesDefaults();\n return __assign(__assign({}, seriesDefaults), { tooltip: __assign(__assign({}, seriesDefaults.tooltip), { position: {\n type: 'node',\n } }) });\n };\n ChartTheme.getCartesianSeriesMarkerDefaults = function () {\n return {\n enabled: true,\n shape: 'circle',\n size: 6,\n maxSize: 30,\n strokeWidth: 1,\n formatter: undefined,\n };\n };\n ChartTheme.getChartDefaults = function () {\n return {\n background: {\n visible: true,\n fill: 'white',\n },\n padding: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n },\n title: {\n enabled: false,\n text: 'Title',\n fontStyle: undefined,\n fontWeight: BOLD,\n fontSize: 16,\n fontFamily: this.fontFamily,\n color: 'rgb(70, 70, 70)',\n },\n subtitle: {\n enabled: false,\n text: 'Subtitle',\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: this.fontFamily,\n color: 'rgb(140, 140, 140)',\n },\n footnote: {\n enabled: false,\n text: 'Footnote',\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: this.fontFamily,\n color: 'rgb(140, 140, 140)',\n spacing: 30,\n },\n legend: {\n enabled: true,\n position: RIGHT,\n spacing: 20,\n listeners: {},\n item: {\n paddingX: 16,\n paddingY: 8,\n marker: {\n shape: undefined,\n size: 15,\n strokeWidth: 1,\n padding: 8,\n },\n label: {\n color: 'black',\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: this.fontFamily,\n formatter: undefined,\n },\n },\n reverseOrder: false,\n pagination: {\n marker: {\n size: 12,\n },\n activeStyle: {\n fill: 'rgb(70, 70, 70)',\n },\n inactiveStyle: {\n fill: 'rgb(219, 219, 219)',\n },\n highlightStyle: {\n fill: 'rgb(70, 70, 70)',\n },\n label: {\n color: 'rgb(70, 70, 70)',\n },\n },\n },\n tooltip: {\n enabled: true,\n range: 'nearest',\n delay: 0,\n },\n listeners: {},\n };\n };\n ChartTheme.prototype.createChartConfigPerChartType = function (config) {\n var typeToAliases = {\n cartesian: CHART_TYPES.cartesianTypes,\n polar: CHART_TYPES.polarTypes,\n hierarchy: CHART_TYPES.hierarchyTypes,\n groupedCategory: [],\n };\n Object.entries(typeToAliases).forEach(function (_a) {\n var _b = __read(_a, 2), type = _b[0], aliases = _b[1];\n aliases.forEach(function (alias) {\n if (!config[alias]) {\n config[alias] = deepMerge({}, config[type]);\n }\n });\n });\n return config;\n };\n /**\n * Meant to be overridden in subclasses. For example:\n * ```\n * getDefaults() {\n * const subclassDefaults = { ... };\n * return this.mergeWithParentDefaults(subclassDefaults);\n * }\n * ```\n */\n ChartTheme.prototype.getDefaults = function () {\n var defaults = deepMerge({}, ChartTheme.defaults);\n var getOverridesByType = function (seriesTypes) {\n var result = {};\n result.series = seriesTypes.reduce(function (obj, seriesType) {\n if (Object.prototype.hasOwnProperty.call(ChartTheme.seriesThemeOverrides, seriesType)) {\n obj[seriesType] = ChartTheme.seriesThemeOverrides[seriesType]({\n seriesDefaults: ChartTheme.getSeriesDefaults(),\n defaultFontFamily: ChartTheme.fontFamily,\n });\n }\n return obj;\n }, {});\n return result;\n };\n var extension = {\n cartesian: getOverridesByType(CHART_TYPES.cartesianTypes),\n groupedCategory: getOverridesByType(CHART_TYPES.cartesianTypes),\n polar: getOverridesByType(CHART_TYPES.polarTypes),\n hierarchy: getOverridesByType(CHART_TYPES.hierarchyTypes),\n };\n return deepMerge(defaults, extension);\n };\n ChartTheme.prototype.mergeWithParentDefaults = function (parentDefaults, defaults) {\n return deepMerge(parentDefaults, defaults);\n };\n ChartTheme.fontFamily = 'Verdana, sans-serif';\n ChartTheme.seriesThemeOverrides = {};\n ChartTheme.cartesianDefaults = __assign(__assign({}, ChartTheme.getChartDefaults()), { axes: {\n number: __assign({}, ChartTheme.getAxisDefaults()),\n log: __assign(__assign({}, ChartTheme.getAxisDefaults()), { base: 10 }),\n category: __assign(__assign({}, ChartTheme.getAxisDefaults()), { groupPaddingInner: 0.1, label: __assign(__assign({}, ChartTheme.getAxisDefaults().label), { autoRotate: true }) }),\n groupedCategory: __assign({}, ChartTheme.getAxisDefaults()),\n time: __assign({}, ChartTheme.getAxisDefaults()),\n }, series: {\n column: __assign(__assign({}, ChartTheme.getBarSeriesDefaults()), { flipXY: false }),\n bar: __assign(__assign({}, ChartTheme.getBarSeriesDefaults()), { flipXY: true }),\n line: __assign(__assign({}, ChartTheme.getLineSeriesDefaults()), { title: undefined, xKey: '', xName: '', yKey: '', yName: '', strokeWidth: 2, strokeOpacity: 1, lineDash: [0], lineDashOffset: 0, marker: __assign(__assign({}, ChartTheme.getCartesianSeriesMarkerDefaults()), { fillOpacity: 1, strokeOpacity: 1 }), label: {\n enabled: false,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n formatter: undefined,\n } }),\n scatter: __assign(__assign({}, ChartTheme.getScatterSeriesDefaults()), { title: undefined, xKey: '', yKey: '', sizeKey: undefined, labelKey: undefined, xName: '', yName: '', sizeName: 'Size', labelName: 'Label', marker: __assign({}, ChartTheme.getCartesianSeriesMarkerDefaults()), label: {\n enabled: false,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n } }),\n area: __assign(__assign({}, ChartTheme.getAreaSeriesDefaults()), { xKey: '', xName: '', normalizedTo: undefined, fillOpacity: 0.8, strokeOpacity: 1, strokeWidth: 2, lineDash: [0], lineDashOffset: 0, shadow: {\n enabled: false,\n color: 'rgba(0, 0, 0, 0.5)',\n xOffset: 3,\n yOffset: 3,\n blur: 5,\n }, marker: __assign(__assign({}, ChartTheme.getCartesianSeriesMarkerDefaults()), { fillOpacity: 1, strokeOpacity: 1, enabled: false }), label: {\n enabled: false,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n formatter: undefined,\n } }),\n histogram: __assign(__assign({}, ChartTheme.getSeriesDefaults()), { xKey: '', yKey: '', xName: '', yName: '', strokeWidth: 1, fillOpacity: 1, strokeOpacity: 1, lineDash: [0], lineDashOffset: 0, areaPlot: false, bins: undefined, aggregation: 'sum', label: {\n enabled: false,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n formatter: undefined,\n }, shadow: {\n enabled: true,\n color: 'rgba(0, 0, 0, 0.5)',\n xOffset: 0,\n yOffset: 0,\n blur: 5,\n } }),\n }, navigator: {\n enabled: false,\n height: 30,\n mask: {\n fill: '#999999',\n stroke: '#999999',\n strokeWidth: 1,\n fillOpacity: 0.2,\n },\n minHandle: {\n fill: '#f2f2f2',\n stroke: '#999999',\n strokeWidth: 1,\n width: 8,\n height: 16,\n gripLineGap: 2,\n gripLineLength: 8,\n },\n maxHandle: {\n fill: '#f2f2f2',\n stroke: '#999999',\n strokeWidth: 1,\n width: 8,\n height: 16,\n gripLineGap: 2,\n gripLineLength: 8,\n },\n } });\n ChartTheme.polarDefaults = __assign(__assign({}, ChartTheme.getChartDefaults()), { series: {\n pie: __assign(__assign({}, ChartTheme.getSeriesDefaults()), { title: {\n enabled: true,\n text: '',\n fontStyle: undefined,\n fontWeight: 'bold',\n fontSize: 14,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n }, angleKey: '', angleName: '', radiusKey: undefined, radiusName: undefined, calloutLabelKey: undefined, calloutLabelName: undefined, sectorLabelKey: undefined, sectorLabelName: undefined, calloutLabel: {\n enabled: true,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n offset: 3,\n minAngle: 0,\n }, sectorLabel: {\n enabled: true,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n positionOffset: 0,\n positionRatio: 0.5,\n }, calloutLine: {\n length: 10,\n strokeWidth: 2,\n }, fillOpacity: 1, strokeOpacity: 1, strokeWidth: 1, lineDash: [0], lineDashOffset: 0, rotation: 0, outerRadiusOffset: 0, innerRadiusOffset: 0, shadow: {\n enabled: false,\n color: 'rgba(0, 0, 0, 0.5)',\n xOffset: 3,\n yOffset: 3,\n blur: 5,\n }, innerLabels: {\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: ChartTheme.fontFamily,\n color: 'rgb(70, 70, 70)',\n margin: 2,\n } }),\n } });\n ChartTheme.hierarchyDefaults = __assign(__assign({}, ChartTheme.getChartDefaults()), { series: {\n treemap: __assign(__assign({}, ChartTheme.getSeriesDefaults()), { showInLegend: false, labelKey: 'label', sizeKey: 'size', colorKey: 'color', colorDomain: [-5, 5], colorRange: ['#cb4b3f', '#6acb64'], groupFill: '#272931', groupStroke: 'black', groupStrokeWidth: 1, tileStroke: 'black', tileStrokeWidth: 1, gradient: true, tileShadow: {\n enabled: false,\n color: 'rgba(0, 0, 0, 0.5)',\n xOffset: 3,\n yOffset: 3,\n blur: 5,\n }, labelShadow: {\n enabled: true,\n color: 'rgba(0, 0, 0, 0.4)',\n xOffset: 1.5,\n yOffset: 1.5,\n blur: 5,\n }, highlightGroups: true, nodePadding: 2, title: {\n enabled: true,\n color: 'white',\n fontStyle: undefined,\n fontWeight: 'bold',\n fontSize: 12,\n fontFamily: 'Verdana, sans-serif',\n padding: 15,\n }, subtitle: {\n enabled: true,\n color: 'white',\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 9,\n fontFamily: 'Verdana, sans-serif',\n padding: 13,\n }, labels: {\n large: {\n enabled: true,\n fontStyle: undefined,\n fontWeight: 'bold',\n fontSize: 18,\n fontFamily: 'Verdana, sans-serif',\n color: 'white',\n },\n medium: {\n enabled: true,\n fontStyle: undefined,\n fontWeight: 'bold',\n fontSize: 14,\n fontFamily: 'Verdana, sans-serif',\n color: 'white',\n },\n small: {\n enabled: true,\n fontStyle: undefined,\n fontWeight: 'bold',\n fontSize: 10,\n fontFamily: 'Verdana, sans-serif',\n color: 'white',\n },\n value: {\n style: {\n enabled: true,\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 12,\n fontFamily: 'Verdana, sans-serif',\n color: 'white',\n },\n },\n } }),\n } });\n ChartTheme.defaults = {\n cartesian: ChartTheme.cartesianDefaults,\n groupedCategory: ChartTheme.cartesianDefaults,\n polar: ChartTheme.polarDefaults,\n hierarchy: ChartTheme.hierarchyDefaults,\n };\n return ChartTheme;\n}());\nexport { ChartTheme };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartTheme } from './chartTheme';\nimport { CHART_TYPES } from '../chartTypes';\nvar DarkTheme = /** @class */ (function (_super) {\n __extends(DarkTheme, _super);\n function DarkTheme(options) {\n return _super.call(this, options) || this;\n }\n DarkTheme.prototype.getDefaults = function () {\n var fontColor = DarkTheme.fontColor;\n var mutedFontColor = DarkTheme.mutedFontColor;\n var axisDefaults = {\n title: {\n color: fontColor,\n },\n label: {\n color: fontColor,\n },\n gridStyle: [\n {\n stroke: 'rgb(88, 88, 88)',\n lineDash: [4, 2],\n },\n ],\n };\n var seriesLabelDefaults = {\n label: {\n color: fontColor,\n },\n };\n var chartAxesDefaults = {\n axes: {\n number: __assign({}, axisDefaults),\n category: __assign({}, axisDefaults),\n time: __assign({}, axisDefaults),\n },\n };\n var chartDefaults = {\n background: {\n fill: 'rgb(34, 38, 41)',\n },\n title: {\n color: fontColor,\n },\n subtitle: {\n color: mutedFontColor,\n },\n legend: {\n item: {\n label: {\n color: fontColor,\n },\n },\n pagination: {\n activeStyle: {\n fill: fontColor,\n },\n inactiveStyle: {\n fill: mutedFontColor,\n },\n highlightStyle: {\n fill: fontColor,\n },\n label: {\n color: fontColor,\n },\n },\n },\n };\n var getOverridesByType = function (seriesTypes) {\n return seriesTypes.reduce(function (obj, seriesType) {\n if (Object.prototype.hasOwnProperty.call(DarkTheme.seriesDarkThemeOverrides, seriesType)) {\n obj[seriesType] = DarkTheme.seriesDarkThemeOverrides[seriesType]({\n seriesLabelDefaults: DarkTheme.seriesLabelDefaults,\n });\n }\n return obj;\n }, {});\n };\n return this.mergeWithParentDefaults(_super.prototype.getDefaults.call(this), {\n cartesian: __assign(__assign(__assign({}, chartDefaults), chartAxesDefaults), { series: __assign({ bar: __assign({}, seriesLabelDefaults), column: __assign({}, seriesLabelDefaults), histogram: __assign({}, seriesLabelDefaults) }, getOverridesByType(CHART_TYPES.cartesianTypes)) }),\n groupedCategory: __assign(__assign(__assign({}, chartDefaults), chartAxesDefaults), { series: __assign({ bar: __assign({}, seriesLabelDefaults), column: __assign({}, seriesLabelDefaults), histogram: __assign({}, seriesLabelDefaults) }, getOverridesByType(CHART_TYPES.cartesianTypes)) }),\n polar: __assign(__assign({}, chartDefaults), { series: __assign({ pie: {\n calloutLabel: {\n color: fontColor,\n },\n sectorLabel: {\n color: fontColor,\n },\n title: {\n color: fontColor,\n },\n innerLabels: {\n color: fontColor,\n },\n } }, getOverridesByType(CHART_TYPES.polarTypes)) }),\n hierarchy: __assign(__assign({}, chartDefaults), { series: __assign({ treemap: {\n tileStroke: 'white',\n groupStroke: 'white',\n title: {\n color: fontColor,\n },\n subtitle: {\n color: mutedFontColor,\n },\n labels: {\n large: {\n color: fontColor,\n },\n medium: {\n color: fontColor,\n },\n small: {\n color: fontColor,\n },\n value: {\n style: {\n color: fontColor,\n },\n },\n },\n } }, getOverridesByType(CHART_TYPES.hierarchyTypes)) }),\n });\n };\n DarkTheme.fontColor = 'rgb(200, 200, 200)';\n DarkTheme.mutedFontColor = 'rgb(150, 150, 150)';\n DarkTheme.seriesLabelDefaults = {\n label: {\n color: DarkTheme.fontColor,\n },\n };\n DarkTheme.seriesDarkThemeOverrides = {};\n return DarkTheme;\n}(ChartTheme));\nexport { DarkTheme };\n","var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar BaseModuleInstance = /** @class */ (function () {\n function BaseModuleInstance() {\n this.destroyFns = [];\n }\n BaseModuleInstance.prototype.destroy = function () {\n var e_1, _a;\n try {\n for (var _b = __values(this.destroyFns), _c = _b.next(); !_c.done; _c = _b.next()) {\n var destroyFn = _c.value;\n destroyFn();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n return BaseModuleInstance;\n}());\nexport { BaseModuleInstance };\nexport var REGISTERED_MODULES = [];\nexport function registerModule(module) {\n var otherModule = REGISTERED_MODULES.find(function (other) {\n return module.type === other.type && module.optionsKey === other.optionsKey;\n });\n if (otherModule) {\n if (module.packageType === 'enterprise' && otherModule.packageType === 'community') {\n // Replace the community module with an enterprise version\n var index = REGISTERED_MODULES.indexOf(otherModule);\n REGISTERED_MODULES.splice(index, 1, module);\n }\n else {\n // Skip if the module is already registered\n }\n }\n else {\n // Simply register the module\n REGISTERED_MODULES.push(module);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Path } from '../../scene/shape/path';\nimport { BBox } from '../../scene/bbox';\nimport { LINE_CAP, NUMBER, COLOR_STRING, Validate } from '../../util/validation';\nvar RangeHandle = /** @class */ (function (_super) {\n __extends(RangeHandle, _super);\n function RangeHandle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._fill = '#f2f2f2';\n _this._stroke = '#999999';\n _this._strokeWidth = 1;\n _this._lineCap = 'square';\n _this._centerX = 0;\n _this._centerY = 0;\n // Use an even number for better looking results.\n _this._width = 8;\n // Use an even number for better looking results.\n _this._gripLineGap = 2;\n // Use an even number for better looking results.\n _this._gripLineLength = 8;\n _this._height = 16;\n return _this;\n }\n Object.defineProperty(RangeHandle.prototype, \"centerX\", {\n get: function () {\n return this._centerX;\n },\n set: function (value) {\n if (this._centerX !== value) {\n this._centerX = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeHandle.prototype, \"centerY\", {\n get: function () {\n return this._centerY;\n },\n set: function (value) {\n if (this._centerY !== value) {\n this._centerY = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeHandle.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n set: function (value) {\n if (this._width !== value) {\n this._width = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeHandle.prototype, \"gripLineGap\", {\n get: function () {\n return this._gripLineGap;\n },\n set: function (value) {\n if (this._gripLineGap !== value) {\n this._gripLineGap = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeHandle.prototype, \"gripLineLength\", {\n get: function () {\n return this._gripLineLength;\n },\n set: function (value) {\n if (this._gripLineLength !== value) {\n this._gripLineLength = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeHandle.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n set: function (value) {\n if (this._height !== value) {\n this._height = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n RangeHandle.prototype.computeBBox = function () {\n var _a = this, centerX = _a.centerX, centerY = _a.centerY, width = _a.width, height = _a.height;\n var x = centerX - width / 2;\n var y = centerY - height / 2;\n return new BBox(x, y, width, height);\n };\n RangeHandle.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return bbox.containsPoint(point.x, point.y);\n };\n RangeHandle.prototype.updatePath = function () {\n var _a = this, path = _a.path, centerX = _a.centerX, centerY = _a.centerY, width = _a.width, height = _a.height;\n path.clear();\n var x = centerX - width / 2;\n var y = centerY - height / 2;\n var ax = this.align(x);\n var ay = this.align(y);\n var axw = ax + this.align(x, width);\n var ayh = ay + this.align(y, height);\n // Handle.\n path.moveTo(ax, ay);\n path.lineTo(axw, ay);\n path.lineTo(axw, ayh);\n path.lineTo(ax, ayh);\n path.lineTo(ax, ay);\n // Grip lines.\n var dx = this.gripLineGap / 2;\n var dy = this.gripLineLength / 2;\n path.moveTo(this.align(centerX - dx), this.align(centerY - dy));\n path.lineTo(this.align(centerX - dx), this.align(centerY + dy));\n path.moveTo(this.align(centerX + dx), this.align(centerY - dy));\n path.lineTo(this.align(centerX + dx), this.align(centerY + dy));\n };\n RangeHandle.className = 'RangeHandle';\n __decorate([\n Validate(COLOR_STRING)\n ], RangeHandle.prototype, \"_fill\", void 0);\n __decorate([\n Validate(COLOR_STRING)\n ], RangeHandle.prototype, \"_stroke\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeHandle.prototype, \"_strokeWidth\", void 0);\n __decorate([\n Validate(LINE_CAP)\n ], RangeHandle.prototype, \"_lineCap\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeHandle.prototype, \"_width\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeHandle.prototype, \"_gripLineGap\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeHandle.prototype, \"_gripLineLength\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeHandle.prototype, \"_height\", void 0);\n return RangeHandle;\n}(Path));\nexport { RangeHandle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Path } from '../../scene/shape/path';\nimport { BBox } from '../../scene/bbox';\nimport { LINE_CAP, NUMBER, COLOR_STRING, Validate } from '../../util/validation';\nvar RangeMask = /** @class */ (function (_super) {\n __extends(RangeMask, _super);\n function RangeMask() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._stroke = '#999999';\n _this._strokeWidth = 1;\n _this._fill = '#999999';\n _this._fillOpacity = 0.2;\n _this._lineCap = 'square';\n _this._x = 0;\n _this._y = 0;\n _this._width = 200;\n _this._height = 30;\n _this.minRange = 0.05;\n _this._min = 0;\n _this._max = 1;\n return _this;\n }\n Object.defineProperty(RangeMask.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n set: function (value) {\n if (this._x !== value) {\n this._x = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeMask.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n set: function (value) {\n if (this._y !== value) {\n this._y = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeMask.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n set: function (value) {\n if (this._width !== value) {\n this._width = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeMask.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n set: function (value) {\n if (this._height !== value) {\n this._height = value;\n this.dirtyPath = true;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeMask.prototype, \"min\", {\n get: function () {\n return this._min;\n },\n set: function (value) {\n var _a;\n value = Math.min(Math.max(value, 0), this.max - this.minRange);\n if (isNaN(value)) {\n return;\n }\n if (this._min !== value) {\n this._min = value;\n this.dirtyPath = true;\n (_a = this.onRangeChange) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeMask.prototype, \"max\", {\n get: function () {\n return this._max;\n },\n set: function (value) {\n var _a;\n value = Math.max(Math.min(value, 1), this.min + this.minRange);\n if (isNaN(value)) {\n return;\n }\n if (this._max !== value) {\n this._max = value;\n this.dirtyPath = true;\n (_a = this.onRangeChange) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n },\n enumerable: false,\n configurable: true\n });\n RangeMask.prototype.computeBBox = function () {\n var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n return new BBox(x, y, width, height);\n };\n RangeMask.prototype.computeVisibleRangeBBox = function () {\n var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height, min = _a.min, max = _a.max;\n var minX = x + width * min;\n var maxX = x + width * max;\n return new BBox(minX, y, maxX - minX, height);\n };\n RangeMask.prototype.updatePath = function () {\n var _a = this, path = _a.path, x = _a.x, y = _a.y, width = _a.width, height = _a.height, min = _a.min, max = _a.max;\n path.clear();\n var ax = this.align(x);\n var ay = this.align(y);\n var axw = ax + this.align(x, width);\n var ayh = ay + this.align(y, height);\n // Whole range.\n path.moveTo(ax, ay);\n path.lineTo(axw, ay);\n path.lineTo(axw, ayh);\n path.lineTo(ax, ayh);\n path.lineTo(ax, ay);\n var minX = this.align(x + width * min);\n var maxX = this.align(x + width * max);\n // Visible range.\n path.moveTo(minX, ay);\n path.lineTo(minX, ayh);\n path.lineTo(maxX, ayh);\n path.lineTo(maxX, ay);\n path.lineTo(minX, ay);\n };\n RangeMask.className = 'RangeMask';\n __decorate([\n Validate(COLOR_STRING)\n ], RangeMask.prototype, \"_stroke\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeMask.prototype, \"_strokeWidth\", void 0);\n __decorate([\n Validate(COLOR_STRING)\n ], RangeMask.prototype, \"_fill\", void 0);\n __decorate([\n Validate(NUMBER(0, 1))\n ], RangeMask.prototype, \"_fillOpacity\", void 0);\n __decorate([\n Validate(LINE_CAP)\n ], RangeMask.prototype, \"_lineCap\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeMask.prototype, \"_width\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], RangeMask.prototype, \"_height\", void 0);\n __decorate([\n Validate(NUMBER())\n ], RangeMask.prototype, \"_min\", void 0);\n __decorate([\n Validate(NUMBER())\n ], RangeMask.prototype, \"_max\", void 0);\n return RangeMask;\n}(Path));\nexport { RangeMask };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { Group } from '../../scene/group';\nimport { RangeHandle } from './rangeHandle';\nimport { RangeMask } from './rangeMask';\nimport { RedrawType } from '../../scene/node';\nvar RangeSelector = /** @class */ (function (_super) {\n __extends(RangeSelector, _super);\n function RangeSelector() {\n var _this = _super.call(this, { name: 'rangeSelectorGroup' }) || this;\n _this.minHandle = new RangeHandle();\n _this.maxHandle = new RangeHandle();\n _this.mask = (function () {\n var _a = RangeSelector.defaults, x = _a.x, y = _a.y, width = _a.width, height = _a.height, min = _a.min, max = _a.max;\n var mask = new RangeMask();\n mask.x = x;\n mask.y = y;\n mask.width = width;\n mask.height = height;\n mask.min = min;\n mask.max = max;\n var _b = _this, minHandle = _b.minHandle, maxHandle = _b.maxHandle;\n minHandle.centerX = x;\n maxHandle.centerX = x + width;\n minHandle.centerY = maxHandle.centerY = y + height / 2;\n _this.append([mask, minHandle, maxHandle]);\n mask.onRangeChange = function () {\n var _a;\n _this.updateHandles();\n (_a = _this.onRangeChange) === null || _a === void 0 ? void 0 : _a.call(_this);\n };\n return mask;\n })();\n _this._x = RangeSelector.defaults.x;\n _this._y = RangeSelector.defaults.y;\n _this._width = RangeSelector.defaults.width;\n _this._height = RangeSelector.defaults.height;\n _this._min = RangeSelector.defaults.min;\n _this._max = RangeSelector.defaults.max;\n _this.isContainerNode = true;\n return _this;\n }\n Object.defineProperty(RangeSelector.prototype, \"x\", {\n get: function () {\n return this.mask.x;\n },\n set: function (value) {\n this.mask.x = value;\n this.updateHandles();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeSelector.prototype, \"y\", {\n get: function () {\n return this.mask.y;\n },\n set: function (value) {\n this.mask.y = value;\n this.updateHandles();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeSelector.prototype, \"width\", {\n get: function () {\n return this.mask.width;\n },\n set: function (value) {\n this.mask.width = value;\n this.updateHandles();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeSelector.prototype, \"height\", {\n get: function () {\n return this.mask.height;\n },\n set: function (value) {\n this.mask.height = value;\n this.updateHandles();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeSelector.prototype, \"min\", {\n get: function () {\n return this.mask.min;\n },\n set: function (value) {\n this.mask.min = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RangeSelector.prototype, \"max\", {\n get: function () {\n return this.mask.max;\n },\n set: function (value) {\n this.mask.max = value;\n },\n enumerable: false,\n configurable: true\n });\n RangeSelector.prototype.updateHandles = function () {\n var _a = this, minHandle = _a.minHandle, maxHandle = _a.maxHandle, x = _a.x, y = _a.y, width = _a.width, height = _a.height, mask = _a.mask;\n minHandle.centerX = x + width * mask.min;\n maxHandle.centerX = x + width * mask.max;\n minHandle.centerY = maxHandle.centerY = y + height / 2;\n };\n RangeSelector.prototype.computeBBox = function () {\n return this.mask.computeBBox();\n };\n RangeSelector.prototype.computeVisibleRangeBBox = function () {\n return this.mask.computeVisibleRangeBBox();\n };\n RangeSelector.prototype.render = function (renderCtx) {\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n if (this.dirty === RedrawType.NONE && !forceRender) {\n if (stats)\n stats.nodesSkipped++;\n return;\n }\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n var _a = this, mask = _a.mask, minHandle = _a.minHandle, maxHandle = _a.maxHandle;\n [mask, minHandle, maxHandle].forEach(function (child) {\n if (child.visible && (forceRender || child.dirty > RedrawType.NONE)) {\n ctx.save();\n child.render(__assign(__assign({}, renderCtx), { ctx: ctx, forceRender: forceRender }));\n ctx.restore();\n }\n });\n this.markClean({ force: true });\n if (stats)\n stats.nodesRendered++;\n };\n RangeSelector.className = 'Range';\n RangeSelector.defaults = {\n x: 0,\n y: 0,\n width: 200,\n height: 30,\n min: 0,\n max: 1,\n };\n return RangeSelector;\n}(Group));\nexport { RangeSelector };\n","var NavigatorMask = /** @class */ (function () {\n function NavigatorMask(rangeMask) {\n this.rm = rangeMask;\n }\n Object.defineProperty(NavigatorMask.prototype, \"fill\", {\n get: function () {\n return this.rm.fill;\n },\n set: function (value) {\n this.rm.fill = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorMask.prototype, \"stroke\", {\n get: function () {\n return this.rm.stroke;\n },\n set: function (value) {\n this.rm.stroke = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorMask.prototype, \"strokeWidth\", {\n get: function () {\n return this.rm.strokeWidth;\n },\n set: function (value) {\n this.rm.strokeWidth = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorMask.prototype, \"fillOpacity\", {\n get: function () {\n return this.rm.fillOpacity;\n },\n set: function (value) {\n this.rm.fillOpacity = value;\n },\n enumerable: false,\n configurable: true\n });\n return NavigatorMask;\n}());\nexport { NavigatorMask };\n","var NavigatorHandle = /** @class */ (function () {\n function NavigatorHandle(rangeHandle) {\n this.rh = rangeHandle;\n }\n Object.defineProperty(NavigatorHandle.prototype, \"fill\", {\n get: function () {\n return this.rh.fill;\n },\n set: function (value) {\n this.rh.fill = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorHandle.prototype, \"stroke\", {\n get: function () {\n return this.rh.stroke;\n },\n set: function (value) {\n this.rh.stroke = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorHandle.prototype, \"strokeWidth\", {\n get: function () {\n return this.rh.strokeWidth;\n },\n set: function (value) {\n this.rh.strokeWidth = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorHandle.prototype, \"width\", {\n get: function () {\n return this.rh.width;\n },\n set: function (value) {\n this.rh.width = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorHandle.prototype, \"height\", {\n get: function () {\n return this.rh.height;\n },\n set: function (value) {\n this.rh.height = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorHandle.prototype, \"gripLineGap\", {\n get: function () {\n return this.rh.gripLineGap;\n },\n set: function (value) {\n this.rh.gripLineGap = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NavigatorHandle.prototype, \"gripLineLength\", {\n get: function () {\n return this.rh.gripLineLength;\n },\n set: function (value) {\n this.rh.gripLineLength = value;\n },\n enumerable: false,\n configurable: true\n });\n return NavigatorHandle;\n}());\nexport { NavigatorHandle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { RangeSelector } from '../shapes/rangeSelector';\nimport { NavigatorMask } from './navigatorMask';\nimport { NavigatorHandle } from './navigatorHandle';\nimport { BaseModuleInstance } from '../../util/module';\nimport { BOOLEAN, NUMBER, Validate } from '../../util/validation';\nimport { BBox } from '../../scene/bbox';\nvar Navigator = /** @class */ (function (_super) {\n __extends(Navigator, _super);\n function Navigator(ctx) {\n var _this = _super.call(this) || this;\n _this.ctx = ctx;\n _this.rs = new RangeSelector();\n // Wrappers to allow option application to the scene graph nodes.\n _this.mask = new NavigatorMask(_this.rs.mask);\n _this.minHandle = new NavigatorHandle(_this.rs.minHandle);\n _this.maxHandle = new NavigatorHandle(_this.rs.maxHandle);\n _this.minHandleDragging = false;\n _this.maxHandleDragging = false;\n _this.panHandleOffset = NaN;\n _this._enabled = false;\n _this.margin = 10;\n _this._visible = true;\n _this.rs.onRangeChange = function () {\n return _this.ctx.zoomManager.updateZoom('navigator', { x: { min: _this.rs.min, max: _this.rs.max } });\n };\n [\n ctx.interactionManager.addListener('drag-start', function (event) { return _this.onDragStart(event); }),\n ctx.interactionManager.addListener('drag', function (event) { return _this.onDrag(event); }),\n ctx.interactionManager.addListener('hover', function (event) { return _this.onDrag(event); }),\n ctx.interactionManager.addListener('drag-end', function () { return _this.onDragStop(); }),\n ].forEach(function (s) { return _this.destroyFns.push(function () { return ctx.interactionManager.removeListener(s); }); });\n [\n ctx.layoutService.addListener('before-series', function (event) { return _this.layout(event); }),\n ctx.layoutService.addListener('layout-complete', function (event) { return _this.layoutComplete(event); }),\n ].forEach(function (s) { return _this.destroyFns.push(function () { return ctx.layoutService.removeListener(s); }); });\n ctx.scene.root.appendChild(_this.rs);\n _this.destroyFns.push(function () { var _a; return (_a = ctx.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(_this.rs); });\n _this.updateGroupVisibility();\n return _this;\n }\n Object.defineProperty(Navigator.prototype, \"enabled\", {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n this._enabled = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"width\", {\n get: function () {\n return this.rs.width;\n },\n set: function (value) {\n this.rs.width = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"height\", {\n get: function () {\n return this.rs.height;\n },\n set: function (value) {\n this.rs.height = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"min\", {\n get: function () {\n return this.rs.min;\n },\n set: function (value) {\n this.rs.min = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"max\", {\n get: function () {\n return this.rs.max;\n },\n set: function (value) {\n this.rs.max = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"visible\", {\n get: function () {\n return this._visible;\n },\n set: function (value) {\n this._visible = value;\n this.updateGroupVisibility();\n },\n enumerable: false,\n configurable: true\n });\n Navigator.prototype.updateGroupVisibility = function () {\n this.rs.visible = this.enabled && this.visible;\n };\n Navigator.prototype.layout = function (_a) {\n var shrinkRect = _a.shrinkRect;\n if (this.enabled) {\n var navigatorTotalHeight = this.rs.height + this.margin;\n shrinkRect.shrink(navigatorTotalHeight, 'bottom');\n this.rs.y = shrinkRect.y + shrinkRect.height + this.margin;\n }\n return { shrinkRect: shrinkRect };\n };\n Navigator.prototype.layoutComplete = function (_a) {\n var _b = _a.series, rect = _b.rect, visible = _b.visible;\n if (this.enabled && visible) {\n this.rs.x = rect.x;\n this.rs.width = rect.width;\n }\n this.visible = visible;\n };\n Navigator.prototype.update = function () {\n // Nothing to do!\n };\n Navigator.prototype.onDragStart = function (offset) {\n if (!this.enabled) {\n return;\n }\n var offsetX = offset.offsetX, offsetY = offset.offsetY;\n var rs = this.rs;\n var minHandle = rs.minHandle, maxHandle = rs.maxHandle, x = rs.x, width = rs.width, min = rs.min;\n var visibleRange = rs.computeVisibleRangeBBox();\n if (!(this.minHandleDragging || this.maxHandleDragging)) {\n if (minHandle.containsPoint(offsetX, offsetY)) {\n this.minHandleDragging = true;\n }\n else if (maxHandle.containsPoint(offsetX, offsetY)) {\n this.maxHandleDragging = true;\n }\n else if (visibleRange.containsPoint(offsetX, offsetY)) {\n this.panHandleOffset = (offsetX - x) / width - min;\n }\n }\n };\n Navigator.prototype.onDrag = function (offset) {\n if (!this.enabled) {\n return;\n }\n var _a = this, rs = _a.rs, panHandleOffset = _a.panHandleOffset;\n var x = rs.x, y = rs.y, width = rs.width, height = rs.height, minHandle = rs.minHandle, maxHandle = rs.maxHandle;\n var offsetX = offset.offsetX, offsetY = offset.offsetY;\n var minX = x + width * rs.min;\n var maxX = x + width * rs.max;\n var visibleRange = new BBox(minX, y, maxX - minX, height);\n var getRatio = function () { return Math.min(Math.max((offsetX - x) / width, 0), 1); };\n if (minHandle.containsPoint(offsetX, offsetY) || maxHandle.containsPoint(offsetX, offsetY)) {\n this.ctx.cursorManager.updateCursor('navigator', 'ew-resize');\n }\n else if (visibleRange.containsPoint(offsetX, offsetY)) {\n this.ctx.cursorManager.updateCursor('navigator', 'grab');\n }\n else {\n this.ctx.cursorManager.updateCursor('navigator');\n }\n if (this.minHandleDragging) {\n rs.min = getRatio();\n }\n else if (this.maxHandleDragging) {\n rs.max = getRatio();\n }\n else if (!isNaN(panHandleOffset)) {\n var span = rs.max - rs.min;\n var min = Math.min(getRatio() - panHandleOffset, 1 - span);\n if (min <= rs.min) {\n // pan left\n rs.min = min;\n rs.max = rs.min + span;\n }\n else {\n // pan right\n rs.max = min + span;\n rs.min = rs.max - span;\n }\n }\n };\n Navigator.prototype.onDragStop = function () {\n this.stopHandleDragging();\n };\n Navigator.prototype.stopHandleDragging = function () {\n this.minHandleDragging = this.maxHandleDragging = false;\n this.panHandleOffset = NaN;\n };\n __decorate([\n Validate(BOOLEAN)\n ], Navigator.prototype, \"_enabled\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], Navigator.prototype, \"margin\", void 0);\n return Navigator;\n}(BaseModuleInstance));\nexport { Navigator };\n","import { Navigator } from '../chart/navigator/navigator';\nimport { registerModule } from './module';\nexport var CHART_NAVIGATOR_MODULE = {\n type: 'root',\n optionsKey: 'navigator',\n packageType: 'community',\n chartTypes: ['cartesian'],\n initialiseModule: function (ctx) {\n return {\n instance: new Navigator(ctx),\n };\n },\n};\nregisterModule(CHART_NAVIGATOR_MODULE);\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Rect } from '../../scene/shape/rect';\nimport { Group } from '../../scene/group';\nimport { BaseModuleInstance } from '../../util/module';\nimport { ProxyPropertyOnWrite } from '../../util/proxy';\nimport { BOOLEAN, OPT_COLOR_STRING, Validate } from '../../util/validation';\nimport { Layers } from '../layers';\nvar Background = /** @class */ (function (_super) {\n __extends(Background, _super);\n function Background(ctx) {\n var _a;\n var _this = _super.call(this) || this;\n _this.onLayoutComplete = function (e) {\n var _a = e.chart, width = _a.width, height = _a.height;\n _this.rectNode.width = width;\n _this.rectNode.height = height;\n };\n _this.node = new Group({ name: 'background' });\n _this.node.zIndex = Layers.SERIES_BACKGROUND_ZINDEX;\n _this.rectNode = new Rect();\n _this.node.appendChild(_this.rectNode);\n _this.fill = 'white';\n _this.visible = true;\n (_a = ctx.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(_this.node);\n _this.destroyFns.push(function () { var _a; return (_a = ctx.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(_this.node); });\n var layoutHandle = ctx.layoutService.addListener('layout-complete', _this.onLayoutComplete);\n _this.destroyFns.push(function () { return ctx.layoutService.removeListener(layoutHandle); });\n return _this;\n }\n Background.prototype.update = function () { };\n __decorate([\n Validate(BOOLEAN),\n ProxyPropertyOnWrite('node', 'visible')\n ], Background.prototype, \"visible\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING),\n ProxyPropertyOnWrite('rectNode', 'fill')\n ], Background.prototype, \"fill\", void 0);\n return Background;\n}(BaseModuleInstance));\nexport { Background };\n","import { Background } from './background';\nimport { registerModule } from '../../util/module';\nexport var CHART_BACKGROUND_MODULE = {\n type: 'root',\n optionsKey: 'background',\n packageType: 'community',\n chartTypes: ['cartesian', 'polar', 'hierarchy'],\n initialiseModule: function (ctx) {\n return {\n instance: new Background(ctx),\n };\n },\n};\nregisterModule(CHART_BACKGROUND_MODULE);\n","import { AreaSeries } from './cartesian/areaSeries';\nimport { BarSeries } from './cartesian/barSeries';\nimport { HistogramSeries } from './cartesian/histogramSeries';\nimport { LineSeries } from './cartesian/lineSeries';\nimport { ScatterSeries } from './cartesian/scatterSeries';\nimport { PieSeries } from './polar/pieSeries';\nimport { TreemapSeries } from './hierarchy/treemapSeries';\nimport { CHART_TYPES } from '../chartTypes';\nimport { ChartTheme } from '../themes/chartTheme';\nimport { DarkTheme } from '../themes/darkTheme';\nimport { REGISTERED_MODULES } from '../../module-support';\nvar builtinSeriesTypes = {\n area: AreaSeries,\n bar: BarSeries,\n column: BarSeries,\n histogram: HistogramSeries,\n line: LineSeries,\n pie: PieSeries,\n scatter: ScatterSeries,\n treemap: TreemapSeries,\n};\nvar extraSeriesFactories = {};\nvar initialisedSeriesModules = new Map();\nexport function initialiseSeriesModules() {\n REGISTERED_MODULES.filter(function (m) { return m.type === 'series'; })\n .filter(function (m) { return !initialisedSeriesModules.has(m); })\n .forEach(function (m) { return initialiseSeriesModule(m); });\n}\nexport var seriesDefaults = {};\nfunction initialiseSeriesModule(mod) {\n var seriesType = mod.optionsKey;\n var instance = mod.initialiseModule({\n seriesFactory: {\n add: function (factory) {\n extraSeriesFactories[seriesType] = factory;\n },\n delete: function () {\n delete extraSeriesFactories[seriesType];\n },\n },\n defaults: {\n add: function (defaultOptions) {\n seriesDefaults[seriesType] = defaultOptions;\n },\n delete: function () {\n delete seriesDefaults[seriesType];\n },\n },\n themes: {\n chartTheme: {\n add: function (fn) {\n ChartTheme.seriesThemeOverrides[seriesType] = fn;\n },\n delete: function () {\n delete ChartTheme.seriesThemeOverrides[seriesType];\n },\n },\n darkTheme: {\n add: function (fn) {\n DarkTheme.seriesDarkThemeOverrides[seriesType] = fn;\n },\n delete: function () {\n delete DarkTheme.seriesDarkThemeOverrides[seriesType];\n },\n },\n },\n });\n initialisedSeriesModules.set(mod, instance);\n var chartType = mod.chartTypes[0];\n CHART_TYPES.add(seriesType, chartType);\n}\nexport function getSeries(chartType) {\n if (Object.prototype.hasOwnProperty.call(extraSeriesFactories, chartType)) {\n var factory = extraSeriesFactories[chartType];\n return factory();\n }\n if (Object.prototype.hasOwnProperty.call(builtinSeriesTypes, chartType)) {\n var SeriesConstructor = builtinSeriesTypes[chartType];\n return new SeriesConstructor();\n }\n throw new Error(\"AG Charts - unknown series type: \" + chartType);\n}\n","import { NumberAxis } from '../axis/numberAxis';\nimport { CategoryAxis } from '../axis/categoryAxis';\nexport var DEFAULT_CARTESIAN_CHART_OVERRIDES = {\n axes: [\n {\n type: NumberAxis.type,\n position: 'left',\n },\n {\n type: CategoryAxis.type,\n position: 'bottom',\n },\n ],\n};\nexport var DEFAULT_BAR_CHART_OVERRIDES = {\n axes: [\n {\n type: 'number',\n position: 'bottom',\n },\n {\n type: 'category',\n position: 'left',\n },\n ],\n};\nexport var DEFAULT_SCATTER_HISTOGRAM_CHART_OVERRIDES = {\n axes: [\n {\n type: 'number',\n position: 'bottom',\n },\n {\n type: 'number',\n position: 'left',\n },\n ],\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction transform(input, transforms) {\n var result = {};\n for (var p in input) {\n var t = transforms[p] || (function (x) { return x; });\n result[p] = t(input[p], input);\n }\n return result;\n}\nfunction is2dArray(input) {\n return input != null && input instanceof Array && input[0] instanceof Array;\n}\nfunction yNamesMapping(p, src) {\n if (p == null) {\n return {};\n }\n if (!(p instanceof Array)) {\n return p;\n }\n var yKeys = src.yKeys;\n if (yKeys == null || is2dArray(yKeys)) {\n throw new Error('AG Charts - yNames and yKeys mismatching configuration.');\n }\n var result = {};\n yKeys.forEach(function (k, i) {\n result[k] = p[i];\n });\n return result;\n}\nfunction yKeysMapping(p, src) {\n if (p == null) {\n return [[]];\n }\n if (is2dArray(p)) {\n return p;\n }\n return src.grouped ? p.map(function (v) { return [v]; }) : [p];\n}\nfunction barSeriesTransform(options) {\n var result = __assign({}, options);\n delete result['yKey'];\n delete result['yName'];\n return transform(result, {\n yNames: yNamesMapping,\n yKeys: yKeysMapping,\n });\n}\nfunction identityTransform(input) {\n return input;\n}\nvar SERIES_TRANSFORMS = {\n area: identityTransform,\n bar: barSeriesTransform,\n column: barSeriesTransform,\n histogram: identityTransform,\n line: identityTransform,\n pie: identityTransform,\n scatter: identityTransform,\n treemap: identityTransform,\n};\nexport function applySeriesTransform(options) {\n var type = options.type || 'line';\n var transform = SERIES_TRANSFORMS[type];\n return (transform !== null && transform !== void 0 ? transform : identityTransform)(options);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartTheme } from './chartTheme';\nvar palette = {\n fills: [\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffeb3b',\n '#ffc107',\n '#ff9800',\n '#ff5722',\n ],\n strokes: [\n '#ab2f26',\n '#a31545',\n '#6d1b7b',\n '#482980',\n '#2c397f',\n '#1769aa',\n '#0276ab',\n '#008494',\n '#00695f',\n '#357a38',\n '#618834',\n '#909a28',\n '#b3a429',\n '#b38705',\n '#b36a00',\n '#b33d18',\n ],\n};\nvar MaterialLight = /** @class */ (function (_super) {\n __extends(MaterialLight, _super);\n function MaterialLight() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MaterialLight.prototype.getPalette = function () {\n return palette;\n };\n return MaterialLight;\n}(ChartTheme));\nexport { MaterialLight };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DarkTheme } from './darkTheme';\nvar palette = {\n fills: [\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffeb3b',\n '#ffc107',\n '#ff9800',\n '#ff5722',\n ],\n strokes: [\n '#ab2f26',\n '#a31545',\n '#6d1b7b',\n '#482980',\n '#2c397f',\n '#1769aa',\n '#0276ab',\n '#008494',\n '#00695f',\n '#357a38',\n '#618834',\n '#909a28',\n '#b3a429',\n '#b38705',\n '#b36a00',\n '#b33d18',\n ],\n};\nvar MaterialDark = /** @class */ (function (_super) {\n __extends(MaterialDark, _super);\n function MaterialDark() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MaterialDark.prototype.getPalette = function () {\n return palette;\n };\n return MaterialDark;\n}(DarkTheme));\nexport { MaterialDark };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartTheme } from './chartTheme';\nvar palette = {\n fills: ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'],\n strokes: ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'],\n};\nvar PastelLight = /** @class */ (function (_super) {\n __extends(PastelLight, _super);\n function PastelLight() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PastelLight.prototype.getPalette = function () {\n return palette;\n };\n return PastelLight;\n}(ChartTheme));\nexport { PastelLight };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DarkTheme } from './darkTheme';\nvar palette = {\n fills: ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'],\n strokes: ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'],\n};\nvar PastelDark = /** @class */ (function (_super) {\n __extends(PastelDark, _super);\n function PastelDark() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PastelDark.prototype.getPalette = function () {\n return palette;\n };\n return PastelDark;\n}(DarkTheme));\nexport { PastelDark };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartTheme } from './chartTheme';\nvar palette = {\n fills: [\n '#febe76',\n '#ff7979',\n '#badc58',\n '#f9ca23',\n '#f0932b',\n '#eb4c4b',\n '#6ab04c',\n '#7ed6df',\n '#e056fd',\n '#686de0',\n ],\n strokes: [\n '#b28553',\n '#b35555',\n '#829a3e',\n '#ae8d19',\n '#a8671e',\n '#a43535',\n '#4a7b35',\n '#58969c',\n '#9d3cb1',\n '#494c9d',\n ],\n};\nvar SolarLight = /** @class */ (function (_super) {\n __extends(SolarLight, _super);\n function SolarLight() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SolarLight.prototype.getPalette = function () {\n return palette;\n };\n return SolarLight;\n}(ChartTheme));\nexport { SolarLight };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DarkTheme } from './darkTheme';\nvar palette = {\n fills: [\n '#febe76',\n '#ff7979',\n '#badc58',\n '#f9ca23',\n '#f0932b',\n '#eb4c4b',\n '#6ab04c',\n '#7ed6df',\n '#e056fd',\n '#686de0',\n ],\n strokes: [\n '#b28553',\n '#b35555',\n '#829a3e',\n '#ae8d19',\n '#a8671e',\n '#a43535',\n '#4a7b35',\n '#58969c',\n '#9d3cb1',\n '#494c9d',\n ],\n};\nvar SolarDark = /** @class */ (function (_super) {\n __extends(SolarDark, _super);\n function SolarDark() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SolarDark.prototype.getPalette = function () {\n return palette;\n };\n return SolarDark;\n}(DarkTheme));\nexport { SolarDark };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartTheme } from './chartTheme';\nvar palette = {\n fills: ['#5BC0EB', '#FDE74C', '#9BC53D', '#E55934', '#FA7921', '#fa3081'],\n strokes: ['#4086a4', '#b1a235', '#6c8a2b', '#a03e24', '#af5517', '#af225a'],\n};\nvar VividLight = /** @class */ (function (_super) {\n __extends(VividLight, _super);\n function VividLight() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n VividLight.prototype.getPalette = function () {\n return palette;\n };\n return VividLight;\n}(ChartTheme));\nexport { VividLight };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DarkTheme } from './darkTheme';\nvar palette = {\n fills: ['#5BC0EB', '#FDE74C', '#9BC53D', '#E55934', '#FA7921', '#fa3081'],\n strokes: ['#4086a4', '#b1a235', '#6c8a2b', '#a03e24', '#af5517', '#af225a'],\n};\nvar VividDark = /** @class */ (function (_super) {\n __extends(VividDark, _super);\n function VividDark() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n VividDark.prototype.getPalette = function () {\n return palette;\n };\n return VividDark;\n}(DarkTheme));\nexport { VividDark };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartTheme } from '../themes/chartTheme';\nimport { DarkTheme } from '../themes/darkTheme';\nimport { MaterialLight } from '../themes/materialLight';\nimport { MaterialDark } from '../themes/materialDark';\nimport { PastelLight } from '../themes/pastelLight';\nimport { PastelDark } from '../themes/pastelDark';\nimport { SolarLight } from '../themes/solarLight';\nimport { SolarDark } from '../themes/solarDark';\nimport { VividLight } from '../themes/vividLight';\nimport { VividDark } from '../themes/vividDark';\nimport { jsonMerge } from '../../util/json';\nvar lightTheme = function () { return new ChartTheme(); };\nvar darkTheme = function () { return new DarkTheme(); };\nvar lightThemes = {\n undefined: lightTheme,\n null: lightTheme,\n 'ag-default': lightTheme,\n 'ag-material': function () { return new MaterialLight(); },\n 'ag-pastel': function () { return new PastelLight(); },\n 'ag-solar': function () { return new SolarLight(); },\n 'ag-vivid': function () { return new VividLight(); },\n};\nvar darkThemes = {\n undefined: darkTheme,\n null: darkTheme,\n 'ag-default-dark': darkTheme,\n 'ag-material-dark': function () { return new MaterialDark(); },\n 'ag-pastel-dark': function () { return new PastelDark(); },\n 'ag-solar-dark': function () { return new SolarDark(); },\n 'ag-vivid-dark': function () { return new VividDark(); },\n};\nexport var themes = __assign(__assign({}, darkThemes), lightThemes);\nexport function getChartTheme(value) {\n var _a;\n if (value instanceof ChartTheme) {\n return value;\n }\n var stockTheme = themes[value];\n if (stockTheme) {\n return stockTheme();\n }\n value = value;\n // Flatten recursive themes.\n var overrides = [];\n var palette;\n while (typeof value === 'object') {\n overrides.push((_a = value.overrides) !== null && _a !== void 0 ? _a : {});\n // Use first palette found, they can't be merged.\n if (value.palette && palette == null) {\n palette = value.palette;\n }\n value = value.baseTheme;\n }\n overrides.reverse();\n var flattenedTheme = __assign({ baseTheme: value, overrides: jsonMerge(overrides) }, (palette ? { palette: palette } : {}));\n if (flattenedTheme.baseTheme || flattenedTheme.overrides) {\n var baseTheme = getChartTheme(flattenedTheme.baseTheme);\n return new baseTheme.constructor(flattenedTheme);\n }\n return lightTheme();\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { Logger } from '../../util/logger';\n/**\n * Groups the series options objects if they are of type `column` or `bar` and places them in an array at the index where the first instance of this series type was found.\n * Returns an array of arrays containing the ordered and grouped series options objects.\n */\nexport function groupSeriesByType(seriesOptions) {\n var e_1, _a;\n var indexMap = {};\n var result = [];\n try {\n for (var seriesOptions_1 = __values(seriesOptions), seriesOptions_1_1 = seriesOptions_1.next(); !seriesOptions_1_1.done; seriesOptions_1_1 = seriesOptions_1.next()) {\n var s = seriesOptions_1_1.value;\n if (s.type !== 'column' && s.type !== 'bar' && (s.type !== 'area' || s.stacked !== true)) {\n // No need to use index for these cases.\n result.push([s]);\n continue;\n }\n var seriesType = s.type || 'line';\n var groupingKey = s.stacked ? 'stacked' : 'grouped';\n var indexKey = seriesType + \"-\" + s.xKey + \"-\" + groupingKey;\n if (indexMap[indexKey] == null) {\n // Add indexed array to result on first addition.\n indexMap[indexKey] = [];\n result.push(indexMap[indexKey]);\n }\n indexMap[indexKey].push(s);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (seriesOptions_1_1 && !seriesOptions_1_1.done && (_a = seriesOptions_1.return)) _a.call(seriesOptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n}\nvar FAIL = Symbol();\nvar SKIP = Symbol();\nvar ARRAY_REDUCER = function (prop) { return function (result, next) {\n var _a;\n return result.concat.apply(result, __spread(((_a = next[prop]) !== null && _a !== void 0 ? _a : [])));\n}; };\nvar BOOLEAN_OR_REDUCER = function (prop, defaultValue) { return function (result, next) {\n if (typeof next[prop] === 'boolean') {\n return (result !== null && result !== void 0 ? result : false) || next[prop];\n }\n return result !== null && result !== void 0 ? result : defaultValue;\n}; };\nvar DEFAULTING_ARRAY_REDUCER = function (prop, defaultValue) { return function (result, next, idx, length) {\n var _a;\n var sparse = defaultValue === SKIP || defaultValue === FAIL;\n var nextValue = (_a = next[prop]) !== null && _a !== void 0 ? _a : defaultValue;\n if (nextValue === FAIL) {\n throw new Error(\"AG Charts - missing value for property [\" + prop + \"] on series config.\");\n }\n else if (nextValue === SKIP) {\n return result;\n }\n if (result.length === 0 && !sparse) {\n // Pre-populate values on first invocation as we will only be invoked for series with a\n // value specified.\n while (result.length < length) {\n result = result.concat(defaultValue);\n }\n }\n if (!sparse) {\n result[idx] = nextValue;\n return result;\n }\n return result.concat(nextValue);\n}; };\nvar YKEYS_REDUCER = function (prop, activationValue) { return function (result, next) {\n if (next[prop] === activationValue) {\n return result.concat.apply(result, __spread((next.yKey ? [next.yKey] : next.yKeys)));\n }\n return result;\n}; };\nvar STACK_GROUPS_REDUCER = function () { return function (result, next) {\n var _a;\n return __assign(__assign({}, result), (_a = {}, _a[next.stackGroup] = __spread((result[next.stackGroup] || []), [next.yKey]), _a));\n}; };\nvar REDUCE_CONFIG = {\n hideInChart: { outputProp: 'hideInChart', reducer: ARRAY_REDUCER('hideInChart'), start: [] },\n hideInLegend: { outputProp: 'hideInLegend', reducer: ARRAY_REDUCER('hideInLegend'), start: [] },\n yKey: { outputProp: 'yKeys', reducer: DEFAULTING_ARRAY_REDUCER('yKey', SKIP), start: [] },\n fill: { outputProp: 'fills', reducer: DEFAULTING_ARRAY_REDUCER('fill', SKIP), start: [] },\n stroke: { outputProp: 'strokes', reducer: DEFAULTING_ARRAY_REDUCER('stroke', SKIP), start: [] },\n yName: { outputProp: 'yNames', reducer: DEFAULTING_ARRAY_REDUCER('yName', SKIP), start: [] },\n visible: { outputProp: 'visibles', reducer: DEFAULTING_ARRAY_REDUCER('visible', true), start: [] },\n grouped: {\n outputProp: 'grouped',\n reducer: BOOLEAN_OR_REDUCER('grouped'),\n seriesType: ['bar', 'column'],\n start: undefined,\n },\n showInLegend: {\n outputProp: 'hideInLegend',\n reducer: YKEYS_REDUCER('showInLegend', false),\n seriesType: ['bar', 'column'],\n start: [],\n },\n stackGroup: {\n outputProp: 'stackGroups',\n reducer: STACK_GROUPS_REDUCER(),\n seriesType: ['bar', 'column'],\n start: {},\n },\n};\n/**\n * Takes an array of bar or area series options objects and returns a single object with the combined area series options.\n */\nexport function reduceSeries(series) {\n var options = {};\n series.forEach(function (s, idx) {\n Object.keys(s).forEach(function (prop) {\n var _a;\n var reducerConfig = REDUCE_CONFIG[prop];\n var defaultReduce = function () {\n var _a, _b;\n options[prop] = (_b = (_a = s[prop]) !== null && _a !== void 0 ? _a : options[prop]) !== null && _b !== void 0 ? _b : undefined;\n };\n if (!reducerConfig) {\n defaultReduce();\n return;\n }\n var outputProp = reducerConfig.outputProp, reducer = reducerConfig.reducer, _b = reducerConfig.start, start = _b === void 0 ? undefined : _b, _c = reducerConfig.seriesType, seriesType = _c === void 0 ? [s.type] : _c;\n if (!seriesType.includes(s.type)) {\n defaultReduce();\n return;\n }\n var result = reducer((_a = options[outputProp]) !== null && _a !== void 0 ? _a : start, s, idx, series.length);\n if (result !== undefined) {\n options[outputProp] = result;\n }\n });\n });\n return options;\n}\n/**\n * Transforms provided series options array into an array containing series options which are compatible with standalone charts series options.\n */\nexport function processSeriesOptions(seriesOptions) {\n var e_2, _a;\n var result = [];\n var preprocessed = seriesOptions.map(function (series) {\n // Change the default for bar/columns when yKey is used to be grouped rather than stacked.\n if ((series.type === 'bar' || series.type === 'column') && series.yKey != null && !series.stacked) {\n return __assign(__assign({}, series), { grouped: series.grouped != null ? series.grouped : true });\n }\n return series;\n });\n try {\n for (var _b = __values(groupSeriesByType(preprocessed)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var series = _c.value;\n switch (series[0].type) {\n case 'column':\n case 'bar':\n case 'area':\n result.push(reduceSeries(series));\n break;\n case 'line':\n default:\n if (series.length > 1) {\n Logger.warn('unexpected grouping of series type: ' + series[0].type);\n }\n result.push(series[0]);\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return result;\n}\n","var types = {\n number: 'number',\n time: 'time',\n log: 'log',\n category: 'category',\n groupedCategory: 'groupedCategory',\n};\nexport var CHART_AXES_TYPES = {\n has: function (axisType) {\n return Object.prototype.hasOwnProperty.call(types, axisType);\n },\n get axesTypes() {\n return Object.keys(types);\n },\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { DEFAULT_CARTESIAN_CHART_OVERRIDES, DEFAULT_BAR_CHART_OVERRIDES, DEFAULT_SCATTER_HISTOGRAM_CHART_OVERRIDES, } from './defaults';\nimport { jsonMerge, DELETE, jsonWalk } from '../../util/json';\nimport { applySeriesTransform } from './transforms';\nimport { getChartTheme } from './themes';\nimport { processSeriesOptions } from './prepareSeries';\nimport { Logger } from '../../util/logger';\nimport { CHART_TYPES } from '../chartTypes';\nimport { CHART_AXES_TYPES } from '../chartAxesTypes';\nexport function optionsType(input) {\n var _a, _b, _c, _d;\n return (_d = (_a = input.type) !== null && _a !== void 0 ? _a : (_c = (_b = input.series) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : 'line';\n}\nexport function isAgCartesianChartOptions(input) {\n var specifiedType = optionsType(input);\n if (specifiedType == null) {\n return true;\n }\n if (specifiedType === 'cartesian') {\n Logger.warnOnce(\"type '\" + specifiedType + \"' is deprecated, use a series type instead\");\n return true;\n }\n return CHART_TYPES.isCartesian(specifiedType);\n}\nexport function isAgHierarchyChartOptions(input) {\n var specifiedType = optionsType(input);\n if (specifiedType == null) {\n return false;\n }\n if (specifiedType === 'hierarchy') {\n Logger.warnOnce(\"type '\" + specifiedType + \"' is deprecated, use a series type instead\");\n return true;\n }\n return CHART_TYPES.isHierarchy(specifiedType);\n}\nexport function isAgPolarChartOptions(input) {\n var specifiedType = optionsType(input);\n if (specifiedType == null) {\n return false;\n }\n if (specifiedType === 'polar') {\n Logger.warnOnce(\"type '\" + specifiedType + \"' is deprecated, use a series type instead\");\n return true;\n }\n return CHART_TYPES.isPolar(specifiedType);\n}\nfunction isSeriesOptionType(input) {\n if (input == null) {\n return false;\n }\n return CHART_TYPES.has(input);\n}\nfunction isAxisOptionType(input) {\n if (input == null) {\n return false;\n }\n return CHART_AXES_TYPES.has(input);\n}\nfunction countArrayElements(input) {\n var e_1, _a;\n var count = 0;\n try {\n for (var input_1 = __values(input), input_1_1 = input_1.next(); !input_1_1.done; input_1_1 = input_1.next()) {\n var next = input_1_1.value;\n if (next instanceof Array) {\n count += countArrayElements(next);\n }\n if (next != null) {\n count++;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (input_1_1 && !input_1_1.done && (_a = input_1.return)) _a.call(input_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return count;\n}\nfunction takeColours(context, colours, maxCount) {\n var result = [];\n for (var count = 0; count < maxCount; count++) {\n result.push(colours[(count + context.colourIndex) % colours.length]);\n }\n return result;\n}\nexport var noDataCloneMergeOptions = {\n avoidDeepClone: ['data'],\n};\nexport function prepareOptions(newOptions, fallbackOptions, seriesDefaults) {\n var e_2, _a, e_3, _b;\n var _c, _d, _e, _f;\n var options = jsonMerge([fallbackOptions, newOptions], noDataCloneMergeOptions);\n sanityCheckOptions(options);\n // Determine type and ensure it's explicit in the options config.\n var userSuppliedOptionsType = options.type;\n var type = optionsType(options);\n var globalTooltipPositionOptions = ((_c = options.tooltip) === null || _c === void 0 ? void 0 : _c.position) || {};\n var checkSeriesType = function (type) {\n if (type != null && !(isSeriesOptionType(type) || (seriesDefaults === null || seriesDefaults === void 0 ? void 0 : seriesDefaults[type]))) {\n throw new Error(\"AG Charts - unknown series type: \" + type + \"; expected one of: \" + CHART_TYPES.seriesTypes);\n }\n };\n checkSeriesType(type);\n try {\n for (var _g = __values((_d = options.series) !== null && _d !== void 0 ? _d : []), _h = _g.next(); !_h.done; _h = _g.next()) {\n var seriesType = _h.value.type;\n if (seriesType == null)\n continue;\n checkSeriesType(seriesType);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_a = _g.return)) _a.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n options = __assign(__assign({}, options), { type: type });\n var defaultSeriesType = 'line';\n if (isAgCartesianChartOptions(options)) {\n defaultSeriesType = 'line';\n }\n else if (isAgHierarchyChartOptions(options)) {\n defaultSeriesType = 'treemap';\n }\n else if (isAgPolarChartOptions(options)) {\n defaultSeriesType = 'pie';\n }\n var defaultOverrides = {};\n if (seriesDefaults && Object.prototype.hasOwnProperty.call(seriesDefaults, type)) {\n defaultOverrides = seriesDefaults[type];\n }\n else if (type === 'bar') {\n defaultOverrides = DEFAULT_BAR_CHART_OVERRIDES;\n }\n else if (type === 'scatter' || type === 'histogram') {\n defaultOverrides = DEFAULT_SCATTER_HISTOGRAM_CHART_OVERRIDES;\n }\n else if (isAgCartesianChartOptions(options)) {\n defaultOverrides = DEFAULT_CARTESIAN_CHART_OVERRIDES;\n }\n var _j = prepareMainOptions(defaultOverrides, options), context = _j.context, mergedOptions = _j.mergedOptions, axesThemes = _j.axesThemes, seriesThemes = _j.seriesThemes;\n // Special cases where we have arrays of elements which need their own defaults.\n // Apply series themes before calling processSeriesOptions() as it reduces and renames some\n // properties, and in that case then cannot correctly have themes applied.\n mergedOptions.series = processSeriesOptions((mergedOptions.series || []).map(function (s) {\n var type = defaultSeriesType;\n if (s.type) {\n type = s.type;\n }\n else if (isSeriesOptionType(userSuppliedOptionsType)) {\n type = userSuppliedOptionsType;\n }\n var mergedSeries = mergeSeriesOptions(s, type, seriesThemes, globalTooltipPositionOptions);\n if (type === 'pie') {\n preparePieOptions(seriesThemes.pie, s, mergedSeries);\n }\n return mergedSeries;\n })).map(function (s) { return prepareSeries(context, s); });\n var checkAxisType = function (type) {\n var isAxisType = isAxisOptionType(type);\n if (!isAxisType) {\n Logger.warnOnce(\"AG Charts - unknown axis type: \" + type + \"; expected one of: \" + CHART_AXES_TYPES.axesTypes + \", ignoring.\");\n }\n return isAxisType;\n };\n if (isAgCartesianChartOptions(mergedOptions)) {\n var validAxesTypes = true;\n try {\n for (var _k = __values((_e = mergedOptions.axes) !== null && _e !== void 0 ? _e : []), _l = _k.next(); !_l.done; _l = _k.next()) {\n var axisType = _l.value.type;\n if (!checkAxisType(axisType)) {\n validAxesTypes = false;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_b = _k.return)) _b.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n if (!validAxesTypes) {\n mergedOptions.axes = defaultOverrides.axes;\n }\n else {\n mergedOptions.axes = (_f = mergedOptions.axes) === null || _f === void 0 ? void 0 : _f.map(function (axis) {\n var axisType = axis.type;\n var axesTheme = jsonMerge([\n axesThemes[axisType],\n axesThemes[axisType][axis.position || 'unknown'] || {},\n ]);\n return prepareAxis(axis, axesTheme);\n });\n }\n }\n prepareEnabledOptions(options, mergedOptions);\n return mergedOptions;\n}\nfunction sanityCheckOptions(options) {\n var deprecatedArrayProps = {\n yKeys: 'yKey',\n yNames: 'yName',\n };\n Object.entries(deprecatedArrayProps).forEach(function (_a) {\n var _b;\n var _c = __read(_a, 2), oldProp = _c[0], newProp = _c[1];\n if ((_b = options.series) === null || _b === void 0 ? void 0 : _b.some(function (s) { return s[oldProp] != null; })) {\n Logger.warnOnce(\"property [series.\" + oldProp + \"] is deprecated, please use [series.\" + newProp + \"] and multiple series instead.\");\n }\n });\n}\nfunction mergeSeriesOptions(series, type, seriesThemes, globalTooltipPositionOptions) {\n var _a;\n var mergedTooltipPosition = jsonMerge([__assign({}, globalTooltipPositionOptions), (_a = series.tooltip) === null || _a === void 0 ? void 0 : _a.position], noDataCloneMergeOptions);\n var mergedSeries = jsonMerge([\n seriesThemes[type] || {},\n __assign(__assign({}, series), { type: type, tooltip: __assign(__assign({}, series.tooltip), { position: mergedTooltipPosition }) }),\n ], noDataCloneMergeOptions);\n return mergedSeries;\n}\nfunction prepareMainOptions(defaultOverrides, options) {\n var _a = prepareTheme(options), theme = _a.theme, cleanedTheme = _a.cleanedTheme, axesThemes = _a.axesThemes, seriesThemes = _a.seriesThemes;\n var context = { colourIndex: 0, palette: theme.palette };\n var mergedOptions = jsonMerge([defaultOverrides, cleanedTheme, options], noDataCloneMergeOptions);\n return { context: context, mergedOptions: mergedOptions, axesThemes: axesThemes, seriesThemes: seriesThemes };\n}\nfunction prepareTheme(options) {\n var theme = getChartTheme(options.theme);\n var themeConfig = theme.config[optionsType(options) || 'cartesian'];\n var seriesThemes = Object.entries(theme.config).reduce(function (result, _a) {\n var _b = __read(_a, 2), seriesType = _b[0], series = _b[1].series;\n result[seriesType] = series === null || series === void 0 ? void 0 : series[seriesType];\n return result;\n }, {});\n return {\n theme: theme,\n axesThemes: themeConfig['axes'] || {},\n seriesThemes: seriesThemes,\n cleanedTheme: jsonMerge([themeConfig, { axes: DELETE, series: DELETE }]),\n };\n}\nfunction prepareSeries(context, input) {\n var defaults = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n defaults[_i - 2] = arguments[_i];\n }\n var paletteOptions = calculateSeriesPalette(context, input);\n // Part of the options interface, but not directly consumed by the series implementations.\n var removeOptions = { stacked: DELETE };\n var mergedResult = jsonMerge(__spread(defaults, [paletteOptions, input, removeOptions]), noDataCloneMergeOptions);\n return applySeriesTransform(mergedResult);\n}\nfunction calculateSeriesPalette(context, input) {\n var paletteOptions = {};\n var _a = context.palette, fills = _a.fills, strokes = _a.strokes;\n var inputAny = input;\n var colourCount = countArrayElements(inputAny['yKeys'] || []) || 1; // Defaults to 1 if no yKeys.\n switch (input.type) {\n case 'pie':\n colourCount = Math.max(fills.length, strokes.length);\n // eslint-disable-next-line no-fallthrough\n case 'area':\n case 'bar':\n case 'column':\n paletteOptions.fills = takeColours(context, fills, colourCount);\n paletteOptions.strokes = takeColours(context, strokes, colourCount);\n break;\n case 'histogram':\n paletteOptions.fill = takeColours(context, fills, 1)[0];\n paletteOptions.stroke = takeColours(context, strokes, 1)[0];\n break;\n case 'scatter':\n paletteOptions.marker = {\n stroke: takeColours(context, strokes, 1)[0],\n fill: takeColours(context, fills, 1)[0],\n };\n break;\n case 'line':\n paletteOptions.stroke = takeColours(context, fills, 1)[0];\n paletteOptions.marker = {\n stroke: takeColours(context, strokes, 1)[0],\n fill: takeColours(context, fills, 1)[0],\n };\n break;\n }\n context.colourIndex += colourCount;\n return paletteOptions;\n}\nfunction prepareAxis(axis, axisTheme) {\n // Remove redundant theme overload keys.\n var removeOptions = { top: DELETE, bottom: DELETE, left: DELETE, right: DELETE };\n // Special cross lines case where we have an array of cross line elements which need their own defaults.\n if (axis.crossLines) {\n if (!Array.isArray(axis.crossLines)) {\n Logger.warn('axis[].crossLines should be an array.');\n axis.crossLines = [];\n }\n var crossLinesTheme_1 = axisTheme.crossLines;\n axis.crossLines = axis.crossLines.map(function (crossLine) { return jsonMerge([crossLinesTheme_1, crossLine]); });\n }\n var cleanTheme = { crossLines: DELETE };\n return jsonMerge([axisTheme, cleanTheme, axis, removeOptions], noDataCloneMergeOptions);\n}\nfunction prepareEnabledOptions(options, mergedOptions) {\n // Set `enabled: true` for all option objects where the user has provided values.\n jsonWalk(options, function (_, visitingUserOpts, visitingMergedOpts) {\n if (!visitingMergedOpts)\n return;\n var _enabledFromTheme = visitingMergedOpts._enabledFromTheme;\n if (_enabledFromTheme != null) {\n // Do not apply special handling, base enablement on theme.\n delete visitingMergedOpts._enabledFromTheme;\n }\n if (!('enabled' in visitingMergedOpts))\n return;\n if (_enabledFromTheme)\n return;\n if (visitingUserOpts.enabled == null) {\n visitingMergedOpts.enabled = true;\n }\n }, { skip: ['data', 'theme'] }, mergedOptions);\n // Cleanup any special properties.\n jsonWalk(mergedOptions, function (_, visitingMergedOpts) {\n if (visitingMergedOpts._enabledFromTheme != null) {\n // Do not apply special handling, base enablement on theme.\n delete visitingMergedOpts._enabledFromTheme;\n }\n }, { skip: ['data', 'theme'] });\n}\nfunction preparePieOptions(pieSeriesTheme, seriesOptions, mergedSeries) {\n if (Array.isArray(seriesOptions.innerLabels)) {\n mergedSeries.innerLabels = seriesOptions.innerLabels.map(function (ln) {\n return jsonMerge([pieSeriesTheme.innerLabels, ln]);\n });\n }\n else {\n mergedSeries.innerLabels = DELETE;\n }\n}\n","var horizontalCrosslineTranslationDirections = {\n top: { xTranslationDirection: 0, yTranslationDirection: -1 },\n bottom: { xTranslationDirection: 0, yTranslationDirection: 1 },\n left: { xTranslationDirection: -1, yTranslationDirection: 0 },\n right: { xTranslationDirection: 1, yTranslationDirection: 0 },\n topLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n topRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n bottomLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n bottomRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n inside: { xTranslationDirection: 0, yTranslationDirection: 0 },\n insideLeft: { xTranslationDirection: 1, yTranslationDirection: 0 },\n insideRight: { xTranslationDirection: -1, yTranslationDirection: 0 },\n insideTop: { xTranslationDirection: 0, yTranslationDirection: 1 },\n insideBottom: { xTranslationDirection: 0, yTranslationDirection: -1 },\n insideTopLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n insideBottomLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n insideTopRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n insideBottomRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n};\nvar verticalCrossLineTranslationDirections = {\n top: { xTranslationDirection: 1, yTranslationDirection: 0 },\n bottom: { xTranslationDirection: -1, yTranslationDirection: 0 },\n left: { xTranslationDirection: 0, yTranslationDirection: -1 },\n right: { xTranslationDirection: 0, yTranslationDirection: 1 },\n topLeft: { xTranslationDirection: -1, yTranslationDirection: -1 },\n topRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n bottomLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n bottomRight: { xTranslationDirection: 1, yTranslationDirection: 1 },\n inside: { xTranslationDirection: 0, yTranslationDirection: 0 },\n insideLeft: { xTranslationDirection: 0, yTranslationDirection: 1 },\n insideRight: { xTranslationDirection: 0, yTranslationDirection: -1 },\n insideTop: { xTranslationDirection: -1, yTranslationDirection: 0 },\n insideBottom: { xTranslationDirection: 1, yTranslationDirection: 0 },\n insideTopLeft: { xTranslationDirection: -1, yTranslationDirection: 1 },\n insideBottomLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n insideTopRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n insideBottomRight: { xTranslationDirection: 1, yTranslationDirection: -1 },\n};\nexport var calculateLabelTranslation = function (_a) {\n var _b;\n var yDirection = _a.yDirection, _c = _a.padding, padding = _c === void 0 ? 0 : _c, position = _a.position, bbox = _a.bbox;\n var crossLineTranslationDirections = yDirection\n ? horizontalCrosslineTranslationDirections\n : verticalCrossLineTranslationDirections;\n var _d = (_b = crossLineTranslationDirections[position]) !== null && _b !== void 0 ? _b : crossLineTranslationDirections['top'], xTranslationDirection = _d.xTranslationDirection, yTranslationDirection = _d.yTranslationDirection;\n var w = yDirection ? bbox.width : bbox.height;\n var h = yDirection ? bbox.height : bbox.width;\n var xTranslation = xTranslationDirection * (padding + w / 2);\n var yTranslation = yTranslationDirection * (padding + h / 2);\n return {\n xTranslation: xTranslation,\n yTranslation: yTranslation,\n };\n};\nexport var POSITION_TOP_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xEnd / 2, y: yStart };\n }\n else {\n return { x: xEnd, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n }\n};\nvar POSITION_LEFT_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xStart, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n }\n else {\n return { x: xEnd / 2, y: yStart };\n }\n};\nvar POSITION_RIGHT_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xEnd, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n }\n else {\n return { x: xEnd / 2, y: !isNaN(yEnd) ? yEnd : yStart };\n }\n};\nvar POSITION_BOTTOM_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xEnd / 2, y: !isNaN(yEnd) ? yEnd : yStart };\n }\n else {\n return { x: xStart, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n }\n};\nvar POSITION_INSIDE_COORDINATES = function (_a) {\n var xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n return { x: xEnd / 2, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n};\nvar POSITION_TOP_LEFT_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart;\n if (yDirection) {\n return { x: xStart / 2, y: yStart };\n }\n else {\n return { x: xEnd, y: yStart };\n }\n};\nvar POSITION_BOTTOM_LEFT_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xStart = _a.xStart, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xStart, y: !isNaN(yEnd) ? yEnd : yStart };\n }\n else {\n return { x: xStart, y: yStart };\n }\n};\nvar POSITION_TOP_RIGHT_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xEnd, y: yStart };\n }\n else {\n return { x: xEnd, y: !isNaN(yEnd) ? yEnd : yStart };\n }\n};\nvar POSITION_BOTTOM_RIGHT_COORDINATES = function (_a) {\n var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n if (yDirection) {\n return { x: xEnd, y: !isNaN(yEnd) ? yEnd : yStart };\n }\n else {\n return { x: xStart, y: !isNaN(yEnd) ? yEnd : yStart };\n }\n};\nexport var labeldDirectionHandling = {\n top: { c: POSITION_TOP_COORDINATES },\n bottom: { c: POSITION_BOTTOM_COORDINATES },\n left: { c: POSITION_LEFT_COORDINATES },\n right: { c: POSITION_RIGHT_COORDINATES },\n topLeft: { c: POSITION_TOP_LEFT_COORDINATES },\n topRight: { c: POSITION_TOP_RIGHT_COORDINATES },\n bottomLeft: { c: POSITION_BOTTOM_LEFT_COORDINATES },\n bottomRight: { c: POSITION_BOTTOM_RIGHT_COORDINATES },\n inside: { c: POSITION_INSIDE_COORDINATES },\n insideLeft: { c: POSITION_LEFT_COORDINATES },\n insideRight: { c: POSITION_RIGHT_COORDINATES },\n insideTop: { c: POSITION_TOP_COORDINATES },\n insideBottom: { c: POSITION_BOTTOM_COORDINATES },\n insideTopLeft: { c: POSITION_TOP_LEFT_COORDINATES },\n insideBottomLeft: { c: POSITION_BOTTOM_LEFT_COORDINATES },\n insideTopRight: { c: POSITION_TOP_RIGHT_COORDINATES },\n insideBottomRight: { c: POSITION_BOTTOM_RIGHT_COORDINATES },\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Shape } from './shape';\nimport { BBox } from '../bbox';\nimport { RedrawType, SceneChangeDetection } from '../node';\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n var _this = _super.call(this) || this;\n _this.x1 = 0;\n _this.y1 = 0;\n _this.x2 = 0;\n _this.y2 = 0;\n _this.startLine = false;\n _this.endLine = false;\n _this.isRange = false;\n _this.restoreOwnStyles();\n return _this;\n }\n Range.prototype.computeBBox = function () {\n return new BBox(this.x1, this.y1, this.x2 - this.x1, this.y2 - this.y1);\n };\n Range.prototype.isPointInPath = function (_x, _y) {\n return false;\n };\n Range.prototype.render = function (renderCtx) {\n var _a;\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n if (this.dirty === RedrawType.NONE && !forceRender) {\n if (stats)\n stats.nodesSkipped += this.nodeCount.count;\n return;\n }\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n var _b = this, x1 = _b.x1, y1 = _b.y1, x2 = _b.x2, y2 = _b.y2;\n x1 = this.align(x1);\n y1 = this.align(y1);\n x2 = this.align(x2);\n y2 = this.align(y2);\n var _c = this, fill = _c.fill, opacity = _c.opacity, isRange = _c.isRange;\n var fillActive = !!(isRange && fill);\n if (fillActive) {\n var fillOpacity = this.fillOpacity;\n ctx.fillStyle = fill;\n ctx.globalAlpha = opacity * fillOpacity;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x1, y2);\n ctx.closePath();\n ctx.fill();\n }\n var _d = this, stroke = _d.stroke, strokeWidth = _d.strokeWidth, startLine = _d.startLine, endLine = _d.endLine;\n var strokeActive = !!((startLine || endLine) && stroke && strokeWidth);\n if (strokeActive) {\n var _e = this, strokeOpacity = _e.strokeOpacity, lineDash = _e.lineDash, lineDashOffset = _e.lineDashOffset, lineCap = _e.lineCap, lineJoin = _e.lineJoin;\n ctx.strokeStyle = stroke;\n ctx.globalAlpha = opacity * strokeOpacity;\n ctx.lineWidth = strokeWidth;\n if (lineDash) {\n ctx.setLineDash(lineDash);\n }\n if (lineDashOffset) {\n ctx.lineDashOffset = lineDashOffset;\n }\n if (lineCap) {\n ctx.lineCap = lineCap;\n }\n if (lineJoin) {\n ctx.lineJoin = lineJoin;\n }\n ctx.beginPath();\n if (startLine) {\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y1);\n }\n if (endLine) {\n ctx.moveTo(x2, y2);\n ctx.lineTo(x1, y2);\n }\n ctx.stroke();\n }\n (_a = this.fillShadow) === null || _a === void 0 ? void 0 : _a.markClean();\n _super.prototype.render.call(this, renderCtx);\n };\n Range.className = 'Range';\n Range.defaultStyles = __assign(__assign({}, Shape.defaultStyles), { strokeWidth: 1 });\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"x1\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"y1\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"x2\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"y2\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"startLine\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"endLine\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MINOR })\n ], Range.prototype, \"isRange\", void 0);\n return Range;\n}(Shape));\nexport { Range };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { PointerEvents } from '../../scene/node';\nimport { Group } from '../../scene/group';\nimport { Text } from '../../scene/shape/text';\nimport { ContinuousScale } from '../../scale/continuousScale';\nimport { createId } from '../../util/id';\nimport { ChartAxisDirection } from '../chartAxisDirection';\nimport { labeldDirectionHandling, POSITION_TOP_COORDINATES, calculateLabelTranslation, } from './crossLineLabelPosition';\nimport { checkDatum } from '../../util/value';\nimport { Layers } from '../layers';\nimport { Range } from '../../scene/shape/range';\nimport { OPT_ARRAY, OPT_BOOLEAN, OPT_NUMBER, OPT_STRING, OPT_COLOR_STRING, STRING, Validate, OPT_LINE_DASH, OPT_FONT_STYLE, OPT_FONT_WEIGHT, NUMBER, OPTIONAL, predicateWithMessage, } from '../../util/validation';\nimport { calculateLabelRotation } from '../label';\nvar CROSSLINE_LABEL_POSITIONS = [\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight',\n 'inside',\n 'insideLeft',\n 'insideRight',\n 'insideTop',\n 'insideBottom',\n 'insideTopLeft',\n 'insideBottomLeft',\n 'insideTopRight',\n 'insideBottomRight',\n];\nvar OPT_CROSSLINE_LABEL_POSITION = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v) { return CROSSLINE_LABEL_POSITIONS.includes(v); }); }, \"expecting an optional crossLine label position keyword such as 'topLeft', 'topRight' or 'inside'\");\nvar OPT_CROSSLINE_TYPE = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v) { return v === 'range' || v === 'line'; }); }, \"expecting a crossLine type keyword such as 'range' or 'line'\");\nvar CrossLineLabel = /** @class */ (function () {\n function CrossLineLabel() {\n this.enabled = undefined;\n this.text = undefined;\n this.fontStyle = undefined;\n this.fontWeight = undefined;\n this.fontSize = 14;\n this.fontFamily = 'Verdana, sans-serif';\n /**\n * The padding between the label and the line.\n */\n this.padding = 5;\n /**\n * The color of the labels.\n */\n this.color = 'rgba(87, 87, 87, 1)';\n this.position = undefined;\n this.rotation = undefined;\n this.parallel = undefined;\n }\n __decorate([\n Validate(OPT_BOOLEAN)\n ], CrossLineLabel.prototype, \"enabled\", void 0);\n __decorate([\n Validate(OPT_STRING)\n ], CrossLineLabel.prototype, \"text\", void 0);\n __decorate([\n Validate(OPT_FONT_STYLE)\n ], CrossLineLabel.prototype, \"fontStyle\", void 0);\n __decorate([\n Validate(OPT_FONT_WEIGHT)\n ], CrossLineLabel.prototype, \"fontWeight\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], CrossLineLabel.prototype, \"fontSize\", void 0);\n __decorate([\n Validate(STRING)\n ], CrossLineLabel.prototype, \"fontFamily\", void 0);\n __decorate([\n Validate(NUMBER(0))\n ], CrossLineLabel.prototype, \"padding\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], CrossLineLabel.prototype, \"color\", void 0);\n __decorate([\n Validate(OPT_CROSSLINE_LABEL_POSITION)\n ], CrossLineLabel.prototype, \"position\", void 0);\n __decorate([\n Validate(OPT_NUMBER(-360, 360))\n ], CrossLineLabel.prototype, \"rotation\", void 0);\n __decorate([\n Validate(OPT_BOOLEAN)\n ], CrossLineLabel.prototype, \"parallel\", void 0);\n return CrossLineLabel;\n}());\nvar CrossLine = /** @class */ (function () {\n function CrossLine() {\n this.id = createId(this);\n this.enabled = undefined;\n this.type = undefined;\n this.range = undefined;\n this.value = undefined;\n this.fill = undefined;\n this.fillOpacity = undefined;\n this.stroke = undefined;\n this.strokeWidth = undefined;\n this.strokeOpacity = undefined;\n this.lineDash = undefined;\n this.label = new CrossLineLabel();\n this.scale = undefined;\n this.clippedRange = [-Infinity, Infinity];\n this.gridLength = 0;\n this.sideFlag = -1;\n this.parallelFlipRotation = 0;\n this.regularFlipRotation = 0;\n this.direction = ChartAxisDirection.X;\n this.group = new Group({ name: \"\" + this.id, layer: true, zIndex: CrossLine.LINE_LAYER_ZINDEX });\n this.crossLineRange = new Range();\n this.crossLineLabel = new Text();\n this.labelPoint = undefined;\n this.data = [];\n this.startLine = false;\n this.endLine = false;\n this.isRange = false;\n var _a = this, group = _a.group, crossLineRange = _a.crossLineRange, crossLineLabel = _a.crossLineLabel;\n group.append([crossLineRange, crossLineLabel]);\n crossLineRange.pointerEvents = PointerEvents.None;\n }\n CrossLine.prototype.update = function (visible) {\n if (!this.enabled) {\n return;\n }\n this.group.visible = visible;\n if (!visible) {\n return;\n }\n var dataCreated = this.createNodeData();\n if (!dataCreated) {\n this.group.visible = false;\n return;\n }\n this.updateNodes();\n this.group.zIndex = this.getZIndex(this.isRange);\n };\n CrossLine.prototype.updateNodes = function () {\n this.updateRangeNode();\n if (this.label.enabled) {\n this.updateLabel();\n this.positionLabel();\n }\n };\n CrossLine.prototype.createNodeData = function () {\n var _a, _b, _c;\n var _d, _e;\n var _f = this, scale = _f.scale, gridLength = _f.gridLength, sideFlag = _f.sideFlag, direction = _f.direction, _g = _f.label.position, position = _g === void 0 ? 'top' : _g, clippedRange = _f.clippedRange, _h = _f.strokeWidth, strokeWidth = _h === void 0 ? 0 : _h;\n if (!scale) {\n return false;\n }\n var bandwidth = (_d = scale.bandwidth) !== null && _d !== void 0 ? _d : 0;\n var clippedRangeClamper = function (x) {\n return Math.max(Math.min.apply(Math, __spread(clippedRange)), Math.min(Math.max.apply(Math, __spread(clippedRange)), x));\n };\n var _j = __read([0, sideFlag * gridLength], 2), xStart = _j[0], xEnd = _j[1];\n var _k = __read(this.getRange(), 2), yStart = _k[0], yEnd = _k[1];\n var _l = __read([\n Number(scale.convert(yStart, { strict: false })),\n scale.convert(yEnd, { strict: false }) + bandwidth,\n ], 2), clampedYStart = _l[0], clampedYEnd = _l[1];\n clampedYStart = clippedRangeClamper(clampedYStart);\n clampedYEnd = clippedRangeClamper(clampedYEnd);\n _a = __read([Number(scale.convert(yStart)), scale.convert(yEnd) + bandwidth], 2), yStart = _a[0], yEnd = _a[1];\n var validRange = !isNaN(clampedYStart) &&\n !isNaN(clampedYEnd) &&\n (yStart === clampedYStart || yEnd === clampedYEnd || clampedYStart !== clampedYEnd) &&\n Math.abs(clampedYEnd - clampedYStart) > 0;\n if (validRange) {\n var reverse = clampedYStart !== Math.min(clampedYStart, clampedYEnd);\n if (reverse) {\n _b = __read([\n Math.min(clampedYStart, clampedYEnd),\n Math.max(clampedYStart, clampedYEnd),\n ], 2), clampedYStart = _b[0], clampedYEnd = _b[1];\n _c = __read([yEnd, yStart], 2), yStart = _c[0], yEnd = _c[1];\n }\n }\n this.isRange = validRange;\n this.startLine = !isNaN(yStart) && strokeWidth > 0 && yStart === clampedYStart;\n this.endLine = !isNaN(yEnd) && strokeWidth > 0 && yEnd === clampedYEnd;\n if (!validRange && !this.startLine && !this.endLine) {\n return false;\n }\n this.data = [clampedYStart, clampedYEnd];\n if (this.label.enabled) {\n var yDirection = direction === ChartAxisDirection.Y;\n var _m = ((_e = labeldDirectionHandling[position]) !== null && _e !== void 0 ? _e : {}).c, c = _m === void 0 ? POSITION_TOP_COORDINATES : _m;\n var _o = c({ yDirection: yDirection, xStart: xStart, xEnd: xEnd, yStart: clampedYStart, yEnd: clampedYEnd }), labelX = _o.x, labelY = _o.y;\n this.labelPoint = {\n x: labelX,\n y: labelY,\n };\n }\n return true;\n };\n CrossLine.prototype.updateRangeNode = function () {\n var _a;\n var _b = this, crossLineRange = _b.crossLineRange, sideFlag = _b.sideFlag, gridLength = _b.gridLength, data = _b.data, startLine = _b.startLine, endLine = _b.endLine, isRange = _b.isRange, fill = _b.fill, fillOpacity = _b.fillOpacity, stroke = _b.stroke, strokeWidth = _b.strokeWidth, lineDash = _b.lineDash;\n crossLineRange.x1 = 0;\n crossLineRange.x2 = sideFlag * gridLength;\n crossLineRange.y1 = data[0];\n crossLineRange.y2 = data[1];\n crossLineRange.startLine = startLine;\n crossLineRange.endLine = endLine;\n crossLineRange.isRange = isRange;\n crossLineRange.fill = fill;\n crossLineRange.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n crossLineRange.stroke = stroke;\n crossLineRange.strokeWidth = strokeWidth !== null && strokeWidth !== void 0 ? strokeWidth : 1;\n crossLineRange.strokeOpacity = (_a = this.strokeOpacity) !== null && _a !== void 0 ? _a : 1;\n crossLineRange.lineDash = lineDash;\n };\n CrossLine.prototype.updateLabel = function () {\n var _a = this, crossLineLabel = _a.crossLineLabel, label = _a.label;\n if (!label.text) {\n return;\n }\n crossLineLabel.fontStyle = label.fontStyle;\n crossLineLabel.fontWeight = label.fontWeight;\n crossLineLabel.fontSize = label.fontSize;\n crossLineLabel.fontFamily = label.fontFamily;\n crossLineLabel.fill = label.color;\n crossLineLabel.text = label.text;\n };\n CrossLine.prototype.positionLabel = function () {\n var _a = this, crossLineLabel = _a.crossLineLabel, _b = _a.labelPoint, _c = _b === void 0 ? {} : _b, _d = _c.x, x = _d === void 0 ? undefined : _d, _e = _c.y, y = _e === void 0 ? undefined : _e, _f = _a.label, parallel = _f.parallel, rotation = _f.rotation, _g = _f.position, position = _g === void 0 ? 'top' : _g, _h = _f.padding, padding = _h === void 0 ? 0 : _h, direction = _a.direction, parallelFlipRotation = _a.parallelFlipRotation, regularFlipRotation = _a.regularFlipRotation;\n if (x === undefined || y === undefined) {\n return;\n }\n var _j = calculateLabelRotation({\n rotation: rotation,\n parallel: parallel,\n regularFlipRotation: regularFlipRotation,\n parallelFlipRotation: parallelFlipRotation,\n }), autoRotation = _j.autoRotation, labelRotation = _j.labelRotation;\n crossLineLabel.rotation = autoRotation + labelRotation;\n crossLineLabel.textBaseline = 'middle';\n crossLineLabel.textAlign = 'center';\n var bbox = this.computeLabelBBox();\n if (!bbox) {\n return;\n }\n var yDirection = direction === ChartAxisDirection.Y;\n var _k = calculateLabelTranslation({ yDirection: yDirection, padding: padding, position: position, bbox: bbox }), xTranslation = _k.xTranslation, yTranslation = _k.yTranslation;\n crossLineLabel.translationX = x + xTranslation;\n crossLineLabel.translationY = y + yTranslation;\n };\n CrossLine.prototype.getZIndex = function (isRange) {\n if (isRange === void 0) { isRange = false; }\n if (isRange) {\n return CrossLine.RANGE_LAYER_ZINDEX;\n }\n return CrossLine.LINE_LAYER_ZINDEX;\n };\n CrossLine.prototype.getRange = function () {\n var _a;\n var _b = this, value = _b.value, range = _b.range, scale = _b.scale;\n var isContinuous = scale instanceof ContinuousScale;\n var _c = __read(range !== null && range !== void 0 ? range : [value, undefined], 2), start = _c[0], end = _c[1];\n if (!isContinuous && end === undefined) {\n end = start;\n }\n _a = __read([checkDatum(start, isContinuous), checkDatum(end, isContinuous)], 2), start = _a[0], end = _a[1];\n if (isContinuous && start === end) {\n end = undefined;\n }\n if (start === undefined && end !== undefined) {\n start = end;\n end = undefined;\n }\n return [start, end];\n };\n CrossLine.prototype.computeLabelBBox = function () {\n return this.crossLineLabel.computeTransformedBBox();\n };\n CrossLine.prototype.calculatePadding = function (padding, seriesRect) {\n var _a, _b, _c, _d, _e, _f;\n var _g = this, isRange = _g.isRange, startLine = _g.startLine, endLine = _g.endLine;\n if (!isRange && !startLine && !endLine) {\n return;\n }\n var crossLineLabelBBox = this.computeLabelBBox();\n var labelX = crossLineLabelBBox === null || crossLineLabelBBox === void 0 ? void 0 : crossLineLabelBBox.x;\n var labelY = crossLineLabelBBox === null || crossLineLabelBBox === void 0 ? void 0 : crossLineLabelBBox.y;\n if (labelX == undefined || labelY == undefined) {\n return;\n }\n var labelWidth = (_a = crossLineLabelBBox === null || crossLineLabelBBox === void 0 ? void 0 : crossLineLabelBBox.width) !== null && _a !== void 0 ? _a : 0;\n var labelHeight = (_b = crossLineLabelBBox === null || crossLineLabelBBox === void 0 ? void 0 : crossLineLabelBBox.height) !== null && _b !== void 0 ? _b : 0;\n if (labelWidth > seriesRect.width || labelHeight > seriesRect.height) {\n // If label is bigger than seriesRect, trying to pad is just going to cause\n // layout instability.\n return;\n }\n if (labelX + labelWidth >= seriesRect.x + seriesRect.width) {\n var paddingRight = labelX + labelWidth - (seriesRect.x + seriesRect.width);\n padding.right = ((_c = padding.right) !== null && _c !== void 0 ? _c : 0) >= paddingRight ? padding.right : paddingRight;\n }\n else if (labelX <= seriesRect.x) {\n var paddingLeft = seriesRect.x - labelX;\n padding.left = ((_d = padding.left) !== null && _d !== void 0 ? _d : 0) >= paddingLeft ? padding.left : paddingLeft;\n }\n if (labelY + labelHeight >= seriesRect.y + seriesRect.height) {\n var paddingBottom = labelY + labelHeight - (seriesRect.y + seriesRect.height);\n padding.bottom = ((_e = padding.bottom) !== null && _e !== void 0 ? _e : 0) >= paddingBottom ? padding.bottom : paddingBottom;\n }\n else if (labelY <= seriesRect.y) {\n var paddingTop = seriesRect.y - labelY;\n padding.top = ((_f = padding.top) !== null && _f !== void 0 ? _f : 0) >= paddingTop ? padding.top : paddingTop;\n }\n };\n CrossLine.LINE_LAYER_ZINDEX = Layers.SERIES_CROSSLINE_LINE_ZINDEX;\n CrossLine.RANGE_LAYER_ZINDEX = Layers.SERIES_CROSSLINE_RANGE_ZINDEX;\n CrossLine.className = 'CrossLine';\n __decorate([\n Validate(OPT_BOOLEAN)\n ], CrossLine.prototype, \"enabled\", void 0);\n __decorate([\n Validate(OPT_CROSSLINE_TYPE)\n ], CrossLine.prototype, \"type\", void 0);\n __decorate([\n Validate(OPT_ARRAY(2))\n ], CrossLine.prototype, \"range\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], CrossLine.prototype, \"fill\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1))\n ], CrossLine.prototype, \"fillOpacity\", void 0);\n __decorate([\n Validate(OPT_COLOR_STRING)\n ], CrossLine.prototype, \"stroke\", void 0);\n __decorate([\n Validate(OPT_NUMBER())\n ], CrossLine.prototype, \"strokeWidth\", void 0);\n __decorate([\n Validate(OPT_NUMBER(0, 1))\n ], CrossLine.prototype, \"strokeOpacity\", void 0);\n __decorate([\n Validate(OPT_LINE_DASH)\n ], CrossLine.prototype, \"lineDash\", void 0);\n return CrossLine;\n}());\nexport { CrossLine };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Node, RedrawType, SceneChangeDetection } from './node';\nvar Image = /** @class */ (function (_super) {\n __extends(Image, _super);\n function Image(sourceImage) {\n var _this = _super.call(this) || this;\n _this.x = 0;\n _this.y = 0;\n _this.width = 0;\n _this.height = 0;\n _this.opacity = 1;\n _this.sourceImage = sourceImage;\n return _this;\n }\n Image.prototype.render = function (renderCtx) {\n var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n if (this.dirty === RedrawType.NONE && !forceRender) {\n if (stats)\n stats.nodesSkipped++;\n return;\n }\n this.computeTransformMatrix();\n this.matrix.toContext(ctx);\n var image = this.sourceImage;\n ctx.globalAlpha = this.opacity;\n ctx.drawImage(image, 0, 0, image.width, image.height, this.x, this.y, this.width, this.height);\n _super.prototype.render.call(this, renderCtx);\n };\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Image.prototype, \"x\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Image.prototype, \"y\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Image.prototype, \"width\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Image.prototype, \"height\", void 0);\n __decorate([\n SceneChangeDetection({ redraw: RedrawType.MAJOR })\n ], Image.prototype, \"opacity\", void 0);\n return Image;\n}(Node));\nexport { Image };\n","import { Image } from '../../scene/image';\nvar BackgroundImage = /** @class */ (function () {\n function BackgroundImage() {\n var _this = this;\n this._image = document.createElement('img');\n this.loadedSynchronously = true;\n this.left = undefined;\n this.top = undefined;\n this.right = undefined;\n this.bottom = undefined;\n this.width = undefined;\n this.height = undefined;\n this.opacity = 1;\n this.containerWidth = 0;\n this.containerHeight = 0;\n this.onload = undefined;\n this.onImageLoad = function () {\n if (_this.loadedSynchronously) {\n return;\n }\n _this.node.visible = false; // Ensure marked dirty.\n _this.performLayout(_this.containerWidth, _this.containerHeight);\n if (_this.onload) {\n _this.onload();\n }\n };\n this.node = new Image(this._image);\n this._image.onload = this.onImageLoad;\n }\n Object.defineProperty(BackgroundImage.prototype, \"url\", {\n get: function () {\n return this._image.src;\n },\n set: function (value) {\n this._image.src = value;\n this.loadedSynchronously = this.complete;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BackgroundImage.prototype, \"complete\", {\n get: function () {\n // In tests image is nodejs-canvas Image, which doesn't report its status in the 'complete' method correctly.\n return this._image.width > 0 && this._image.height > 0;\n },\n enumerable: false,\n configurable: true\n });\n BackgroundImage.prototype.performLayout = function (containerWidth, containerHeight) {\n this.containerWidth = containerWidth;\n this.containerHeight = containerHeight;\n if (!this.complete) {\n this.node.visible = false;\n return;\n }\n var position = this.calculatePosition(this._image.width, this._image.height);\n Object.assign(this.node, position);\n this.node.visible = true;\n this.node.opacity = this.opacity;\n };\n BackgroundImage.prototype.calculatePosition = function (naturalWidth, naturalHeight) {\n var left = this.left;\n var right = this.right;\n var width = this.width;\n var top = this.top;\n var bottom = this.bottom;\n var height = this.height;\n if (left != null) {\n if (right != null) {\n width = this.containerWidth - left - right;\n }\n else if (width != null) {\n right = this.containerWidth - left + width;\n }\n }\n else if (right != null) {\n if (width != null) {\n left = this.containerWidth - right - width;\n }\n }\n if (top != null) {\n if (bottom != null) {\n height = this.containerHeight - bottom - top;\n }\n else if (height != null) {\n bottom = this.containerHeight - top - height;\n }\n }\n else if (bottom != null) {\n if (height != null) {\n top = this.containerHeight - bottom - height;\n }\n }\n // If width and height still undetermined, derive them from natural size.\n if (width == null) {\n if (height == null) {\n width = naturalWidth;\n height = naturalHeight;\n }\n else {\n width = Math.ceil((naturalWidth * height) / naturalHeight);\n }\n }\n else if (height == null) {\n height = Math.ceil((naturalHeight * width) / naturalWidth);\n }\n if (left == null) {\n if (right == null) {\n left = Math.floor((this.containerWidth - width) / 2);\n }\n else {\n left = this.containerWidth - right - width;\n }\n }\n if (top == null) {\n if (bottom == null) {\n top = Math.floor((this.containerHeight - height) / 2);\n }\n else {\n top = this.containerHeight - height - bottom;\n }\n }\n return { x: left, y: top, width: width, height: height };\n };\n return BackgroundImage;\n}());\nexport { BackgroundImage };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport { CartesianChart } from './cartesianChart';\nimport { PolarChart } from './polarChart';\nimport { HierarchyChart } from './hierarchyChart';\nimport { Caption } from '../caption';\nimport { getSeries, initialiseSeriesModules, seriesDefaults } from './series/seriesTypes';\nimport { PieTitle, DoughnutInnerLabel, DoughnutInnerCircle } from './series/polar/pieSeries';\nimport { LogAxis } from './axis/logAxis';\nimport { NumberAxis } from './axis/numberAxis';\nimport { CategoryAxis } from './axis/categoryAxis';\nimport { GroupedCategoryAxis } from './axis/groupedCategoryAxis';\nimport { TimeAxis } from './axis/timeAxis';\nimport { ChartUpdateType } from './chartUpdateType';\nimport { DropShadow } from '../scene/dropShadow';\nimport { jsonDiff, jsonMerge, jsonApply } from '../util/json';\nimport { prepareOptions, isAgCartesianChartOptions, isAgHierarchyChartOptions, isAgPolarChartOptions, optionsType, noDataCloneMergeOptions, } from './mapping/prepare';\nimport { CrossLine } from './crossline/crossLine';\nimport { windowValue } from '../util/window';\nimport { Logger } from '../util/logger';\nimport { BackgroundImage } from './background/backgroundImage';\n// Deliberately imported via `module-support` so that internal module registration happens.\nimport { REGISTERED_MODULES } from '../module-support';\nfunction chartType(options) {\n if (isAgCartesianChartOptions(options)) {\n return 'cartesian';\n }\n else if (isAgPolarChartOptions(options)) {\n return 'polar';\n }\n else if (isAgHierarchyChartOptions(options)) {\n return 'hierarchy';\n }\n throw new Error(\"AG Chart - unknown type of chart for options with type: \" + options.type);\n}\n/**\n * Factory for creating and updating instances of AgChartInstance.\n *\n * @docsInterface\n */\nvar AgChart = /** @class */ (function () {\n function AgChart() {\n }\n /**\n * Create a new `AgChartInstance` based upon the given configuration options.\n */\n AgChart.create = function (options) {\n return AgChartInternal.createOrUpdate(options);\n };\n /**\n * Update an existing `AgChartInstance`. Options provided should be complete and not\n * partial.\n *
\n *
\n * **NOTE**: As each call could trigger a chart redraw, multiple calls to update options in\n * quick succession could result in undesirable flickering, so callers should batch up and/or\n * debounce changes to avoid unintended partial update renderings.\n */\n AgChart.update = function (chart, options) {\n if (!AgChartInstanceProxy.isInstance(chart)) {\n throw new Error('AG Charts - invalid chart reference passed');\n }\n AgChartInternal.createOrUpdate(options, chart);\n };\n /**\n * Update an existing `AgChartInstance` by applying a partial set of option changes.\n *
\n *
\n * **NOTE**: As each call could trigger a chart redraw, each individual delta options update\n * should leave the chart in a valid options state. Also, multiple calls to update options in\n * quick succession could result in undesirable flickering, so callers should batch up and/or\n * debounce changes to avoid unintended partial update renderings.\n */\n AgChart.updateDelta = function (chart, deltaOptions) {\n if (!AgChartInstanceProxy.isInstance(chart)) {\n throw new Error('AG Charts - invalid chart reference passed');\n }\n return AgChartInternal.updateUserDelta(chart, deltaOptions);\n };\n /**\n * Starts a browser-based image download for the given `AgChartInstance`.\n */\n AgChart.download = function (chart, options) {\n if (!(chart instanceof AgChartInstanceProxy)) {\n throw new Error('AG Charts - invalid chart reference passed');\n }\n return AgChartInternal.download(chart, options);\n };\n /**\n * Returns a base64-encoded image data URL for the given `AgChartInstance`.\n */\n AgChart.getImageDataURL = function (chart, options) {\n if (!(chart instanceof AgChartInstanceProxy)) {\n throw new Error('AG Charts - invalid chart reference passed');\n }\n return AgChartInternal.getImageDataURL(chart, options);\n };\n return AgChart;\n}());\nexport { AgChart };\n/**\n * Proxy class, to allow library users to keep a stable reference to their chart, even if we need\n * to switch concrete class (e.g. when switching between CartesianChart vs. PolarChart).\n */\nvar AgChartInstanceProxy = /** @class */ (function () {\n function AgChartInstanceProxy(chart) {\n this.chart = chart;\n }\n AgChartInstanceProxy.isInstance = function (x) {\n var _a, _b;\n if (x instanceof AgChartInstanceProxy) {\n // Simple case.\n return true;\n }\n if (((_a = x.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'AgChartInstanceProxy' && x.chart != null) {\n // instanceof can fail if mixing bundles (e.g. grid all-modules vs. standalone).\n return true;\n }\n var signatureProps = Object.keys((_b = x.constructor) === null || _b === void 0 ? void 0 : _b.prototype);\n var heuristicTypeCheck = Object.keys(AgChartInstanceProxy.prototype).every(function (prop) {\n return signatureProps.includes(prop);\n });\n if (heuristicTypeCheck && x.chart != null) {\n // minimised code case - the constructor name is mangled but prototype names are not :P\n return true;\n }\n return false;\n };\n AgChartInstanceProxy.prototype.getOptions = function () {\n return this.chart.getOptions();\n };\n AgChartInstanceProxy.prototype.destroy = function () {\n this.chart.destroy();\n };\n return AgChartInstanceProxy;\n}());\nvar AgChartInternal = /** @class */ (function () {\n function AgChartInternal() {\n }\n AgChartInternal.createOrUpdate = function (userOptions, proxy) {\n var _this = this;\n debug('>>> createOrUpdate() user options', userOptions);\n var mixinOpts = {};\n if (AgChartInternal.DEBUG() === true) {\n mixinOpts['debug'] = true;\n }\n var overrideDevicePixelRatio = userOptions.overrideDevicePixelRatio;\n delete userOptions['overrideDevicePixelRatio'];\n initialiseSeriesModules();\n var processedOptions = prepareOptions(userOptions, mixinOpts, seriesDefaults);\n var chart = proxy === null || proxy === void 0 ? void 0 : proxy.chart;\n if (chart == null || chartType(userOptions) !== chartType(chart.processedOptions)) {\n chart = AgChartInternal.createChartInstance(processedOptions, overrideDevicePixelRatio, chart);\n }\n if (proxy == null) {\n proxy = new AgChartInstanceProxy(chart);\n }\n else {\n proxy.chart = chart;\n }\n var chartToUpdate = chart;\n chartToUpdate.queuedUserOptions.push(userOptions);\n var dequeue = function () {\n // If there are a lot of update calls, `requestFactoryUpdate()` may skip callbacks,\n // so we need to remove all queue items up to the last successfully applied item.\n var queuedOptionsIdx = chartToUpdate.queuedUserOptions.indexOf(userOptions);\n chartToUpdate.queuedUserOptions.splice(0, queuedOptionsIdx);\n };\n chartToUpdate.requestFactoryUpdate(function () { return __awaiter(_this, void 0, void 0, function () {\n var deltaOptions;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Chart destroyed, skip processing.\n if (chartToUpdate.destroyed)\n return [2 /*return*/];\n deltaOptions = jsonDiff(chartToUpdate.processedOptions, processedOptions);\n if (deltaOptions == null) {\n dequeue();\n return [2 /*return*/];\n }\n return [4 /*yield*/, AgChartInternal.updateDelta(chartToUpdate, deltaOptions, userOptions)];\n case 1:\n _a.sent();\n dequeue();\n return [2 /*return*/];\n }\n });\n }); });\n return proxy;\n };\n AgChartInternal.updateUserDelta = function (proxy, deltaOptions) {\n var _a;\n var chart = proxy.chart, queuedUserOptions = proxy.chart.queuedUserOptions;\n var lastUpdateOptions = (_a = queuedUserOptions[queuedUserOptions.length - 1]) !== null && _a !== void 0 ? _a : chart.userOptions;\n var userOptions = jsonMerge([lastUpdateOptions, deltaOptions]);\n debug('>>> updateUserDelta() user delta', deltaOptions);\n debug('base options', lastUpdateOptions);\n AgChartInternal.createOrUpdate(userOptions, proxy);\n };\n /**\n * Returns the content of the current canvas as an image.\n * @param opts The download options including `width` and `height` of the image as well as `fileName` and `fileFormat`.\n */\n AgChartInternal.download = function (proxy, opts) {\n var _this = this;\n var asyncDownload = function () { return __awaiter(_this, void 0, void 0, function () {\n var maybeClone, chart;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, AgChartInternal.prepareResizedChart(proxy, opts)];\n case 1:\n maybeClone = _a.sent();\n chart = maybeClone.chart;\n chart.scene.download(opts === null || opts === void 0 ? void 0 : opts.fileName, opts === null || opts === void 0 ? void 0 : opts.fileFormat);\n if (maybeClone !== proxy) {\n maybeClone.destroy();\n }\n return [2 /*return*/];\n }\n });\n }); };\n asyncDownload();\n };\n AgChartInternal.getImageDataURL = function (proxy, opts) {\n return __awaiter(this, void 0, void 0, function () {\n var maybeClone, chart, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, AgChartInternal.prepareResizedChart(proxy, opts)];\n case 1:\n maybeClone = _a.sent();\n chart = maybeClone.chart;\n result = chart.scene.canvas.getDataURL(opts === null || opts === void 0 ? void 0 : opts.fileFormat);\n if (maybeClone !== proxy) {\n maybeClone.destroy();\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n AgChartInternal.prepareResizedChart = function (proxy, opts) {\n return __awaiter(this, void 0, void 0, function () {\n var chart, _a, width, height, currentWidth, currentHeight, unchanged, options, clonedChart;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n chart = proxy.chart;\n _a = opts || {}, width = _a.width, height = _a.height;\n currentWidth = chart.width;\n currentHeight = chart.height;\n unchanged = (width === undefined && height === undefined) ||\n (chart.scene.canvas.pixelRatio === 1 && currentWidth === width && currentHeight === height);\n if (unchanged) {\n return [2 /*return*/, proxy];\n }\n width = width !== null && width !== void 0 ? width : currentWidth;\n height = height !== null && height !== void 0 ? height : currentHeight;\n options = __assign(__assign({}, chart.userOptions), { container: document.createElement('div'), width: width,\n height: height, autoSize: false, overrideDevicePixelRatio: 1 });\n clonedChart = AgChartInternal.createOrUpdate(options);\n return [4 /*yield*/, clonedChart.chart.waitForUpdate()];\n case 1:\n _b.sent();\n return [2 /*return*/, clonedChart];\n }\n });\n });\n };\n AgChartInternal.createChartInstance = function (options, overrideDevicePixelRatio, oldChart) {\n var transferableResource = oldChart === null || oldChart === void 0 ? void 0 : oldChart.destroy({ keepTransferableResources: true });\n if (isAgCartesianChartOptions(options)) {\n return new CartesianChart(document, overrideDevicePixelRatio, transferableResource);\n }\n else if (isAgHierarchyChartOptions(options)) {\n return new HierarchyChart(document, overrideDevicePixelRatio, transferableResource);\n }\n else if (isAgPolarChartOptions(options)) {\n return new PolarChart(document, overrideDevicePixelRatio, transferableResource);\n }\n throw new Error(\"AG Charts - couldn't apply configuration, check type of options: \" + options['type']);\n };\n AgChartInternal.updateDelta = function (chart, processedOptions, userOptions) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (processedOptions.type == null) {\n processedOptions = __assign(__assign({}, processedOptions), { type: chart.processedOptions.type || optionsType(processedOptions) });\n }\n return [4 /*yield*/, chart.awaitUpdateCompletion()];\n case 1:\n _a.sent();\n if (chart.destroyed)\n return [2 /*return*/];\n debug('applying delta', processedOptions);\n applyChartOptions(chart, processedOptions, userOptions);\n return [2 /*return*/];\n }\n });\n });\n };\n AgChartInternal.DEBUG = function () { var _a; return (_a = windowValue('agChartsDebug')) !== null && _a !== void 0 ? _a : false; };\n return AgChartInternal;\n}());\nfunction debug(message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n if ([true, 'opts'].includes(AgChartInternal.DEBUG())) {\n Logger.debug.apply(Logger, __spread([message], optionalParams));\n }\n}\nfunction applyChartOptions(chart, processedOptions, userOptions) {\n var _a, _b, _c, _d;\n var completeOptions = jsonMerge([(_a = chart.processedOptions) !== null && _a !== void 0 ? _a : {}, processedOptions], noDataCloneMergeOptions);\n var modulesChanged = applyModules(chart, completeOptions);\n var skip = ['type', 'data', 'series', 'autoSize', 'listeners', 'theme', 'legend.listeners'];\n if (isAgCartesianChartOptions(processedOptions)) {\n // Append axes to defaults.\n skip.push('axes');\n }\n else if (isAgPolarChartOptions(processedOptions) || isAgHierarchyChartOptions(processedOptions)) {\n // Use defaults.\n }\n else {\n throw new Error(\"AG Charts - couldn't apply configuration, check type of options and chart: \" + processedOptions['type']);\n }\n // Needs to be done before applying the series to detect if a seriesNode[Double]Click listener has been added\n if (processedOptions.listeners) {\n registerListeners(chart, processedOptions.listeners);\n }\n applyOptionValues(chart, processedOptions, { skip: skip });\n var forceNodeDataRefresh = false;\n if (processedOptions.series && processedOptions.series.length > 0) {\n applySeries(chart, processedOptions);\n forceNodeDataRefresh = true;\n }\n if (isAgCartesianChartOptions(processedOptions) && processedOptions.axes) {\n var axesPresent = applyAxes(chart, processedOptions);\n if (axesPresent) {\n forceNodeDataRefresh = true;\n }\n }\n var seriesOpts = processedOptions.series;\n var seriesDataUpdate = !!processedOptions.data || (seriesOpts === null || seriesOpts === void 0 ? void 0 : seriesOpts.some(function (s) { return s.data != null; }));\n var otherRefreshUpdate = processedOptions.legend || processedOptions.title || processedOptions.subtitle;\n forceNodeDataRefresh = forceNodeDataRefresh || seriesDataUpdate || !!otherRefreshUpdate;\n if (processedOptions.data) {\n chart.data = processedOptions.data;\n }\n // Needs to be done last to avoid overrides by width/height properties.\n if (processedOptions.autoSize != null) {\n chart.autoSize = processedOptions.autoSize;\n }\n if ((_b = processedOptions.legend) === null || _b === void 0 ? void 0 : _b.listeners) {\n Object.assign(chart.legend.listeners, (_c = processedOptions.legend.listeners) !== null && _c !== void 0 ? _c : {});\n }\n if (processedOptions.listeners) {\n chart.updateAllSeriesListeners();\n }\n chart.processedOptions = completeOptions;\n chart.userOptions = jsonMerge([(_d = chart.userOptions) !== null && _d !== void 0 ? _d : {}, userOptions], noDataCloneMergeOptions);\n var majorChange = forceNodeDataRefresh || modulesChanged;\n var updateType = majorChange ? ChartUpdateType.PROCESS_DATA : ChartUpdateType.PERFORM_LAYOUT;\n debug('chart update type', { updateType: ChartUpdateType[updateType] });\n chart.update(updateType, { forceNodeDataRefresh: forceNodeDataRefresh });\n}\nfunction applyModules(chart, options) {\n var e_1, _a;\n var matchingChartType = function (module) {\n return ((chart instanceof CartesianChart && module.chartTypes.includes('cartesian')) ||\n (chart instanceof PolarChart && module.chartTypes.includes('polar')) ||\n (chart instanceof HierarchyChart && module.chartTypes.includes('hierarchy')));\n };\n var modulesChanged = false;\n var rootModules = REGISTERED_MODULES.filter(function (m) { return m.type === 'root'; });\n try {\n for (var rootModules_1 = __values(rootModules), rootModules_1_1 = rootModules_1.next(); !rootModules_1_1.done; rootModules_1_1 = rootModules_1.next()) {\n var next = rootModules_1_1.value;\n var shouldBeEnabled = matchingChartType(next) && options[next.optionsKey] != null;\n var isEnabled = chart.isModuleEnabled(next);\n if (shouldBeEnabled === isEnabled)\n continue;\n modulesChanged = true;\n if (shouldBeEnabled) {\n chart.addModule(next);\n }\n else {\n chart.removeModule(next);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (rootModules_1_1 && !rootModules_1_1.done && (_a = rootModules_1.return)) _a.call(rootModules_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return modulesChanged;\n}\nfunction applySeries(chart, options) {\n var optSeries = options.series;\n if (!optSeries) {\n return;\n }\n var matchingTypes = chart.series.length === optSeries.length && chart.series.every(function (s, i) { var _a; return s.type === ((_a = optSeries[i]) === null || _a === void 0 ? void 0 : _a.type); });\n // Try to optimise series updates if series count and types didn't change.\n if (matchingTypes) {\n chart.series.forEach(function (s, i) {\n var _a, _b;\n var previousOpts = ((_b = (_a = chart.processedOptions) === null || _a === void 0 ? void 0 : _a.series) === null || _b === void 0 ? void 0 : _b[i]) || {};\n var seriesDiff = jsonDiff(previousOpts, optSeries[i] || {});\n if (!seriesDiff) {\n return;\n }\n debug(\"applying series diff idx \" + i, seriesDiff);\n applySeriesValues(s, seriesDiff, { path: \"series[\" + i + \"]\", index: i });\n s.markNodeDataDirty();\n });\n return;\n }\n chart.series = createSeries(optSeries);\n}\nfunction applyAxes(chart, options) {\n var optAxes = options.axes;\n if (!optAxes) {\n return false;\n }\n var matchingTypes = chart.axes.length === optAxes.length && chart.axes.every(function (a, i) { return a.type === optAxes[i].type; });\n // Try to optimise series updates if series count and types didn't change.\n if (matchingTypes) {\n var oldOpts_1 = chart.processedOptions;\n if (isAgCartesianChartOptions(oldOpts_1)) {\n chart.axes.forEach(function (a, i) {\n var _a;\n var previousOpts = ((_a = oldOpts_1.axes) === null || _a === void 0 ? void 0 : _a[i]) || {};\n var axisDiff = jsonDiff(previousOpts, optAxes[i]);\n debug(\"applying axis diff idx \" + i, axisDiff);\n var path = \"axes[\" + i + \"]\";\n var skip = ['axes[].type'];\n applyOptionValues(a, axisDiff, { path: path, skip: skip });\n });\n return true;\n }\n }\n chart.axes = createAxis(chart, optAxes);\n return true;\n}\nfunction createSeries(options) {\n var e_2, _a;\n var series = [];\n var index = 0;\n try {\n for (var _b = __values(options || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n var seriesOptions = _c.value;\n var path = \"series[\" + index++ + \"]\";\n var seriesInstance = getSeries(seriesOptions.type);\n applySeriesValues(seriesInstance, seriesOptions, { path: path, index: index });\n series.push(seriesInstance);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return series;\n}\nfunction createAxis(chart, options) {\n var e_3, _a;\n var axes = [];\n var skip = ['axes[].type'];\n var moduleContext = chart.getModuleContext();\n var index = 0;\n try {\n for (var _b = __values(options || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n var axisOptions = _c.value;\n var axis = void 0;\n switch (axisOptions.type) {\n case 'number':\n axis = new NumberAxis(moduleContext);\n break;\n case LogAxis.type:\n axis = new LogAxis(moduleContext);\n break;\n case CategoryAxis.type:\n axis = new CategoryAxis(moduleContext);\n break;\n case GroupedCategoryAxis.type:\n axis = new GroupedCategoryAxis(moduleContext);\n break;\n case TimeAxis.type:\n axis = new TimeAxis(moduleContext);\n break;\n default:\n throw new Error('AG Charts - unknown axis type: ' + axisOptions['type']);\n }\n var path = \"axes[\" + index++ + \"]\";\n applyAxisModules(axis, axisOptions);\n applyOptionValues(axis, axisOptions, { path: path, skip: skip });\n axes.push(axis);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return axes;\n}\nfunction applyAxisModules(axis, options) {\n var e_4, _a;\n var modulesChanged = false;\n var rootModules = REGISTERED_MODULES.filter(function (m) { return m.type === 'axis'; });\n try {\n for (var rootModules_2 = __values(rootModules), rootModules_2_1 = rootModules_2.next(); !rootModules_2_1.done; rootModules_2_1 = rootModules_2.next()) {\n var next = rootModules_2_1.value;\n var shouldBeEnabled = options[next.optionsKey] != null;\n var isEnabled = axis.isModuleEnabled(next);\n if (shouldBeEnabled === isEnabled)\n continue;\n modulesChanged = true;\n if (shouldBeEnabled) {\n axis.addModule(next);\n }\n else {\n axis.removeModule(next);\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (rootModules_2_1 && !rootModules_2_1.done && (_a = rootModules_2.return)) _a.call(rootModules_2);\n }\n finally { if (e_4) throw e_4.error; }\n }\n return modulesChanged;\n}\nfunction registerListeners(source, listeners) {\n source.clearEventListeners();\n for (var property in listeners) {\n var listener = listeners[property];\n if (typeof listener !== 'function')\n continue;\n source.addEventListener(property, listener);\n }\n}\nvar JSON_APPLY_OPTIONS = {\n constructors: {\n title: Caption,\n subtitle: Caption,\n footnote: Caption,\n shadow: DropShadow,\n innerCircle: DoughnutInnerCircle,\n 'axes[].crossLines[]': CrossLine,\n 'series[].innerLabels[]': DoughnutInnerLabel,\n 'background.image': BackgroundImage,\n },\n allowedTypes: {\n 'legend.pagination.marker.shape': ['primitive', 'function'],\n 'series[].marker.shape': ['primitive', 'function'],\n 'axis[].tick.count': ['primitive', 'class-instance'],\n },\n};\nfunction applyOptionValues(target, options, _a) {\n var _b = _a === void 0 ? {} : _a, skip = _b.skip, path = _b.path;\n var applyOpts = __assign(__assign(__assign({}, JSON_APPLY_OPTIONS), { skip: skip }), (path ? { path: path } : {}));\n return jsonApply(target, options, applyOpts);\n}\nfunction applySeriesValues(target, options, _a) {\n var _b = _a === void 0 ? {} : _a, path = _b.path, index = _b.index;\n var skip = ['series[].listeners'];\n var ctrs = (JSON_APPLY_OPTIONS === null || JSON_APPLY_OPTIONS === void 0 ? void 0 : JSON_APPLY_OPTIONS.constructors) || {};\n var seriesTypeOverrides = {\n constructors: __assign(__assign({}, ctrs), { title: target.type === 'pie' ? PieTitle : ctrs['title'] }),\n };\n var applyOpts = __assign(__assign(__assign(__assign(__assign({}, JSON_APPLY_OPTIONS), seriesTypeOverrides), { skip: __spread(['series[].type'], (skip || [])) }), (path ? { path: path } : {})), { idx: index !== null && index !== void 0 ? index : -1 });\n var result = jsonApply(target, options, applyOpts);\n var listeners = options === null || options === void 0 ? void 0 : options.listeners;\n if (listeners != null) {\n registerListeners(target, listeners);\n }\n return result;\n}\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { themes as themeFactories } from './chart/mapping/themes';\nexport { getChartTheme } from './chart/mapping/themes';\nexport { ChartTheme } from './chart/themes/chartTheme';\nexport var themes = Object.entries(themeFactories).reduce(function (obj, _a) {\n var _b = __read(_a, 2), name = _b[0], factory = _b[1];\n obj[name] = factory();\n return obj;\n}, {});\n","import { windowValue } from '../util/window';\nexport var RedrawType;\n(function (RedrawType) {\n RedrawType[RedrawType[\"NONE\"] = 0] = \"NONE\";\n // Canvas doesn't need clearing, an incremental re-rerender is sufficient.\n RedrawType[RedrawType[\"TRIVIAL\"] = 1] = \"TRIVIAL\";\n // Group needs clearing, a semi-incremental re-render is sufficient.\n RedrawType[RedrawType[\"MINOR\"] = 2] = \"MINOR\";\n // Canvas needs to be cleared for these redraw types.\n RedrawType[RedrawType[\"MAJOR\"] = 3] = \"MAJOR\";\n})(RedrawType || (RedrawType = {}));\n/** @returns true if eval() is disabled in the current execution context. */\nfunction evalAvailable() {\n try {\n eval('');\n return true;\n }\n catch (e) {\n return false;\n }\n}\nvar EVAL_USEABLE = evalAvailable();\nexport function SceneChangeDetection(opts) {\n var _a = opts || {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.TRIVIAL : _b, _c = _a.type, type = _c === void 0 ? 'normal' : _c, changeCb = _a.changeCb, convertor = _a.convertor, _d = _a.checkDirtyOnAssignment, checkDirtyOnAssignment = _d === void 0 ? false : _d;\n var debug = windowValue('agChartsSceneChangeDetectionDebug') != null;\n return function (target, key) {\n // `target` is either a constructor (static member) or prototype (instance member)\n var privateKey = \"__\" + key;\n if (target[key]) {\n return;\n }\n if (EVAL_USEABLE) {\n // Optimised code-path.\n // Remove all conditional logic from runtime - generate a setter with the exact necessary\n // steps, as these setters are called a LOT during update cycles.\n var setterJs = \"\\n \" + (debug ? 'var setCount = 0;' : '') + \"\\n function set_\" + key + \"(value) {\\n const oldValue = this.\" + privateKey + \";\\n \" + (convertor ? 'value = convertor(value);' : '') + \"\\n if (value !== oldValue) {\\n this.\" + privateKey + \" = value;\\n \" + (debug\n ? \"console.log({ t: this, property: '\" + key + \"', oldValue, value, stack: new Error().stack });\"\n : '') + \"\\n \" + (type === 'normal' ? \"this.markDirty(this, \" + redraw + \");\" : '') + \"\\n \" + (type === 'transform' ? \"this.markDirtyTransform(\" + redraw + \");\" : '') + \"\\n \" + (type === 'path'\n ? \"if (!this._dirtyPath) { this._dirtyPath = true; this.markDirty(this, \" + redraw + \"); }\"\n : '') + \"\\n \" + (type === 'font'\n ? \"if (!this._dirtyFont) { this._dirtyFont = true; this.markDirty(this, \" + redraw + \"); }\"\n : '') + \"\\n \" + (changeCb ? 'changeCb(this);' : '') + \"\\n }\\n \" + (checkDirtyOnAssignment\n ? \"if (value != null && value._dirty > \" + RedrawType.NONE + \") { this.markDirty(value, value._dirty); }\"\n : '') + \"\\n };\\n set_\" + key + \";\\n \";\n var getterJs = \"\\n function get_\" + key + \"() {\\n return this.\" + privateKey + \";\\n };\\n get_\" + key + \";\\n \";\n Object.defineProperty(target, key, {\n set: eval(setterJs),\n get: eval(getterJs),\n enumerable: true,\n configurable: true,\n });\n }\n else {\n // Unoptimised but 'safe' code-path, for environments with CSP headers and no 'unsafe-eval'.\n // We deliberately do not support debug branches found in the optimised path above, since\n // for large data-set series performance deteriorates with every extra branch here.\n var setter = function (value) {\n var oldValue = this[privateKey];\n value = convertor ? convertor(value) : value;\n if (value !== oldValue) {\n this[privateKey] = value;\n if (type === 'normal')\n this.markDirty(this, redraw);\n if (type === 'transform')\n this.markDirtyTransform(redraw);\n if (type === 'path' && !this._dirtyPath) {\n this._dirtyPath = true;\n this.markDirty(this, redraw);\n }\n if (type === 'font' && !this._dirtyFont) {\n this._dirtyFont = true;\n this.markDirty(this, redraw);\n }\n if (changeCb)\n changeCb(this);\n }\n if (checkDirtyOnAssignment && value != null && value._dirty > RedrawType.NONE)\n this.markDirty(value, value._dirty);\n };\n var getter = function () {\n return this[privateKey];\n };\n Object.defineProperty(target, key, {\n set: setter,\n get: getter,\n enumerable: true,\n configurable: true,\n });\n }\n };\n}\nvar ChangeDetectable = /** @class */ (function () {\n function ChangeDetectable() {\n this._dirty = RedrawType.MAJOR;\n }\n ChangeDetectable.prototype.markDirty = function (_source, type) {\n if (type === void 0) { type = RedrawType.TRIVIAL; }\n if (this._dirty > type) {\n return;\n }\n this._dirty = type;\n };\n ChangeDetectable.prototype.markClean = function (_opts) {\n this._dirty = RedrawType.NONE;\n };\n ChangeDetectable.prototype.isDirty = function () {\n return this._dirty > RedrawType.NONE;\n };\n return ChangeDetectable;\n}());\nexport { ChangeDetectable };\n","export function windowValue(name) {\n /**\n * Redeclaration of window that is safe for use with Gatsby server-side (webpack) compilation.\n */\n var WINDOW = typeof window !== 'undefined'\n ? window\n : // typeof global !== 'undefined' ? (global as any) :\n undefined;\n return WINDOW === null || WINDOW === void 0 ? void 0 : WINDOW[name];\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"eva\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"eva\"] = factory();\n\telse\n\t\troot[\"eva\"] = factory();\n})(typeof self !== \"undefined\" ? self : this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./package/src/index.js\");\n","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar classNames = (function () {\n\t\t// don't inherit from Object so we can skip hasOwnProperty check later\n\t\t// http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232\n\t\tfunction StorageObject() {}\n\t\tStorageObject.prototype = Object.create(null);\n\n\t\tfunction _parseArray (resultSet, array) {\n\t\t\tvar length = array.length;\n\n\t\t\tfor (var i = 0; i < length; ++i) {\n\t\t\t\t_parse(resultSet, array[i]);\n\t\t\t}\n\t\t}\n\n\t\tvar hasOwn = {}.hasOwnProperty;\n\n\t\tfunction _parseNumber (resultSet, num) {\n\t\t\tresultSet[num] = true;\n\t\t}\n\n\t\tfunction _parseObject (resultSet, object) {\n\t\t\tfor (var k in object) {\n\t\t\t\tif (hasOwn.call(object, k)) {\n\t\t\t\t\t// set value to false instead of deleting it to avoid changing object structure\n\t\t\t\t\t// https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions\n\t\t\t\t\tresultSet[k] = !!object[k];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar SPACE = /\\s+/;\n\t\tfunction _parseString (resultSet, str) {\n\t\t\tvar array = str.split(SPACE);\n\t\t\tvar length = array.length;\n\n\t\t\tfor (var i = 0; i < length; ++i) {\n\t\t\t\tresultSet[array[i]] = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction _parse (resultSet, arg) {\n\t\t\tif (!arg) return;\n\t\t\tvar argType = typeof arg;\n\n\t\t\t// 'foo bar'\n\t\t\tif (argType === 'string') {\n\t\t\t\t_parseString(resultSet, arg);\n\n\t\t\t// ['foo', 'bar', ...]\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t_parseArray(resultSet, arg);\n\n\t\t\t// { 'foo': true, ... }\n\t\t\t} else if (argType === 'object') {\n\t\t\t\t_parseObject(resultSet, arg);\n\n\t\t\t// '130'\n\t\t\t} else if (argType === 'number') {\n\t\t\t\t_parseNumber(resultSet, arg);\n\t\t\t}\n\t\t}\n\n\t\tfunction _classNames () {\n\t\t\t// don't leak arguments\n\t\t\t// https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n\t\t\tvar len = arguments.length;\n\t\t\tvar args = Array(len);\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tvar classSet = new StorageObject();\n\t\t\t_parseArray(classSet, args);\n\n\t\t\tvar list = [];\n\n\t\t\tfor (var k in classSet) {\n\t\t\t\tif (classSet[k]) {\n\t\t\t\t\tlist.push(k)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn list.join(' ');\n\t\t}\n\n\t\treturn _classNames;\n\t})();\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"/**\\n * @license\\n * Copyright Akveo. All Rights Reserved.\\n * Licensed under the MIT License. See License.txt in the project root for license information.\\n */\\n.eva-animation {\\n animation-duration: 1s;\\n animation-fill-mode: both; }\\n\\n.eva-infinite {\\n animation-iteration-count: infinite; }\\n\\n.eva-icon-shake {\\n animation-name: eva-shake; }\\n\\n.eva-icon-zoom {\\n animation-name: eva-zoomIn; }\\n\\n.eva-icon-pulse {\\n animation-name: eva-pulse; }\\n\\n.eva-icon-flip {\\n animation-name: eva-flipInY; }\\n\\n.eva-hover {\\n display: inline-block; }\\n\\n.eva-hover:hover .eva-icon-hover-shake, .eva-parent-hover:hover .eva-icon-hover-shake {\\n animation-name: eva-shake; }\\n\\n.eva-hover:hover .eva-icon-hover-zoom, .eva-parent-hover:hover .eva-icon-hover-zoom {\\n animation-name: eva-zoomIn; }\\n\\n.eva-hover:hover .eva-icon-hover-pulse, .eva-parent-hover:hover .eva-icon-hover-pulse {\\n animation-name: eva-pulse; }\\n\\n.eva-hover:hover .eva-icon-hover-flip, .eva-parent-hover:hover .eva-icon-hover-flip {\\n animation-name: eva-flipInY; }\\n\\n@keyframes eva-flipInY {\\n from {\\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\\n animation-timing-function: ease-in;\\n opacity: 0; }\\n 40% {\\n transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\\n animation-timing-function: ease-in; }\\n 60% {\\n transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\\n opacity: 1; }\\n 80% {\\n transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }\\n to {\\n transform: perspective(400px); } }\\n\\n@keyframes eva-shake {\\n from,\\n to {\\n transform: translate3d(0, 0, 0); }\\n 10%,\\n 30%,\\n 50%,\\n 70%,\\n 90% {\\n transform: translate3d(-3px, 0, 0); }\\n 20%,\\n 40%,\\n 60%,\\n 80% {\\n transform: translate3d(3px, 0, 0); } }\\n\\n@keyframes eva-pulse {\\n from {\\n transform: scale3d(1, 1, 1); }\\n 50% {\\n transform: scale3d(1.2, 1.2, 1.2); }\\n to {\\n transform: scale3d(1, 1, 1); } }\\n\\n@keyframes eva-zoomIn {\\n from {\\n opacity: 1;\\n transform: scale3d(0.5, 0.5, 0.5); }\\n 50% {\\n opacity: 1; } }\\n\", \"\"]);\n\n// exports\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*! Isomorphic Style Loader | MIT License | https://github.com/kriasoft/isomorphic-style-loader */\n\n'use strict';\n\nvar inserted = {};\n\nfunction b64EncodeUnicode(str) {\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {\n return String.fromCharCode(\"0x\" + p1);\n }));\n}\n\nfunction removeCss(ids) {\n ids.forEach(function (id) {\n if (--inserted[id] <= 0) {\n var elem = document.getElementById(id);\n\n if (elem) {\n elem.parentNode.removeChild(elem);\n }\n }\n });\n}\n\nfunction insertCss(styles, _temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$replace = _ref.replace,\n replace = _ref$replace === void 0 ? false : _ref$replace,\n _ref$prepend = _ref.prepend,\n prepend = _ref$prepend === void 0 ? false : _ref$prepend,\n _ref$prefix = _ref.prefix,\n prefix = _ref$prefix === void 0 ? 's' : _ref$prefix;\n\n var ids = [];\n\n for (var i = 0; i < styles.length; i++) {\n var _styles$i = styles[i],\n moduleId = _styles$i[0],\n css = _styles$i[1],\n media = _styles$i[2],\n sourceMap = _styles$i[3];\n var id = \"\" + prefix + moduleId + \"-\" + i;\n ids.push(id);\n\n if (inserted[id]) {\n if (!replace) {\n inserted[id]++;\n continue;\n }\n }\n\n inserted[id] = 1;\n var elem = document.getElementById(id);\n var create = false;\n\n if (!elem) {\n create = true;\n elem = document.createElement('style');\n elem.setAttribute('type', 'text/css');\n elem.id = id;\n\n if (media) {\n elem.setAttribute('media', media);\n }\n }\n\n var cssText = css;\n\n if (sourceMap && typeof btoa === 'function') {\n cssText += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + b64EncodeUnicode(JSON.stringify(sourceMap)) + \"*/\";\n cssText += \"\\n/*# sourceURL=\" + sourceMap.file + \"?\" + id + \"*/\";\n }\n\n if ('textContent' in elem) {\n elem.textContent = cssText;\n } else {\n elem.styleSheet.cssText = cssText;\n }\n\n if (create) {\n if (prepend) {\n document.head.insertBefore(elem, document.head.childNodes[0]);\n } else {\n document.head.appendChild(elem);\n }\n }\n }\n\n return removeCss.bind(null, ids);\n}\n\nmodule.exports = insertCss;\n//# sourceMappingURL=insertCss.js.map\n","\n var refs = 0;\n var css = require(\"!!../../node_modules/css-loader/index.js!../../node_modules/sass-loader/lib/loader.js!./animation.scss\");\n var insertCss = require(\"!../../node_modules/isomorphic-style-loader/insertCss.js\");\n var content = typeof css === 'string' ? [[module.id, css, '']] : css;\n\n exports = module.exports = css.locals || {};\n exports._getContent = function() { return content; };\n exports._getCss = function() { return '' + css; };\n exports._insertCss = function(options) { return insertCss(content, options) };\n\n // Hot Module Replacement\n // https://webpack.github.io/docs/hot-module-replacement\n // Only activated in browser context\n if (module.hot && typeof window !== 'undefined' && window.document) {\n var removeCss = function() {};\n module.hot.accept(\"!!../../node_modules/css-loader/index.js!../../node_modules/sass-loader/lib/loader.js!./animation.scss\", function() {\n css = require(\"!!../../node_modules/css-loader/index.js!../../node_modules/sass-loader/lib/loader.js!./animation.scss\");\n content = typeof css === 'string' ? [[module.id, css, '']] : css;\n removeCss = insertCss(content, { replace: true });\n });\n module.hot.dispose(function() { removeCss(); });\n }\n ","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\n\nimport classnames from 'classnames/dedupe';\n\nimport DEFAULT_ATTRS from './default-attrs.json';\nconst defaultAnimationOptions = {\n hover: true,\n};\n\nconst isString = (value) => typeof value === 'string' || value instanceof String;\n\nclass Icon {\n constructor(name, contents) {\n this.name = name;\n this.contents = contents;\n this.attrs = {\n ...DEFAULT_ATTRS,\n ...{ class: `eva eva-${name}` },\n };\n }\n\n toSvg(attrs = {}) {\n const { animation, ...remAttrs } = attrs;\n const animationOptions = getAnimationOptions(animation);\n const animationClasses = animationOptions ? animationOptions.class : '';\n const combinedAttrs = {\n ...this.attrs,\n ...remAttrs,\n ...{ class: classnames(this.attrs.class, attrs.class, animationClasses) },\n };\n const svg = `${this.contents}`;\n\n return !!animationOptions ? animationOptions.hover ? `${svg}` : svg : svg;\n }\n\n toString() {\n return this.contents;\n }\n}\n\nfunction getAnimationOptions(animation) {\n if (!animation) {\n return null;\n }\n\n if (animation.hover) {\n animation.hover = isString(animation.hover) ? JSON.parse(animation.hover) : animation.hover;\n }\n\n const mergedAnimationOptions = {\n ...defaultAnimationOptions,\n ...animation,\n };\n const animationType = mergedAnimationOptions.hover ?\n `eva-icon-hover-${mergedAnimationOptions.type}` :\n `eva-icon-${mergedAnimationOptions.type}`;\n mergedAnimationOptions.class = classnames(\n {\n 'eva-animation': true,\n 'eva-infinite': isString(animation.infinite) ? JSON.parse(animation.infinite) : animation.infinite,\n },\n animationType,\n );\n\n return mergedAnimationOptions;\n}\n\nfunction attrsToString(attrs) {\n return Object.keys(attrs)\n .map(key => `${key}=\"${attrs[key]}\"`)\n .join(' ');\n}\n\nexport default Icon;\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\n\nimport Icon from './icon';\nimport icons from '../../package-build/eva-icons.json';\n\nexport default Object.keys(icons)\n .map(key => new Icon(key, icons[key]))\n .reduce((object, icon) => {\n object[icon.name] = icon;\n\n return object;\n }, {});\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\n\nimport icons from './icons';\nimport replace from './replace';\nimport style from './animation.scss';\n\nif (typeof window !== 'undefined') {\n style._insertCss();\n}\n\nexport { icons, replace };\n","/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\n\nimport classnames from 'classnames/dedupe';\n\nimport icons from './icons';\n\nconst animationKeys = {\n 'data-eva-animation': 'type',\n 'data-eva-hover': 'hover',\n 'data-eva-infinite': 'infinite',\n};\nconst dataAttributesKeys = {\n 'data-eva': 'name',\n 'data-eva-width': 'width',\n 'data-eva-height': 'height',\n 'data-eva-fill': 'fill',\n};\n\nfunction replace(options = {}) {\n if (typeof document === 'undefined') {\n throw new Error('`eva.replace()` only works in a browser environment.');\n }\n\n const elementsToReplace = document.querySelectorAll('[data-eva]');\n\n Array.from(elementsToReplace).forEach(element =>\n replaceElement(element, options),\n );\n}\n\nfunction replaceElement(element, options = {}) {\n const { name, ...elementAttrs } = getAttrs(element);\n\n const svgString = icons[name].toSvg({\n ...options,\n ...elementAttrs,\n animation: getAnimationObject(options.animation, elementAttrs.animation),\n ...{ class: classnames(options.class, elementAttrs.class) },\n });\n const svgDocument = new DOMParser().parseFromString(\n svgString,\n 'text/html',\n );\n const svgElement = svgDocument.querySelector('.eva-hover') || svgDocument.querySelector('svg');\n\n element.parentNode.replaceChild(svgElement, element);\n}\n\nfunction getAttrs(element) {\n return Array.from(element.attributes).reduce((attrs, attr) => {\n if (!!animationKeys[attr.name]) {\n attrs['animation'] = {\n ...attrs['animation'],\n [animationKeys[attr.name]]: attr.value,\n };\n } else {\n attrs = {\n ...attrs,\n ...getAttr(attr),\n };\n }\n\n return attrs;\n }, {});\n}\n\nfunction getAttr(attr) {\n if (!!dataAttributesKeys[attr.name]) {\n return ({\n [dataAttributesKeys[attr.name]]: attr.value,\n });\n }\n\n return ({\n [attr.name]: attr.value,\n });\n}\n\nfunction getAnimationObject(optionsAnimation, elementAttrsAnimation) {\n if (optionsAnimation || elementAttrsAnimation) {\n return ({\n ...optionsAnimation,\n ...elementAttrsAnimation,\n });\n }\n\n return null;\n}\n\nexport default replace;\n","\nexport const MAX_CHARS = 524288; // the default max length per the html maxlength attribute\nexport const MIN_SEARCH_LENGTH = 3;\nexport const PAUSE = 10;\nexport const TEXT_SEARCHING = \"Searching...\";\nexport const TEXT_NO_RESULTS = \"No results found\";\nexport const CLEAR_TIMEOUT = 50;\n\nexport function isNil(value: any) {\n return typeof value === \"undefined\" || value === null;\n}\n","import { Subject } from \"rxjs\";\n\nimport { CompleterItem } from \"../components/completer-item\";\nimport { CompleterData } from \"./completer-data\";\nimport { isNil } from \"../globals\";\n\nexport abstract class CompleterBaseData extends Subject implements CompleterData {\n\n protected _searchFields: string | null = null;\n protected _titleField: string | null = null;\n protected _descriptionField: string | undefined = undefined;\n protected _imageField: string | undefined = undefined;\n\n constructor() {\n super();\n }\n\n public abstract search(term: string): void;\n\n public cancel() {\n return;\n }\n\n public searchFields(searchFields: string | null) {\n this._searchFields = searchFields;\n return this;\n }\n\n public titleField(titleField: string | null) {\n this._titleField = titleField;\n return this;\n }\n\n public descriptionField(descriptionField: string) {\n this._descriptionField = descriptionField;\n return this;\n }\n\n public imageField(imageField: string) {\n this._imageField = imageField;\n return this;\n }\n\n public convertToItem(data: any) {\n let image: string | null = null;\n let formattedText: string;\n let formattedDesc: string | null = null;\n\n if (this._titleField) {\n formattedText = this.extractTitle(data);\n } else {\n formattedText = data;\n }\n\n if (typeof formattedText !== \"string\") {\n formattedText = JSON.stringify(formattedText);\n }\n\n if (this._descriptionField) {\n formattedDesc = this.extractValue(data, this._descriptionField);\n }\n\n if (this._imageField) {\n image = this.extractValue(data, this._imageField);\n }\n\n if (isNil(formattedText)) {\n return null;\n }\n\n return {\n description: formattedDesc,\n image,\n originalObject: data,\n title: formattedText\n } as CompleterItem;\n\n }\n\n protected extractMatches(data: any[], term: string) {\n let matches: any[] = [];\n const searchFields = this._searchFields ? this._searchFields.split(\",\") : null;\n if (this._searchFields !== null && this._searchFields !== undefined && term !== \"\") {\n matches = data.filter((item) => {\n const values: any[] = searchFields ? this.extractBySearchFields(searchFields, item) : [item];\n return values.some((value) => value\n .toString()\n .toLowerCase()\n .indexOf(term.toString().toLowerCase()) >= 0\n );\n });\n } else {\n matches = data;\n }\n\n return matches;\n }\n\n protected extractTitle(item: any) {\n // split title fields and run extractValue for each and join with ' '\n if (!this._titleField) {\n return \"\";\n }\n\n return this._titleField.split(\",\")\n .map((field) => {\n return this.extractValue(item, field);\n })\n .reduce((acc, titlePart) => acc ? `${acc} ${titlePart}` : titlePart);\n }\n\n protected extractValue(obj: any, key: string | null) {\n let keys: string[];\n let result: any;\n if (key) {\n keys = key.split(\".\");\n result = obj;\n for (key of keys) {\n if (result) {\n result = result[key];\n }\n }\n } else {\n result = obj;\n }\n return result;\n }\n\n protected processResults(matches: string[]): CompleterItem[] {\n let i: number;\n const results: CompleterItem[] = [];\n\n if (matches && matches.length > 0) {\n for (i = 0; i < matches.length; i++) {\n const item = this.convertToItem(matches[i]);\n if (item) {\n results.push(item);\n }\n }\n }\n return results;\n }\n\n private extractBySearchFields(searchFields: string[], item: any) {\n return searchFields\n .map((searchField) => this.extractValue(item, searchField)).filter((value) => !!value);\n }\n}\n","import { EventEmitter } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\n\nimport { CompleterBaseData } from \"./completer-base-data\";\nimport { CompleterItem } from \"../components/completer-item\";\n\nexport class LocalData extends CompleterBaseData {\n\n public dataSourceChange: EventEmitter = new EventEmitter();\n\n protected _data: any[] = [];\n protected savedTerm: string | null = null;\n\n constructor() {\n super();\n }\n\n public data(data: any[] | Observable) {\n if (data instanceof Observable) {\n const data$ = data as Observable;\n data$\n .pipe(catchError(() => []))\n .subscribe((res) => {\n this._data = res;\n if (this.savedTerm) {\n this.search(this.savedTerm);\n }\n this.dataSourceChange.emit();\n });\n } else {\n this._data = data;\n }\n\n this.dataSourceChange.emit();\n\n return this;\n }\n\n public search(term: string): void {\n if (!this._data) {\n this.savedTerm = term;\n } else {\n this.savedTerm = null;\n const matches: any[] = this.extractMatches(this._data, term);\n this.next(this.processResults(matches));\n }\n }\n\n public convertToItem(data: any): CompleterItem | null {\n return super.convertToItem(data);\n }\n}\n","import { EventEmitter } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { Subscription } from \"rxjs\";\nimport { catchError, map } from \"rxjs/operators\";\n\nimport { CompleterBaseData } from \"./completer-base-data\";\nimport { CompleterItem } from \"../components/completer-item\";\n\nexport class RemoteData extends CompleterBaseData {\n public dataSourceChange: EventEmitter = new EventEmitter();\n\n private _remoteUrl: string | null = null;\n private remoteSearch: Subscription | null = null;\n private _urlFormater: ((term: string) => string) | null = null;\n private _dataField: string | null = null;\n private _requestOptions: any;\n\n constructor(private http: HttpClient) {\n super();\n }\n\n public remoteUrl(remoteUrl: string | null) {\n this._remoteUrl = remoteUrl;\n this.dataSourceChange.emit();\n\n return this;\n }\n\n public urlFormater(urlFormater: (term: string) => string) {\n this._urlFormater = urlFormater;\n }\n\n public dataField(dataField: string) {\n this._dataField = dataField;\n }\n\n public requestOptions(requestOptions: any) {\n this._requestOptions = requestOptions;\n }\n\n public search(term: string): void {\n this.cancel();\n // let params = {};\n let url = \"\";\n if (this._urlFormater) {\n url = this._urlFormater(term);\n } else {\n url = this._remoteUrl + encodeURIComponent(term);\n }\n\n this.remoteSearch = this.http\n .get(url, Object.assign({}, this._requestOptions))\n .pipe(\n map((data: any) => {\n const matches = this.extractValue(data, this._dataField);\n return this.extractMatches(matches, term);\n }),\n catchError(() => [])\n )\n .subscribe((matches: any[]) => {\n const results = this.processResults(matches);\n this.next(results);\n });\n }\n\n public cancel() {\n if (this.remoteSearch) {\n this.remoteSearch.unsubscribe();\n }\n }\n\n public convertToItem(data: any): CompleterItem | null {\n return super.convertToItem(data);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { LocalData } from \"./local-data\";\n\n@Injectable()\nexport class LocalDataFactory {\n public create() {\n return new LocalData();\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { HttpClient } from \"@angular/common/http\";\n\nimport { RemoteData } from \"./remote-data\";\n\n@Injectable()\nexport class RemoteDataFactory {\n constructor(private http: HttpClient) { }\n\n public create() {\n return new RemoteData(this.http);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport { LocalData } from \"./local-data\";\nimport { RemoteData } from \"./remote-data\";\nimport { LocalDataFactory } from \"./local-data-factory\";\nimport { RemoteDataFactory } from \"./remote-data-factory\";\n\n@Injectable()\nexport class CompleterService {\n constructor(\n private localDataFactory: LocalDataFactory, // Using any instead of () => LocalData because of AoT errors\n private remoteDataFactory: RemoteDataFactory // Using any instead of () => LocalData because of AoT errors\n ) { }\n\n public local(\n data: any[] | Observable,\n searchFields: string | null = \"\",\n titleField: string | null = \"\"\n ): LocalData {\n\n const localData = this.localDataFactory.create();\n return localData\n .data(data)\n .searchFields(searchFields)\n .titleField(titleField);\n }\n\n public remote(url: string | null, searchFields: string | null = \"\", titleField: string | null = \"\"): RemoteData {\n\n const remoteData = this.remoteDataFactory.create();\n return remoteData\n .remoteUrl(url)\n .searchFields(searchFields)\n .titleField(titleField);\n }\n}\n","import { Directive, EventEmitter, Output } from \"@angular/core\";\n\nimport { CompleterItem } from \"../components/completer-item\";\n\nexport interface CompleterList {\n search(term: string): void;\n open(): void;\n isOpen(open: boolean): void;\n clear(): void;\n}\n\nexport interface CompleterDropdown {\n clear(): void;\n selectCurrent(): void;\n nextRow(): void;\n prevRow(): void;\n highlightRow(index: number | null): void;\n}\n\n@Directive({\n selector: \"[ctrCompleter]\",\n})\nexport class CtrCompleter {\n @Output() public selected = new EventEmitter();\n @Output() public highlighted = new EventEmitter();\n @Output() public opened = new EventEmitter();\n @Output() public dataSourceChange = new EventEmitter();\n\n private list: CompleterList | null = null;\n private dropdown: CompleterDropdown | null = null;\n private _hasHighlighted = false;\n private _hasSelected = false;\n private _cancelBlur = false;\n private _isOpen = false;\n private _autoHighlightIndex: number | null = null;\n\n public registerList(list: CompleterList) {\n this.list = list;\n }\n\n public registerDropdown(dropdown: CompleterDropdown | null) {\n this.dropdown = dropdown;\n }\n\n public onHighlighted(item: CompleterItem | null) {\n this.highlighted.emit(item);\n this._hasHighlighted = !!item;\n }\n\n public onSelected(item: CompleterItem | null, clearList = true) {\n this.selected.emit(item);\n if (item) {\n this._hasSelected = true;\n }\n if (clearList) {\n this.clear();\n }\n }\n\n public onDataSourceChange() {\n if (this.hasSelected) {\n this.selected.emit(null);\n this._hasSelected = false;\n }\n this.dataSourceChange.emit();\n }\n\n public search(term: string) {\n if (this._hasSelected) {\n this.selected.emit(null);\n this._hasSelected = false;\n }\n if (this.list) {\n this.list.search(term);\n }\n }\n\n public clear() {\n this._hasHighlighted = false;\n this.isOpen = false;\n\n if (this.dropdown) {\n this.dropdown.clear();\n }\n\n if (this.list) {\n this.list.clear();\n }\n }\n\n public selectCurrent() {\n if (this.dropdown) {\n this.dropdown.selectCurrent();\n }\n }\n\n public nextRow() {\n if (this.dropdown) {\n this.dropdown.nextRow();\n }\n }\n\n public prevRow() {\n if (this.dropdown) {\n this.dropdown.prevRow();\n }\n }\n\n public hasHighlighted() {\n return this._hasHighlighted;\n }\n\n public cancelBlur(cancel: boolean) {\n this._cancelBlur = cancel;\n }\n\n public isCancelBlur() {\n return this._cancelBlur;\n }\n\n public open() {\n if (!this._isOpen && !!this.list) {\n this.isOpen = true;\n this.list.open();\n }\n }\n\n public get isOpen() {\n return this._isOpen;\n }\n\n public set isOpen(open: boolean) {\n this._isOpen = open;\n this.opened.emit(this._isOpen);\n if (this.list) {\n this.list.isOpen(open);\n }\n }\n\n public get autoHighlightIndex() {\n return this._autoHighlightIndex;\n }\n\n public set autoHighlightIndex(index: number | null) {\n this._autoHighlightIndex = index;\n if (this.dropdown) {\n this.dropdown.highlightRow(this._autoHighlightIndex);\n }\n }\n\n public get hasSelected() {\n return this._hasSelected;\n }\n}\n","import { AfterViewInit, Directive, ElementRef, Host, HostListener, OnDestroy, NgZone } from \"@angular/core\";\n\nimport { CompleterItem } from \"../components/completer-item\";\nimport { CtrCompleter, CompleterDropdown } from \"./ctr-completer\";\nimport { isNil } from \"../globals\";\n\nexport interface CtrRowElement {\n setHighlighted(selected: boolean): void;\n getNativeElement(): any;\n getDataItem(): CompleterItem | null;\n}\n\nexport class CtrRowItem {\n constructor(public row: CtrRowElement, public index: number) { }\n}\n\n@Directive({\n selector: \"[ctrDropdown]\",\n})\nexport class CtrDropdown implements CompleterDropdown, OnDestroy, AfterViewInit {\n\n private rows: CtrRowItem[] = [];\n private currHighlighted: CtrRowItem | undefined;\n private isScrollOn: boolean = false;\n private _rowMouseDown: boolean = false;\n\n constructor( @Host() private completer: CtrCompleter, private el: ElementRef, private zone: NgZone) {\n this.completer.registerDropdown(this);\n }\n\n public ngOnDestroy() {\n this.completer.registerDropdown(null);\n }\n\n public ngAfterViewInit() {\n const css = getComputedStyle(this.el.nativeElement);\n const autoHighlightIndex = this.completer.autoHighlightIndex;\n\n this.isScrollOn = !!css.maxHeight && css.overflowY === \"auto\";\n if (autoHighlightIndex) {\n this.zone.run(\n () => {\n this.highlightRow(autoHighlightIndex);\n }\n );\n }\n }\n\n @HostListener(\"mousedown\", [\"$event\"]) public onMouseDown(event: any) {\n // Support for canceling blur on IE (issue #158)\n if (!this._rowMouseDown) {\n this.completer.cancelBlur(true);\n this.zone.run(\n () => {\n this.completer.cancelBlur(false);\n }\n );\n } else {\n this._rowMouseDown = false;\n }\n }\n\n public registerRow(row: CtrRowItem) {\n const arrIndex = this.rows.findIndex(_row => _row.index === row.index);\n if (arrIndex >= 0) {\n this.rows[arrIndex] = row;\n } else {\n this.rows.push(row);\n }\n }\n\n public unregisterRow(rowIndex: number) {\n const arrIndex = this.rows.findIndex(_row => _row.index === rowIndex);\n this.rows.splice(arrIndex, 1);\n if (this.currHighlighted && rowIndex === this.currHighlighted.index) {\n this.highlightRow(null);\n }\n }\n\n public highlightRow(index: number | null) {\n const highlighted = this.rows.find(row => row.index === index);\n\n if (isNil(index) || index! < 0) {\n if (this.currHighlighted) {\n this.currHighlighted.row.setHighlighted(false);\n }\n this.currHighlighted = undefined;\n this.completer.onHighlighted(null);\n return;\n }\n\n if (!highlighted) {\n return;\n }\n\n if (this.currHighlighted) {\n this.currHighlighted.row.setHighlighted(false);\n }\n\n this.currHighlighted = highlighted;\n this.currHighlighted.row.setHighlighted(true);\n this.completer.onHighlighted(this.currHighlighted.row.getDataItem());\n\n if (this.isScrollOn && this.currHighlighted) {\n const rowTop = this.dropdownRowTop();\n\n if (!rowTop) {\n return;\n }\n\n if (rowTop < 0) {\n this.dropdownScrollTopTo(rowTop - 1);\n } else {\n const row = this.currHighlighted.row.getNativeElement();\n if (this.dropdownHeight() < row.getBoundingClientRect().bottom) {\n this.dropdownScrollTopTo(this.dropdownRowOffsetHeight(row));\n if (this.el.nativeElement.getBoundingClientRect().bottom - this.dropdownRowOffsetHeight(row) < row.getBoundingClientRect().top) {\n this.dropdownScrollTopTo(row.getBoundingClientRect().top - (this.el.nativeElement.getBoundingClientRect().top + parseInt(getComputedStyle(this.el.nativeElement).paddingTop as string, 10)));\n }\n }\n }\n }\n }\n\n public clear() {\n this.rows = [];\n }\n\n public onSelected(item: CompleterItem | null) {\n this.completer.onSelected(item);\n }\n\n public rowMouseDown() {\n this._rowMouseDown = true;\n }\n\n public selectCurrent() {\n if (!!this.currHighlighted && !!this.currHighlighted.row) {\n this.onSelected(this.currHighlighted.row.getDataItem());\n } else if (this.rows.length > 0) {\n this.onSelected(this.rows[0].row.getDataItem());\n }\n\n }\n\n public nextRow() {\n let nextRowIndex = 0;\n\n if (this.currHighlighted) {\n nextRowIndex = this.currHighlighted.index + 1;\n }\n\n this.highlightRow(nextRowIndex);\n }\n\n public prevRow() {\n let nextRowIndex = -1;\n\n if (this.currHighlighted) {\n nextRowIndex = this.currHighlighted.index - 1;\n }\n\n this.highlightRow(nextRowIndex);\n }\n\n private dropdownScrollTopTo(offset: any) {\n this.el.nativeElement.scrollTop = this.el.nativeElement.scrollTop + offset;\n }\n\n private dropdownRowTop() {\n if (!this.currHighlighted) {\n return;\n }\n\n return this.currHighlighted.row.getNativeElement().getBoundingClientRect().top -\n (this.el.nativeElement.getBoundingClientRect().top +\n parseInt(getComputedStyle(this.el.nativeElement).paddingTop as string, 10));\n }\n\n private dropdownHeight() {\n return this.el.nativeElement.getBoundingClientRect().top +\n parseInt(getComputedStyle(this.el.nativeElement).maxHeight as string, 10);\n }\n\n private dropdownRowOffsetHeight(row: any) {\n const css = getComputedStyle(row.parentElement);\n return row.parentElement.offsetHeight +\n parseInt(css.marginTop as string, 10) + parseInt(css.marginBottom as string, 10);\n }\n}\n","import { Directive, ElementRef, EventEmitter, Host, HostListener, Input, Output } from \"@angular/core\";\nimport { NgModel } from \"@angular/forms\";\nimport { Subscription, timer } from \"rxjs\";\nimport { take } from \"rxjs/operators\";\n\nimport { CompleterItem } from \"../components/completer-item\";\nimport { CtrCompleter } from \"./ctr-completer\";\nimport { isNil } from \"../globals\";\n\n\n// keyboard events\nconst KEY_DW = 40;\nconst KEY_RT = 39;\nconst KEY_UP = 38;\nconst KEY_LF = 37;\nconst KEY_ES = 27;\nconst KEY_EN = 13;\nconst KEY_TAB = 9;\nconst KEY_BK = 8;\nconst KEY_SH = 16;\nconst KEY_CL = 20;\nconst KEY_F1 = 112;\nconst KEY_F12 = 123;\n\n@Directive({\n selector: \"[ctrInput]\",\n})\nexport class CtrInput {\n @Input(\"clearSelected\") public clearSelected = false;\n @Input(\"clearUnselected\") public clearUnselected = false;\n @Input(\"overrideSuggested\") public overrideSuggested = false;\n @Input(\"fillHighlighted\") public fillHighlighted = true;\n @Input(\"openOnFocus\") public openOnFocus = false;\n @Input(\"openOnClick\") public openOnClick = false;\n @Input(\"selectOnClick\") public selectOnClick = false;\n @Input(\"selectOnFocus\") public selectOnFocus = false;\n\n @Output() public ngModelChange: EventEmitter = new EventEmitter();\n\n private _searchStr = \"\";\n private _displayStr = \"\";\n private blurTimer: Subscription | null = null;\n\n constructor( @Host() private completer: CtrCompleter, private ngModel: NgModel, private el: ElementRef) {\n this.completer.selected.subscribe((item: CompleterItem) => {\n if (!item) {\n return;\n }\n if (this.clearSelected) {\n this.searchStr = \"\";\n } else {\n this.searchStr = item.title;\n }\n this.ngModelChange.emit(this.searchStr);\n });\n\n this.completer.highlighted.subscribe((item: CompleterItem) => {\n if (this.fillHighlighted) {\n if (item) {\n this._displayStr = item.title;\n this.ngModelChange.emit(item.title);\n } else {\n this._displayStr = this.searchStr;\n this.ngModelChange.emit(this.searchStr);\n }\n }\n });\n\n this.completer.dataSourceChange.subscribe(() => {\n this.completer.search(this.searchStr);\n });\n\n if (this.ngModel.valueChanges) {\n this.ngModel.valueChanges.subscribe((value: any) => {\n if (!isNil(value) && this._displayStr !== value) {\n if (this.searchStr !== value) {\n this.completer.search(value);\n }\n this.searchStr = value;\n }\n });\n }\n }\n\n @HostListener(\"keyup\", [\"$event\"])\n public keyupHandler(event: any) {\n if (event.keyCode === KEY_LF || event.keyCode === KEY_RT || event.keyCode === KEY_TAB) {\n // do nothing\n return;\n }\n\n if (event.keyCode === KEY_UP || event.keyCode === KEY_EN) {\n event.preventDefault();\n } else if (event.keyCode === KEY_DW) {\n event.preventDefault();\n this.completer.search(this.searchStr);\n } else if (event.keyCode === KEY_ES) {\n if (this.completer.isOpen) {\n this.restoreSearchValue();\n this.completer.clear();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n }\n\n @HostListener(\"paste\", [\"$event\"])\n public pasteHandler(event: any) {\n this.completer.open();\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n public keydownHandler(event: any) {\n const keyCode = event.keyCode || event.which;\n if (keyCode === KEY_EN) {\n if (this.completer.hasHighlighted()) {\n event.preventDefault();\n }\n this.handleSelection();\n } else if (keyCode === KEY_DW) {\n event.preventDefault();\n this.completer.open();\n this.completer.nextRow();\n } else if (keyCode === KEY_UP) {\n event.preventDefault();\n this.completer.prevRow();\n } else if (keyCode === KEY_TAB) {\n this.handleSelection();\n } else if (keyCode === KEY_BK) {\n this.completer.open();\n } else if (keyCode === KEY_ES) {\n // This is very specific to IE10/11 #272\n // without this, IE clears the input text\n event.preventDefault();\n if (this.completer.isOpen) {\n event.stopPropagation();\n }\n } else {\n if (keyCode !== 0 && keyCode !== KEY_SH && keyCode !== KEY_CL &&\n (keyCode <= KEY_F1 || keyCode >= KEY_F12) &&\n !event.ctrlKey && !event.metaKey && !event.altKey\n ) {\n this.completer.open();\n }\n }\n }\n\n @HostListener(\"blur\", [\"$event\"])\n public onBlur(event: any) {\n // Check if we need to cancel Blur for IE\n if (this.completer.isCancelBlur()) {\n setTimeout(\n () => {\n // get the focus back\n this.el.nativeElement.focus();\n },\n 0\n );\n return;\n }\n\n if (this.completer.isOpen) {\n this.blurTimer = timer(200).pipe(take(1)).subscribe(() => this.doBlur());\n }\n }\n\n @HostListener(\"focus\", [])\n public onfocus() {\n if (this.blurTimer) {\n this.blurTimer.unsubscribe();\n this.blurTimer = null;\n }\n\n if (this.selectOnFocus) {\n this.el.nativeElement.select();\n }\n\n if (this.openOnFocus) {\n this.completer.open();\n }\n }\n\n @HostListener(\"click\", [\"$event\"])\n public onClick(event: any) {\n if (this.selectOnClick) {\n this.el.nativeElement.select();\n }\n\n if (this.openOnClick) {\n if (this.completer.isOpen) {\n this.completer.clear();\n } else {\n this.completer.open();\n }\n }\n }\n\n public get searchStr() {\n return this._searchStr;\n }\n\n public set searchStr(term: string) {\n this._searchStr = term;\n this._displayStr = term;\n }\n\n private handleSelection() {\n if (this.completer.hasHighlighted()) {\n this._searchStr = \"\";\n this.completer.selectCurrent();\n } else if (this.overrideSuggested) {\n this.completer.onSelected({ title: this.searchStr, originalObject: null });\n } else {\n if (this.clearUnselected && !this.completer.hasSelected) {\n this.searchStr = \"\";\n this.ngModelChange.emit(this.searchStr);\n }\n this.completer.clear();\n }\n }\n\n private restoreSearchValue() {\n if (this.fillHighlighted) {\n if (this._displayStr !== this.searchStr) {\n this._displayStr = this.searchStr;\n this.ngModelChange.emit(this.searchStr);\n }\n }\n }\n\n private doBlur() {\n if (this.blurTimer) {\n this.blurTimer.unsubscribe();\n this.blurTimer = null;\n }\n\n if (this.overrideSuggested) {\n this.completer.onSelected({ title: this.searchStr, originalObject: null });\n } else {\n if (this.clearUnselected && !this.completer.hasSelected) {\n this.searchStr = \"\";\n this.ngModelChange.emit(this.searchStr);\n } else {\n this.restoreSearchValue();\n }\n }\n\n this.completer.clear();\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n EmbeddedViewRef,\n Host,\n Input,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n NgZone,\n} from \"@angular/core\";\nimport { Subscription, timer } from \"rxjs\";\nimport { take } from \"rxjs/operators\";\nimport { CompleterItem } from \"../components/completer-item\";\nimport { CLEAR_TIMEOUT, isNil, MIN_SEARCH_LENGTH, PAUSE } from \"../globals\";\nimport { CompleterData } from \"../services/completer-data\";\nimport { CompleterList, CtrCompleter } from \"./ctr-completer\";\n\nexport class CtrListContext {\n constructor(\n public results: CompleterItem[] | null,\n public searching: boolean,\n public searchInitialized: boolean,\n public isOpen: boolean\n ) {}\n}\n\n@Directive({\n selector: \"[ctrList]\",\n})\nexport class CtrList implements OnInit, CompleterList {\n @Input() public ctrListMinSearchLength = MIN_SEARCH_LENGTH;\n @Input() public ctrListPause = PAUSE;\n @Input() public ctrListAutoMatch = false;\n @Input() public ctrListAutoHighlight = false;\n @Input() public ctrListDisplaySearching = true;\n\n private _dataService: CompleterData | null = null;\n // private results: CompleterItem[] = [];\n private term: string | null = null;\n // private searching = false;\n private searchTimer: Subscription | null = null;\n private clearTimer: Subscription | null = null;\n private ctx = new CtrListContext([], false, false, false);\n private _initialValue: any = null;\n private viewRef: EmbeddedViewRef | null = null;\n\n constructor(\n @Host() private completer: CtrCompleter,\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private cd: ChangeDetectorRef,\n private zone: NgZone\n ) {}\n\n public ngOnInit() {\n this.completer.registerList(this);\n this.viewRef = this.viewContainer.createEmbeddedView(\n this.templateRef,\n new CtrListContext([], false, false, false)\n );\n }\n\n @Input(\"ctrList\")\n public set dataService(newService: CompleterData) {\n this._dataService = newService;\n this.dataServiceSubscribe();\n }\n\n @Input(\"ctrListInitialValue\")\n public set initialValue(value: any) {\n if (\n this._dataService &&\n typeof this._dataService.convertToItem === \"function\"\n ) {\n this.zone.run(() => {\n const initialItem =\n this._dataService && this._dataService.convertToItem!(value);\n if (initialItem) {\n this.completer.onSelected(initialItem, false);\n }\n });\n } else if (!this._dataService) {\n this._initialValue = value;\n }\n }\n\n public search(term: string) {\n if (\n !isNil(term) &&\n term.length >= this.ctrListMinSearchLength &&\n this.term !== term\n ) {\n if (this.searchTimer) {\n this.searchTimer.unsubscribe();\n this.searchTimer = null;\n }\n if (!this.ctx.searching) {\n if (this.ctrListDisplaySearching) {\n this.ctx.results = [];\n }\n this.ctx.searching = true;\n this.ctx.searchInitialized = true;\n this.refreshTemplate();\n }\n if (this.clearTimer) {\n this.clearTimer.unsubscribe();\n }\n this.searchTimer = timer(this.ctrListPause)\n .pipe(take(1))\n .subscribe(() => {\n this.searchTimerComplete(term);\n });\n } else if (!isNil(term) && term.length < this.ctrListMinSearchLength) {\n this.clear();\n this.term = \"\";\n }\n }\n\n public clear() {\n if (this.searchTimer) {\n this.searchTimer.unsubscribe();\n }\n this.clearTimer = timer(CLEAR_TIMEOUT)\n .pipe(take(1))\n .subscribe(() => {\n this._clear();\n });\n }\n\n public open() {\n if (!this.ctx.searchInitialized) {\n this.search(\"\");\n }\n this.refreshTemplate();\n }\n\n public isOpen(open: boolean) {\n this.ctx.isOpen = open;\n }\n\n private _clear() {\n if (this.searchTimer) {\n this.searchTimer.unsubscribe();\n this.searchTimer = null;\n }\n if (this.dataService) {\n this.dataService.cancel();\n }\n\n this.viewContainer.clear();\n this.viewRef = null;\n }\n\n private searchTimerComplete(term: string) {\n // Begin the search\n if (isNil(term) || term.length < this.ctrListMinSearchLength) {\n this.ctx.searching = false;\n return;\n }\n this.term = term;\n\n if (this._dataService) {\n this._dataService.search(term);\n }\n }\n\n private refreshTemplate() {\n // create the template if it doesn't exist\n if (!this.viewRef) {\n this.viewRef = this.viewContainer.createEmbeddedView(\n this.templateRef,\n this.ctx\n );\n } else if (!this.viewRef.destroyed) {\n // refresh the template\n this.viewRef!.context.isOpen = this.ctx.isOpen;\n this.viewRef!.context.results = this.ctx.results;\n this.viewRef!.context.searching = this.ctx.searching;\n this.viewRef!.context.searchInitialized = this.ctx.searchInitialized;\n this.viewRef.detectChanges();\n }\n this.cd.markForCheck();\n }\n\n private getBestMatchIndex() {\n if (!this.ctx.results || !this.term) {\n return null;\n }\n\n // First try to find the exact term\n let bestMatch = this.ctx.results.findIndex(\n (item) => item.title.toLowerCase() === this.term!.toLocaleLowerCase()\n );\n // If not try to find the first item that starts with the term\n if (bestMatch < 0) {\n bestMatch = this.ctx.results.findIndex((item) =>\n item.title.toLowerCase().startsWith(this.term!.toLocaleLowerCase())\n );\n }\n // If not try to find the first item that includes the term\n if (bestMatch < 0) {\n bestMatch = this.ctx.results.findIndex((item) =>\n item.title.toLowerCase().includes(this.term!.toLocaleLowerCase())\n );\n }\n\n return bestMatch < 0 ? null : bestMatch;\n }\n\n private dataServiceSubscribe() {\n if (this._dataService) {\n this._dataService.subscribe(\n (results) => {\n this.ctx.searchInitialized = true;\n this.ctx.searching = false;\n this.ctx.results = results;\n\n if (\n this.ctrListAutoMatch &&\n results &&\n results.length === 1 &&\n results[0].title &&\n !isNil(this.term) &&\n results[0].title.toLocaleLowerCase() ===\n this.term!.toLocaleLowerCase()\n ) {\n // Do automatch\n this.completer.onSelected(results[0]);\n return;\n }\n\n this.refreshTemplate();\n\n if (this.ctrListAutoHighlight) {\n this.completer.autoHighlightIndex = this.getBestMatchIndex();\n }\n },\n (error: any) => {\n // tslint:disable-next-line:no-console\n console.error(error);\n // tslint:disable-next-line:no-console\n console.error(\n \"Unexpected error in dataService: errors should be handled by the dataService Observable\"\n );\n return [];\n }\n );\n\n if (this._dataService.dataSourceChange) {\n this._dataService.dataSourceChange.subscribe(() => {\n this.term = null;\n this.ctx.searchInitialized = false;\n this.ctx.searching = false;\n this.ctx.results = [];\n this.refreshTemplate();\n this.completer.onDataSourceChange();\n });\n }\n }\n }\n}\n","import { Directive, ElementRef, Host, HostListener, Input, Renderer2, OnDestroy } from \"@angular/core\";\n\nimport { CompleterItem } from \"../components/completer-item\";\nimport { CtrDropdown, CtrRowElement, CtrRowItem } from \"./ctr-dropdown\";\n\n@Directive({\n selector: \"[ctrRow]\",\n})\nexport class CtrRow implements CtrRowElement, OnDestroy {\n\n private selected = false;\n private _rowIndex: number = 0;\n private _item: CompleterItem | null = null;\n\n constructor(private el: ElementRef, private renderer: Renderer2, @Host() private dropdown: CtrDropdown) { }\n\n public ngOnDestroy() {\n if (this._rowIndex) {\n this.dropdown.unregisterRow(this._rowIndex);\n }\n }\n\n @Input()\n set ctrRow(index: number) {\n this._rowIndex = index;\n this.dropdown.registerRow(new CtrRowItem(this, this._rowIndex));\n }\n\n @Input()\n set dataItem(item: CompleterItem) {\n this._item = item;\n }\n\n @HostListener(\"click\", [\"$event\"]) public onClick(event: any) {\n this.dropdown.onSelected(this._item);\n }\n\n @HostListener(\"mouseenter\", [\"$event\"]) public onMouseEnter(event: any) {\n this.dropdown.highlightRow(this._rowIndex);\n }\n\n @HostListener(\"mousedown\", [\"$event\"]) public onMouseDown(event: any) {\n this.dropdown.rowMouseDown();\n }\n\n public setHighlighted(selected: boolean) {\n this.selected = selected;\n if (this.selected) {\n this.renderer.addClass(this.el.nativeElement, \"completer-selected-row\");\n } else {\n this.renderer.removeClass(this.el.nativeElement, \"completer-selected-row\");\n }\n }\n\n public getNativeElement() {\n return this.el.nativeElement;\n }\n\n public getDataItem() {\n return this._item;\n }\n}\n","\"use strict\";\nimport { Component, Input, OnInit } from \"@angular/core\";\n\nexport interface MatchPart {\n isMatch: boolean;\n text: string;\n}\n\n@Component({\n selector: \"completer-list-item\",\n template: `\n {{part.text}}\n `\n})\nexport class CompleterListItemCmp implements OnInit {\n @Input()\n public text: string = \"\";\n @Input()\n public searchStr: string = \"\";\n @Input()\n public matchClass: string = \"\";\n @Input()\n public type: string = \"\";\n\n public parts: MatchPart[] = [];\n public ngOnInit() {\n if (!this.searchStr) {\n this.parts.push({ isMatch: false, text: this.text });\n return;\n }\n const matchStr = this.text.toLowerCase();\n let matchPos = matchStr.indexOf(this.searchStr.toLowerCase());\n let startIndex = 0;\n while (matchPos >= 0) {\n const matchText = this.text.slice(matchPos, matchPos + this.searchStr.length);\n if (matchPos === 0) {\n this.parts.push({ isMatch: true, text: matchText });\n startIndex += this.searchStr.length;\n } else if (matchPos > 0) {\n const matchPart = this.text.slice(startIndex, matchPos);\n this.parts.push({ isMatch: false, text: matchPart });\n this.parts.push({ isMatch: true, text: matchText });\n startIndex += this.searchStr.length + matchPart.length;\n }\n matchPos = matchStr.indexOf(this.searchStr.toLowerCase(), startIndex);\n }\n if (startIndex < this.text.length) {\n this.parts.push({ isMatch: false, text: this.text.slice(startIndex, this.text.length) });\n }\n }\n}","\"use strict\";\nimport { AfterViewChecked, ChangeDetectorRef, Component, Input, Output, EventEmitter, OnInit, ViewChild, forwardRef, AfterViewInit, ElementRef } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { CtrCompleter } from \"../directives/ctr-completer\";\nimport { CompleterData } from \"../services/completer-data\";\nimport { CompleterService } from \"../services/completer-service\";\nimport { CompleterItem } from \"./completer-item\";\nimport { MAX_CHARS, MIN_SEARCH_LENGTH, PAUSE, TEXT_SEARCHING, TEXT_NO_RESULTS, isNil } from \"../globals\";\n\n\nconst noop = () => {\n return;\n};\n\nconst COMPLETER_CONTROL_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CompleterCmp),\n};\n\n\n@Component({\n selector: \"ng2-completer\",\n template: `\n
\n 0 ? inputId : null\" type=\"search\"\n class=\"completer-input\" ctrInput [ngClass]=\"inputClass\"\n [(ngModel)]=\"searchStr\" (ngModelChange)=\"onChange($event)\"\n [attr.name]=\"inputName\" [placeholder]=\"placeholder\"\n [attr.maxlength]=\"maxChars\" [tabindex]=\"fieldTabindex\" [disabled]=\"disableInput\"\n [clearSelected]=\"clearSelected\" [clearUnselected]=\"clearUnselected\"\n [overrideSuggested]=\"overrideSuggested\" [openOnFocus]=\"openOnFocus\" [fillHighlighted]=\"fillHighlighted\"\n [openOnClick]=\"openOnClick\" [selectOnClick]=\"selectOnClick\" [selectOnFocus]=\"selectOnFocus\"\n (blur)=\"onBlur()\" (focus)=\"onFocus()\" (keyup)=\"onKeyup($event)\"\n (keydown)=\"onKeydown($event)\" (click)=\"onClick($event)\"\n autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" />\n\n
\n
0|| (displayNoResults && !searchActive)) || (searchActive && displaySearching))\">\n
{{ _textSearching }}
\n
{{ _textNoResults }}
\n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n `,\n styles: [`\n .completer-dropdown {\n border-color: #ececec;\n border-width: 1px;\n border-style: solid;\n border-radius: 2px;\n width: 250px;\n padding: 6px;\n cursor: pointer;\n z-index: 9999;\n position: absolute;\n margin-top: -6px;\n background-color: #ffffff;\n }\n\n .completer-row {\n padding: 5px;\n color: #000000;\n margin-bottom: 4px;\n clear: both;\n display: inline-block;\n width: 103%;\n }\n\n .completer-selected-row {\n background-color: lightblue;\n color: #ffffff;\n }\n\n .completer-description {\n font-size: 14px;\n }\n\n .completer-image-default {\n width: 16px;\n height: 16px;\n background-image: url(\"demo/res/img/default.png\");\n }\n\n .completer-image-holder {\n float: left;\n width: 10%;\n }\n .completer-item-text-image {\n float: right;\n width: 90%;\n }\n `],\n providers: [COMPLETER_CONTROL_VALUE_ACCESSOR]\n})\nexport class CompleterCmp implements ControlValueAccessor, AfterViewChecked, AfterViewInit {\n @Input() public dataService: CompleterData | undefined;\n @Input() public inputName = \"\";\n @Input() public inputId: string = \"\";\n @Input() public pause = PAUSE;\n @Input() public minSearchLength = MIN_SEARCH_LENGTH;\n @Input() public maxChars = MAX_CHARS;\n @Input() public overrideSuggested = false;\n @Input() public clearSelected = false;\n @Input() public clearUnselected = false;\n @Input() public fillHighlighted = true;\n @Input() public placeholder = \"\";\n @Input() public matchClass: string | undefined;\n @Input() public fieldTabindex: number | undefined;\n @Input() public autoMatch = false;\n @Input() public disableInput = false;\n @Input() public inputClass: string | undefined;\n @Input() public autofocus = false;\n @Input() public openOnFocus = false;\n @Input() public openOnClick = false;\n @Input() public selectOnClick = false;\n @Input() public selectOnFocus = false;\n @Input() public initialValue: any;\n @Input() public autoHighlight = false;\n\n @Output() public selected = new EventEmitter();\n @Output() public highlighted = new EventEmitter();\n @Output(\"blur\") public blurEvent = new EventEmitter();\n @Output() public click = new EventEmitter();\n @Output(\"focus\") public focusEvent = new EventEmitter();\n @Output() public opened = new EventEmitter();\n @Output() public keyup: EventEmitter = new EventEmitter();\n @Output() public keydown: EventEmitter = new EventEmitter();\n\n @ViewChild(CtrCompleter, { static: false }) public completer: CtrCompleter | undefined;\n @ViewChild(\"ctrInput\", { static: false }) public ctrInput: ElementRef | undefined;\n\n public control = new FormControl(\"\");\n public displaySearching = true;\n public displayNoResults = true;\n public _textNoResults = TEXT_NO_RESULTS;\n public _textSearching = TEXT_SEARCHING;\n\n private _onTouchedCallback: () => void = noop;\n private _onChangeCallback: (_: any) => void = noop;\n private _focus: boolean = false;\n private _open: boolean = false;\n private _searchStr = \"\";\n\n constructor(private completerService: CompleterService, private cdr: ChangeDetectorRef) { }\n\n public get value(): any { return this.searchStr; };\n\n public set value(v: any) {\n if (v !== this.searchStr) {\n this.searchStr = v;\n }\n // Propagate the change in any case\n this._onChangeCallback(v);\n }\n\n public get searchStr() {\n return this._searchStr;\n }\n\n public set searchStr(value: string) {\n if (typeof value === \"string\" || isNil(value)) {\n this._searchStr = value;\n } else {\n this._searchStr = JSON.stringify(value);\n }\n }\n\n public ngAfterViewInit() {\n if (this.autofocus) {\n this._focus = true;\n }\n \n if (!this.completer) {\n return;\n }\n\n this.completer.selected.subscribe((item: CompleterItem) => {\n this.selected.emit(item);\n });\n this.completer.highlighted.subscribe((item: CompleterItem) => {\n this.highlighted.emit(item);\n });\n this.completer.opened.subscribe((isOpen: boolean) => {\n this._open = isOpen;\n this.opened.emit(isOpen);\n });\n }\n\n public ngAfterViewChecked(): void {\n if (this._focus) {\n setTimeout(\n () => {\n if (!!this.ctrInput) {\n this.ctrInput.nativeElement.focus();\n this._focus = false;\n }\n },\n 0\n );\n }\n }\n\n public onTouched() {\n this._onTouchedCallback();\n }\n\n public writeValue(value: any) {\n this.searchStr = value;\n }\n\n public registerOnChange(fn: any) {\n this._onChangeCallback = fn;\n }\n\n public registerOnTouched(fn: any) {\n this._onTouchedCallback = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disableInput = isDisabled;\n }\n\n @Input()\n public set datasource(source: CompleterData | string | any[]) {\n if (source) {\n if (source instanceof Array) {\n this.dataService = this.completerService.local(source);\n } else if (typeof (source) === \"string\") {\n this.dataService = this.completerService.remote(source);\n } else {\n this.dataService = source as CompleterData;\n }\n }\n }\n\n @Input()\n public set textNoResults(text: string) {\n if (this._textNoResults !== text) {\n this._textNoResults = text;\n this.displayNoResults = !!this._textNoResults && this._textNoResults !== \"false\";\n }\n }\n\n @Input()\n public set textSearching(text: string) {\n if (this._textSearching !== text) {\n this._textSearching = text;\n this.displaySearching = !!this._textSearching && this._textSearching !== \"false\";\n }\n }\n\n public onBlur() {\n this.blurEvent.emit();\n this.onTouched();\n this.cdr.detectChanges();\n }\n\n public onFocus() {\n this.focusEvent.emit();\n this.onTouched();\n }\n\n public onClick(event: any) {\n this.click.emit(event);\n this.onTouched();\n }\n\n public onKeyup(event: any) {\n this.keyup.emit(event);\n event.stopPropagation();\n }\n\n public onKeydown(event: any) {\n this.keydown.emit(event);\n event.stopPropagation();\n }\n\n public onChange(value: string) {\n this.value = value;\n }\n\n public open() {\n if (!this.completer) {\n return;\n }\n\n this.completer.open();\n }\n\n public close() {\n if (!this.completer) {\n return;\n }\n\n this.completer.clear();\n }\n\n public focus(): void {\n if (this.ctrInput) {\n this.ctrInput.nativeElement.focus();\n } else {\n this._focus = true;\n }\n }\n\n public blur(): void {\n if (this.ctrInput) {\n this.ctrInput.nativeElement.blur();\n } else {\n this._focus = false;\n }\n }\n\n public isOpen() {\n return this._open;\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { CompleterCmp } from \"../components/completer-cmp\";\nimport { CompleterListItemCmp } from \"../components/completer-list-item-cmp\";\nimport { LocalDataFactory } from \"../services/local-data-factory\";\nimport { RemoteDataFactory } from \"../services/remote-data-factory\";\nimport { CompleterService } from \"../services/completer-service\";\n\nimport { CtrCompleter } from \"../directives/ctr-completer\";\nimport { CtrDropdown } from \"../directives/ctr-dropdown\";\nimport { CtrInput } from \"../directives/ctr-input\";\nimport { CtrList } from \"../directives/ctr-list\";\nimport { CtrRow } from \"../directives/ctr-row\";\n\nconst providers = [\n CompleterService,\n LocalDataFactory,\n RemoteDataFactory\n];\n\n@NgModule({\n declarations: [\n CompleterListItemCmp,\n CtrCompleter,\n CtrDropdown,\n CtrInput,\n CtrList,\n CtrRow,\n CompleterCmp\n ],\n exports: [\n CompleterListItemCmp,\n CtrCompleter,\n CtrDropdown,\n CtrInput,\n CtrList,\n CtrRow,\n CompleterCmp\n ],\n imports: [\n CommonModule,\n FormsModule\n ],\n providers\n})\nexport class Ng2CompleterModule {\n\n public static forRoot(): ModuleWithProviders {\n return {\n ngModule: Ng2CompleterModule,\n providers\n };\n }\n\n public static forChild(): ModuleWithProviders {\n return {\n ngModule: Ng2CompleterModule,\n providers\n };\n }\n}\n","import { cloneDeep } from 'lodash';\n\n/**\n * Extending object that entered in first argument.\n *\n * Returns extended object or false if have no target object or incorrect type.\n *\n * If you wish to clone source object (without modify it), just use empty new\n * object as first argument, like this:\n * deepExtend({}, yourObj_1, [yourObj_N]);\n */\nexport const deepExtend = function(...objects: Array): any {\n if (arguments.length < 1 || typeof arguments[0] !== 'object') {\n return false;\n }\n\n if (arguments.length < 2) {\n return arguments[0];\n }\n\n const target = arguments[0];\n\n // convert arguments to array and cut off target object\n const args = Array.prototype.slice.call(arguments, 1);\n\n let val, src;\n\n args.forEach((obj: any) => {\n // skip argument if it is array or isn't object\n if (typeof obj !== 'object' || Array.isArray(obj)) {\n return;\n }\n\n Object.keys(obj).forEach(function (key) {\n src = target[key]; // source value\n val = obj[key]; // new value\n\n // recursion prevention\n if (val === target) {\n return;\n\n /**\n * if new value isn't object then just overwrite by new value\n * instead of extending.\n */\n } else if (typeof val !== 'object' || val === null) {\n target[key] = val;\n return;\n\n // just clone arrays (and recursive clone objects inside)\n } else if (Array.isArray(val)) {\n target[key] = cloneDeep(val);\n return;\n\n // overwrite by new value if source isn't object or array\n } else if (typeof src !== 'object' || src === null || Array.isArray(src)) {\n target[key] = deepExtend({}, val);\n return;\n\n // source value and new value is objects both, extending...\n } else {\n target[key] = deepExtend(src, val);\n return;\n }\n });\n });\n\n return target;\n};\n\nexport class Deferred {\n\n promise: Promise;\n\n resolve: any;\n reject: any;\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\n// getDeepFromObject({result: {data: 1}}, 'result.data', 2); // returns 1\nexport function getDeepFromObject(object = {}, name: string, defaultValue?: any) {\n const keys = name.split('.');\n // clone the object\n let level = deepExtend({}, object);\n keys.forEach((k) => {\n if (level && typeof level[k] !== 'undefined') {\n level = level[k];\n }\n });\n\n return typeof level === 'undefined' ? defaultValue : level;\n}\n\nexport function getPageForRowIndex(index: number, perPage: number): number {\n // we need to add 1 to convert 0-based index to 1-based page number.\n return Math.floor(index / perPage) + 1;\n}\n","import { Column } from './column';\nimport { DataSet } from './data-set';\nimport { Row } from './row';\n\nexport function prepareValue (value: any) { return value }\n\nexport class Cell {\n\n newValue: any = '';\n protected static PREPARE = prepareValue;\n\n constructor(protected value: any, protected row: Row, protected column: any, protected dataSet: DataSet) {\n this.newValue = value;\n }\n\n getColumn(): Column {\n return this.column;\n }\n\n getRow(): Row {\n return this.row;\n }\n\n getValue(): any {\n const valid = this.column.getValuePrepareFunction() instanceof Function;\n const prepare = valid ? this.column.getValuePrepareFunction() : Cell.PREPARE;\n return prepare.call(null, this.value, this.row.getData(), this);\n }\n\n setValue(value: any): any {\n this.newValue = value;\n }\n\n getId(): string {\n return this.getColumn().id;\n }\n\n getTitle(): string {\n return this.getColumn().title;\n }\n\n isEditable(): boolean {\n if (this.getRow().index === -1) {\n return this.getColumn().isAddable;\n }\n else {\n return this.getColumn().isEditable;\n }\n }\n\n}\n","import { Cell } from './cell';\nimport { Column } from './column';\nimport { DataSet } from './data-set';\n\nexport class Row {\n\n isSelected: boolean = false;\n isInEditing: boolean = false;\n cells: Array = [];\n\n\n constructor(public index: number, protected data: any, protected _dataSet: DataSet) {\n this.process();\n }\n\n getCell(column: Column): Cell {\n return this.cells.find(el => el.getColumn() === column);\n }\n\n getCells() {\n return this.cells;\n }\n\n getData(): any {\n return this.data;\n }\n\n getIsSelected(): boolean {\n return this.isSelected;\n }\n\n getNewData(): any {\n const values = Object.assign({}, this.data);\n this.getCells().forEach((cell) => values[cell.getColumn().id] = cell.newValue);\n return values;\n }\n\n setData(data: any): any {\n this.data = data;\n this.process();\n }\n\n process() {\n this.cells = [];\n this._dataSet.getColumns().forEach((column: Column) => {\n const cell = this.createCell(column);\n this.cells.push(cell);\n });\n }\n\n createCell(column: Column): Cell {\n const defValue = (column as any).settings.defaultValue ? (column as any).settings.defaultValue : '';\n const value = typeof this.data[column.id] === 'undefined' ? defValue : this.data[column.id];\n return new Cell(value, this, column, this._dataSet);\n }\n}\n","import { DataSet } from './data-set';\n\nexport class Column {\n\n title: string = '';\n type: string = '';\n class: string = '';\n width: string = '';\n hide: boolean = false;\n isSortable: boolean = false;\n isEditable: boolean = true;\n isAddable: boolean = true;\n isFilterable: boolean = false;\n sortDirection: string = '';\n defaultSortDirection: string = '';\n editor: { type: string, config: any, component: any } = { type: '', config: {}, component: null };\n filter: { type: string, config: any, component: any } = { type: '', config: {}, component: null };\n renderComponent: any = null;\n compareFunction: Function;\n valuePrepareFunction: Function;\n filterFunction: Function;\n onComponentInitFunction: Function;\n\n constructor(public id: string, protected settings: any, protected dataSet: DataSet) {\n this.process();\n }\n\n getOnComponentInitFunction(): Function {\n return this.onComponentInitFunction;\n }\n\n getCompareFunction(): Function {\n return this.compareFunction;\n }\n\n getValuePrepareFunction(): Function {\n return this.valuePrepareFunction;\n }\n\n getFilterFunction(): Function {\n return this.filterFunction;\n }\n\n getConfig(): any {\n return this.editor && this.editor.config;\n }\n\n getFilterType(): any {\n return this.filter && this.filter.type;\n }\n\n getFilterConfig(): any {\n return this.filter && this.filter.config;\n }\n\n protected process() {\n this.title = this.settings['title'];\n this.class = this.settings['class'];\n this.width = this.settings['width'];\n this.hide = !!this.settings['hide'];\n this.type = this.prepareType();\n this.editor = this.settings['editor'];\n this.filter = this.settings['filter'];\n this.renderComponent = this.settings['renderComponent'];\n\n this.isFilterable = typeof this.settings['filter'] === 'undefined' ? true : !!this.settings['filter'];\n this.defaultSortDirection = ['asc', 'desc']\n .indexOf(this.settings['sortDirection']) !== -1 ? this.settings['sortDirection'] : '';\n this.isSortable = typeof this.settings['sort'] === 'undefined' ? true : !!this.settings['sort'];\n this.isEditable = typeof this.settings['editable'] === 'undefined' ? true : !!this.settings['editable'];\n this.isAddable=typeof this.settings['addable'] === 'undefined' ? true : !!this.settings['addable'];\n this.sortDirection = this.prepareSortDirection();\n\n this.compareFunction = this.settings['compareFunction'];\n this.valuePrepareFunction = this.settings['valuePrepareFunction'];\n this.filterFunction = this.settings['filterFunction'];\n this.onComponentInitFunction = this.settings['onComponentInitFunction'];\n }\n\n prepareType(): string {\n return this.settings['type'] || this.determineType();\n }\n\n prepareSortDirection(): string {\n return this.settings['sort'] === 'desc' ? 'desc' : 'asc';\n }\n\n determineType(): string {\n // TODO: determine type by data\n return 'text';\n }\n}\n","import { Row } from './row';\nimport { Column } from './column';\n\nexport class DataSet {\n\n newRow: Row;\n\n protected data: Array = [];\n protected columns: Array = [];\n protected rows: Array = [];\n protected selectedRow: Row;\n protected willSelect: string;\n\n constructor(data: Array = [], protected columnSettings: Object) {\n this.createColumns(columnSettings);\n this.setData(data);\n\n this.createNewRow();\n }\n\n setData(data: Array) {\n this.data = data;\n this.createRows();\n }\n\n getColumns(): Array {\n return this.columns;\n }\n\n getRows(): Array {\n return this.rows;\n }\n\n getFirstRow(): Row {\n return this.rows[0];\n }\n\n getLastRow(): Row {\n return this.rows[this.rows.length - 1];\n }\n\n findRowByData(data: any): Row {\n return this.rows.find((row: Row) => row.getData() === data);\n }\n\n deselectAll() {\n this.rows.forEach((row) => {\n row.isSelected = false;\n });\n // we need to clear selectedRow field because no one row selected\n this.selectedRow = undefined;\n }\n\n selectRow(row: Row): Row | undefined {\n const previousIsSelected = row.isSelected;\n this.deselectAll();\n\n row.isSelected = !previousIsSelected;\n this.selectedRow = row;\n\n return this.selectedRow;\n }\n\n multipleSelectRow(row: Row): Row {\n row.isSelected = !row.isSelected;\n this.selectedRow = row;\n\n return this.selectedRow;\n }\n\n selectPreviousRow(): Row {\n if (this.rows.length > 0) {\n let index = this.selectedRow ? this.selectedRow.index : 0;\n if (index > this.rows.length - 1) {\n index = this.rows.length - 1;\n }\n this.selectRow(this.rows[index]);\n return this.selectedRow;\n }\n }\n\n selectFirstRow(): Row | undefined {\n if (this.rows.length > 0) {\n this.selectRow(this.rows[0]);\n return this.selectedRow;\n }\n }\n\n selectLastRow(): Row | undefined {\n if (this.rows.length > 0) {\n this.selectRow(this.rows[this.rows.length - 1]);\n return this.selectedRow;\n }\n }\n\n selectRowByIndex(index: number): Row | undefined {\n const rowsLength: number = this.rows.length;\n if (rowsLength === 0) {\n return;\n }\n if (!index) {\n this.selectFirstRow();\n return this.selectedRow;\n }\n if (index > 0 && index < rowsLength) {\n this.selectRow(this.rows[index]);\n return this.selectedRow;\n }\n // we need to deselect all rows if we got an incorrect index\n this.deselectAll();\n }\n\n willSelectFirstRow() {\n this.willSelect = 'first';\n }\n\n willSelectLastRow() {\n this.willSelect = 'last';\n }\n\n select(selectedRowIndex?: number): Row | undefined {\n if (this.getRows().length === 0) {\n return;\n }\n if (this.willSelect) {\n if (this.willSelect === 'first') {\n this.selectFirstRow();\n }\n if (this.willSelect === 'last') {\n this.selectLastRow();\n }\n this.willSelect = '';\n } else {\n this.selectRowByIndex(selectedRowIndex);\n }\n\n return this.selectedRow;\n }\n\n createNewRow() {\n this.newRow = new Row(-1, {}, this);\n this.newRow.isInEditing = true;\n }\n\n /**\n * Create columns by mapping from the settings\n * @param settings\n * @private\n */\n createColumns(settings: any) {\n for (const id in settings) {\n if (settings.hasOwnProperty(id)) {\n this.columns.push(new Column(id, settings[id], this));\n }\n }\n }\n\n /**\n * Create rows based on current data prepared in data source\n * @private\n */\n createRows() {\n this.rows = [];\n this.data.forEach((el, index) => {\n this.rows.push(new Row(index, el, this));\n });\n }\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { Observable } from 'rxjs';\nimport { EventEmitter } from '@angular/core';\n\nimport { Deferred, getDeepFromObject, getPageForRowIndex } from './helpers';\nimport { Column } from './data-set/column';\nimport { Row } from './data-set/row';\nimport { DataSet } from './data-set/data-set';\nimport { DataSource } from './data-source/data-source';\n\nexport class Grid {\n\n createFormShown: boolean = false;\n\n source: DataSource;\n settings: any;\n dataSet: DataSet;\n\n onSelectRowSource = new Subject();\n onDeselectRowSource = new Subject();\n\n private sourceOnChangedSubscription: Subscription;\n private sourceOnUpdatedSubscription: Subscription;\n\n constructor(source: DataSource, settings: any) {\n this.setSettings(settings);\n this.setSource(source);\n }\n\n detach(): void {\n if (this.sourceOnChangedSubscription) {\n this.sourceOnChangedSubscription.unsubscribe();\n }\n if (this.sourceOnUpdatedSubscription) {\n this.sourceOnUpdatedSubscription.unsubscribe();\n }\n }\n\n showActionColumn(position: string): boolean {\n return this.isCurrentActionsPosition(position) && this.isActionsVisible();\n }\n\n isCurrentActionsPosition(position: string): boolean {\n return position == this.getSetting('actions.position');\n }\n\n isActionsVisible(): boolean {\n return this.getSetting('actions.add') || this.getSetting('actions.edit') || this.getSetting('actions.delete') || this.getSetting('actions.custom').length;\n }\n\n isMultiSelectVisible(): boolean {\n return this.getSetting('selectMode') === 'multi';\n }\n\n getNewRow(): Row {\n return this.dataSet.newRow;\n }\n\n setSettings(settings: Object) {\n this.settings = settings;\n this.dataSet = new DataSet([], this.getSetting('columns'));\n\n if (this.source) {\n this.source.refresh();\n }\n }\n\n getDataSet(): DataSet {\n return this.dataSet;\n }\n\n setSource(source: DataSource) {\n this.source = this.prepareSource(source);\n this.detach();\n\n this.sourceOnChangedSubscription = this.source.onChanged().subscribe((changes: any) => this.processDataChange(changes));\n\n this.sourceOnUpdatedSubscription = this.source.onUpdated().subscribe((data: any) => {\n const changedRow = this.dataSet.findRowByData(data);\n changedRow.setData(data);\n });\n }\n\n getSetting(name: string, defaultValue?: any): any {\n return getDeepFromObject(this.settings, name, defaultValue);\n }\n\n getColumns(): Array {\n return this.dataSet.getColumns();\n }\n\n getRows(): Array {\n return this.dataSet.getRows();\n }\n\n selectRow(row: Row) {\n this.dataSet.selectRow(row);\n }\n\n multipleSelectRow(row: Row) {\n this.dataSet.multipleSelectRow(row);\n }\n\n onSelectRow(): Observable {\n return this.onSelectRowSource.asObservable();\n }\n\n onDeselectRow(): Observable {\n return this.onDeselectRowSource.asObservable();\n }\n\n edit(row: Row) {\n row.isInEditing = true;\n }\n\n create(row: Row, confirmEmitter: EventEmitter) {\n\n const deferred = new Deferred();\n deferred.promise.then((newData) => {\n newData = newData ? newData : row.getNewData();\n if (deferred.resolve.skipAdd) {\n this.createFormShown = false;\n } else {\n this.source.prepend(newData).then(() => {\n this.createFormShown = false;\n this.dataSet.createNewRow();\n });\n }\n }).catch((err) => {\n // doing nothing\n });\n\n if (this.getSetting('add.confirmCreate')) {\n confirmEmitter.emit({\n newData: row.getNewData(),\n source: this.source,\n confirm: deferred,\n });\n } else {\n deferred.resolve();\n }\n }\n\n save(row: Row, confirmEmitter: EventEmitter) {\n\n const deferred = new Deferred();\n deferred.promise.then((newData) => {\n newData = newData ? newData : row.getNewData();\n if (deferred.resolve.skipEdit) {\n row.isInEditing = false;\n } else {\n this.source.update(row.getData(), newData).then(() => {\n row.isInEditing = false;\n });\n }\n }).catch((err) => {\n // doing nothing\n });\n\n if (this.getSetting('edit.confirmSave')) {\n confirmEmitter.emit({\n data: row.getData(),\n newData: row.getNewData(),\n source: this.source,\n confirm: deferred,\n });\n } else {\n deferred.resolve();\n }\n }\n\n delete(row: Row, confirmEmitter: EventEmitter) {\n\n const deferred = new Deferred();\n deferred.promise.then(() => {\n this.source.remove(row.getData());\n }).catch((err) => {\n // doing nothing\n });\n\n if (this.getSetting('delete.confirmDelete')) {\n confirmEmitter.emit({\n data: row.getData(),\n source: this.source,\n confirm: deferred,\n });\n } else {\n deferred.resolve();\n }\n }\n\n processDataChange(changes: any) {\n if (this.shouldProcessChange(changes)) {\n this.dataSet.setData(changes['elements']);\n if (this.getSetting('selectMode') !== 'multi') {\n const row = this.determineRowToSelect(changes);\n\n if (row) {\n this.onSelectRowSource.next(row);\n } else {\n this.onDeselectRowSource.next(null);\n }\n }\n }\n }\n\n shouldProcessChange(changes: any): boolean {\n if (['filter', 'sort', 'page', 'remove', 'refresh', 'load', 'paging'].indexOf(changes['action']) !== -1) {\n return true;\n } else if (['prepend', 'append'].indexOf(changes['action']) !== -1 && !this.getSetting('pager.display')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * @breaking-change 1.8.0\n * Need to add `| null` in return type\n *\n * TODO: move to selectable? Separate directive\n */\n determineRowToSelect(changes: any): Row {\n\n if (['load', 'page', 'filter', 'sort', 'refresh'].indexOf(changes['action']) !== -1) {\n return this.dataSet.select(this.getRowIndexToSelect());\n }\n\n if (this.shouldSkipSelection()) {\n return null;\n }\n\n if (changes['action'] === 'remove') {\n if (changes['elements'].length === 0) {\n // we have to store which one to select as the data will be reloaded\n this.dataSet.willSelectLastRow();\n } else {\n return this.dataSet.selectPreviousRow();\n }\n }\n if (changes['action'] === 'append') {\n // we have to store which one to select as the data will be reloaded\n this.dataSet.willSelectLastRow();\n }\n if (changes['action'] === 'add') {\n return this.dataSet.selectFirstRow();\n }\n if (changes['action'] === 'update') {\n return this.dataSet.selectFirstRow();\n }\n if (changes['action'] === 'prepend') {\n // we have to store which one to select as the data will be reloaded\n this.dataSet.willSelectFirstRow();\n }\n return null;\n }\n\n prepareSource(source: any): DataSource {\n const initialSource: any = this.getInitialSort();\n if (initialSource && initialSource['field'] && initialSource['direction']) {\n source.setSort([initialSource], false);\n }\n if (this.getSetting('pager.display') === true) {\n source.setPaging(this.getPageToSelect(source), this.getSetting('pager.perPage'), false);\n }\n\n source.refresh();\n return source;\n }\n\n getInitialSort() {\n const sortConf: any = {};\n this.getColumns().forEach((column: Column) => {\n if (column.isSortable && column.defaultSortDirection) {\n sortConf['field'] = column.id;\n sortConf['direction'] = column.defaultSortDirection;\n sortConf['compare'] = column.getCompareFunction();\n }\n });\n return sortConf;\n }\n\n getSelectedRows(): Array {\n return this.dataSet.getRows()\n .filter(r => r.isSelected);\n }\n\n selectAllRows(status: any) {\n this.dataSet.getRows()\n .forEach(r => r.isSelected = status);\n }\n\n getFirstRow(): Row {\n return this.dataSet.getFirstRow();\n }\n\n getLastRow(): Row {\n return this.dataSet.getLastRow();\n }\n\n private getSelectionInfo(): { perPage: number, page: number, selectedRowIndex: number, switchPageToSelectedRowPage: boolean } {\n const switchPageToSelectedRowPage: boolean = this.getSetting('switchPageToSelectedRowPage');\n const selectedRowIndex: number = Number(this.getSetting('selectedRowIndex', 0)) || 0;\n const { perPage, page }: { perPage: number, page: number } = this.getSetting('pager');\n return { perPage, page, selectedRowIndex, switchPageToSelectedRowPage };\n }\n\n private getRowIndexToSelect(): number {\n const { switchPageToSelectedRowPage, selectedRowIndex, perPage } = this.getSelectionInfo();\n const dataAmount: number = this.source.count();\n /**\n * source - contains all table data\n * dataSet - contains data for current page\n * selectedRowIndex - contains index for data in all data\n *\n * because of that, we need to count index for a specific row in page\n * if\n * `switchPageToSelectedRowPage` - we need to change page automatically\n * `selectedRowIndex < dataAmount && selectedRowIndex >= 0` - index points to existing data\n * (if index points to non-existing data and we calculate index for current page - we will get wrong selected row.\n * if we return index witch not points to existing data - no line will be highlighted)\n */\n return (\n switchPageToSelectedRowPage &&\n selectedRowIndex < dataAmount &&\n selectedRowIndex >= 0\n ) ?\n selectedRowIndex % perPage :\n selectedRowIndex;\n }\n\n private getPageToSelect(source: DataSource): number {\n const { switchPageToSelectedRowPage, selectedRowIndex, perPage, page } = this.getSelectionInfo();\n let pageToSelect: number = Math.max(1, page);\n if (switchPageToSelectedRowPage && selectedRowIndex >= 0) {\n pageToSelect = getPageForRowIndex(selectedRowIndex, perPage);\n }\n const maxPageAmount: number = Math.ceil(source.count() / perPage);\n return maxPageAmount ? Math.min(pageToSelect, maxPageAmount) : pageToSelect;\n }\n\n private shouldSkipSelection(): boolean {\n /**\n * For backward compatibility when using `selectedRowIndex` with non-number values - ignored.\n *\n * Therefore, in order to select a row after some changes,\n * the `selectedRowIndex` value must be invalid or >= 0 (< 0 means that no row is selected).\n *\n * `Number(value)` returns `NaN` on all invalid cases, and comparisons with `NaN` always return `false`.\n *\n * !!! We should skip a row only in cases when `selectedRowIndex` < 0\n * because when < 0 all lines must be deselected\n */\n const selectedRowIndex = Number(this.getSetting('selectedRowIndex'));\n return selectedRowIndex < 0;\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { Grid } from '../../lib/grid';\nimport { Cell } from '../../lib/data-set/cell';\nimport { Row } from '../../lib/data-set/row';\n\n@Component({\n selector: 'ng2-smart-table-cell',\n template: `\n \n \n \n `,\n})\nexport class CellComponent {\n\n @Input() grid: Grid;\n @Input() row: Row;\n @Input() editConfirm: EventEmitter;\n @Input() createConfirm: EventEmitter;\n @Input() isNew: boolean;\n @Input() cell: Cell;\n @Input() inputClass: string = '';\n @Input() mode: string = 'inline';\n @Input() isInEditing: boolean = false;\n\n @Output() edited = new EventEmitter();\n\n onEdited(event: any) {\n if (this.isNew) {\n this.grid.create(this.grid.getNewRow(), this.createConfirm);\n } else {\n this.grid.save(this.row, this.editConfirm);\n }\n }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\n\nimport { Cell } from '../../../lib/data-set/cell';\n\n@Component({\n template: ''\n})\nexport class EditCellDefault {\n\n @Input() cell: Cell;\n @Input() inputClass: string = '';\n\n @Output() edited = new EventEmitter();\n\n onEdited(event: any): boolean {\n this.edited.next(event);\n return false;\n }\n\n onStopEditing(): boolean {\n this.cell.getRow().isInEditing = false;\n return false;\n }\n\n onClick(event: any) {\n event.stopPropagation();\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n SimpleChanges,\n OnChanges,\n OnDestroy,\n} from '@angular/core';\n\nimport { EditCellDefault } from './edit-cell-default';\n\n@Component({\n selector: 'table-cell-custom-editor',\n template: `\n \n `,\n})\nexport class CustomEditComponent extends EditCellDefault implements OnChanges, OnDestroy {\n\n customComponent: any;\n @ViewChild('dynamicTarget', { read: ViewContainerRef, static: true }) dynamicTarget: any;\n\n constructor(private resolver: ComponentFactoryResolver) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.cell && !this.customComponent) {\n const componentFactory = this.resolver.resolveComponentFactory(this.cell.getColumn().editor.component);\n this.customComponent = this.dynamicTarget.createComponent(componentFactory);\n\n // set @Inputs and @Outputs of custom component\n this.customComponent.instance.cell = this.cell;\n this.customComponent.instance.inputClass = this.inputClass;\n this.customComponent.instance.onStopEditing.subscribe(() => this.onStopEditing());\n this.customComponent.instance.onEdited.subscribe((event: any) => this.onEdited(event));\n this.customComponent.instance.onClick.subscribe((event: any) => this.onClick(event));\n }\n }\n\n ngOnDestroy() {\n if (this.customComponent) {\n this.customComponent.destroy();\n }\n }\n}\n","import { Component } from '@angular/core';\n\nimport { EditCellDefault } from './edit-cell-default';\nimport { Cell } from '../../../lib/data-set/cell';\n\n@Component({\n selector: 'table-cell-default-editor',\n templateUrl: './default-edit.component.html',\n})\nexport class DefaultEditComponent extends EditCellDefault {\n\n constructor() {\n super();\n }\n\n getEditorType(): string {\n return this.cell.getColumn().editor && this.cell.getColumn().editor.type;\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { Cell } from '../../../lib/data-set/cell';\n\n@Component({\n selector: 'table-cell-edit-mode',\n template: `\n
\n \n \n \n \n
\n `,\n})\nexport class EditCellComponent {\n\n @Input() cell: Cell;\n @Input() inputClass: string = '';\n\n @Output() edited = new EventEmitter();\n\n onEdited(event: any): boolean {\n this.edited.next(event);\n return false;\n }\n\n getEditorType(): string {\n return this.cell.getColumn().editor && this.cell.getColumn().editor.type;\n }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\n\nimport { Cell } from '../../../lib/data-set/cell';\n\n@Component({\n template: '',\n})\nexport class DefaultEditor implements Editor {\n @Input() cell: Cell;\n @Input() inputClass: string;\n\n @Output() onStopEditing = new EventEmitter();\n @Output() onEdited = new EventEmitter();\n @Output() onClick = new EventEmitter();\n}\n\nexport interface Editor {\n cell: Cell;\n inputClass: string;\n onStopEditing: EventEmitter;\n onEdited: EventEmitter;\n onClick: EventEmitter;\n}\n","import { Component } from '@angular/core';\n\nimport { DefaultEditor } from './default-editor';\n\n@Component({\n selector: 'checkbox-editor',\n styleUrls: ['./editor.component.scss'],\n template: `\n \n `,\n})\nexport class CheckboxEditorComponent extends DefaultEditor {\n\n constructor() {\n super();\n }\n\n onChange(event: any) {\n const trueVal = (this.cell.getColumn().getConfig() && this.cell.getColumn().getConfig().true) || true;\n const falseVal = (this.cell.getColumn().getConfig() && this.cell.getColumn().getConfig().false) || false;\n this.cell.newValue = event.target.checked ? trueVal : falseVal;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { CompleterService } from 'ng2-completer';\n\nimport { DefaultEditor } from './default-editor';\n\n@Component({\n selector: 'completer-editor',\n template: `\n \n \n `,\n})\nexport class CompleterEditorComponent extends DefaultEditor implements OnInit {\n\n completerStr: string = '';\n\n constructor(private completerService: CompleterService) {\n super();\n }\n\n ngOnInit() {\n if (this.cell.getColumn().editor && this.cell.getColumn().editor.type === 'completer') {\n const config = this.cell.getColumn().getConfig().completer;\n config.dataService = this.completerService.local(config.data, config.searchFields, config.titleField);\n config.dataService.descriptionField(config.descriptionField);\n }\n }\n\n onEditedCompleter(event: { title: '' }): boolean {\n this.cell.newValue = event.title;\n return false;\n }\n}\n","import { Component } from '@angular/core';\n\nimport { DefaultEditor } from './default-editor';\n\n@Component({\n selector: 'input-editor',\n styleUrls: ['./editor.component.scss'],\n template: `\n \n `,\n})\nexport class InputEditorComponent extends DefaultEditor {\n\n constructor() {\n super();\n }\n}\n","import { Component } from '@angular/core';\n\nimport { DefaultEditor } from './default-editor';\n\n@Component({\n selector: 'select-editor',\n template: `\n \n `,\n})\nexport class SelectEditorComponent extends DefaultEditor {\n\n constructor() {\n super();\n }\n}\n","import { Component } from '@angular/core';\n\nimport { DefaultEditor } from './default-editor';\n\n@Component({\n selector: 'textarea-editor',\n styleUrls: ['./editor.component.scss'],\n template: `\n \n `,\n})\nexport class TextareaEditorComponent extends DefaultEditor {\n\n constructor() {\n super();\n }\n}\n","import {\n Component,\n Input,\n ComponentFactoryResolver,\n ViewChild,\n ViewContainerRef,\n OnInit,\n OnDestroy,\n} from '@angular/core';\n\nimport { Cell } from '../../../lib/data-set/cell';\nimport { ViewCell } from './view-cell';\n\n@Component({\n selector: 'custom-view-component',\n template: `\n \n `,\n})\nexport class CustomViewComponent implements OnInit, OnDestroy {\n\n customComponent: any;\n @Input() cell: Cell;\n @ViewChild('dynamicTarget', { read: ViewContainerRef, static: true }) dynamicTarget: any;\n\n constructor(private resolver: ComponentFactoryResolver) {\n }\n\n ngOnInit() {\n if (this.cell && !this.customComponent) {\n this.createCustomComponent();\n this.callOnComponentInit();\n this.patchInstance();\n }\n }\n\n ngOnDestroy() {\n if (this.customComponent) {\n this.customComponent.destroy();\n }\n }\n\n protected createCustomComponent() {\n const componentFactory = this.resolver.resolveComponentFactory(this.cell.getColumn().renderComponent);\n this.customComponent = this.dynamicTarget.createComponent(componentFactory);\n }\n\n protected callOnComponentInit() {\n const onComponentInitFunction = this.cell.getColumn().getOnComponentInitFunction();\n onComponentInitFunction && onComponentInitFunction(this.customComponent.instance);\n }\n\n protected patchInstance() {\n Object.assign(this.customComponent.instance, this.getPatch());\n }\n\n protected getPatch(): ViewCell {\n return {\n value: this.cell.getValue(),\n rowData: this.cell.getRow().getData()\n }\n }\n}\n","import {Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { Cell } from '../../../lib/data-set/cell';\n\n@Component({\n selector: 'table-cell-view-mode',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n
\n \n
\n
{{ cell.getValue() }}
\n
\n `,\n})\nexport class ViewCellComponent {\n\n @Input() cell: Cell;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Ng2CompleterModule } from 'ng2-completer';\n\nimport { CellComponent } from './cell.component';\nimport { CustomEditComponent } from './cell-edit-mode/custom-edit.component';\nimport { DefaultEditComponent } from './cell-edit-mode/default-edit.component';\nimport { EditCellComponent } from './cell-edit-mode/edit-cell.component';\nimport { CheckboxEditorComponent } from './cell-editors/checkbox-editor.component';\nimport { CompleterEditorComponent } from './cell-editors/completer-editor.component';\nimport { InputEditorComponent } from './cell-editors/input-editor.component';\nimport { SelectEditorComponent } from './cell-editors/select-editor.component';\nimport { TextareaEditorComponent } from './cell-editors/textarea-editor.component';\nimport { CustomViewComponent } from './cell-view-mode/custom-view.component';\nimport { ViewCellComponent } from './cell-view-mode/view-cell.component';\nimport { EditCellDefault } from './cell-edit-mode/edit-cell-default';\nimport { DefaultEditor } from './cell-editors/default-editor';\n\nconst CELL_COMPONENTS = [\n CellComponent,\n EditCellDefault,\n DefaultEditor,\n CustomEditComponent,\n DefaultEditComponent,\n EditCellComponent,\n CheckboxEditorComponent,\n CompleterEditorComponent,\n InputEditorComponent,\n SelectEditorComponent,\n TextareaEditorComponent,\n CustomViewComponent,\n ViewCellComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n Ng2CompleterModule,\n ],\n declarations: [\n ...CELL_COMPONENTS,\n ],\n exports: [\n ...CELL_COMPONENTS,\n ],\n})\nexport class CellModule { }\n","import { Subject } from 'rxjs';\nimport { Observable } from 'rxjs';\n\nexport abstract class DataSource {\n\n protected onChangedSource = new Subject();\n protected onAddedSource = new Subject();\n protected onUpdatedSource = new Subject();\n protected onRemovedSource = new Subject();\n\n abstract getAll(): Promise;\n abstract getElements(): Promise;\n abstract getSort(): any;\n abstract getFilter(): any;\n abstract getPaging(): any;\n abstract count(): number;\n\n refresh() {\n this.emitOnChanged('refresh');\n }\n\n load(data: Array): Promise {\n this.emitOnChanged('load');\n return Promise.resolve();\n }\n\n onChanged(): Observable {\n return this.onChangedSource.asObservable();\n }\n\n onAdded(): Observable {\n return this.onAddedSource.asObservable();\n }\n\n onUpdated(): Observable {\n return this.onUpdatedSource.asObservable();\n }\n\n onRemoved(): Observable {\n return this.onRemovedSource.asObservable();\n }\n\n prepend(element: any): Promise {\n this.emitOnAdded(element);\n this.emitOnChanged('prepend');\n return Promise.resolve();\n }\n\n append(element: any): Promise {\n this.emitOnAdded(element);\n this.emitOnChanged('append');\n return Promise.resolve();\n }\n\n add(element: any): Promise {\n this.emitOnAdded(element);\n this.emitOnChanged('add');\n return Promise.resolve();\n }\n\n remove(element: any): Promise {\n this.emitOnRemoved(element);\n this.emitOnChanged('remove');\n return Promise.resolve();\n }\n\n update(element: any, values: any): Promise {\n this.emitOnUpdated(element);\n this.emitOnChanged('update');\n return Promise.resolve();\n }\n\n empty(): Promise {\n this.emitOnChanged('empty');\n return Promise.resolve();\n }\n\n setSort(conf: Array, doEmit?: boolean) {\n if (doEmit) {\n this.emitOnChanged('sort');\n }\n }\n\n setFilter(conf: Array, andOperator?: boolean, doEmit?: boolean) {\n if (doEmit) {\n this.emitOnChanged('filter');\n }\n }\n\n addFilter(fieldConf: {}, andOperator?: boolean, doEmit?: boolean) {\n if (doEmit) {\n this.emitOnChanged('filter');\n }\n }\n\n setPaging(page: number, perPage: number, doEmit?: boolean) {\n if (doEmit) {\n this.emitOnChanged('paging');\n }\n }\n\n setPage(page: number, doEmit?: boolean) {\n if (doEmit) {\n this.emitOnChanged('page');\n }\n }\n\n protected emitOnRemoved(element: any) {\n this.onRemovedSource.next(element);\n }\n\n protected emitOnUpdated(element: any) {\n this.onUpdatedSource.next(element);\n }\n\n protected emitOnAdded(element: any) {\n this.onAddedSource.next(element);\n }\n\n protected emitOnChanged(action: string) {\n this.getElements().then((elements) => this.onChangedSource.next({\n action: action,\n elements: elements,\n paging: this.getPaging(),\n filter: this.getFilter(),\n sort: this.getSort(),\n }));\n }\n}\n","import { Output, EventEmitter, Input, Component } from '@angular/core';\n\nimport { Column } from '../../lib/data-set/column';\nimport { DataSource } from '../../lib/data-source/data-source';\n\n@Component({\n template: '',\n})\nexport class FilterDefault {\n\n @Input() column: Column;\n @Input() source: DataSource;\n @Input() inputClass: string = '';\n\n @Output() filter = new EventEmitter();\n\n query: string = '';\n\n onFilter(query: string) {\n this.source.addFilter({\n field: this.column.id,\n search: query,\n filter: this.column.getFilterFunction(),\n });\n }\n}\n","import { Component, OnChanges, SimpleChanges } from '@angular/core';\nimport { FilterDefault } from './filter-default';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ng2-smart-table-filter',\n styleUrls: ['./filter.component.scss'],\n template: `\n
\n \n \n \n \n
\n `,\n})\nexport class FilterComponent extends FilterDefault implements OnChanges {\n query: string = '';\n protected dataChangedSub: Subscription;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.source) {\n if (!changes.source.firstChange) {\n this.dataChangedSub.unsubscribe();\n }\n this.dataChangedSub = this.source.onChanged().subscribe((dataChanges) => {\n const filterConf = this.source.getFilter();\n if (filterConf && filterConf.filters && filterConf.filters.length === 0) {\n this.query = '';\n\n // add a check for existing filters an set the query if one exists for this column\n // this covers instances where the filter is set by user code while maintaining existing functionality\n } else if (filterConf && filterConf.filters && filterConf.filters.length > 0) {\n filterConf.filters.forEach((k: any, v: any) => {\n if (k.field == this.column.id) {\n this.query = k.search;\n }\n });\n }\n });\n }\n }\n}\n","import {Component, Input} from '@angular/core';\n\nimport {FilterDefault} from \"./filter-default\";\n\n@Component({\n selector: 'default-table-filter',\n template: `\n \n \n \n \n \n \n \n \n \n \n `,\n})\nexport class DefaultFilterComponent extends FilterDefault {\n @Input() query: string;\n}\n","import {\n Component,\n ComponentFactoryResolver, Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\nimport { FilterDefault } from './filter-default';\n\n@Component({\n selector: 'custom-table-filter',\n template: ``,\n})\nexport class CustomFilterComponent extends FilterDefault implements OnChanges, OnDestroy {\n @Input() query: string;\n customComponent: any;\n @ViewChild('dynamicTarget', { read: ViewContainerRef, static: true }) dynamicTarget: any;\n\n constructor(private resolver: ComponentFactoryResolver) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.column && !this.customComponent) {\n const componentFactory = this.resolver.resolveComponentFactory(this.column.filter.component);\n this.customComponent = this.dynamicTarget.createComponent(componentFactory);\n\n // set @Inputs and @Outputs of custom component\n this.customComponent.instance.query = this.query;\n this.customComponent.instance.column = this.column;\n this.customComponent.instance.source = this.source;\n this.customComponent.instance.inputClass = this.inputClass;\n this.customComponent.instance.filter.subscribe((event: any) => this.onFilter(event));\n }\n if (this.customComponent) {\n this.customComponent.instance.ngOnChanges(changes);\n }\n }\n\n ngOnDestroy() {\n if (this.customComponent) {\n this.customComponent.destroy();\n }\n }\n}\n","import { Input, Output, EventEmitter, OnDestroy, Component } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { Column } from '../../../lib/data-set/column';\n\n@Component({\n template: '',\n})\nexport class DefaultFilter implements Filter, OnDestroy {\n\n delay: number = 300;\n changesSubscription: Subscription;\n @Input() query: string;\n @Input() inputClass: string;\n @Input() column: Column;\n @Output() filter = new EventEmitter();\n\n ngOnDestroy() {\n if (this.changesSubscription) {\n this.changesSubscription.unsubscribe();\n }\n }\n\n setFilter() {\n this.filter.emit(this.query);\n }\n}\n\nexport interface Filter {\n\n delay?: number;\n changesSubscription?: Subscription;\n query: string;\n inputClass: string;\n column: Column;\n filter: EventEmitter;\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport { DefaultFilter } from './default-filter';\nimport { debounceTime } from 'rxjs/operators';\n\n@Component({\n selector: 'checkbox-filter',\n template: `\n \n {{column.getFilterConfig()?.resetText || 'reset'}}\n `,\n})\nexport class CheckboxFilterComponent extends DefaultFilter implements OnInit {\n\n filterActive: boolean = false;\n inputControl = new FormControl();\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n this.changesSubscription = this.inputControl.valueChanges\n .pipe(debounceTime(this.delay))\n .subscribe((checked: boolean) => {\n this.filterActive = true;\n const trueVal = (this.column.getFilterConfig() && this.column.getFilterConfig().true) || true;\n const falseVal = (this.column.getFilterConfig() && this.column.getFilterConfig().false) || false;\n this.query = checked ? trueVal : falseVal;\n this.setFilter();\n });\n }\n\n resetFilter(event: any) {\n event.preventDefault();\n this.query = '';\n this.inputControl.setValue(false, { emitEvent: false });\n this.filterActive = false;\n this.setFilter();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CompleterService } from 'ng2-completer';\n\nimport { DefaultFilter } from './default-filter';\nimport { distinctUntilChanged, debounceTime, map } from 'rxjs/operators';\n\n@Component({\n selector: 'completer-filter',\n template: `\n \n \n `,\n})\nexport class CompleterFilterComponent extends DefaultFilter implements OnInit {\n\n completerContent = new Subject();\n\n constructor(private completerService: CompleterService) {\n super();\n }\n\n ngOnInit() {\n const config = this.column.getFilterConfig().completer;\n config.dataService = this.completerService.local(config.data, config.searchFields, config.titleField);\n config.dataService.descriptionField(config.descriptionField);\n\n this.changesSubscription = this.completerContent\n .pipe(\n map((ev: any) => (ev && ev.title) || ev || ''),\n distinctUntilChanged(),\n debounceTime(this.delay)\n )\n .subscribe((search: string) => {\n this.query = search;\n this.setFilter();\n });\n }\n\n inputTextChanged(event: string) {\n // workaround to trigger the search event when the home/end buttons are clicked\n // when this happens the [(ngModel)]=\"query\" is set to \"\" but the (selected) method is not called\n // so here it gets called manually\n if (event === '') {\n this.completerContent.next(event);\n }\n }\n}\n","import { Component, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged, skip } from 'rxjs/operators';\n\nimport { DefaultFilter } from './default-filter';\n\n@Component({\n selector: 'input-filter',\n template: `\n \n `,\n})\nexport class InputFilterComponent extends DefaultFilter implements OnInit, OnChanges {\n\n inputControl = new FormControl();\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n if (this.query) {\n this.inputControl.setValue(this.query);\n }\n this.inputControl.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(this.delay),\n )\n .subscribe((value: string) => {\n this.query = this.inputControl.value;\n this.setFilter();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.query) {\n this.inputControl.setValue(this.query);\n }\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { distinctUntilChanged, debounceTime, skip } from 'rxjs/operators';\n\nimport { DefaultFilter } from './default-filter';\n\n@Component({\n selector: 'select-filter',\n template: `\n \n `,\n})\nexport class SelectFilterComponent extends DefaultFilter implements OnInit {\n\n @ViewChild('inputControl', { read: NgControl, static: true }) inputControl: NgControl;\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n this.inputControl.valueChanges\n .pipe(\n skip(1),\n distinctUntilChanged(),\n debounceTime(this.delay)\n )\n .subscribe((value: string) => this.setFilter());\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Ng2CompleterModule } from 'ng2-completer';\n\nimport { FilterComponent } from './filter.component';\nimport { DefaultFilterComponent } from \"./default-filter.component\";\nimport { CustomFilterComponent } from \"./custom-filter.component\";\nimport { CheckboxFilterComponent } from './filter-types/checkbox-filter.component';\nimport { CompleterFilterComponent } from './filter-types/completer-filter.component';\nimport { InputFilterComponent } from './filter-types/input-filter.component';\nimport { SelectFilterComponent } from './filter-types/select-filter.component';\nimport { DefaultFilter } from './filter-types/default-filter';\nimport { FilterDefault } from './filter-default';\n\nconst FILTER_COMPONENTS = [\n FilterDefault,\n DefaultFilter,\n FilterComponent,\n DefaultFilterComponent,\n CustomFilterComponent,\n CheckboxFilterComponent,\n CompleterFilterComponent,\n InputFilterComponent,\n SelectFilterComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n Ng2CompleterModule,\n ],\n declarations: [\n ...FILTER_COMPONENTS,\n ],\n exports: [\n ...FILTER_COMPONENTS,\n ],\n})\nexport class FilterModule { }\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { DataSource } from '../../lib/data-source/data-source';\n\n@Component({\n selector: 'ng2-smart-table-pager',\n styleUrls: ['./pager.component.scss'],\n template: `\n \n \n \n `,\n})\nexport class PagerComponent implements OnChanges {\n\n @Input() source: DataSource;\n @Input() perPageSelect: any[] = [];\n\n @Output() changePage = new EventEmitter();\n\n currentPerPage: any;\n\n protected pages: Array;\n protected page: number;\n protected count: number = 0;\n protected perPage: number;\n\n protected dataChangedSub: Subscription;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.source) {\n if (!changes.source.firstChange) {\n this.dataChangedSub.unsubscribe();\n }\n this.dataChangedSub = this.source.onChanged().subscribe((dataChanges) => {\n this.page = this.source.getPaging().page;\n this.perPage = this.source.getPaging().perPage;\n this.currentPerPage = this.perPage;\n this.count = this.source.count();\n if (this.isPageOutOfBounce()) {\n this.source.setPage(--this.page);\n }\n\n this.processPageChange(dataChanges);\n this.initPages();\n });\n }\n }\n\n /**\n * We change the page here depending on the action performed against data source\n * if a new element was added to the end of the table - then change the page to the last\n * if a new element was added to the beginning of the table - then to the first page\n * @param changes\n */\n processPageChange(changes: any) {\n if (changes['action'] === 'prepend') {\n this.source.setPage(1);\n }\n if (changes['action'] === 'append') {\n this.source.setPage(this.getLast());\n }\n }\n\n shouldShow(): boolean {\n return this.source.count() > this.perPage;\n }\n\n paginate(page: number): boolean {\n this.source.setPage(page);\n this.page = page;\n this.changePage.emit({ page });\n return false;\n }\n\n next(): boolean {\n return this.paginate(this.getPage() + 1);\n }\n\n prev(): boolean {\n return this.paginate(this.getPage() - 1);\n }\n\n getPage(): number {\n return this.page;\n }\n\n getPages(): Array {\n return this.pages;\n }\n\n getLast(): number {\n return Math.ceil(this.count / this.perPage);\n }\n\n isPageOutOfBounce(): boolean {\n return (this.page * this.perPage) >= (this.count + this.perPage) && this.page > 1;\n }\n\n initPages() {\n const pagesCount = this.getLast();\n let showPagesCount = 4;\n showPagesCount = pagesCount < showPagesCount ? pagesCount : showPagesCount;\n this.pages = [];\n\n if (this.shouldShow()) {\n\n let middleOne = Math.ceil(showPagesCount / 2);\n middleOne = this.page >= middleOne ? this.page : middleOne;\n\n let lastOne = middleOne + Math.floor(showPagesCount / 2);\n lastOne = lastOne >= pagesCount ? pagesCount : lastOne;\n\n const firstOne = lastOne - showPagesCount + 1;\n\n for (let i = firstOne; i <= lastOne; i++) {\n this.pages.push(i);\n }\n }\n }\n\n onChangePerPage(event: any) {\n if (this.currentPerPage) {\n\n if (typeof this.currentPerPage === 'string' && this.currentPerPage.toLowerCase() === 'all') {\n this.source.getPaging().perPage = null;\n } else {\n this.source.getPaging().perPage = this.currentPerPage * 1;\n this.source.refresh();\n }\n this.initPages();\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { PagerComponent } from './pager.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ],\n declarations: [\n PagerComponent,\n ],\n exports: [\n PagerComponent,\n ],\n})\nexport class PagerModule { }\n","import {Component, Input, Output, EventEmitter, } from '@angular/core';\n\nimport { Grid } from '../../lib/grid';\nimport { DataSource } from '../../lib/data-source/data-source';\nimport { Cell } from '../../lib/data-set/cell';\n\n@Component({\n selector: '[ng2-st-tbody]',\n styleUrls: ['./tbody.component.scss'],\n templateUrl: './tbody.component.html',\n})\nexport class Ng2SmartTableTbodyComponent {\n\n @Input() grid: Grid;\n @Input() source: DataSource;\n @Input() deleteConfirm: EventEmitter;\n @Input() editConfirm: EventEmitter;\n @Input() rowClassFunction: Function;\n\n @Output() save = new EventEmitter();\n @Output() cancel = new EventEmitter();\n @Output() edit = new EventEmitter();\n @Output() delete = new EventEmitter();\n @Output() custom = new EventEmitter();\n @Output() edited = new EventEmitter();\n @Output() userSelectRow = new EventEmitter();\n @Output() editRowSelect = new EventEmitter();\n @Output() multipleSelectRow = new EventEmitter();\n @Output() rowHover = new EventEmitter();\n\n isMultiSelectVisible: boolean;\n showActionColumnLeft: boolean;\n showActionColumnRight: boolean;\n mode: string;\n editInputClass: string;\n isActionAdd: boolean;\n isActionEdit: boolean;\n isActionDelete: boolean;\n noDataMessage: boolean;\n\n get tableColumnsCount() {\n const actionColumns = this.isActionAdd || this.isActionEdit || this.isActionDelete ? 1 : 0;\n return this.grid.getColumns().length + actionColumns;\n }\n\n ngOnChanges() {\n this.isMultiSelectVisible = this.grid.isMultiSelectVisible();\n this.showActionColumnLeft = this.grid.showActionColumn('left');\n this.mode = this.grid.getSetting('mode');\n this.editInputClass = this.grid.getSetting('edit.inputClass');\n this.showActionColumnRight = this.grid.showActionColumn('right');\n this.isActionAdd = this.grid.getSetting('actions.add');\n this.isActionEdit = this.grid.getSetting('actions.edit');\n this.isActionDelete = this.grid.getSetting('actions.delete');\n this.noDataMessage = this.grid.getSetting('noDataMessage');\n }\n\n getVisibleCells(cells: Array): Array {\n return (cells || []).filter((cell: Cell) => !cell.getColumn().hide);\n }\n}\n","import { Component, Input, EventEmitter, OnChanges } from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { Row } from '../../../lib/data-set/row';\n\n@Component({\n selector: 'ng2-st-tbody-create-cancel',\n template: `\n \n \n `,\n})\nexport class TbodyCreateCancelComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Input() row: Row;\n @Input() editConfirm: EventEmitter;\n\n cancelButtonContent: string;\n saveButtonContent: string;\n\n onSave(event: any) {\n event.preventDefault();\n event.stopPropagation();\n\n this.grid.save(this.row, this.editConfirm);\n }\n\n onCancelEdit(event: any) {\n event.preventDefault();\n event.stopPropagation();\n\n this.row.isInEditing = false;\n }\n\n ngOnChanges() {\n this.saveButtonContent = this.grid.getSetting('edit.saveButtonContent');\n this.cancelButtonContent = this.grid.getSetting('edit.cancelButtonContent')\n }\n}\n","import {Component, Input, Output, EventEmitter, OnChanges, ChangeDetectionStrategy } from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { Row } from '../../../lib/data-set/row';\nimport { DataSource } from '../../../lib/data-source/data-source';\n\n@Component({\n selector: 'ng2-st-tbody-edit-delete',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n \n \n `,\n})\nexport class TbodyEditDeleteComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Input() row: Row;\n @Input() source: DataSource;\n @Input() deleteConfirm: EventEmitter;\n @Input() editConfirm: EventEmitter;\n\n @Output() edit = new EventEmitter();\n @Output() delete = new EventEmitter();\n @Output() editRowSelect = new EventEmitter();\n\n isActionEdit: boolean;\n isActionDelete: boolean;\n editRowButtonContent: string;\n deleteRowButtonContent: string;\n\n onEdit(event: any) {\n event.preventDefault();\n event.stopPropagation();\n\n this.editRowSelect.emit(this.row);\n\n if (this.grid.getSetting('mode') === 'external') {\n this.edit.emit({\n data: this.row.getData(),\n source: this.source,\n });\n } else {\n this.grid.edit(this.row);\n }\n }\n\n onDelete(event: any) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.grid.getSetting('mode') === 'external') {\n this.delete.emit({\n data: this.row.getData(),\n source: this.source,\n });\n } else {\n this.grid.delete(this.row, this.deleteConfirm);\n }\n }\n\n ngOnChanges(){\n this.isActionEdit = this.grid.getSetting('actions.edit');\n this.isActionDelete = this.grid.getSetting('actions.delete');\n this.editRowButtonContent = this.grid.getSetting('edit.editButtonContent');\n this.deleteRowButtonContent = this.grid.getSetting('delete.deleteButtonContent');\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Row } from '../../../lib/data-set/row';\n\nimport { Grid } from '../../../lib/grid';\n\n@Component({\n selector: 'ng2-st-tbody-custom',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n \n `\n})\nexport class TbodyCustomComponent {\n\n @Input() grid: Grid;\n @Input() row: Row;\n @Input() source: any;\n @Output() custom = new EventEmitter();\n\n onCustom(action: any, event: any) {\n event.preventDefault();\n event.stopPropagation();\n\n this.custom.emit({\n action: action.name,\n data: this.row.getData(),\n source: this.source\n });\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { CellModule } from '../cell/cell.module';\n\nimport { Ng2SmartTableTbodyComponent } from './tbody.component';\nimport { TbodyCreateCancelComponent } from './cells/create-cancel.component';\nimport { TbodyEditDeleteComponent } from './cells/edit-delete.component';\nimport { TbodyCustomComponent } from './cells/custom.component';\n\nconst TBODY_COMPONENTS = [\n TbodyCreateCancelComponent,\n TbodyEditDeleteComponent,\n TbodyCustomComponent,\n Ng2SmartTableTbodyComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n CellModule,\n ],\n declarations: [\n ...TBODY_COMPONENTS,\n ],\n exports: [\n ...TBODY_COMPONENTS,\n ],\n})\nexport class TBodyModule { }\n","import {Component, Input, Output, EventEmitter, OnChanges} from '@angular/core';\n\nimport { Grid } from '../../lib/grid';\nimport { DataSource } from '../../lib/data-source/data-source';\n\n@Component({\n selector: '[ng2-st-thead]',\n templateUrl: './thead.component.html',\n})\nexport class Ng2SmartTableTheadComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Input() source: DataSource;\n @Input() isAllSelected: boolean;\n @Input() createConfirm: EventEmitter;\n\n @Output() sort = new EventEmitter();\n @Output() selectAllRows = new EventEmitter();\n @Output() create = new EventEmitter();\n @Output() filter = new EventEmitter();\n\n isHideHeader: boolean;\n isHideSubHeader: boolean;\n\n ngOnChanges() {\n this.isHideHeader = this.grid.getSetting('hideHeader');\n this.isHideSubHeader = this.grid.getSetting('hideSubHeader');\n }\n}\n","import {Component, Input, Output, EventEmitter, OnChanges } from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\n\n@Component({\n selector: 'ng2-st-actions',\n template: `\n \n \n `,\n})\nexport class ActionsComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Output() create = new EventEmitter();\n\n createButtonContent: string;\n cancelButtonContent: string;\n\n ngOnChanges() {\n this.createButtonContent = this.grid.getSetting('add.createButtonContent');\n this.cancelButtonContent = this.grid.getSetting('add.cancelButtonContent');\n }\n}\n","import {Component, Input, AfterViewInit, ElementRef, OnChanges} from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\n\n@Component({\n selector: '[ng2-st-actions-title]',\n template: `\n
{{ actionsColumnTitle }}
\n `,\n})\nexport class ActionsTitleComponent implements AfterViewInit, OnChanges {\n\n @Input() grid: Grid;\n\n actionsColumnTitle: string;\n\n constructor(private ref: ElementRef) {\n }\n\n ngAfterViewInit() {\n this.ref.nativeElement.classList.add('ng2-smart-actions');\n }\n\n ngOnChanges() {\n this.actionsColumnTitle = this.grid.getSetting('actions.columnTitle');\n }\n}\n","import { Component, Input, Output, EventEmitter, AfterViewInit, ElementRef, OnChanges } from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { DataSource } from '../../../lib/data-source/data-source';\n\n@Component({\n selector: '[ng2-st-add-button]',\n template: `\n \n `,\n})\nexport class AddButtonComponent implements AfterViewInit, OnChanges {\n\n @Input() grid: Grid;\n @Input() source: DataSource;\n @Output() create = new EventEmitter();\n\n isActionAdd: boolean;\n addNewButtonContent: string;\n\n constructor(private ref: ElementRef) {\n }\n\n ngAfterViewInit() {\n this.ref.nativeElement.classList.add('ng2-smart-actions-title', 'ng2-smart-actions-title-add');\n }\n\n ngOnChanges() {\n this.isActionAdd = this.grid.getSetting('actions.add');\n this.addNewButtonContent = this.grid.getSetting('add.addButtonContent');\n }\n\n onAdd(event: any) {\n event.preventDefault();\n event.stopPropagation();\n if (this.grid.getSetting('mode') === 'external') {\n this.create.emit({\n source: this.source,\n });\n } else {\n this.grid.createFormShown = true;\n }\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { DataSource } from '../../../lib/data-source/data-source';\n\n@Component({\n selector: '[ng2-st-checkbox-select-all]',\n template: `\n \n `,\n})\nexport class CheckboxSelectAllComponent {\n\n @Input() grid: Grid;\n @Input() source: DataSource;\n @Input() isAllSelected: boolean;\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { Column } from '../../../lib/data-set/column';\nimport { DataSource } from '../../../lib/data-source/data-source';\n\n@Component({\n selector: 'ng2-st-column-title',\n template: `\n
\n \n
\n `,\n})\nexport class ColumnTitleComponent {\n\n @Input() column: Column;\n @Input() source: DataSource;\n\n @Output() sort = new EventEmitter();\n\n}\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { DataSource } from '../../../../lib/data-source/data-source';\nimport { Column } from '../../../../lib/data-set/column';\n\n@Component({\n selector: 'ng2-smart-table-title',\n styleUrls: ['./title.component.scss'],\n template: `\n \n {{ column.title }}\n \n {{ column.title }}\n `,\n})\nexport class TitleComponent implements OnChanges {\n\n currentDirection = '';\n @Input() column: Column;\n @Input() source: DataSource;\n @Output() sort = new EventEmitter();\n\n protected dataChangedSub: Subscription;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.source) {\n if (!changes.source.firstChange) {\n this.dataChangedSub.unsubscribe();\n }\n this.dataChangedSub = this.source.onChanged().subscribe((dataChanges) => {\n const sortConf = this.source.getSort();\n\n if (sortConf.length > 0 && sortConf[0]['field'] === this.column.id) {\n this.currentDirection = sortConf[0]['direction'];\n } else {\n this.currentDirection = '';\n }\n\n sortConf.forEach((fieldConf: any) => {\n\n });\n });\n }\n }\n\n _sort(event: any) {\n event.preventDefault();\n this.changeSortDirection();\n this.source.setSort([\n {\n field: this.column.id,\n direction: this.currentDirection,\n compare: this.column.getCompareFunction(),\n },\n ]);\n this.sort.emit(null);\n }\n\n changeSortDirection(): string {\n if (this.currentDirection) {\n const newDirection = this.currentDirection === 'asc' ? 'desc' : 'asc';\n this.currentDirection = newDirection;\n } else {\n this.currentDirection = this.column.sortDirection;\n }\n return this.currentDirection;\n }\n}\n","import {Component, Input, Output, EventEmitter, OnChanges} from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { DataSource } from '../../../lib/data-source/data-source';\nimport { Column } from \"../../../lib/data-set/column\";\n\n@Component({\n selector: '[ng2-st-thead-filters-row]',\n template: `\n \n \n \n \n \n \n \n \n \n `,\n})\nexport class TheadFitlersRowComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Input() source: DataSource;\n\n @Output() create = new EventEmitter();\n @Output() filter = new EventEmitter();\n\n isMultiSelectVisible: boolean;\n showActionColumnLeft: boolean;\n showActionColumnRight: boolean;\n filterInputClass: string;\n\n ngOnChanges() {\n this.isMultiSelectVisible = this.grid.isMultiSelectVisible();\n this.showActionColumnLeft = this.grid.showActionColumn('left');\n this.showActionColumnRight = this.grid.showActionColumn('right');\n this.filterInputClass = this.grid.getSetting('filter.inputClass');\n }\n\n getVisibleColumns(columns: Array): Array {\n return (columns || []).filter((column: Column) => !column.hide);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnChanges } from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { Row } from '../../../lib/data-set/row';\nimport { Cell } from '../../../lib/data-set/cell';\n\n@Component({\n selector: '[ng2-st-thead-form-row]',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `,\n})\nexport class TheadFormRowComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Input() row: Row;\n @Input() createConfirm: EventEmitter;\n\n @Output() create = new EventEmitter();\n\n isMultiSelectVisible: boolean;\n showActionColumnLeft: boolean;\n showActionColumnRight: boolean;\n addInputClass: string;\n\n onCreate(event: any) {\n event.stopPropagation();\n\n this.grid.create(this.grid.getNewRow(), this.createConfirm);\n }\n\n ngOnChanges(){\n this.isMultiSelectVisible = this.grid.isMultiSelectVisible();\n this.showActionColumnLeft = this.grid.showActionColumn('left');\n this.showActionColumnRight = this.grid.showActionColumn('right');\n this.addInputClass = this.grid.getSetting('add.inputClass');\n }\n\n getVisibleCells(cells: Array): Array {\n return (cells || []).filter((cell: Cell) => !cell.getColumn().hide);\n }\n}\n","import {Component, Input, Output, EventEmitter, OnChanges} from '@angular/core';\n\nimport { Grid } from '../../../lib/grid';\nimport { DataSource } from '../../../lib/data-source/data-source';\nimport { Column } from \"../../../lib/data-set/column\";\n\n@Component({\n selector: '[ng2-st-thead-titles-row]',\n template: `\n \n \n \n \n \n \n \n `,\n})\nexport class TheadTitlesRowComponent implements OnChanges {\n\n @Input() grid: Grid;\n @Input() isAllSelected: boolean;\n @Input() source: DataSource;\n\n @Output() sort = new EventEmitter();\n @Output() selectAllRows = new EventEmitter();\n\n isMultiSelectVisible: boolean;\n showActionColumnLeft: boolean;\n showActionColumnRight: boolean;\n\n\n ngOnChanges() {\n this.isMultiSelectVisible = this.grid.isMultiSelectVisible();\n this.showActionColumnLeft = this.grid.showActionColumn('left');\n this.showActionColumnRight = this.grid.showActionColumn('right');\n }\n\n getVisibleColumns(columns: Array): Array {\n return (columns || []).filter((column: Column) => !column.hide);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { FilterModule } from '../filter/filter.module';\nimport { CellModule } from '../cell/cell.module';\n\nimport { Ng2SmartTableTheadComponent } from './thead.component';\nimport { ActionsComponent } from './cells/actions.component';\nimport { ActionsTitleComponent } from './cells/actions-title.component';\nimport { AddButtonComponent } from './cells/add-button.component';\nimport { CheckboxSelectAllComponent } from './cells/checkbox-select-all.component';\nimport { ColumnTitleComponent } from './cells/column-title.component';\nimport { TitleComponent } from './cells/title/title.component';\nimport { TheadFitlersRowComponent } from './rows/thead-filters-row.component';\nimport { TheadFormRowComponent } from './rows/thead-form-row.component';\nimport { TheadTitlesRowComponent } from './rows/thead-titles-row.component';\n\nconst THEAD_COMPONENTS = [\n ActionsComponent,\n ActionsTitleComponent,\n AddButtonComponent,\n CheckboxSelectAllComponent,\n ColumnTitleComponent,\n TitleComponent,\n TheadFitlersRowComponent,\n TheadFormRowComponent,\n TheadTitlesRowComponent,\n Ng2SmartTableTheadComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n FilterModule,\n CellModule,\n ],\n declarations: [\n ...THEAD_COMPONENTS,\n ],\n exports: [\n ...THEAD_COMPONENTS,\n ],\n})\nexport class THeadModule { }\n","export function compareValues(direction: any, a: any, b: any) {\n if (a < b) {\n return -1 * direction;\n }\n if (a > b) {\n return direction;\n }\n return 0;\n}\n\nexport class LocalSorter {\n\n static sort(data: Array, field: string, direction: string, customCompare?: Function): Array {\n\n const dir: number = (direction === 'asc') ? 1 : -1;\n const compare: Function = customCompare ? customCompare : compareValues;\n\n return data.sort((a, b) => {\n return compare.call(null, dir, a[field], b[field]);\n });\n }\n}\n","export function filterValues(value: string, search: string) {\n return value.toString().toLowerCase().includes(search.toString().toLowerCase());\n}\n\nexport class LocalFilter {\n\n static filter(data: Array, field: string, search: string, customFilter?: Function): Array {\n const filter: Function = customFilter ? customFilter : filterValues;\n\n return data.filter((el) => {\n const value = typeof el[field] === 'undefined' || el[field] === null ? '' : el[field];\n return filter.call(null, value, search);\n });\n }\n}\n","export class LocalPager {\n\n static paginate(data: Array, page: number, perPage: number): Array {\n return data.slice(perPage * (page - 1), perPage * page);\n }\n}\n","import { LocalSorter } from './local.sorter';\nimport { LocalFilter } from './local.filter';\nimport { LocalPager } from './local.pager';\nimport { DataSource } from '../data-source';\nimport { deepExtend } from '../../helpers';\n\nexport class LocalDataSource extends DataSource {\n\n protected data: Array = [];\n protected filteredAndSorted: Array = [];\n protected sortConf: Array = [];\n protected filterConf: any = {\n filters: [],\n andOperator: true,\n };\n protected pagingConf: any = {};\n\n constructor(data: Array = []) {\n super();\n\n this.data = data;\n }\n\n load(data: Array): Promise {\n this.data = data;\n\n return super.load(data);\n }\n\n prepend(element: any): Promise {\n this.reset(true);\n\n this.data.unshift(element);\n return super.prepend(element);\n }\n\n append(element: any): Promise {\n this.reset(true);\n\n this.data.push(element);\n return super.append(element);\n }\n\n add(element: any): Promise {\n this.data.push(element);\n\n return super.add(element);\n }\n\n remove(element: any): Promise {\n this.data = this.data.filter(el => el !== element);\n\n return super.remove(element);\n }\n\n update(element: any, values: any): Promise {\n return new Promise((resolve, reject) => {\n this.find(element).then((found) => {\n found = deepExtend(found, values);\n super.update(found, values).then(resolve).catch(reject);\n }).catch(reject);\n });\n }\n\n find(element: any): Promise {\n const found = this.data.find(el => el === element);\n if (found) {\n return Promise.resolve(found);\n }\n\n return Promise.reject(new Error('Element was not found in the dataset'));\n }\n\n getElements(): Promise {\n const data = this.data.slice(0);\n return Promise.resolve(this.prepareData(data));\n }\n\n getFilteredAndSorted(): Promise {\n let data = this.data.slice(0);\n this.prepareData(data);\n return Promise.resolve(this.filteredAndSorted);\n }\n\n getAll(): Promise {\n const data = this.data.slice(0);\n return Promise.resolve(data);\n }\n\n reset(silent = false) {\n if (silent) {\n this.filterConf = {\n filters: [],\n andOperator: true,\n };\n this.sortConf = [];\n this.pagingConf['page'] = 1;\n } else {\n this.setFilter([], true, false);\n this.setSort([], false);\n this.setPage(1);\n }\n }\n\n empty(): Promise {\n this.data = [];\n\n return super.empty();\n }\n\n count(): number {\n return this.filteredAndSorted.length;\n }\n\n /**\n *\n * Array of conf objects\n * [\n * {field: string, direction: asc|desc|null, compare: Function|null},\n * ]\n * @param conf\n * @param doEmit\n * @returns {LocalDataSource}\n */\n setSort(conf: Array, doEmit = true): LocalDataSource {\n if (conf !== null) {\n\n conf.forEach((fieldConf) => {\n if (!fieldConf['field'] || typeof fieldConf['direction'] === 'undefined') {\n throw new Error('Sort configuration object is not valid');\n }\n });\n this.sortConf = conf;\n }\n\n super.setSort(conf, doEmit);\n return this;\n }\n\n /**\n *\n * Array of conf objects\n * [\n * {field: string, search: string, filter: Function|null},\n * ]\n * @param conf\n * @param andOperator\n * @param doEmit\n * @returns {LocalDataSource}\n */\n setFilter(conf: Array, andOperator = true, doEmit = true): LocalDataSource {\n if (conf && conf.length > 0) {\n conf.forEach((fieldConf) => {\n this.addFilter(fieldConf, andOperator, false);\n });\n } else {\n this.filterConf = {\n filters: [],\n andOperator: true,\n };\n }\n this.filterConf.andOperator = andOperator;\n this.pagingConf['page'] = 1;\n\n super.setFilter(conf, andOperator, doEmit);\n return this;\n }\n\n addFilter(fieldConf: any, andOperator = true, doEmit: boolean = true): LocalDataSource {\n if (!fieldConf['field'] || typeof fieldConf['search'] === 'undefined') {\n throw new Error('Filter configuration object is not valid');\n }\n\n let found = false;\n this.filterConf.filters.forEach((currentFieldConf: any, index: any) => {\n if (currentFieldConf['field'] === fieldConf['field']) {\n this.filterConf.filters[index] = fieldConf;\n found = true;\n }\n });\n if (!found) {\n this.filterConf.filters.push(fieldConf);\n }\n this.filterConf.andOperator = andOperator;\n super.addFilter(fieldConf, andOperator, doEmit);\n return this;\n }\n\n setPaging(page: number, perPage: number, doEmit: boolean = true): LocalDataSource {\n this.pagingConf['page'] = page;\n this.pagingConf['perPage'] = perPage;\n\n super.setPaging(page, perPage, doEmit);\n return this;\n }\n\n setPage(page: number, doEmit: boolean = true): LocalDataSource {\n this.pagingConf['page'] = page;\n super.setPage(page, doEmit);\n return this;\n }\n\n getSort(): any {\n return this.sortConf;\n }\n\n getFilter(): any {\n return this.filterConf;\n }\n\n getPaging(): any {\n return this.pagingConf;\n }\n\n protected prepareData(data: Array): Array {\n data = this.filter(data);\n data = this.sort(data);\n this.filteredAndSorted = data.slice(0);\n\n return this.paginate(data);\n }\n\n protected sort(data: Array): Array {\n if (this.sortConf) {\n this.sortConf.forEach((fieldConf) => {\n data = LocalSorter\n .sort(data, fieldConf['field'], fieldConf['direction'], fieldConf['compare']);\n });\n }\n return data;\n }\n\n // TODO: refactor?\n protected filter(data: Array): Array {\n if (this.filterConf.filters) {\n if (this.filterConf.andOperator) {\n this.filterConf.filters.forEach((fieldConf: any) => {\n if (fieldConf['search'].length > 0) {\n data = LocalFilter\n .filter(data, fieldConf['field'], fieldConf['search'], fieldConf['filter']);\n }\n });\n } else {\n let mergedData: any = [];\n this.filterConf.filters.forEach((fieldConf: any) => {\n if (fieldConf['search'].length > 0) {\n mergedData = mergedData.concat(LocalFilter\n .filter(data, fieldConf['field'], fieldConf['search'], fieldConf['filter']));\n }\n });\n // remove non unique items\n data = mergedData.filter((elem: any, pos: any, arr: any) => {\n return arr.indexOf(elem) === pos;\n });\n }\n }\n return data;\n }\n\n protected paginate(data: Array): Array {\n if (this.pagingConf && this.pagingConf['page'] && this.pagingConf['perPage']) {\n data = LocalPager.paginate(data, this.pagingConf['page'], this.pagingConf['perPage']);\n }\n return data;\n }\n}\n","import { Component, Input, Output, SimpleChange, EventEmitter, OnChanges, OnDestroy } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Grid } from './lib/grid';\nimport { DataSource } from './lib/data-source/data-source';\nimport { Row } from './lib/data-set/row';\nimport { deepExtend, getPageForRowIndex } from './lib/helpers';\nimport { LocalDataSource } from './lib/data-source/local/local.data-source';\n\n@Component({\n selector: 'ng2-smart-table',\n styleUrls: ['./ng2-smart-table.component.scss'],\n templateUrl: './ng2-smart-table.component.html',\n})\nexport class Ng2SmartTableComponent implements OnChanges, OnDestroy {\n\n @Input() source: any;\n @Input() settings: Object = {};\n\n @Output() rowSelect = new EventEmitter();\n @Output() rowDeselect = new EventEmitter();\n @Output() userRowSelect = new EventEmitter();\n @Output() delete = new EventEmitter();\n @Output() edit = new EventEmitter();\n @Output() create = new EventEmitter();\n @Output() custom = new EventEmitter();\n @Output() deleteConfirm = new EventEmitter();\n @Output() editConfirm = new EventEmitter();\n @Output() createConfirm = new EventEmitter();\n @Output() rowHover: EventEmitter = new EventEmitter();\n\n tableClass: string;\n tableId: string;\n perPageSelect: any;\n isHideHeader: boolean;\n isHideSubHeader: boolean;\n isPagerDisplay: boolean;\n rowClassFunction: Function;\n\n grid: Grid;\n defaultSettings: Object = {\n mode: 'inline', // inline|external|click-to-edit\n selectMode: 'single', // single|multi\n /**\n * Points to an element in all data\n *\n * when < 0 all lines must be deselected\n */\n selectedRowIndex: 0,\n switchPageToSelectedRowPage: false,\n hideHeader: false,\n hideSubHeader: false,\n actions: {\n columnTitle: 'Actions',\n add: true,\n edit: true,\n delete: true,\n custom: [],\n position: 'left', // left|right\n },\n filter: {\n inputClass: '',\n },\n edit: {\n inputClass: '',\n editButtonContent: 'Edit',\n saveButtonContent: 'Update',\n cancelButtonContent: 'Cancel',\n confirmSave: false,\n },\n add: {\n inputClass: '',\n addButtonContent: 'Add New',\n createButtonContent: 'Create',\n cancelButtonContent: 'Cancel',\n confirmCreate: false,\n },\n delete: {\n deleteButtonContent: 'Delete',\n confirmDelete: false,\n },\n attr: {\n id: '',\n class: '',\n },\n noDataMessage: 'No data found',\n columns: {},\n pager: {\n display: true,\n page: 1,\n perPage: 10,\n },\n rowClassFunction: () => '',\n };\n\n isAllSelected: boolean = false;\n\n private onSelectRowSubscription: Subscription;\n private onDeselectRowSubscription: Subscription;\n private destroyed$: Subject = new Subject();\n\n ngOnChanges(changes: { [propertyName: string]: SimpleChange }) {\n if (this.grid) {\n if (changes['settings']) {\n this.grid.setSettings(this.prepareSettings());\n }\n if (changes['source']) {\n this.source = this.prepareSource();\n this.grid.setSource(this.source);\n }\n } else {\n this.initGrid();\n }\n this.tableId = this.grid.getSetting('attr.id');\n this.tableClass = this.grid.getSetting('attr.class');\n this.isHideHeader = this.grid.getSetting('hideHeader');\n this.isHideSubHeader = this.grid.getSetting('hideSubHeader');\n this.isPagerDisplay = this.grid.getSetting('pager.display');\n this.isPagerDisplay = this.grid.getSetting('pager.display');\n this.perPageSelect = this.grid.getSetting('pager.perPageSelect');\n this.rowClassFunction = this.grid.getSetting('rowClassFunction');\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n }\n\n selectRow(index: number, switchPageToSelectedRowPage: boolean = this.grid.getSetting('switchPageToSelectedRowPage')): void {\n if (!this.grid) {\n return;\n }\n this.grid.settings.selectedRowIndex = index;\n if (this.isIndexOutOfRange(index)) {\n // we need to deselect all rows if we got an incorrect index\n this.deselectAllRows();\n return;\n }\n\n if (switchPageToSelectedRowPage) {\n const source: DataSource = this.source;\n const paging: { page: number, perPage: number } = source.getPaging();\n const page: number = getPageForRowIndex(index, paging.perPage);\n index = index % paging.perPage;\n this.grid.settings.selectedRowIndex = index;\n\n if (page !== paging.page) {\n source.setPage(page);\n return;\n }\n\n }\n\n const row: Row = this.grid.getRows()[index];\n if (row) {\n this.onSelectRow(row);\n } else {\n // we need to deselect all rows if we got an incorrect index\n this.deselectAllRows();\n }\n }\n\n private deselectAllRows(): void {\n this.grid.dataSet.deselectAll();\n this.emitDeselectRow(null);\n }\n\n editRowSelect(row: Row) {\n if (this.grid.getSetting('selectMode') === 'multi') {\n this.onMultipleSelectRow(row);\n } else {\n this.onSelectRow(row);\n }\n }\n\n onUserSelectRow(row: Row) {\n if (this.grid.getSetting('selectMode') !== 'multi') {\n this.grid.selectRow(row);\n this.emitUserSelectRow(row);\n this.emitSelectRow(row);\n }\n }\n\n onRowHover(row: Row) {\n this.rowHover.emit(row);\n }\n\n multipleSelectRow(row: Row) {\n this.grid.multipleSelectRow(row);\n this.emitUserSelectRow(row);\n this.emitSelectRow(row);\n }\n\n onSelectAllRows($event: any) {\n this.isAllSelected = !this.isAllSelected;\n this.grid.selectAllRows(this.isAllSelected);\n\n this.emitUserSelectRow(null);\n this.emitSelectRow(null);\n }\n\n onSelectRow(row: Row) {\n this.grid.selectRow(row);\n this.emitSelectRow(row);\n }\n\n onMultipleSelectRow(row: Row) {\n this.emitSelectRow(row);\n }\n\n initGrid() {\n this.source = this.prepareSource();\n this.grid = new Grid(this.source, this.prepareSettings());\n\n this.subscribeToOnSelectRow();\n this.subscribeToOnDeselectRow();\n }\n\n prepareSource(): DataSource {\n if (this.source instanceof DataSource) {\n return this.source;\n } else if (this.source instanceof Array) {\n return new LocalDataSource(this.source);\n }\n\n return new LocalDataSource();\n }\n\n prepareSettings(): Object {\n return deepExtend({}, this.defaultSettings, this.settings);\n }\n\n changePage($event: any) {\n this.resetAllSelector();\n }\n\n sort($event: any) {\n this.resetAllSelector();\n }\n\n filter($event: any) {\n this.resetAllSelector();\n }\n\n private resetAllSelector() {\n this.isAllSelected = false;\n }\n\n private emitUserSelectRow(row: Row) {\n const selectedRows = this.grid.getSelectedRows();\n\n this.userRowSelect.emit({\n data: row ? row.getData() : null,\n isSelected: row ? row.getIsSelected() : null,\n source: this.source,\n selected: selectedRows && selectedRows.length ? selectedRows.map((r: Row) => r.getData()) : [],\n });\n }\n\n private emitSelectRow(row: Row) {\n const data = {\n data: row ? row.getData() : null,\n isSelected: row ? row.getIsSelected() : null,\n source: this.source,\n };\n this.rowSelect.emit(data);\n if (!row?.isSelected) {\n this.rowDeselect.emit(data);\n }\n }\n\n private emitDeselectRow(row: Row): void {\n this.rowDeselect.emit({\n data: row ? row.getData() : null,\n isSelected: row ? row.getIsSelected() : null,\n source: this.source,\n });\n }\n\n private isIndexOutOfRange(index: number): boolean {\n const dataAmount: number = this.source?.count();\n return index < 0 || (typeof dataAmount === 'number' && index >= dataAmount);\n }\n\n private subscribeToOnSelectRow(): void {\n if (this.onSelectRowSubscription) {\n this.onSelectRowSubscription.unsubscribe();\n }\n this.onSelectRowSubscription = this.grid.onSelectRow()\n .pipe(takeUntil(this.destroyed$))\n .subscribe((row) => {\n this.emitSelectRow(row);\n });\n }\n\n private subscribeToOnDeselectRow(): void {\n if (this.onDeselectRowSubscription) {\n this.onDeselectRowSubscription.unsubscribe();\n }\n this.onDeselectRowSubscription = this.grid.onDeselectRow()\n .pipe(takeUntil(this.destroyed$))\n .subscribe((row) => {\n this.emitDeselectRow(row);\n });\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { CellModule } from './components/cell/cell.module';\nimport { FilterModule } from './components/filter/filter.module';\nimport { PagerModule } from './components/pager/pager.module';\nimport { TBodyModule } from './components/tbody/tbody.module';\nimport { THeadModule } from './components/thead/thead.module';\n\nimport { Ng2SmartTableComponent } from './ng2-smart-table.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n CellModule,\n FilterModule,\n PagerModule,\n TBodyModule,\n THeadModule,\n ],\n declarations: [\n Ng2SmartTableComponent,\n ],\n exports: [\n Ng2SmartTableComponent,\n ],\n})\nexport class Ng2SmartTableModule {\n}\n","export class ServerSourceConf {\n\n protected static readonly SORT_FIELD_KEY = '_sort';\n protected static readonly SORT_DIR_KEY = '_order';\n protected static readonly PAGER_PAGE_KEY = '_page';\n protected static readonly PAGER_LIMIT_KEY = '_limit';\n protected static readonly FILTER_FIELD_KEY = '#field#_like';\n protected static readonly TOTAL_KEY = 'x-total-count';\n protected static readonly DATA_KEY = '';\n\n endPoint: string;\n\n sortFieldKey: string;\n sortDirKey: string;\n pagerPageKey: string;\n pagerLimitKey: string;\n filterFieldKey: string;\n totalKey: string;\n dataKey: string;\n\n constructor(\n { endPoint = '', sortFieldKey = '', sortDirKey = '',\n pagerPageKey = '', pagerLimitKey = '', filterFieldKey = '', totalKey = '', dataKey = '' } = {}) {\n\n this.endPoint = endPoint ? endPoint : '';\n\n this.sortFieldKey = sortFieldKey ? sortFieldKey : ServerSourceConf.SORT_FIELD_KEY;\n this.sortDirKey = sortDirKey ? sortDirKey : ServerSourceConf.SORT_DIR_KEY;\n this.pagerPageKey = pagerPageKey ? pagerPageKey : ServerSourceConf.PAGER_PAGE_KEY;\n this.pagerLimitKey = pagerLimitKey ? pagerLimitKey : ServerSourceConf.PAGER_LIMIT_KEY;\n this.filterFieldKey = filterFieldKey ? filterFieldKey : ServerSourceConf.FILTER_FIELD_KEY;\n this.totalKey = totalKey ? totalKey : ServerSourceConf.TOTAL_KEY;\n this.dataKey = dataKey ? dataKey : ServerSourceConf.DATA_KEY;\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { LocalDataSource } from '../local/local.data-source';\nimport { ServerSourceConf } from './server-source.conf';\nimport { getDeepFromObject } from '../../helpers';\n\nimport { map } from 'rxjs/operators';\n\nexport class ServerDataSource extends LocalDataSource {\n\n protected conf: ServerSourceConf;\n\n protected lastRequestCount: number = 0;\n\n constructor(protected http: HttpClient, conf: ServerSourceConf | {} = {}) {\n super();\n\n this.conf = new ServerSourceConf(conf);\n\n if (!this.conf.endPoint) {\n throw new Error('At least endPoint must be specified as a configuration of the server data source.');\n }\n }\n\n count(): number {\n return this.lastRequestCount;\n }\n\n getElements(): Promise {\n return this.requestElements()\n .pipe(map(res => {\n this.lastRequestCount = this.extractTotalFromResponse(res);\n this.data = this.extractDataFromResponse(res);\n\n return this.data;\n })).toPromise();\n }\n\n /**\n * Extracts array of data from server response\n * @param res\n * @returns {any}\n */\n protected extractDataFromResponse(res: any): Array {\n const rawData = res.body;\n const data = !!this.conf.dataKey ? getDeepFromObject(rawData, this.conf.dataKey, []) : rawData;\n\n if (data instanceof Array) {\n return data;\n }\n\n throw new Error(`Data must be an array.\n Please check that data extracted from the server response by the key '${this.conf.dataKey}' exists and is array.`);\n }\n\n /**\n * Extracts total rows count from the server response\n * Looks for the count in the heders first, then in the response body\n * @param res\n * @returns {any}\n */\n protected extractTotalFromResponse(res: any): number {\n if (res.headers.has(this.conf.totalKey)) {\n return +res.headers.get(this.conf.totalKey);\n } else {\n const rawData = res.body;\n return getDeepFromObject(rawData, this.conf.totalKey, 0);\n }\n }\n\n protected requestElements(): Observable {\n let httpParams = this.createRequesParams();\n return this.http.get(this.conf.endPoint, { params: httpParams, observe: 'response' });\n }\n\n protected createRequesParams(): HttpParams {\n let httpParams = new HttpParams();\n\n httpParams = this.addSortRequestParams(httpParams);\n httpParams = this.addFilterRequestParams(httpParams);\n return this.addPagerRequestParams(httpParams);\n }\n\n protected addSortRequestParams(httpParams: HttpParams): HttpParams {\n if (this.sortConf) {\n this.sortConf.forEach((fieldConf) => {\n httpParams = httpParams.set(this.conf.sortFieldKey, fieldConf.field);\n httpParams = httpParams.set(this.conf.sortDirKey, fieldConf.direction.toUpperCase());\n });\n }\n\n return httpParams;\n }\n\n protected addFilterRequestParams(httpParams: HttpParams): HttpParams {\n\n if (this.filterConf.filters) {\n this.filterConf.filters.forEach((fieldConf: any) => {\n if (fieldConf['search']) {\n httpParams = httpParams.set(this.conf.filterFieldKey.replace('#field#', fieldConf['field']), fieldConf['search']);\n }\n });\n }\n\n return httpParams;\n }\n\n protected addPagerRequestParams(httpParams: HttpParams): HttpParams {\n\n if (this.pagingConf && this.pagingConf['page'] && this.pagingConf['perPage']) {\n httpParams = httpParams.set(this.conf.pagerPageKey, this.pagingConf['page']);\n httpParams = httpParams.set(this.conf.pagerLimitKey, this.pagingConf['perPage']);\n }\n\n return httpParams;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Extended CSSStyleDeclaration that includes a couple of drag-related\n * properties that aren't in the built-in TS typings.\n */\nexport interface DragCSSStyleDeclaration extends CSSStyleDeclaration {\n msScrollSnapType: string;\n scrollSnapType: string;\n webkitTapHighlightColor: string;\n}\n\n/**\n * Shallow-extends a stylesheet object with another stylesheet-like object.\n * Note that the keys in `source` have to be dash-cased.\n * @docs-private\n */\nexport function extendStyles(\n dest: CSSStyleDeclaration,\n source: Record,\n importantProperties?: Set,\n) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n const value = source[key];\n\n if (value) {\n dest.setProperty(key, value, importantProperties?.has(key) ? 'important' : '');\n } else {\n dest.removeProperty(key);\n }\n }\n }\n\n return dest;\n}\n\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * @param element Element on which to toggle the drag interactions.\n * @param enable Whether the drag interactions should be enabled.\n * @docs-private\n */\nexport function toggleNativeDragInteractions(element: HTMLElement, enable: boolean) {\n const userSelect = enable ? '' : 'none';\n\n extendStyles(element.style, {\n 'touch-action': enable ? '' : 'none',\n '-webkit-user-drag': enable ? '' : 'none',\n '-webkit-tap-highlight-color': enable ? '' : 'transparent',\n 'user-select': userSelect,\n '-ms-user-select': userSelect,\n '-webkit-user-select': userSelect,\n '-moz-user-select': userSelect,\n });\n}\n\n/**\n * Toggles whether an element is visible while preserving its dimensions.\n * @param element Element whose visibility to toggle\n * @param enable Whether the element should be visible.\n * @param importantProperties Properties to be set as `!important`.\n * @docs-private\n */\nexport function toggleVisibility(\n element: HTMLElement,\n enable: boolean,\n importantProperties?: Set,\n) {\n extendStyles(\n element.style,\n {\n position: enable ? '' : 'fixed',\n top: enable ? '' : '0',\n opacity: enable ? '' : '0',\n left: enable ? '' : '-999em',\n },\n importantProperties,\n );\n}\n\n/**\n * Combines a transform string with an optional other transform\n * that exited before the base transform was applied.\n */\nexport function combineTransforms(transform: string, initialTransform?: string): string {\n return initialTransform && initialTransform != 'none'\n ? transform + ' ' + initialTransform\n : transform;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value: string): number {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nexport function getTransformTransitionDurationInMs(element: HTMLElement): number {\n const computedStyle = getComputedStyle(element);\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n const propertyIndex = transitionedProperties.indexOf(property);\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n\n return (\n parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n parseCssTimeUnitsToMs(rawDelays[propertyIndex])\n );\n}\n\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle: CSSStyleDeclaration, name: string): string[] {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** Gets a mutable version of an element's bounding `ClientRect`. */\nexport function getMutableClientRect(element: Element): ClientRect {\n const clientRect = element.getBoundingClientRect();\n\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `ClientRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: clientRect.top,\n right: clientRect.right,\n bottom: clientRect.bottom,\n left: clientRect.left,\n width: clientRect.width,\n height: clientRect.height,\n x: clientRect.x,\n y: clientRect.y,\n } as ClientRect;\n}\n\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param clientRect ClientRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nexport function isInsideClientRect(clientRect: ClientRect, x: number, y: number) {\n const {top, bottom, left, right} = clientRect;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param clientRect `ClientRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nexport function adjustClientRect(\n clientRect: {\n top: number;\n bottom: number;\n left: number;\n right: number;\n width: number;\n height: number;\n },\n top: number,\n left: number,\n) {\n clientRect.top += top;\n clientRect.bottom = clientRect.top + clientRect.height;\n\n clientRect.left += left;\n clientRect.right = clientRect.left + clientRect.width;\n}\n\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nexport function isPointerNearClientRect(\n rect: ClientRect,\n threshold: number,\n pointerX: number,\n pointerY: number,\n): boolean {\n const {top, right, bottom, left, width, height} = rect;\n const xThreshold = width * threshold;\n const yThreshold = height * threshold;\n\n return (\n pointerY > top - yThreshold &&\n pointerY < bottom + yThreshold &&\n pointerX > left - xThreshold &&\n pointerX < right + xThreshold\n );\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {getMutableClientRect, adjustClientRect} from './client-rect';\n\n/** Object holding the scroll position of something. */\ninterface ScrollPosition {\n top: number;\n left: number;\n}\n\n/** Keeps track of the scroll position and dimensions of the parents of an element. */\nexport class ParentPositionTracker {\n /** Cached positions of the scrollable parent elements. */\n readonly positions = new Map<\n Document | HTMLElement,\n {\n scrollPosition: ScrollPosition;\n clientRect?: ClientRect;\n }\n >();\n\n constructor(private _document: Document) {}\n\n /** Clears the cached positions. */\n clear() {\n this.positions.clear();\n }\n\n /** Caches the positions. Should be called at the beginning of a drag sequence. */\n cache(elements: readonly HTMLElement[]) {\n this.clear();\n this.positions.set(this._document, {\n scrollPosition: this.getViewportScrollPosition(),\n });\n\n elements.forEach(element => {\n this.positions.set(element, {\n scrollPosition: {top: element.scrollTop, left: element.scrollLeft},\n clientRect: getMutableClientRect(element),\n });\n });\n }\n\n /** Handles scrolling while a drag is taking place. */\n handleScroll(event: Event): ScrollPosition | null {\n const target = _getEventTarget(event)!;\n const cachedPosition = this.positions.get(target);\n\n if (!cachedPosition) {\n return null;\n }\n\n const scrollPosition = cachedPosition.scrollPosition;\n let newTop: number;\n let newLeft: number;\n\n if (target === this._document) {\n const viewportScrollPosition = this.getViewportScrollPosition();\n newTop = viewportScrollPosition.top;\n newLeft = viewportScrollPosition.left;\n } else {\n newTop = (target as HTMLElement).scrollTop;\n newLeft = (target as HTMLElement).scrollLeft;\n }\n\n const topDifference = scrollPosition.top - newTop;\n const leftDifference = scrollPosition.left - newLeft;\n\n // Go through and update the cached positions of the scroll\n // parents that are inside the element that was scrolled.\n this.positions.forEach((position, node) => {\n if (position.clientRect && target !== node && target.contains(node)) {\n adjustClientRect(position.clientRect, topDifference, leftDifference);\n }\n });\n\n scrollPosition.top = newTop;\n scrollPosition.left = newLeft;\n\n return {top: topDifference, left: leftDifference};\n }\n\n /**\n * Gets the scroll position of the viewport. Note that we use the scrollX and scrollY directly,\n * instead of going through the `ViewportRuler`, because the first value the ruler looks at is\n * the top/left offset of the `document.documentElement` which works for most cases, but breaks\n * if the element is offset by something like the `BlockScrollStrategy`.\n */\n getViewportScrollPosition() {\n return {top: window.scrollY, left: window.scrollX};\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** Creates a deep clone of an element. */\nexport function deepCloneNode(node: HTMLElement): HTMLElement {\n const clone = node.cloneNode(true) as HTMLElement;\n const descendantsWithId = clone.querySelectorAll('[id]');\n const nodeName = node.nodeName.toLowerCase();\n\n // Remove the `id` to avoid having multiple elements with the same id on the page.\n clone.removeAttribute('id');\n\n for (let i = 0; i < descendantsWithId.length; i++) {\n descendantsWithId[i].removeAttribute('id');\n }\n\n if (nodeName === 'canvas') {\n transferCanvasData(node as HTMLCanvasElement, clone as HTMLCanvasElement);\n } else if (nodeName === 'input' || nodeName === 'select' || nodeName === 'textarea') {\n transferInputData(node as HTMLInputElement, clone as HTMLInputElement);\n }\n\n transferData('canvas', node, clone, transferCanvasData);\n transferData('input, textarea, select', node, clone, transferInputData);\n return clone;\n}\n\n/** Matches elements between an element and its clone and allows for their data to be cloned. */\nfunction transferData(\n selector: string,\n node: HTMLElement,\n clone: HTMLElement,\n callback: (source: T, clone: T) => void,\n) {\n const descendantElements = node.querySelectorAll(selector);\n\n if (descendantElements.length) {\n const cloneElements = clone.querySelectorAll(selector);\n\n for (let i = 0; i < descendantElements.length; i++) {\n callback(descendantElements[i], cloneElements[i]);\n }\n }\n}\n\n// Counter for unique cloned radio button names.\nlet cloneUniqueId = 0;\n\n/** Transfers the data of one input element to another. */\nfunction transferInputData(\n source: Element & {value: string},\n clone: Element & {value: string; name: string; type: string},\n) {\n // Browsers throw an error when assigning the value of a file input programmatically.\n if (clone.type !== 'file') {\n clone.value = source.value;\n }\n\n // Radio button `name` attributes must be unique for radio button groups\n // otherwise original radio buttons can lose their checked state\n // once the clone is inserted in the DOM.\n if (clone.type === 'radio' && clone.name) {\n clone.name = `mat-clone-${clone.name}-${cloneUniqueId++}`;\n }\n}\n\n/** Transfers the data of one canvas element to another. */\nfunction transferCanvasData(source: HTMLCanvasElement, clone: HTMLCanvasElement) {\n const context = clone.getContext('2d');\n\n if (context) {\n // In some cases `drawImage` can throw (e.g. if the canvas size is 0x0).\n // We can't do much about it so just ignore the error.\n try {\n context.drawImage(source, 0, 0);\n } catch {}\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EmbeddedViewRef, ElementRef, NgZone, ViewContainerRef, TemplateRef} from '@angular/core';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {Direction} from '@angular/cdk/bidi';\nimport {\n normalizePassiveListenerOptions,\n _getEventTarget,\n _getShadowRoot,\n} from '@angular/cdk/platform';\nimport {coerceBooleanProperty, coerceElement} from '@angular/cdk/coercion';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {Subscription, Subject, Observable} from 'rxjs';\nimport {DropListRefInternal as DropListRef} from './drop-list-ref';\nimport {DragDropRegistry} from './drag-drop-registry';\nimport {\n combineTransforms,\n DragCSSStyleDeclaration,\n extendStyles,\n toggleNativeDragInteractions,\n toggleVisibility,\n} from './dom/styling';\nimport {getTransformTransitionDurationInMs} from './dom/transition-duration';\nimport {getMutableClientRect, adjustClientRect} from './dom/client-rect';\nimport {ParentPositionTracker} from './dom/parent-position-tracker';\nimport {deepCloneNode} from './dom/clone-node';\n\n/** Object that can be used to configure the behavior of DragRef. */\nexport interface DragRefConfig {\n /**\n * Minimum amount of pixels that the user should\n * drag, before the CDK initiates a drag sequence.\n */\n dragStartThreshold: number;\n\n /**\n * Amount the pixels the user should drag before the CDK\n * considers them to have changed the drag direction.\n */\n pointerDirectionChangeThreshold: number;\n\n /** `z-index` for the absolutely-positioned elements that are created by the drag item. */\n zIndex?: number;\n\n /** Ref that the current drag item is nested in. */\n parentDragRef?: DragRef;\n}\n\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = normalizePassiveListenerOptions({passive: false});\n\n/**\n * Time in milliseconds for which to ignore mouse events, after\n * receiving a touch event. Used to avoid doing double work for\n * touch devices where the browser fires fake mouse events, in\n * addition to touch events.\n */\nconst MOUSE_EVENT_IGNORE_TIME = 800;\n\n// TODO(crisbeto): add an API for moving a draggable up/down the\n// list programmatically. Useful for keyboard controls.\n\n/**\n * Internal compile-time-only representation of a `DragRef`.\n * Used to avoid circular import issues between the `DragRef` and the `DropListRef`.\n * @docs-private\n */\nexport interface DragRefInternal extends DragRef {}\n\n/** Template that can be used to create a drag helper element (e.g. a preview or a placeholder). */\ninterface DragHelperTemplate {\n template: TemplateRef | null;\n viewContainer: ViewContainerRef;\n context: T;\n}\n\n/** Template that can be used to create a drag preview element. */\ninterface DragPreviewTemplate extends DragHelperTemplate {\n matchSize?: boolean;\n}\n\n/** Point on the page or within an element. */\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** Inline styles to be set as `!important` while dragging. */\nconst dragImportantProperties = new Set([\n // Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.\n 'position',\n]);\n\n/**\n * Possible places into which the preview of a drag item can be inserted.\n * - `global` - Preview will be inserted at the bottom of the ``. The advantage is that\n * you don't have to worry about `overflow: hidden` or `z-index`, but the item won't retain\n * its inherited styles.\n * - `parent` - Preview will be inserted into the parent of the drag item. The advantage is that\n * inherited styles will be preserved, but it may be clipped by `overflow: hidden` or not be\n * visible due to `z-index`. Furthermore, the preview is going to have an effect over selectors\n * like `:nth-child` and some flexbox configurations.\n * - `ElementRef | HTMLElement` - Preview will be inserted into a specific element.\n * Same advantages and disadvantages as `parent`.\n */\nexport type PreviewContainer = 'global' | 'parent' | ElementRef | HTMLElement;\n\n/**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n */\nexport class DragRef {\n /** Element displayed next to the user's pointer while the element is dragged. */\n private _preview: HTMLElement;\n\n /** Reference to the view of the preview element. */\n private _previewRef: EmbeddedViewRef | null;\n\n /** Container into which to insert the preview. */\n private _previewContainer: PreviewContainer | undefined;\n\n /** Reference to the view of the placeholder element. */\n private _placeholderRef: EmbeddedViewRef | null;\n\n /** Element that is rendered instead of the draggable item while it is being sorted. */\n private _placeholder: HTMLElement;\n\n /** Coordinates within the element at which the user picked up the element. */\n private _pickupPositionInElement: Point;\n\n /** Coordinates on the page at which the user picked up the element. */\n private _pickupPositionOnPage: Point;\n\n /**\n * Anchor node used to save the place in the DOM where the element was\n * picked up so that it can be restored at the end of the drag sequence.\n */\n private _anchor: Comment;\n\n /**\n * CSS `transform` applied to the element when it isn't being dragged. We need a\n * passive transform in order for the dragged element to retain its new position\n * after the user has stopped dragging and because we need to know the relative\n * position in case they start dragging again. This corresponds to `element.style.transform`.\n */\n private _passiveTransform: Point = {x: 0, y: 0};\n\n /** CSS `transform` that is applied to the element while it's being dragged. */\n private _activeTransform: Point = {x: 0, y: 0};\n\n /** Inline `transform` value that the element had before the first dragging sequence. */\n private _initialTransform?: string;\n\n /**\n * Whether the dragging sequence has been started. Doesn't\n * necessarily mean that the element has been moved.\n */\n private _hasStartedDragging = false;\n\n /** Whether the element has moved since the user started dragging it. */\n private _hasMoved: boolean;\n\n /** Drop container in which the DragRef resided when dragging began. */\n private _initialContainer: DropListRef;\n\n /** Index at which the item started in its initial container. */\n private _initialIndex: number;\n\n /** Cached positions of scrollable parent elements. */\n private _parentPositions: ParentPositionTracker;\n\n /** Emits when the item is being moved. */\n private readonly _moveEvents = new Subject<{\n source: DragRef;\n pointerPosition: {x: number; y: number};\n event: MouseEvent | TouchEvent;\n distance: Point;\n delta: {x: -1 | 0 | 1; y: -1 | 0 | 1};\n }>();\n\n /** Keeps track of the direction in which the user is dragging along each axis. */\n private _pointerDirectionDelta: {x: -1 | 0 | 1; y: -1 | 0 | 1};\n\n /** Pointer position at which the last change in the delta occurred. */\n private _pointerPositionAtLastDirectionChange: Point;\n\n /** Position of the pointer at the last pointer event. */\n private _lastKnownPointerPosition: Point;\n\n /**\n * Root DOM node of the drag instance. This is the element that will\n * be moved around as the user is dragging.\n */\n private _rootElement: HTMLElement;\n\n /**\n * Nearest ancestor SVG, relative to which coordinates are calculated if dragging SVGElement\n */\n private _ownerSVGElement: SVGSVGElement | null;\n\n /**\n * Inline style value of `-webkit-tap-highlight-color` at the time the\n * dragging was started. Used to restore the value once we're done dragging.\n */\n private _rootElementTapHighlight: string;\n\n /** Subscription to pointer movement events. */\n private _pointerMoveSubscription = Subscription.EMPTY;\n\n /** Subscription to the event that is dispatched when the user lifts their pointer. */\n private _pointerUpSubscription = Subscription.EMPTY;\n\n /** Subscription to the viewport being scrolled. */\n private _scrollSubscription = Subscription.EMPTY;\n\n /** Subscription to the viewport being resized. */\n private _resizeSubscription = Subscription.EMPTY;\n\n /**\n * Time at which the last touch event occurred. Used to avoid firing the same\n * events multiple times on touch devices where the browser will fire a fake\n * mouse event for each touch event, after a certain time.\n */\n private _lastTouchEventTime: number;\n\n /** Time at which the last dragging sequence was started. */\n private _dragStartTime: number;\n\n /** Cached reference to the boundary element. */\n private _boundaryElement: HTMLElement | null = null;\n\n /** Whether the native dragging interactions have been enabled on the root element. */\n private _nativeInteractionsEnabled = true;\n\n /** Client rect of the root element when the dragging sequence has started. */\n private _initialClientRect?: ClientRect;\n\n /** Cached dimensions of the preview element. Should be read via `_getPreviewRect`. */\n private _previewRect?: ClientRect;\n\n /** Cached dimensions of the boundary element. */\n private _boundaryRect?: ClientRect;\n\n /** Element that will be used as a template to create the draggable item's preview. */\n private _previewTemplate?: DragPreviewTemplate | null;\n\n /** Template for placeholder element rendered to show where a draggable would be dropped. */\n private _placeholderTemplate?: DragHelperTemplate | null;\n\n /** Elements that can be used to drag the draggable item. */\n private _handles: HTMLElement[] = [];\n\n /** Registered handles that are currently disabled. */\n private _disabledHandles = new Set();\n\n /** Droppable container that the draggable is a part of. */\n private _dropContainer?: DropListRef;\n\n /** Layout direction of the item. */\n private _direction: Direction = 'ltr';\n\n /** Ref that the current drag item is nested in. */\n private _parentDragRef: DragRef | null;\n\n /**\n * Cached shadow root that the element is placed in. `null` means that the element isn't in\n * the shadow DOM and `undefined` means that it hasn't been resolved yet. Should be read via\n * `_getShadowRoot`, not directly.\n */\n private _cachedShadowRoot: ShadowRoot | null | undefined;\n\n /** Axis along which dragging is locked. */\n lockAxis: 'x' | 'y';\n\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n dragStartDelay: number | {touch: number; mouse: number} = 0;\n\n /** Class to be added to the preview element. */\n previewClass: string | string[] | undefined;\n\n /** Whether starting to drag this element is disabled. */\n get disabled(): boolean {\n return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);\n }\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._toggleNativeDragInteractions();\n this._handles.forEach(handle => toggleNativeDragInteractions(handle, newValue));\n }\n }\n private _disabled = false;\n\n /** Emits as the drag sequence is being prepared. */\n readonly beforeStarted = new Subject();\n\n /** Emits when the user starts dragging the item. */\n readonly started = new Subject<{source: DragRef; event: MouseEvent | TouchEvent}>();\n\n /** Emits when the user has released a drag item, before any animations have started. */\n readonly released = new Subject<{source: DragRef; event: MouseEvent | TouchEvent}>();\n\n /** Emits when the user stops dragging an item in the container. */\n readonly ended = new Subject<{\n source: DragRef;\n distance: Point;\n dropPoint: Point;\n event: MouseEvent | TouchEvent;\n }>();\n\n /** Emits when the user has moved the item into a new container. */\n readonly entered = new Subject<{container: DropListRef; item: DragRef; currentIndex: number}>();\n\n /** Emits when the user removes the item its container by dragging it into another container. */\n readonly exited = new Subject<{container: DropListRef; item: DragRef}>();\n\n /** Emits when the user drops the item inside a container. */\n readonly dropped = new Subject<{\n previousIndex: number;\n currentIndex: number;\n item: DragRef;\n container: DropListRef;\n previousContainer: DropListRef;\n distance: Point;\n dropPoint: Point;\n isPointerOverContainer: boolean;\n event: MouseEvent | TouchEvent;\n }>();\n\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n readonly moved: Observable<{\n source: DragRef;\n pointerPosition: {x: number; y: number};\n event: MouseEvent | TouchEvent;\n distance: Point;\n delta: {x: -1 | 0 | 1; y: -1 | 0 | 1};\n }> = this._moveEvents;\n\n /** Arbitrary data that can be attached to the drag item. */\n data: T;\n\n /**\n * Function that can be used to customize the logic of how the position of the drag item\n * is limited while it's being dragged. Gets called with a point containing the current position\n * of the user's pointer on the page, a reference to the item being dragged and its dimensions.\n * Should return a point describing where the item should be rendered.\n */\n constrainPosition?: (\n userPointerPosition: Point,\n dragRef: DragRef,\n dimensions: ClientRect,\n pickupPositionInElement: Point,\n ) => Point;\n\n constructor(\n element: ElementRef | HTMLElement,\n private _config: DragRefConfig,\n private _document: Document,\n private _ngZone: NgZone,\n private _viewportRuler: ViewportRuler,\n private _dragDropRegistry: DragDropRegistry,\n ) {\n this.withRootElement(element).withParent(_config.parentDragRef || null);\n this._parentPositions = new ParentPositionTracker(_document);\n _dragDropRegistry.registerDragItem(this);\n }\n\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement(): HTMLElement {\n return this._placeholder;\n }\n\n /** Returns the root draggable element. */\n getRootElement(): HTMLElement {\n return this._rootElement;\n }\n\n /**\n * Gets the currently-visible element that represents the drag item.\n * While dragging this is the placeholder, otherwise it's the root element.\n */\n getVisibleElement(): HTMLElement {\n return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();\n }\n\n /** Registers the handles that can be used to drag the element. */\n withHandles(handles: (HTMLElement | ElementRef)[]): this {\n this._handles = handles.map(handle => coerceElement(handle));\n this._handles.forEach(handle => toggleNativeDragInteractions(handle, this.disabled));\n this._toggleNativeDragInteractions();\n\n // Delete any lingering disabled handles that may have been destroyed. Note that we re-create\n // the set, rather than iterate over it and filter out the destroyed handles, because while\n // the ES spec allows for sets to be modified while they're being iterated over, some polyfills\n // use an array internally which may throw an error.\n const disabledHandles = new Set();\n this._disabledHandles.forEach(handle => {\n if (this._handles.indexOf(handle) > -1) {\n disabledHandles.add(handle);\n }\n });\n this._disabledHandles = disabledHandles;\n return this;\n }\n\n /**\n * Registers the template that should be used for the drag preview.\n * @param template Template that from which to stamp out the preview.\n */\n withPreviewTemplate(template: DragPreviewTemplate | null): this {\n this._previewTemplate = template;\n return this;\n }\n\n /**\n * Registers the template that should be used for the drag placeholder.\n * @param template Template that from which to stamp out the placeholder.\n */\n withPlaceholderTemplate(template: DragHelperTemplate | null): this {\n this._placeholderTemplate = template;\n return this;\n }\n\n /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n */\n withRootElement(rootElement: ElementRef | HTMLElement): this {\n const element = coerceElement(rootElement);\n\n if (element !== this._rootElement) {\n if (this._rootElement) {\n this._removeRootElementListeners(this._rootElement);\n }\n\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n element.addEventListener('dragstart', this._nativeDragStart, activeEventListenerOptions);\n });\n this._initialTransform = undefined;\n this._rootElement = element;\n }\n\n if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n this._ownerSVGElement = this._rootElement.ownerSVGElement;\n }\n\n return this;\n }\n\n /**\n * Element to which the draggable's position will be constrained.\n */\n withBoundaryElement(boundaryElement: ElementRef | HTMLElement | null): this {\n this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;\n this._resizeSubscription.unsubscribe();\n if (boundaryElement) {\n this._resizeSubscription = this._viewportRuler\n .change(10)\n .subscribe(() => this._containInsideBoundaryOnResize());\n }\n return this;\n }\n\n /** Sets the parent ref that the ref is nested in. */\n withParent(parent: DragRef | null): this {\n this._parentDragRef = parent;\n return this;\n }\n\n /** Removes the dragging functionality from the DOM element. */\n dispose() {\n this._removeRootElementListeners(this._rootElement);\n\n // Do this check before removing from the registry since it'll\n // stop being considered as dragged once it is removed.\n if (this.isDragging()) {\n // Since we move out the element to the end of the body while it's being\n // dragged, we have to make sure that it's removed if it gets destroyed.\n this._rootElement?.remove();\n }\n\n this._anchor?.remove();\n this._destroyPreview();\n this._destroyPlaceholder();\n this._dragDropRegistry.removeDragItem(this);\n this._removeSubscriptions();\n this.beforeStarted.complete();\n this.started.complete();\n this.released.complete();\n this.ended.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this._moveEvents.complete();\n this._handles = [];\n this._disabledHandles.clear();\n this._dropContainer = undefined;\n this._resizeSubscription.unsubscribe();\n this._parentPositions.clear();\n this._boundaryElement =\n this._rootElement =\n this._ownerSVGElement =\n this._placeholderTemplate =\n this._previewTemplate =\n this._anchor =\n this._parentDragRef =\n null!;\n }\n\n /** Checks whether the element is currently being dragged. */\n isDragging(): boolean {\n return this._hasStartedDragging && this._dragDropRegistry.isDragging(this);\n }\n\n /** Resets a standalone drag item to its initial position. */\n reset(): void {\n this._rootElement.style.transform = this._initialTransform || '';\n this._activeTransform = {x: 0, y: 0};\n this._passiveTransform = {x: 0, y: 0};\n }\n\n /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param handle Handle element that should be disabled.\n */\n disableHandle(handle: HTMLElement) {\n if (!this._disabledHandles.has(handle) && this._handles.indexOf(handle) > -1) {\n this._disabledHandles.add(handle);\n toggleNativeDragInteractions(handle, true);\n }\n }\n\n /**\n * Enables a handle, if it has been disabled.\n * @param handle Handle element to be enabled.\n */\n enableHandle(handle: HTMLElement) {\n if (this._disabledHandles.has(handle)) {\n this._disabledHandles.delete(handle);\n toggleNativeDragInteractions(handle, this.disabled);\n }\n }\n\n /** Sets the layout direction of the draggable item. */\n withDirection(direction: Direction): this {\n this._direction = direction;\n return this;\n }\n\n /** Sets the container that the item is part of. */\n _withDropContainer(container: DropListRef) {\n this._dropContainer = container;\n }\n\n /**\n * Gets the current position in pixels the draggable outside of a drop container.\n */\n getFreeDragPosition(): Readonly {\n const position = this.isDragging() ? this._activeTransform : this._passiveTransform;\n return {x: position.x, y: position.y};\n }\n\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n setFreeDragPosition(value: Point): this {\n this._activeTransform = {x: 0, y: 0};\n this._passiveTransform.x = value.x;\n this._passiveTransform.y = value.y;\n\n if (!this._dropContainer) {\n this._applyRootElementTransform(value.x, value.y);\n }\n\n return this;\n }\n\n /**\n * Sets the container into which to insert the preview element.\n * @param value Container into which to insert the preview.\n */\n withPreviewContainer(value: PreviewContainer): this {\n this._previewContainer = value;\n return this;\n }\n\n /** Updates the item's sort order based on the last-known pointer position. */\n _sortFromLastPointerPosition() {\n const position = this._lastKnownPointerPosition;\n\n if (position && this._dropContainer) {\n this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);\n }\n }\n\n /** Unsubscribes from the global subscriptions. */\n private _removeSubscriptions() {\n this._pointerMoveSubscription.unsubscribe();\n this._pointerUpSubscription.unsubscribe();\n this._scrollSubscription.unsubscribe();\n }\n\n /** Destroys the preview element and its ViewRef. */\n private _destroyPreview() {\n this._preview?.remove();\n this._previewRef?.destroy();\n this._preview = this._previewRef = null!;\n }\n\n /** Destroys the placeholder element and its ViewRef. */\n private _destroyPlaceholder() {\n this._placeholder?.remove();\n this._placeholderRef?.destroy();\n this._placeholder = this._placeholderRef = null!;\n }\n\n /** Handler for the `mousedown`/`touchstart` events. */\n private _pointerDown = (event: MouseEvent | TouchEvent) => {\n this.beforeStarted.next();\n\n // Delegate the event based on whether it started from a handle or the element itself.\n if (this._handles.length) {\n const targetHandle = this._getTargetHandle(event);\n\n if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n this._initializeDragSequence(targetHandle, event);\n }\n } else if (!this.disabled) {\n this._initializeDragSequence(this._rootElement, event);\n }\n };\n\n /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\n private _pointerMove = (event: MouseEvent | TouchEvent) => {\n const pointerPosition = this._getPointerPositionOnPage(event);\n\n if (!this._hasStartedDragging) {\n const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);\n const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);\n const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;\n\n // Only start dragging after the user has moved more than the minimum distance in either\n // direction. Note that this is preferable over doing something like `skip(minimumDistance)`\n // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n // per pixel of movement (e.g. if the user moves their pointer quickly).\n if (isOverThreshold) {\n const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);\n const container = this._dropContainer;\n\n if (!isDelayElapsed) {\n this._endDragSequence(event);\n return;\n }\n\n // Prevent other drag sequences from starting while something in the container is still\n // being dragged. This can happen while we're waiting for the drop animation to finish\n // and can cause errors, because some elements might still be moving around.\n if (!container || (!container.isDragging() && !container.isReceiving())) {\n // Prevent the default action as soon as the dragging sequence is considered as\n // \"started\" since waiting for the next event can allow the device to begin scrolling.\n event.preventDefault();\n this._hasStartedDragging = true;\n this._ngZone.run(() => this._startDragSequence(event));\n }\n }\n\n return;\n }\n\n // We prevent the default action down here so that we know that dragging has started. This is\n // important for touch devices where doing this too early can unnecessarily block scrolling,\n // if there's a dragging delay.\n event.preventDefault();\n\n const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);\n this._hasMoved = true;\n this._lastKnownPointerPosition = pointerPosition;\n this._updatePointerDirectionDelta(constrainedPointerPosition);\n\n if (this._dropContainer) {\n this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);\n } else {\n // If there's a position constraint function, we want the element's top/left to be at the\n // specific position on the page. Use the initial position as a reference if that's the case.\n const offset = this.constrainPosition ? this._initialClientRect! : this._pickupPositionOnPage;\n const activeTransform = this._activeTransform;\n activeTransform.x = constrainedPointerPosition.x - offset.x + this._passiveTransform.x;\n activeTransform.y = constrainedPointerPosition.y - offset.y + this._passiveTransform.y;\n this._applyRootElementTransform(activeTransform.x, activeTransform.y);\n }\n\n // Since this event gets fired for every pixel while dragging, we only\n // want to fire it if the consumer opted into it. Also we have to\n // re-enter the zone because we run all of the events on the outside.\n if (this._moveEvents.observers.length) {\n this._ngZone.run(() => {\n this._moveEvents.next({\n source: this,\n pointerPosition: constrainedPointerPosition,\n event,\n distance: this._getDragDistance(constrainedPointerPosition),\n delta: this._pointerDirectionDelta,\n });\n });\n }\n };\n\n /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\n private _pointerUp = (event: MouseEvent | TouchEvent) => {\n this._endDragSequence(event);\n };\n\n /**\n * Clears subscriptions and stops the dragging sequence.\n * @param event Browser event object that ended the sequence.\n */\n private _endDragSequence(event: MouseEvent | TouchEvent) {\n // Note that here we use `isDragging` from the service, rather than from `this`.\n // The difference is that the one from the service reflects whether a dragging sequence\n // has been initiated, whereas the one on `this` includes whether the user has passed\n // the minimum dragging threshold.\n if (!this._dragDropRegistry.isDragging(this)) {\n return;\n }\n\n this._removeSubscriptions();\n this._dragDropRegistry.stopDragging(this);\n this._toggleNativeDragInteractions();\n\n if (this._handles) {\n (this._rootElement.style as DragCSSStyleDeclaration).webkitTapHighlightColor =\n this._rootElementTapHighlight;\n }\n\n if (!this._hasStartedDragging) {\n return;\n }\n\n this.released.next({source: this, event});\n\n if (this._dropContainer) {\n // Stop scrolling immediately, instead of waiting for the animation to finish.\n this._dropContainer._stopScrolling();\n this._animatePreviewToPlaceholder().then(() => {\n this._cleanupDragArtifacts(event);\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n });\n } else {\n // Convert the active transform into a passive one. This means that next time\n // the user starts dragging the item, its position will be calculated relatively\n // to the new passive transform.\n this._passiveTransform.x = this._activeTransform.x;\n const pointerPosition = this._getPointerPositionOnPage(event);\n this._passiveTransform.y = this._activeTransform.y;\n this._ngZone.run(() => {\n this.ended.next({\n source: this,\n distance: this._getDragDistance(pointerPosition),\n dropPoint: pointerPosition,\n event,\n });\n });\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n }\n }\n\n /** Starts the dragging sequence. */\n private _startDragSequence(event: MouseEvent | TouchEvent) {\n if (isTouchEvent(event)) {\n this._lastTouchEventTime = Date.now();\n }\n\n this._toggleNativeDragInteractions();\n\n const dropContainer = this._dropContainer;\n\n if (dropContainer) {\n const element = this._rootElement;\n const parent = element.parentNode as HTMLElement;\n const placeholder = (this._placeholder = this._createPlaceholderElement());\n const anchor = (this._anchor = this._anchor || this._document.createComment(''));\n\n // Needs to happen before the root element is moved.\n const shadowRoot = this._getShadowRoot();\n\n // Insert an anchor node so that we can restore the element's position in the DOM.\n parent.insertBefore(anchor, element);\n\n // There's no risk of transforms stacking when inside a drop container so\n // we can keep the initial transform up to date any time dragging starts.\n this._initialTransform = element.style.transform || '';\n\n // Create the preview after the initial transform has\n // been cached, because it can be affected by the transform.\n this._preview = this._createPreviewElement();\n\n // We move the element out at the end of the body and we make it hidden, because keeping it in\n // place will throw off the consumer's `:last-child` selectors. We can't remove the element\n // from the DOM completely, because iOS will stop firing all subsequent events in the chain.\n toggleVisibility(element, false, dragImportantProperties);\n this._document.body.appendChild(parent.replaceChild(placeholder, element));\n this._getPreviewInsertionPoint(parent, shadowRoot).appendChild(this._preview);\n this.started.next({source: this, event}); // Emit before notifying the container.\n dropContainer.start();\n this._initialContainer = dropContainer;\n this._initialIndex = dropContainer.getItemIndex(this);\n } else {\n this.started.next({source: this, event});\n this._initialContainer = this._initialIndex = undefined!;\n }\n\n // Important to run after we've called `start` on the parent container\n // so that it has had time to resolve its scrollable parents.\n this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);\n }\n\n /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @param referenceElement Element that started the drag sequence.\n * @param event Browser event object that started the sequence.\n */\n private _initializeDragSequence(referenceElement: HTMLElement, event: MouseEvent | TouchEvent) {\n // Stop propagation if the item is inside another\n // draggable so we don't start multiple drag sequences.\n if (this._parentDragRef) {\n event.stopPropagation();\n }\n\n const isDragging = this.isDragging();\n const isTouchSequence = isTouchEvent(event);\n const isAuxiliaryMouseButton = !isTouchSequence && (event as MouseEvent).button !== 0;\n const rootElement = this._rootElement;\n const target = _getEventTarget(event);\n const isSyntheticEvent =\n !isTouchSequence &&\n this._lastTouchEventTime &&\n this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();\n const isFakeEvent = isTouchSequence\n ? isFakeTouchstartFromScreenReader(event as TouchEvent)\n : isFakeMousedownFromScreenReader(event as MouseEvent);\n\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`\n // events from firing on touch devices.\n if (target && (target as HTMLElement).draggable && event.type === 'mousedown') {\n event.preventDefault();\n }\n\n // Abort if the user is already dragging or is using a mouse button other than the primary one.\n if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent || isFakeEvent) {\n return;\n }\n\n // If we've got handles, we need to disable the tap highlight on the entire root element,\n // otherwise iOS will still add it, even though all the drag interactions on the handle\n // are disabled.\n if (this._handles.length) {\n const rootStyles = rootElement.style as DragCSSStyleDeclaration;\n this._rootElementTapHighlight = rootStyles.webkitTapHighlightColor || '';\n rootStyles.webkitTapHighlightColor = 'transparent';\n }\n\n this._hasStartedDragging = this._hasMoved = false;\n\n // Avoid multiple subscriptions and memory leaks when multi touch\n // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)\n this._removeSubscriptions();\n this._initialClientRect = this._rootElement.getBoundingClientRect();\n this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);\n this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n this._scrollSubscription = this._dragDropRegistry\n .scrolled(this._getShadowRoot())\n .subscribe(scrollEvent => this._updateOnScroll(scrollEvent));\n\n if (this._boundaryElement) {\n this._boundaryRect = getMutableClientRect(this._boundaryElement);\n }\n\n // If we have a custom preview we can't know ahead of time how large it'll be so we position\n // it next to the cursor. The exception is when the consumer has opted into making the preview\n // the same size as the root element, in which case we do know the size.\n const previewTemplate = this._previewTemplate;\n this._pickupPositionInElement =\n previewTemplate && previewTemplate.template && !previewTemplate.matchSize\n ? {x: 0, y: 0}\n : this._getPointerPositionInElement(this._initialClientRect, referenceElement, event);\n const pointerPosition =\n (this._pickupPositionOnPage =\n this._lastKnownPointerPosition =\n this._getPointerPositionOnPage(event));\n this._pointerDirectionDelta = {x: 0, y: 0};\n this._pointerPositionAtLastDirectionChange = {x: pointerPosition.x, y: pointerPosition.y};\n this._dragStartTime = Date.now();\n this._dragDropRegistry.startDragging(this, event);\n }\n\n /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\n private _cleanupDragArtifacts(event: MouseEvent | TouchEvent) {\n // Restore the element's visibility and insert it at its old position in the DOM.\n // It's important that we maintain the position, because moving the element around in the DOM\n // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,\n // while moving the existing elements in all other cases.\n toggleVisibility(this._rootElement, true, dragImportantProperties);\n this._anchor.parentNode!.replaceChild(this._rootElement, this._anchor);\n\n this._destroyPreview();\n this._destroyPlaceholder();\n this._initialClientRect =\n this._boundaryRect =\n this._previewRect =\n this._initialTransform =\n undefined;\n\n // Re-enter the NgZone since we bound `document` events on the outside.\n this._ngZone.run(() => {\n const container = this._dropContainer!;\n const currentIndex = container.getItemIndex(this);\n const pointerPosition = this._getPointerPositionOnPage(event);\n const distance = this._getDragDistance(pointerPosition);\n const isPointerOverContainer = container._isOverContainer(\n pointerPosition.x,\n pointerPosition.y,\n );\n\n this.ended.next({source: this, distance, dropPoint: pointerPosition, event});\n this.dropped.next({\n item: this,\n currentIndex,\n previousIndex: this._initialIndex,\n container: container,\n previousContainer: this._initialContainer,\n isPointerOverContainer,\n distance,\n dropPoint: pointerPosition,\n event,\n });\n container.drop(\n this,\n currentIndex,\n this._initialIndex,\n this._initialContainer,\n isPointerOverContainer,\n distance,\n pointerPosition,\n event,\n );\n this._dropContainer = this._initialContainer;\n });\n }\n\n /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n */\n private _updateActiveDropContainer({x, y}: Point, {x: rawX, y: rawY}: Point) {\n // Drop container that draggable has been moved into.\n let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);\n\n // If we couldn't find a new container to move the item into, and the item has left its\n // initial container, check whether the it's over the initial container. This handles the\n // case where two containers are connected one way and the user tries to undo dragging an\n // item into a new container.\n if (\n !newContainer &&\n this._dropContainer !== this._initialContainer &&\n this._initialContainer._isOverContainer(x, y)\n ) {\n newContainer = this._initialContainer;\n }\n\n if (newContainer && newContainer !== this._dropContainer) {\n this._ngZone.run(() => {\n // Notify the old container that the item has left.\n this.exited.next({item: this, container: this._dropContainer!});\n this._dropContainer!.exit(this);\n // Notify the new container that the item has entered.\n this._dropContainer = newContainer!;\n this._dropContainer.enter(\n this,\n x,\n y,\n newContainer === this._initialContainer &&\n // If we're re-entering the initial container and sorting is disabled,\n // put item the into its starting index to begin with.\n newContainer.sortingDisabled\n ? this._initialIndex\n : undefined,\n );\n this.entered.next({\n item: this,\n container: newContainer!,\n currentIndex: newContainer!.getItemIndex(this),\n });\n });\n }\n\n // Dragging may have been interrupted as a result of the events above.\n if (this.isDragging()) {\n this._dropContainer!._startScrollingIfNecessary(rawX, rawY);\n this._dropContainer!._sortItem(this, x, y, this._pointerDirectionDelta);\n\n if (this.constrainPosition) {\n this._applyPreviewTransform(x, y);\n } else {\n this._applyPreviewTransform(\n x - this._pickupPositionInElement.x,\n y - this._pickupPositionInElement.y,\n );\n }\n }\n }\n\n /**\n * Creates the element that will be rendered next to the user's pointer\n * and will be used as a preview of the element that is being dragged.\n */\n private _createPreviewElement(): HTMLElement {\n const previewConfig = this._previewTemplate;\n const previewClass = this.previewClass;\n const previewTemplate = previewConfig ? previewConfig.template : null;\n let preview: HTMLElement;\n\n if (previewTemplate && previewConfig) {\n // Measure the element before we've inserted the preview\n // since the insertion could throw off the measurement.\n const rootRect = previewConfig.matchSize ? this._initialClientRect : null;\n const viewRef = previewConfig.viewContainer.createEmbeddedView(\n previewTemplate,\n previewConfig.context,\n );\n viewRef.detectChanges();\n preview = getRootNode(viewRef, this._document);\n this._previewRef = viewRef;\n if (previewConfig.matchSize) {\n matchElementSize(preview, rootRect!);\n } else {\n preview.style.transform = getTransform(\n this._pickupPositionOnPage.x,\n this._pickupPositionOnPage.y,\n );\n }\n } else {\n preview = deepCloneNode(this._rootElement);\n matchElementSize(preview, this._initialClientRect!);\n\n if (this._initialTransform) {\n preview.style.transform = this._initialTransform;\n }\n }\n\n extendStyles(\n preview.style,\n {\n // It's important that we disable the pointer events on the preview, because\n // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.\n 'pointer-events': 'none',\n // We have to reset the margin, because it can throw off positioning relative to the viewport.\n 'margin': '0',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'z-index': `${this._config.zIndex || 1000}`,\n },\n dragImportantProperties,\n );\n\n toggleNativeDragInteractions(preview, false);\n preview.classList.add('cdk-drag-preview');\n preview.setAttribute('dir', this._direction);\n\n if (previewClass) {\n if (Array.isArray(previewClass)) {\n previewClass.forEach(className => preview.classList.add(className));\n } else {\n preview.classList.add(previewClass);\n }\n }\n\n return preview;\n }\n\n /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @returns Promise that resolves when the animation completes.\n */\n private _animatePreviewToPlaceholder(): Promise {\n // If the user hasn't moved yet, the transitionend event won't fire.\n if (!this._hasMoved) {\n return Promise.resolve();\n }\n\n const placeholderRect = this._placeholder.getBoundingClientRect();\n\n // Apply the class that adds a transition to the preview.\n this._preview.classList.add('cdk-drag-animating');\n\n // Move the preview to the placeholder position.\n this._applyPreviewTransform(placeholderRect.left, placeholderRect.top);\n\n // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since\n // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to\n // apply its style, we take advantage of the available info to figure out whether we need to\n // bind the event in the first place.\n const duration = getTransformTransitionDurationInMs(this._preview);\n\n if (duration === 0) {\n return Promise.resolve();\n }\n\n return this._ngZone.runOutsideAngular(() => {\n return new Promise(resolve => {\n const handler = ((event: TransitionEvent) => {\n if (\n !event ||\n (_getEventTarget(event) === this._preview && event.propertyName === 'transform')\n ) {\n this._preview?.removeEventListener('transitionend', handler);\n resolve();\n clearTimeout(timeout);\n }\n }) as EventListenerOrEventListenerObject;\n\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n const timeout = setTimeout(handler as Function, duration * 1.5);\n this._preview.addEventListener('transitionend', handler);\n });\n });\n }\n\n /** Creates an element that will be shown instead of the current element while dragging. */\n private _createPlaceholderElement(): HTMLElement {\n const placeholderConfig = this._placeholderTemplate;\n const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;\n let placeholder: HTMLElement;\n\n if (placeholderTemplate) {\n this._placeholderRef = placeholderConfig!.viewContainer.createEmbeddedView(\n placeholderTemplate,\n placeholderConfig!.context,\n );\n this._placeholderRef.detectChanges();\n placeholder = getRootNode(this._placeholderRef, this._document);\n } else {\n placeholder = deepCloneNode(this._rootElement);\n }\n\n // Stop pointer events on the preview so the user can't\n // interact with it while the preview is animating.\n placeholder.style.pointerEvents = 'none';\n placeholder.classList.add('cdk-drag-placeholder');\n return placeholder;\n }\n\n /**\n * Figures out the coordinates at which an element was picked up.\n * @param referenceElement Element that initiated the dragging.\n * @param event Event that initiated the dragging.\n */\n private _getPointerPositionInElement(\n elementRect: ClientRect,\n referenceElement: HTMLElement,\n event: MouseEvent | TouchEvent,\n ): Point {\n const handleElement = referenceElement === this._rootElement ? null : referenceElement;\n const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;\n const point = isTouchEvent(event) ? event.targetTouches[0] : event;\n const scrollPosition = this._getViewportScrollPosition();\n const x = point.pageX - referenceRect.left - scrollPosition.left;\n const y = point.pageY - referenceRect.top - scrollPosition.top;\n\n return {\n x: referenceRect.left - elementRect.left + x,\n y: referenceRect.top - elementRect.top + y,\n };\n }\n\n /** Determines the point of the page that was touched by the user. */\n private _getPointerPositionOnPage(event: MouseEvent | TouchEvent): Point {\n const scrollPosition = this._getViewportScrollPosition();\n const point = isTouchEvent(event)\n ? // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n // Also note that on real devices we're guaranteed for either `touches` or `changedTouches`\n // to have a value, but Firefox in device emulation mode has a bug where both can be empty\n // for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid\n // throwing an error. The value returned here will be incorrect, but since this only\n // breaks inside a developer tool and the value is only used for secondary information,\n // we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.\n event.touches[0] || event.changedTouches[0] || {pageX: 0, pageY: 0}\n : event;\n\n const x = point.pageX - scrollPosition.left;\n const y = point.pageY - scrollPosition.top;\n\n // if dragging SVG element, try to convert from the screen coordinate system to the SVG\n // coordinate system\n if (this._ownerSVGElement) {\n const svgMatrix = this._ownerSVGElement.getScreenCTM();\n if (svgMatrix) {\n const svgPoint = this._ownerSVGElement.createSVGPoint();\n svgPoint.x = x;\n svgPoint.y = y;\n return svgPoint.matrixTransform(svgMatrix.inverse());\n }\n }\n\n return {x, y};\n }\n\n /** Gets the pointer position on the page, accounting for any position constraints. */\n private _getConstrainedPointerPosition(point: Point): Point {\n const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;\n let {x, y} = this.constrainPosition\n ? this.constrainPosition(point, this, this._initialClientRect!, this._pickupPositionInElement)\n : point;\n\n if (this.lockAxis === 'x' || dropContainerLock === 'x') {\n y = this._pickupPositionOnPage.y;\n } else if (this.lockAxis === 'y' || dropContainerLock === 'y') {\n x = this._pickupPositionOnPage.x;\n }\n\n if (this._boundaryRect) {\n const {x: pickupX, y: pickupY} = this._pickupPositionInElement;\n const boundaryRect = this._boundaryRect;\n const {width: previewWidth, height: previewHeight} = this._getPreviewRect();\n const minY = boundaryRect.top + pickupY;\n const maxY = boundaryRect.bottom - (previewHeight - pickupY);\n const minX = boundaryRect.left + pickupX;\n const maxX = boundaryRect.right - (previewWidth - pickupX);\n\n x = clamp(x, minX, maxX);\n y = clamp(y, minY, maxY);\n }\n\n return {x, y};\n }\n\n /** Updates the current drag delta, based on the user's current pointer position on the page. */\n private _updatePointerDirectionDelta(pointerPositionOnPage: Point) {\n const {x, y} = pointerPositionOnPage;\n const delta = this._pointerDirectionDelta;\n const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;\n\n // Amount of pixels the user has dragged since the last time the direction changed.\n const changeX = Math.abs(x - positionSinceLastChange.x);\n const changeY = Math.abs(y - positionSinceLastChange.y);\n\n // Because we handle pointer events on a per-pixel basis, we don't want the delta\n // to change for every pixel, otherwise anything that depends on it can look erratic.\n // To make the delta more consistent, we track how much the user has moved since the last\n // delta change and we only update it after it has reached a certain threshold.\n if (changeX > this._config.pointerDirectionChangeThreshold) {\n delta.x = x > positionSinceLastChange.x ? 1 : -1;\n positionSinceLastChange.x = x;\n }\n\n if (changeY > this._config.pointerDirectionChangeThreshold) {\n delta.y = y > positionSinceLastChange.y ? 1 : -1;\n positionSinceLastChange.y = y;\n }\n\n return delta;\n }\n\n /** Toggles the native drag interactions, based on how many handles are registered. */\n private _toggleNativeDragInteractions() {\n if (!this._rootElement || !this._handles) {\n return;\n }\n\n const shouldEnable = this._handles.length > 0 || !this.isDragging();\n\n if (shouldEnable !== this._nativeInteractionsEnabled) {\n this._nativeInteractionsEnabled = shouldEnable;\n toggleNativeDragInteractions(this._rootElement, shouldEnable);\n }\n }\n\n /** Removes the manually-added event listeners from the root element. */\n private _removeRootElementListeners(element: HTMLElement) {\n element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n element.removeEventListener('dragstart', this._nativeDragStart, activeEventListenerOptions);\n }\n\n /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n private _applyRootElementTransform(x: number, y: number) {\n const transform = getTransform(x, y);\n const styles = this._rootElement.style;\n\n // Cache the previous transform amount only after the first drag sequence, because\n // we don't want our own transforms to stack on top of each other.\n // Should be excluded none because none + translate3d(x, y, x) is invalid css\n if (this._initialTransform == null) {\n this._initialTransform =\n styles.transform && styles.transform != 'none' ? styles.transform : '';\n }\n\n // Preserve the previous `transform` value, if there was one. Note that we apply our own\n // transform before the user's, because things like rotation can affect which direction\n // the element will be translated towards.\n styles.transform = combineTransforms(transform, this._initialTransform);\n }\n\n /**\n * Applies a `transform` to the preview, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n private _applyPreviewTransform(x: number, y: number) {\n // Only apply the initial transform if the preview is a clone of the original element, otherwise\n // it could be completely different and the transform might not make sense anymore.\n const initialTransform = this._previewTemplate?.template ? undefined : this._initialTransform;\n const transform = getTransform(x, y);\n this._preview.style.transform = combineTransforms(transform, initialTransform);\n }\n\n /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @param currentPosition Current position of the user's pointer.\n */\n private _getDragDistance(currentPosition: Point): Point {\n const pickupPosition = this._pickupPositionOnPage;\n\n if (pickupPosition) {\n return {x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y};\n }\n\n return {x: 0, y: 0};\n }\n\n /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\n private _cleanupCachedDimensions() {\n this._boundaryRect = this._previewRect = undefined;\n this._parentPositions.clear();\n }\n\n /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n */\n private _containInsideBoundaryOnResize() {\n let {x, y} = this._passiveTransform;\n\n if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {\n return;\n }\n\n // Note: don't use `_clientRectAtStart` here, because we want the latest position.\n const elementRect = this._rootElement.getBoundingClientRect();\n const boundaryRect = this._boundaryElement.getBoundingClientRect();\n\n // It's possible that the element got hidden away after dragging (e.g. by switching to a\n // different tab). Don't do anything in this case so we don't clear the user's position.\n if (\n (boundaryRect.width === 0 && boundaryRect.height === 0) ||\n (elementRect.width === 0 && elementRect.height === 0)\n ) {\n return;\n }\n\n const leftOverflow = boundaryRect.left - elementRect.left;\n const rightOverflow = elementRect.right - boundaryRect.right;\n const topOverflow = boundaryRect.top - elementRect.top;\n const bottomOverflow = elementRect.bottom - boundaryRect.bottom;\n\n // If the element has become wider than the boundary, we can't\n // do much to make it fit so we just anchor it to the left.\n if (boundaryRect.width > elementRect.width) {\n if (leftOverflow > 0) {\n x += leftOverflow;\n }\n\n if (rightOverflow > 0) {\n x -= rightOverflow;\n }\n } else {\n x = 0;\n }\n\n // If the element has become taller than the boundary, we can't\n // do much to make it fit so we just anchor it to the top.\n if (boundaryRect.height > elementRect.height) {\n if (topOverflow > 0) {\n y += topOverflow;\n }\n\n if (bottomOverflow > 0) {\n y -= bottomOverflow;\n }\n } else {\n y = 0;\n }\n\n if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {\n this.setFreeDragPosition({y, x});\n }\n }\n\n /** Gets the drag start delay, based on the event type. */\n private _getDragStartDelay(event: MouseEvent | TouchEvent): number {\n const value = this.dragStartDelay;\n\n if (typeof value === 'number') {\n return value;\n } else if (isTouchEvent(event)) {\n return value.touch;\n }\n\n return value ? value.mouse : 0;\n }\n\n /** Updates the internal state of the draggable element when scrolling has occurred. */\n private _updateOnScroll(event: Event) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n\n if (scrollDifference) {\n const target = _getEventTarget(event)!;\n\n // ClientRect dimensions are based on the scroll position of the page and its parent\n // node so we have to update the cached boundary ClientRect if the user has scrolled.\n if (\n this._boundaryRect &&\n target !== this._boundaryElement &&\n target.contains(this._boundaryElement)\n ) {\n adjustClientRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);\n }\n\n this._pickupPositionOnPage.x += scrollDifference.left;\n this._pickupPositionOnPage.y += scrollDifference.top;\n\n // If we're in free drag mode, we have to update the active transform, because\n // it isn't relative to the viewport like the preview inside a drop list.\n if (!this._dropContainer) {\n this._activeTransform.x -= scrollDifference.left;\n this._activeTransform.y -= scrollDifference.top;\n this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);\n }\n }\n }\n\n /** Gets the scroll position of the viewport. */\n private _getViewportScrollPosition() {\n return (\n this._parentPositions.positions.get(this._document)?.scrollPosition ||\n this._parentPositions.getViewportScrollPosition()\n );\n }\n\n /**\n * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n * than saving it in property directly on init, because we want to resolve it as late as possible\n * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n */\n private _getShadowRoot(): ShadowRoot | null {\n if (this._cachedShadowRoot === undefined) {\n this._cachedShadowRoot = _getShadowRoot(this._rootElement);\n }\n\n return this._cachedShadowRoot;\n }\n\n /** Gets the element into which the drag preview should be inserted. */\n private _getPreviewInsertionPoint(\n initialParent: HTMLElement,\n shadowRoot: ShadowRoot | null,\n ): HTMLElement {\n const previewContainer = this._previewContainer || 'global';\n\n if (previewContainer === 'parent') {\n return initialParent;\n }\n\n if (previewContainer === 'global') {\n const documentRef = this._document;\n\n // We can't use the body if the user is in fullscreen mode,\n // because the preview will render under the fullscreen element.\n // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.\n return (\n shadowRoot ||\n documentRef.fullscreenElement ||\n (documentRef as any).webkitFullscreenElement ||\n (documentRef as any).mozFullScreenElement ||\n (documentRef as any).msFullscreenElement ||\n documentRef.body\n );\n }\n\n return coerceElement(previewContainer);\n }\n\n /** Lazily resolves and returns the dimensions of the preview. */\n private _getPreviewRect(): ClientRect {\n // Cache the preview element rect if we haven't cached it already or if\n // we cached it too early before the element dimensions were computed.\n if (!this._previewRect || (!this._previewRect.width && !this._previewRect.height)) {\n this._previewRect = this._preview\n ? this._preview.getBoundingClientRect()\n : this._initialClientRect!;\n }\n\n return this._previewRect;\n }\n\n /** Handles a native `dragstart` event. */\n private _nativeDragStart = (event: DragEvent) => {\n if (this._handles.length) {\n const targetHandle = this._getTargetHandle(event);\n\n if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n event.preventDefault();\n }\n } else if (!this.disabled) {\n // Usually this isn't necessary since the we prevent the default action in `pointerDown`,\n // but some cases like dragging of links can slip through (see #24403).\n event.preventDefault();\n }\n };\n\n /** Gets a handle that is the target of an event. */\n private _getTargetHandle(event: Event): HTMLElement | undefined {\n return this._handles.find(handle => {\n return event.target && (event.target === handle || handle.contains(event.target as Node));\n });\n }\n}\n\n/**\n * Gets a 3d `transform` that can be applied to an element.\n * @param x Desired position of the element along the X axis.\n * @param y Desired position of the element along the Y axis.\n */\nfunction getTransform(x: number, y: number): string {\n // Round the transforms since some browsers will\n // blur the elements for sub-pixel transforms.\n return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n\n/** Clamps a value between a minimum and a maximum. */\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/** Determines whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n\n/**\n * Gets the root HTML element of an embedded view.\n * If the root is not an HTML element it gets wrapped in one.\n */\nfunction getRootNode(viewRef: EmbeddedViewRef, _document: Document): HTMLElement {\n const rootNodes: Node[] = viewRef.rootNodes;\n\n if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {\n return rootNodes[0] as HTMLElement;\n }\n\n const wrapper = _document.createElement('div');\n rootNodes.forEach(node => wrapper.appendChild(node));\n return wrapper;\n}\n\n/**\n * Matches the target element's size to the source's size.\n * @param target Element that needs to be resized.\n * @param sourceRect Dimensions of the source element.\n */\nfunction matchElementSize(target: HTMLElement, sourceRect: ClientRect): void {\n target.style.width = `${sourceRect.width}px`;\n target.style.height = `${sourceRect.height}px`;\n target.style.transform = getTransform(sourceRect.left, sourceRect.top);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nexport function moveItemInArray(array: T[], fromIndex: number, toIndex: number): void {\n const from = clamp(fromIndex, array.length - 1);\n const to = clamp(toIndex, array.length - 1);\n\n if (from === to) {\n return;\n }\n\n const target = array[from];\n const delta = to < from ? -1 : 1;\n\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n\n array[to] = target;\n}\n\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nexport function transferArrayItem(\n currentArray: T[],\n targetArray: T[],\n currentIndex: number,\n targetIndex: number,\n): void {\n const from = clamp(currentIndex, currentArray.length - 1);\n const to = clamp(targetIndex, targetArray.length);\n\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nexport function copyArrayItem(\n currentArray: T[],\n targetArray: T[],\n currentIndex: number,\n targetIndex: number,\n): void {\n const to = clamp(targetIndex, targetArray.length);\n\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n\n/** Clamps a number between zero and a maximum. */\nfunction clamp(value: number, max: number): number {\n return Math.max(0, Math.min(max, value));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Direction} from '@angular/cdk/bidi';\nimport {ElementRef} from '@angular/core';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {DragDropRegistry} from '../drag-drop-registry';\nimport {moveItemInArray} from '../drag-utils';\nimport {combineTransforms} from '../dom/styling';\nimport {adjustClientRect, getMutableClientRect, isInsideClientRect} from '../dom/client-rect';\nimport {\n DropListSortStrategy,\n DropListSortStrategyItem,\n SortPredicate,\n} from './drop-list-sort-strategy';\n\n/**\n * Entry in the position cache for draggable items.\n * @docs-private\n */\ninterface CachedItemPosition {\n /** Instance of the drag item. */\n drag: T;\n /** Dimensions of the item. */\n clientRect: ClientRect;\n /** Amount by which the item has been moved since dragging started. */\n offset: number;\n /** Inline transform that the drag item had when dragging started. */\n initialTransform: string;\n}\n\n/**\n * Strategy that only supports sorting along a single axis.\n * Items are reordered using CSS transforms which allows for sorting to be animated.\n * @docs-private\n */\nexport class SingleAxisSortStrategy\n implements DropListSortStrategy\n{\n /** Function used to determine if an item can be sorted into a specific index. */\n private _sortPredicate: SortPredicate;\n\n /** Cache of the dimensions of all the items inside the container. */\n private _itemPositions: CachedItemPosition[] = [];\n\n /**\n * Draggable items that are currently active inside the container. Includes the items\n * that were there at the start of the sequence, as well as any items that have been dragged\n * in, but haven't been dropped yet.\n */\n private _activeDraggables: T[];\n\n /** Direction in which the list is oriented. */\n orientation: 'vertical' | 'horizontal' = 'vertical';\n\n /** Layout direction of the drop list. */\n direction: Direction;\n\n constructor(\n private _element: HTMLElement | ElementRef,\n private _dragDropRegistry: DragDropRegistry,\n ) {}\n\n /**\n * Keeps track of the item that was last swapped with the dragged item, as well as what direction\n * the pointer was moving in when the swap occurred and whether the user's pointer continued to\n * overlap with the swapped item after the swapping occurred.\n */\n private _previousSwap = {\n drag: null as T | null,\n delta: 0,\n overlaps: false,\n };\n\n /**\n * To be called when the drag sequence starts.\n * @param items Items that are currently in the list.\n */\n start(items: readonly T[]) {\n this.withItems(items);\n }\n\n /**\n * To be called when an item is being sorted.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n sort(item: T, pointerX: number, pointerY: number, pointerDelta: {x: number; y: number}) {\n const siblings = this._itemPositions;\n const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);\n\n if (newIndex === -1 && siblings.length > 0) {\n return null;\n }\n\n const isHorizontal = this.orientation === 'horizontal';\n const currentIndex = siblings.findIndex(currentItem => currentItem.drag === item);\n const siblingAtNewPosition = siblings[newIndex];\n const currentPosition = siblings[currentIndex].clientRect;\n const newPosition = siblingAtNewPosition.clientRect;\n const delta = currentIndex > newIndex ? 1 : -1;\n\n // How many pixels the item's placeholder should be offset.\n const itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);\n\n // How many pixels all the other items should be offset.\n const siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);\n\n // Save the previous order of the items before moving the item to its new index.\n // We use this to check whether an item has been moved as a result of the sorting.\n const oldOrder = siblings.slice();\n\n // Shuffle the array in place.\n moveItemInArray(siblings, currentIndex, newIndex);\n\n siblings.forEach((sibling, index) => {\n // Don't do anything if the position hasn't changed.\n if (oldOrder[index] === sibling) {\n return;\n }\n\n const isDraggedItem = sibling.drag === item;\n const offset = isDraggedItem ? itemOffset : siblingOffset;\n const elementToOffset = isDraggedItem\n ? item.getPlaceholderElement()\n : sibling.drag.getRootElement();\n\n // Update the offset to reflect the new position.\n sibling.offset += offset;\n\n // Since we're moving the items with a `transform`, we need to adjust their cached\n // client rects to reflect their new position, as well as swap their positions in the cache.\n // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the\n // elements may be mid-animation which will give us a wrong result.\n if (isHorizontal) {\n // Round the transforms since some browsers will\n // blur the elements, for sub-pixel transforms.\n elementToOffset.style.transform = combineTransforms(\n `translate3d(${Math.round(sibling.offset)}px, 0, 0)`,\n sibling.initialTransform,\n );\n adjustClientRect(sibling.clientRect, 0, offset);\n } else {\n elementToOffset.style.transform = combineTransforms(\n `translate3d(0, ${Math.round(sibling.offset)}px, 0)`,\n sibling.initialTransform,\n );\n adjustClientRect(sibling.clientRect, offset, 0);\n }\n });\n\n // Note that it's important that we do this after the client rects have been adjusted.\n this._previousSwap.overlaps = isInsideClientRect(newPosition, pointerX, pointerY);\n this._previousSwap.drag = siblingAtNewPosition.drag;\n this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;\n\n return {previousIndex: currentIndex, currentIndex: newIndex};\n }\n\n /**\n * Called when an item is being moved into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item: T, pointerX: number, pointerY: number, index?: number): void {\n const newIndex =\n index == null || index < 0\n ? // We use the coordinates of where the item entered the drop\n // zone to figure out at which index it should be inserted.\n this._getItemIndexFromPointerPosition(item, pointerX, pointerY)\n : index;\n\n const activeDraggables = this._activeDraggables;\n const currentIndex = activeDraggables.indexOf(item);\n const placeholder = item.getPlaceholderElement();\n let newPositionReference: T | undefined = activeDraggables[newIndex];\n\n // If the item at the new position is the same as the item that is being dragged,\n // it means that we're trying to restore the item to its initial position. In this\n // case we should use the next item from the list as the reference.\n if (newPositionReference === item) {\n newPositionReference = activeDraggables[newIndex + 1];\n }\n\n // If we didn't find a new position reference, it means that either the item didn't start off\n // in this container, or that the item requested to be inserted at the end of the list.\n if (\n !newPositionReference &&\n (newIndex == null || newIndex === -1 || newIndex < activeDraggables.length - 1) &&\n this._shouldEnterAsFirstChild(pointerX, pointerY)\n ) {\n newPositionReference = activeDraggables[0];\n }\n\n // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it\n // into another container and back again), we have to ensure that it isn't duplicated.\n if (currentIndex > -1) {\n activeDraggables.splice(currentIndex, 1);\n }\n\n // Don't use items that are being dragged as a reference, because\n // their element has been moved down to the bottom of the body.\n if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {\n const element = newPositionReference.getRootElement();\n element.parentElement!.insertBefore(placeholder, element);\n activeDraggables.splice(newIndex, 0, item);\n } else {\n coerceElement(this._element).appendChild(placeholder);\n activeDraggables.push(item);\n }\n\n // The transform needs to be cleared so it doesn't throw off the measurements.\n placeholder.style.transform = '';\n\n // Note that usually `start` is called together with `enter` when an item goes into a new\n // container. This will cache item positions, but we need to refresh them since the amount\n // of items has changed.\n this._cacheItemPositions();\n }\n\n /** Sets the items that are currently part of the list. */\n withItems(items: readonly T[]): void {\n this._activeDraggables = items.slice();\n this._cacheItemPositions();\n }\n\n /** Assigns a sort predicate to the strategy. */\n withSortPredicate(predicate: SortPredicate): void {\n this._sortPredicate = predicate;\n }\n\n /** Resets the strategy to its initial state before dragging was started. */\n reset() {\n // TODO(crisbeto): may have to wait for the animations to finish.\n this._activeDraggables.forEach(item => {\n const rootElement = item.getRootElement();\n\n if (rootElement) {\n const initialTransform = this._itemPositions.find(p => p.drag === item)?.initialTransform;\n rootElement.style.transform = initialTransform || '';\n }\n });\n\n this._itemPositions = [];\n this._activeDraggables = [];\n this._previousSwap.drag = null;\n this._previousSwap.delta = 0;\n this._previousSwap.overlaps = false;\n }\n\n /**\n * Gets a snapshot of items currently in the list.\n * Can include items that we dragged in from another list.\n */\n getActiveItemsSnapshot(): readonly T[] {\n return this._activeDraggables;\n }\n\n /** Gets the index of a specific item. */\n getItemIndex(item: T): number {\n // Items are sorted always by top/left in the cache, however they flow differently in RTL.\n // The rest of the logic still stands no matter what orientation we're in, however\n // we need to invert the array when determining the index.\n const items =\n this.orientation === 'horizontal' && this.direction === 'rtl'\n ? this._itemPositions.slice().reverse()\n : this._itemPositions;\n\n return items.findIndex(currentItem => currentItem.drag === item);\n }\n\n /** Used to notify the strategy that the scroll position has changed. */\n updateOnScroll(topDifference: number, leftDifference: number) {\n // Since we know the amount that the user has scrolled we can shift all of the\n // client rectangles ourselves. This is cheaper than re-measuring everything and\n // we can avoid inconsistent behavior where we might be measuring the element before\n // its position has changed.\n this._itemPositions.forEach(({clientRect}) => {\n adjustClientRect(clientRect, topDifference, leftDifference);\n });\n\n // We need two loops for this, because we want all of the cached\n // positions to be up-to-date before we re-sort the item.\n this._itemPositions.forEach(({drag}) => {\n if (this._dragDropRegistry.isDragging(drag)) {\n // We need to re-sort the item manually, because the pointer move\n // events won't be dispatched while the user is scrolling.\n drag._sortFromLastPointerPosition();\n }\n });\n }\n\n /** Refreshes the position cache of the items and sibling containers. */\n private _cacheItemPositions() {\n const isHorizontal = this.orientation === 'horizontal';\n\n this._itemPositions = this._activeDraggables\n .map(drag => {\n const elementToMeasure = drag.getVisibleElement();\n return {\n drag,\n offset: 0,\n initialTransform: elementToMeasure.style.transform || '',\n clientRect: getMutableClientRect(elementToMeasure),\n };\n })\n .sort((a, b) => {\n return isHorizontal\n ? a.clientRect.left - b.clientRect.left\n : a.clientRect.top - b.clientRect.top;\n });\n }\n\n /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @param currentPosition Current position of the item.\n * @param newPosition Position of the item where the current item should be moved.\n * @param delta Direction in which the user is moving.\n */\n private _getItemOffsetPx(currentPosition: ClientRect, newPosition: ClientRect, delta: 1 | -1) {\n const isHorizontal = this.orientation === 'horizontal';\n let itemOffset = isHorizontal\n ? newPosition.left - currentPosition.left\n : newPosition.top - currentPosition.top;\n\n // Account for differences in the item width/height.\n if (delta === -1) {\n itemOffset += isHorizontal\n ? newPosition.width - currentPosition.width\n : newPosition.height - currentPosition.height;\n }\n\n return itemOffset;\n }\n\n /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @param currentIndex Index of the item currently being dragged.\n * @param siblings All of the items in the list.\n * @param delta Direction in which the user is moving.\n */\n private _getSiblingOffsetPx(\n currentIndex: number,\n siblings: CachedItemPosition[],\n delta: 1 | -1,\n ) {\n const isHorizontal = this.orientation === 'horizontal';\n const currentPosition = siblings[currentIndex].clientRect;\n const immediateSibling = siblings[currentIndex + delta * -1];\n let siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;\n\n if (immediateSibling) {\n const start = isHorizontal ? 'left' : 'top';\n const end = isHorizontal ? 'right' : 'bottom';\n\n // Get the spacing between the start of the current item and the end of the one immediately\n // after it in the direction in which the user is dragging, or vice versa. We add it to the\n // offset in order to push the element to where it will be when it's inline and is influenced\n // by the `margin` of its siblings.\n if (delta === -1) {\n siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];\n } else {\n siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];\n }\n }\n\n return siblingOffset;\n }\n\n /**\n * Checks if pointer is entering in the first position\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n */\n private _shouldEnterAsFirstChild(pointerX: number, pointerY: number) {\n if (!this._activeDraggables.length) {\n return false;\n }\n\n const itemPositions = this._itemPositions;\n const isHorizontal = this.orientation === 'horizontal';\n\n // `itemPositions` are sorted by position while `activeDraggables` are sorted by child index\n // check if container is using some sort of \"reverse\" ordering (eg: flex-direction: row-reverse)\n const reversed = itemPositions[0].drag !== this._activeDraggables[0];\n if (reversed) {\n const lastItemRect = itemPositions[itemPositions.length - 1].clientRect;\n return isHorizontal ? pointerX >= lastItemRect.right : pointerY >= lastItemRect.bottom;\n } else {\n const firstItemRect = itemPositions[0].clientRect;\n return isHorizontal ? pointerX <= firstItemRect.left : pointerY <= firstItemRect.top;\n }\n }\n\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @param item Item that is being sorted.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n * @param delta Direction in which the user is moving their pointer.\n */\n private _getItemIndexFromPointerPosition(\n item: T,\n pointerX: number,\n pointerY: number,\n delta?: {x: number; y: number},\n ): number {\n const isHorizontal = this.orientation === 'horizontal';\n const index = this._itemPositions.findIndex(({drag, clientRect}) => {\n // Skip the item itself.\n if (drag === item) {\n return false;\n }\n\n if (delta) {\n const direction = isHorizontal ? delta.x : delta.y;\n\n // If the user is still hovering over the same item as last time, their cursor hasn't left\n // the item after we made the swap, and they didn't change the direction in which they're\n // dragging, we don't consider it a direction swap.\n if (\n drag === this._previousSwap.drag &&\n this._previousSwap.overlaps &&\n direction === this._previousSwap.delta\n ) {\n return false;\n }\n }\n\n return isHorizontal\n ? // Round these down since most browsers report client rects with\n // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.\n pointerX >= Math.floor(clientRect.left) && pointerX < Math.floor(clientRect.right)\n : pointerY >= Math.floor(clientRect.top) && pointerY < Math.floor(clientRect.bottom);\n });\n\n return index === -1 || !this._sortPredicate(index, item) ? -1 : index;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Direction} from '@angular/cdk/bidi';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {_getShadowRoot} from '@angular/cdk/platform';\nimport {Subject, Subscription, interval, animationFrameScheduler} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {DragDropRegistry} from './drag-drop-registry';\nimport {DragRefInternal as DragRef, Point} from './drag-ref';\nimport {isPointerNearClientRect, isInsideClientRect} from './dom/client-rect';\nimport {ParentPositionTracker} from './dom/parent-position-tracker';\nimport {DragCSSStyleDeclaration} from './dom/styling';\nimport {DropListSortStrategy} from './sorting/drop-list-sort-strategy';\nimport {SingleAxisSortStrategy} from './sorting/single-axis-sort-strategy';\n\n/**\n * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n */\nconst DROP_PROXIMITY_THRESHOLD = 0.05;\n\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n\n/** Vertical direction in which we can auto-scroll. */\nconst enum AutoScrollVerticalDirection {\n NONE,\n UP,\n DOWN,\n}\n\n/** Horizontal direction in which we can auto-scroll. */\nconst enum AutoScrollHorizontalDirection {\n NONE,\n LEFT,\n RIGHT,\n}\n\n/**\n * Internal compile-time-only representation of a `DropListRef`.\n * Used to avoid circular import issues between the `DropListRef` and the `DragRef`.\n * @docs-private\n */\nexport interface DropListRefInternal extends DropListRef {}\n\ntype RootNode = DocumentOrShadowRoot & {\n // As of TS 4.4 the built in DOM typings don't include `elementFromPoint` on `ShadowRoot`,\n // even though it exists (see https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot).\n // This type is a utility to avoid having to add casts everywhere.\n elementFromPoint(x: number, y: number): Element | null;\n};\n\n/**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n */\nexport class DropListRef {\n /** Element that the drop list is attached to. */\n element: HTMLElement | ElementRef;\n\n /** Whether starting a dragging sequence from this container is disabled. */\n disabled: boolean = false;\n\n /** Whether sorting items within the list is disabled. */\n sortingDisabled: boolean = false;\n\n /** Locks the position of the draggable elements inside the container along the specified axis. */\n lockAxis: 'x' | 'y';\n\n /**\n * Whether auto-scrolling the view when the user\n * moves their pointer close to the edges is disabled.\n */\n autoScrollDisabled: boolean = false;\n\n /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n autoScrollStep: number = 2;\n\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n enterPredicate: (drag: DragRef, drop: DropListRef) => boolean = () => true;\n\n /** Function that is used to determine whether an item can be sorted into a particular index. */\n sortPredicate: (index: number, drag: DragRef, drop: DropListRef) => boolean = () => true;\n\n /** Emits right before dragging has started. */\n readonly beforeStarted = new Subject();\n\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n readonly entered = new Subject<{item: DragRef; container: DropListRef; currentIndex: number}>();\n\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n readonly exited = new Subject<{item: DragRef; container: DropListRef}>();\n\n /** Emits when the user drops an item inside the container. */\n readonly dropped = new Subject<{\n item: DragRef;\n currentIndex: number;\n previousIndex: number;\n container: DropListRef;\n previousContainer: DropListRef;\n isPointerOverContainer: boolean;\n distance: Point;\n dropPoint: Point;\n event: MouseEvent | TouchEvent;\n }>();\n\n /** Emits as the user is swapping items while actively dragging. */\n readonly sorted = new Subject<{\n previousIndex: number;\n currentIndex: number;\n container: DropListRef;\n item: DragRef;\n }>();\n\n /** Emits when a dragging sequence is started in a list connected to the current one. */\n readonly receivingStarted = new Subject<{\n receiver: DropListRef;\n initiator: DropListRef;\n items: DragRef[];\n }>();\n\n /** Emits when a dragging sequence is stopped from a list connected to the current one. */\n readonly receivingStopped = new Subject<{\n receiver: DropListRef;\n initiator: DropListRef;\n }>();\n\n /** Arbitrary data that can be attached to the drop list. */\n data: T;\n\n /** Whether an item in the list is being dragged. */\n private _isDragging = false;\n\n /** Keeps track of the positions of any parent scrollable elements. */\n private _parentPositions: ParentPositionTracker;\n\n /** Strategy being used to sort items within the list. */\n private _sortStrategy: DropListSortStrategy;\n\n /** Cached `ClientRect` of the drop list. */\n private _clientRect: ClientRect | undefined;\n\n /** Draggable items in the container. */\n private _draggables: readonly DragRef[] = [];\n\n /** Drop lists that are connected to the current one. */\n private _siblings: readonly DropListRef[] = [];\n\n /** Connected siblings that currently have a dragged item. */\n private _activeSiblings = new Set();\n\n /** Subscription to the window being scrolled. */\n private _viewportScrollSubscription = Subscription.EMPTY;\n\n /** Vertical direction in which the list is currently scrolling. */\n private _verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n\n /** Horizontal direction in which the list is currently scrolling. */\n private _horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n /** Node that is being auto-scrolled. */\n private _scrollNode: HTMLElement | Window;\n\n /** Used to signal to the current auto-scroll sequence when to stop. */\n private readonly _stopScrollTimers = new Subject();\n\n /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */\n private _cachedShadowRoot: RootNode | null = null;\n\n /** Reference to the document. */\n private _document: Document;\n\n /** Elements that can be scrolled while the user is dragging. */\n private _scrollableElements: HTMLElement[];\n\n /** Initial value for the element's `scroll-snap-type` style. */\n private _initialScrollSnap: string;\n\n constructor(\n element: ElementRef | HTMLElement,\n private _dragDropRegistry: DragDropRegistry,\n _document: any,\n private _ngZone: NgZone,\n private _viewportRuler: ViewportRuler,\n ) {\n this.element = coerceElement(element);\n this._document = _document;\n this.withScrollableParents([this.element]);\n _dragDropRegistry.registerDropContainer(this);\n this._parentPositions = new ParentPositionTracker(_document);\n this._sortStrategy = new SingleAxisSortStrategy(this.element, _dragDropRegistry);\n this._sortStrategy.withSortPredicate((index, item) => this.sortPredicate(index, item, this));\n }\n\n /** Removes the drop list functionality from the DOM element. */\n dispose() {\n this._stopScrolling();\n this._stopScrollTimers.complete();\n this._viewportScrollSubscription.unsubscribe();\n this.beforeStarted.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this.sorted.complete();\n this.receivingStarted.complete();\n this.receivingStopped.complete();\n this._activeSiblings.clear();\n this._scrollNode = null!;\n this._parentPositions.clear();\n this._dragDropRegistry.removeDropContainer(this);\n }\n\n /** Whether an item from this list is currently being dragged. */\n isDragging() {\n return this._isDragging;\n }\n\n /** Starts dragging an item. */\n start(): void {\n this._draggingStarted();\n this._notifyReceivingSiblings();\n }\n\n /**\n * Attempts to move an item into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item: DragRef, pointerX: number, pointerY: number, index?: number): void {\n this._draggingStarted();\n\n // If sorting is disabled, we want the item to return to its starting\n // position if the user is returning it to its initial container.\n if (index == null && this.sortingDisabled) {\n index = this._draggables.indexOf(item);\n }\n\n this._sortStrategy.enter(item, pointerX, pointerY, index);\n\n // Note that this usually happens inside `_draggingStarted` as well, but the dimensions\n // can change when the sort strategy moves the item around inside `enter`.\n this._cacheParentPositions();\n\n // Notify siblings at the end so that the item has been inserted into the `activeDraggables`.\n this._notifyReceivingSiblings();\n this.entered.next({item, container: this, currentIndex: this.getItemIndex(item)});\n }\n\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param item Item that was dragged out.\n */\n exit(item: DragRef): void {\n this._reset();\n this.exited.next({item, container: this});\n }\n\n /**\n * Drops an item into this container.\n * @param item Item being dropped into the container.\n * @param currentIndex Index at which the item should be inserted.\n * @param previousIndex Index of the item when dragging started.\n * @param previousContainer Container from which the item got dragged in.\n * @param isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param distance Distance the user has dragged since the start of the dragging sequence.\n * @param event Event that triggered the dropping sequence.\n *\n * @breaking-change 15.0.0 `previousIndex` and `event` parameters to become required.\n */\n drop(\n item: DragRef,\n currentIndex: number,\n previousIndex: number,\n previousContainer: DropListRef,\n isPointerOverContainer: boolean,\n distance: Point,\n dropPoint: Point,\n event: MouseEvent | TouchEvent = {} as any,\n ): void {\n this._reset();\n this.dropped.next({\n item,\n currentIndex,\n previousIndex,\n container: this,\n previousContainer,\n isPointerOverContainer,\n distance,\n dropPoint,\n event,\n });\n }\n\n /**\n * Sets the draggable items that are a part of this list.\n * @param items Items that are a part of this list.\n */\n withItems(items: DragRef[]): this {\n const previousItems = this._draggables;\n this._draggables = items;\n items.forEach(item => item._withDropContainer(this));\n\n if (this.isDragging()) {\n const draggedItems = previousItems.filter(item => item.isDragging());\n\n // If all of the items being dragged were removed\n // from the list, abort the current drag sequence.\n if (draggedItems.every(item => items.indexOf(item) === -1)) {\n this._reset();\n } else {\n this._sortStrategy.withItems(this._draggables);\n }\n }\n\n return this;\n }\n\n /** Sets the layout direction of the drop list. */\n withDirection(direction: Direction): this {\n this._sortStrategy.direction = direction;\n return this;\n }\n\n /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @param connectedTo Other containers that the current containers should be connected to.\n */\n connectedTo(connectedTo: DropListRef[]): this {\n this._siblings = connectedTo.slice();\n return this;\n }\n\n /**\n * Sets the orientation of the container.\n * @param orientation New orientation for the container.\n */\n withOrientation(orientation: 'vertical' | 'horizontal'): this {\n // TODO(crisbeto): eventually we should be constructing the new sort strategy here based on\n // the new orientation. For now we can assume that it'll always be `SingleAxisSortStrategy`.\n (this._sortStrategy as SingleAxisSortStrategy).orientation = orientation;\n return this;\n }\n\n /**\n * Sets which parent elements are can be scrolled while the user is dragging.\n * @param elements Elements that can be scrolled.\n */\n withScrollableParents(elements: HTMLElement[]): this {\n const element = coerceElement(this.element);\n\n // We always allow the current element to be scrollable\n // so we need to ensure that it's in the array.\n this._scrollableElements =\n elements.indexOf(element) === -1 ? [element, ...elements] : elements.slice();\n return this;\n }\n\n /** Gets the scrollable parents that are registered with this drop container. */\n getScrollableParents(): readonly HTMLElement[] {\n return this._scrollableElements;\n }\n\n /**\n * Figures out the index of an item in the container.\n * @param item Item whose index should be determined.\n */\n getItemIndex(item: DragRef): number {\n return this._isDragging\n ? this._sortStrategy.getItemIndex(item)\n : this._draggables.indexOf(item);\n }\n\n /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n */\n isReceiving(): boolean {\n return this._activeSiblings.size > 0;\n }\n\n /**\n * Sorts an item inside the container based on its position.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n _sortItem(\n item: DragRef,\n pointerX: number,\n pointerY: number,\n pointerDelta: {x: number; y: number},\n ): void {\n // Don't sort the item if sorting is disabled or it's out of range.\n if (\n this.sortingDisabled ||\n !this._clientRect ||\n !isPointerNearClientRect(this._clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)\n ) {\n return;\n }\n\n const result = this._sortStrategy.sort(item, pointerX, pointerY, pointerDelta);\n\n if (result) {\n this.sorted.next({\n previousIndex: result.previousIndex,\n currentIndex: result.currentIndex,\n container: this,\n item,\n });\n }\n }\n\n /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param pointerX User's pointer position along the x axis.\n * @param pointerY User's pointer position along the y axis.\n */\n _startScrollingIfNecessary(pointerX: number, pointerY: number) {\n if (this.autoScrollDisabled) {\n return;\n }\n\n let scrollNode: HTMLElement | Window | undefined;\n let verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n let horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n // Check whether we should start scrolling any of the parent containers.\n this._parentPositions.positions.forEach((position, element) => {\n // We have special handling for the `document` below. Also this would be\n // nicer with a for...of loop, but it requires changing a compiler flag.\n if (element === this._document || !position.clientRect || scrollNode) {\n return;\n }\n\n if (\n isPointerNearClientRect(position.clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)\n ) {\n [verticalScrollDirection, horizontalScrollDirection] = getElementScrollDirections(\n element as HTMLElement,\n position.clientRect,\n pointerX,\n pointerY,\n );\n\n if (verticalScrollDirection || horizontalScrollDirection) {\n scrollNode = element as HTMLElement;\n }\n }\n });\n\n // Otherwise check if we can start scrolling the viewport.\n if (!verticalScrollDirection && !horizontalScrollDirection) {\n const {width, height} = this._viewportRuler.getViewportSize();\n const clientRect = {\n width,\n height,\n top: 0,\n right: width,\n bottom: height,\n left: 0,\n } as ClientRect;\n verticalScrollDirection = getVerticalScrollDirection(clientRect, pointerY);\n horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);\n scrollNode = window;\n }\n\n if (\n scrollNode &&\n (verticalScrollDirection !== this._verticalScrollDirection ||\n horizontalScrollDirection !== this._horizontalScrollDirection ||\n scrollNode !== this._scrollNode)\n ) {\n this._verticalScrollDirection = verticalScrollDirection;\n this._horizontalScrollDirection = horizontalScrollDirection;\n this._scrollNode = scrollNode;\n\n if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {\n this._ngZone.runOutsideAngular(this._startScrollInterval);\n } else {\n this._stopScrolling();\n }\n }\n }\n\n /** Stops any currently-running auto-scroll sequences. */\n _stopScrolling() {\n this._stopScrollTimers.next();\n }\n\n /** Starts the dragging sequence within the list. */\n private _draggingStarted() {\n const styles = coerceElement(this.element).style as DragCSSStyleDeclaration;\n this.beforeStarted.next();\n this._isDragging = true;\n\n // We need to disable scroll snapping while the user is dragging, because it breaks automatic\n // scrolling. The browser seems to round the value based on the snapping points which means\n // that we can't increment/decrement the scroll position.\n this._initialScrollSnap = styles.msScrollSnapType || styles.scrollSnapType || '';\n styles.scrollSnapType = styles.msScrollSnapType = 'none';\n this._sortStrategy.start(this._draggables);\n this._cacheParentPositions();\n this._viewportScrollSubscription.unsubscribe();\n this._listenToScrollEvents();\n }\n\n /** Caches the positions of the configured scrollable parents. */\n private _cacheParentPositions() {\n const element = coerceElement(this.element);\n this._parentPositions.cache(this._scrollableElements);\n\n // The list element is always in the `scrollableElements`\n // so we can take advantage of the cached `ClientRect`.\n this._clientRect = this._parentPositions.positions.get(element)!.clientRect!;\n }\n\n /** Resets the container to its initial state. */\n private _reset() {\n this._isDragging = false;\n\n const styles = coerceElement(this.element).style as DragCSSStyleDeclaration;\n styles.scrollSnapType = styles.msScrollSnapType = this._initialScrollSnap;\n\n this._siblings.forEach(sibling => sibling._stopReceiving(this));\n this._sortStrategy.reset();\n this._stopScrolling();\n this._viewportScrollSubscription.unsubscribe();\n this._parentPositions.clear();\n }\n\n /** Starts the interval that'll auto-scroll the element. */\n private _startScrollInterval = () => {\n this._stopScrolling();\n\n interval(0, animationFrameScheduler)\n .pipe(takeUntil(this._stopScrollTimers))\n .subscribe(() => {\n const node = this._scrollNode;\n const scrollStep = this.autoScrollStep;\n\n if (this._verticalScrollDirection === AutoScrollVerticalDirection.UP) {\n node.scrollBy(0, -scrollStep);\n } else if (this._verticalScrollDirection === AutoScrollVerticalDirection.DOWN) {\n node.scrollBy(0, scrollStep);\n }\n\n if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n node.scrollBy(-scrollStep, 0);\n } else if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n node.scrollBy(scrollStep, 0);\n }\n });\n };\n\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param x Pointer position along the X axis.\n * @param y Pointer position along the Y axis.\n */\n _isOverContainer(x: number, y: number): boolean {\n return this._clientRect != null && isInsideClientRect(this._clientRect, x, y);\n }\n\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param item Drag item that is being moved.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _getSiblingContainerFromPosition(item: DragRef, x: number, y: number): DropListRef | undefined {\n return this._siblings.find(sibling => sibling._canReceive(item, x, y));\n }\n\n /**\n * Checks whether the drop list can receive the passed-in item.\n * @param item Item that is being dragged into the list.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _canReceive(item: DragRef, x: number, y: number): boolean {\n if (\n !this._clientRect ||\n !isInsideClientRect(this._clientRect, x, y) ||\n !this.enterPredicate(item, this)\n ) {\n return false;\n }\n\n const elementFromPoint = this._getShadowRoot().elementFromPoint(x, y) as HTMLElement | null;\n\n // If there's no element at the pointer position, then\n // the client rect is probably scrolled out of the view.\n if (!elementFromPoint) {\n return false;\n }\n\n const nativeElement = coerceElement(this.element);\n\n // The `ClientRect`, that we're using to find the container over which the user is\n // hovering, doesn't give us any information on whether the element has been scrolled\n // out of the view or whether it's overlapping with other containers. This means that\n // we could end up transferring the item into a container that's invisible or is positioned\n // below another one. We use the result from `elementFromPoint` to get the top-most element\n // at the pointer position and to find whether it's one of the intersecting drop containers.\n return elementFromPoint === nativeElement || nativeElement.contains(elementFromPoint);\n }\n\n /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param sibling Sibling in which dragging has started.\n */\n _startReceiving(sibling: DropListRef, items: DragRef[]) {\n const activeSiblings = this._activeSiblings;\n\n if (\n !activeSiblings.has(sibling) &&\n items.every(item => {\n // Note that we have to add an exception to the `enterPredicate` for items that started off\n // in this drop list. The drag ref has logic that allows an item to return to its initial\n // container, if it has left the initial container and none of the connected containers\n // allow it to enter. See `DragRef._updateActiveDropContainer` for more context.\n return this.enterPredicate(item, this) || this._draggables.indexOf(item) > -1;\n })\n ) {\n activeSiblings.add(sibling);\n this._cacheParentPositions();\n this._listenToScrollEvents();\n this.receivingStarted.next({\n initiator: sibling,\n receiver: this,\n items,\n });\n }\n }\n\n /**\n * Called by a connected drop list when dragging has stopped.\n * @param sibling Sibling whose dragging has stopped.\n */\n _stopReceiving(sibling: DropListRef) {\n this._activeSiblings.delete(sibling);\n this._viewportScrollSubscription.unsubscribe();\n this.receivingStopped.next({initiator: sibling, receiver: this});\n }\n\n /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n */\n private _listenToScrollEvents() {\n this._viewportScrollSubscription = this._dragDropRegistry\n .scrolled(this._getShadowRoot())\n .subscribe(event => {\n if (this.isDragging()) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n\n if (scrollDifference) {\n this._sortStrategy.updateOnScroll(scrollDifference.top, scrollDifference.left);\n }\n } else if (this.isReceiving()) {\n this._cacheParentPositions();\n }\n });\n }\n\n /**\n * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n * than saving it in property directly on init, because we want to resolve it as late as possible\n * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n */\n private _getShadowRoot(): RootNode {\n if (!this._cachedShadowRoot) {\n const shadowRoot = _getShadowRoot(coerceElement(this.element));\n this._cachedShadowRoot = (shadowRoot || this._document) as RootNode;\n }\n\n return this._cachedShadowRoot;\n }\n\n /** Notifies any siblings that may potentially receive the item. */\n private _notifyReceivingSiblings() {\n const draggedItems = this._sortStrategy\n .getActiveItemsSnapshot()\n .filter(item => item.isDragging());\n this._siblings.forEach(sibling => sibling._startReceiving(this, draggedItems));\n }\n}\n\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect: ClientRect, pointerY: number) {\n const {top, bottom, height} = clientRect;\n const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return AutoScrollVerticalDirection.UP;\n } else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return AutoScrollVerticalDirection.DOWN;\n }\n\n return AutoScrollVerticalDirection.NONE;\n}\n\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect: ClientRect, pointerX: number) {\n const {left, right, width} = clientRect;\n const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return AutoScrollHorizontalDirection.LEFT;\n } else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return AutoScrollHorizontalDirection.RIGHT;\n }\n\n return AutoScrollHorizontalDirection.NONE;\n}\n\n/**\n * Gets the directions in which an element node should be scrolled,\n * assuming that the user's pointer is already within it scrollable region.\n * @param element Element for which we should calculate the scroll direction.\n * @param clientRect Bounding client rectangle of the element.\n * @param pointerX Position of the user's pointer along the x axis.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getElementScrollDirections(\n element: HTMLElement,\n clientRect: ClientRect,\n pointerX: number,\n pointerY: number,\n): [AutoScrollVerticalDirection, AutoScrollHorizontalDirection] {\n const computedVertical = getVerticalScrollDirection(clientRect, pointerY);\n const computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);\n let verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n let horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n // Note that we here we do some extra checks for whether the element is actually scrollable in\n // a certain direction and we only assign the scroll direction if it is. We do this so that we\n // can allow other elements to be scrolled, if the current element can't be scrolled anymore.\n // This allows us to handle cases where the scroll regions of two scrollable elements overlap.\n if (computedVertical) {\n const scrollTop = element.scrollTop;\n\n if (computedVertical === AutoScrollVerticalDirection.UP) {\n if (scrollTop > 0) {\n verticalScrollDirection = AutoScrollVerticalDirection.UP;\n }\n } else if (element.scrollHeight - scrollTop > element.clientHeight) {\n verticalScrollDirection = AutoScrollVerticalDirection.DOWN;\n }\n }\n\n if (computedHorizontal) {\n const scrollLeft = element.scrollLeft;\n\n if (computedHorizontal === AutoScrollHorizontalDirection.LEFT) {\n if (scrollLeft > 0) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.LEFT;\n }\n } else if (element.scrollWidth - scrollLeft > element.clientWidth) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.RIGHT;\n }\n }\n\n return [verticalScrollDirection, horizontalScrollDirection];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, NgZone, OnDestroy, Inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {merge, Observable, Observer, Subject} from 'rxjs';\n\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = normalizePassiveListenerOptions({\n passive: false,\n capture: true,\n});\n\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * @docs-private\n */\n// Note: this class is generic, rather than referencing CdkDrag and CdkDropList directly, in order\n// to avoid circular imports. If we were to reference them here, importing the registry into the\n// classes that are registering themselves will introduce a circular import.\n@Injectable({providedIn: 'root'})\nexport class DragDropRegistry implements OnDestroy {\n private _document: Document;\n\n /** Registered drop container instances. */\n private _dropInstances = new Set();\n\n /** Registered drag item instances. */\n private _dragInstances = new Set();\n\n /** Drag item instances that are currently being dragged. */\n private _activeDragInstances: I[] = [];\n\n /** Keeps track of the event listeners that we've bound to the `document`. */\n private _globalListeners = new Map<\n string,\n {\n handler: (event: Event) => void;\n options?: AddEventListenerOptions | boolean;\n }\n >();\n\n /**\n * Predicate function to check if an item is being dragged. Moved out into a property,\n * because it'll be called a lot and we don't want to create a new function every time.\n */\n private _draggingPredicate = (item: I) => item.isDragging();\n\n /**\n * Emits the `touchmove` or `mousemove` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n readonly pointerMove: Subject = new Subject();\n\n /**\n * Emits the `touchend` or `mouseup` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n readonly pointerUp: Subject = new Subject();\n\n /**\n * Emits when the viewport has been scrolled while the user is dragging an item.\n * @deprecated To be turned into a private member. Use the `scrolled` method instead.\n * @breaking-change 13.0.0\n */\n readonly scroll: Subject = new Subject();\n\n constructor(private _ngZone: NgZone, @Inject(DOCUMENT) _document: any) {\n this._document = _document;\n }\n\n /** Adds a drop container to the registry. */\n registerDropContainer(drop: C) {\n if (!this._dropInstances.has(drop)) {\n this._dropInstances.add(drop);\n }\n }\n\n /** Adds a drag item instance to the registry. */\n registerDragItem(drag: I) {\n this._dragInstances.add(drag);\n\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n if (this._dragInstances.size === 1) {\n this._ngZone.runOutsideAngular(() => {\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n this._document.addEventListener(\n 'touchmove',\n this._persistentTouchmoveListener,\n activeCapturingEventOptions,\n );\n });\n }\n }\n\n /** Removes a drop container from the registry. */\n removeDropContainer(drop: C) {\n this._dropInstances.delete(drop);\n }\n\n /** Removes a drag item instance from the registry. */\n removeDragItem(drag: I) {\n this._dragInstances.delete(drag);\n this.stopDragging(drag);\n\n if (this._dragInstances.size === 0) {\n this._document.removeEventListener(\n 'touchmove',\n this._persistentTouchmoveListener,\n activeCapturingEventOptions,\n );\n }\n }\n\n /**\n * Starts the dragging sequence for a drag instance.\n * @param drag Drag instance which is being dragged.\n * @param event Event that initiated the dragging.\n */\n startDragging(drag: I, event: TouchEvent | MouseEvent) {\n // Do not process the same drag twice to avoid memory leaks and redundant listeners\n if (this._activeDragInstances.indexOf(drag) > -1) {\n return;\n }\n\n this._activeDragInstances.push(drag);\n\n if (this._activeDragInstances.length === 1) {\n const isTouchEvent = event.type.startsWith('touch');\n\n // We explicitly bind __active__ listeners here, because newer browsers will default to\n // passive ones for `mousemove` and `touchmove`. The events need to be active, because we\n // use `preventDefault` to prevent the page from scrolling while the user is dragging.\n this._globalListeners\n .set(isTouchEvent ? 'touchend' : 'mouseup', {\n handler: (e: Event) => this.pointerUp.next(e as TouchEvent | MouseEvent),\n options: true,\n })\n .set('scroll', {\n handler: (e: Event) => this.scroll.next(e),\n // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't\n // the document. See https://github.com/angular/components/issues/17144.\n options: true,\n })\n // Preventing the default action on `mousemove` isn't enough to disable text selection\n // on Safari so we need to prevent the selection event as well. Alternatively this can\n // be done by setting `user-select: none` on the `body`, however it has causes a style\n // recalculation which can be expensive on pages with a lot of elements.\n .set('selectstart', {\n handler: this._preventDefaultWhileDragging,\n options: activeCapturingEventOptions,\n });\n\n // We don't have to bind a move event for touch drag sequences, because\n // we already have a persistent global one bound from `registerDragItem`.\n if (!isTouchEvent) {\n this._globalListeners.set('mousemove', {\n handler: (e: Event) => this.pointerMove.next(e as MouseEvent),\n options: activeCapturingEventOptions,\n });\n }\n\n this._ngZone.runOutsideAngular(() => {\n this._globalListeners.forEach((config, name) => {\n this._document.addEventListener(name, config.handler, config.options);\n });\n });\n }\n }\n\n /** Stops dragging a drag item instance. */\n stopDragging(drag: I) {\n const index = this._activeDragInstances.indexOf(drag);\n\n if (index > -1) {\n this._activeDragInstances.splice(index, 1);\n\n if (this._activeDragInstances.length === 0) {\n this._clearGlobalListeners();\n }\n }\n }\n\n /** Gets whether a drag item instance is currently being dragged. */\n isDragging(drag: I) {\n return this._activeDragInstances.indexOf(drag) > -1;\n }\n\n /**\n * Gets a stream that will emit when any element on the page is scrolled while an item is being\n * dragged.\n * @param shadowRoot Optional shadow root that the current dragging sequence started from.\n * Top-level listeners won't pick up events coming from the shadow DOM so this parameter can\n * be used to include an additional top-level listener at the shadow root level.\n */\n scrolled(shadowRoot?: DocumentOrShadowRoot | null): Observable {\n const streams: Observable[] = [this.scroll];\n\n if (shadowRoot && shadowRoot !== this._document) {\n // Note that this is basically the same as `fromEvent` from rxjs, but we do it ourselves,\n // because we want to guarantee that the event is bound outside of the `NgZone`. With\n // `fromEvent` it'll only happen if the subscription is outside the `NgZone`.\n streams.push(\n new Observable((observer: Observer) => {\n return this._ngZone.runOutsideAngular(() => {\n const eventOptions = true;\n const callback = (event: Event) => {\n if (this._activeDragInstances.length) {\n observer.next(event);\n }\n };\n\n (shadowRoot as ShadowRoot).addEventListener('scroll', callback, eventOptions);\n\n return () => {\n (shadowRoot as ShadowRoot).removeEventListener('scroll', callback, eventOptions);\n };\n });\n }),\n );\n }\n\n return merge(...streams);\n }\n\n ngOnDestroy() {\n this._dragInstances.forEach(instance => this.removeDragItem(instance));\n this._dropInstances.forEach(instance => this.removeDropContainer(instance));\n this._clearGlobalListeners();\n this.pointerMove.complete();\n this.pointerUp.complete();\n }\n\n /**\n * Event listener that will prevent the default browser action while the user is dragging.\n * @param event Event whose default action should be prevented.\n */\n private _preventDefaultWhileDragging = (event: Event) => {\n if (this._activeDragInstances.length > 0) {\n event.preventDefault();\n }\n };\n\n /** Event listener for `touchmove` that is bound even if no dragging is happening. */\n private _persistentTouchmoveListener = (event: TouchEvent) => {\n if (this._activeDragInstances.length > 0) {\n // Note that we only want to prevent the default action after dragging has actually started.\n // Usually this is the same time at which the item is added to the `_activeDragInstances`,\n // but it could be pushed back if the user has set up a drag delay or threshold.\n if (this._activeDragInstances.some(this._draggingPredicate)) {\n event.preventDefault();\n }\n\n this.pointerMove.next(event);\n }\n };\n\n /** Clears out the global event listeners from the `document`. */\n private _clearGlobalListeners() {\n this._globalListeners.forEach((config, name) => {\n this._document.removeEventListener(name, config.handler, config.options);\n });\n\n this._globalListeners.clear();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, Inject, NgZone, ElementRef} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {DragRef, DragRefConfig} from './drag-ref';\nimport {DropListRef} from './drop-list-ref';\nimport {DragDropRegistry} from './drag-drop-registry';\n\n/** Default configuration to be used when creating a `DragRef`. */\nconst DEFAULT_CONFIG = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 5,\n};\n\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\n@Injectable({providedIn: 'root'})\nexport class DragDrop {\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _ngZone: NgZone,\n private _viewportRuler: ViewportRuler,\n private _dragDropRegistry: DragDropRegistry,\n ) {}\n\n /**\n * Turns an element into a draggable item.\n * @param element Element to which to attach the dragging functionality.\n * @param config Object used to configure the dragging behavior.\n */\n createDrag(\n element: ElementRef | HTMLElement,\n config: DragRefConfig = DEFAULT_CONFIG,\n ): DragRef {\n return new DragRef(\n element,\n config,\n this._document,\n this._ngZone,\n this._viewportRuler,\n this._dragDropRegistry,\n );\n }\n\n /**\n * Turns an element into a drop list.\n * @param element Element to which to attach the drop list functionality.\n */\n createDropList(element: ElementRef | HTMLElement): DropListRef {\n return new DropListRef(\n element,\n this._dragDropRegistry,\n this._document,\n this._ngZone,\n this._viewportRuler,\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\n * to avoid circular imports.\n * @docs-private\n */\nexport const CDK_DRAG_PARENT = new InjectionToken<{}>('CDK_DRAG_PARENT');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, OnDestroy, Input, InjectionToken} from '@angular/core';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\n\n/**\n * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as\n * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DROP_LIST_GROUP = new InjectionToken>(\n 'CdkDropListGroup',\n);\n\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n */\n@Directive({\n selector: '[cdkDropListGroup]',\n exportAs: 'cdkDropListGroup',\n standalone: true,\n providers: [{provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup}],\n})\nexport class CdkDropListGroup implements OnDestroy {\n /** Drop lists registered inside the group. */\n readonly _items = new Set();\n\n /** Whether starting a dragging sequence from inside this group is disabled. */\n @Input('cdkDropListGroupDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled = false;\n\n ngOnDestroy() {\n this._items.clear();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {DragRefConfig, Point, DragRef} from '../drag-ref';\n\n/** Possible values that can be used to configure the drag start delay. */\nexport type DragStartDelay = number | {touch: number; mouse: number};\n\n/** Possible axis along which dragging can be locked. */\nexport type DragAxis = 'x' | 'y';\n\n/** Function that can be used to constrain the position of a dragged element. */\nexport type DragConstrainPosition = (point: Point, dragRef: DragRef) => Point;\n\n/** Possible orientations for a drop list. */\nexport type DropListOrientation = 'horizontal' | 'vertical';\n\n/**\n * Injection token that can be used to configure the\n * behavior of the drag&drop-related components.\n */\nexport const CDK_DRAG_CONFIG = new InjectionToken('CDK_DRAG_CONFIG');\n\n/**\n * Object that can be used to configure the drag\n * items and drop lists within a module or a component.\n */\nexport interface DragDropConfig extends Partial {\n lockAxis?: DragAxis;\n dragStartDelay?: DragStartDelay;\n constrainPosition?: DragConstrainPosition;\n previewClass?: string | string[];\n boundaryElement?: string;\n rootElementSelector?: string;\n draggingDisabled?: boolean;\n sortingDisabled?: boolean;\n listAutoScrollDisabled?: boolean;\n listOrientation?: DropListOrientation;\n zIndex?: number;\n previewContainer?: 'global' | 'parent';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n BooleanInput,\n coerceArray,\n coerceNumberProperty,\n coerceBooleanProperty,\n NumberInput,\n} from '@angular/cdk/coercion';\nimport {\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Optional,\n Directive,\n ChangeDetectorRef,\n SkipSelf,\n Inject,\n InjectionToken,\n} from '@angular/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\nimport {CdkDrag} from './drag';\nimport {CdkDragDrop, CdkDragEnter, CdkDragExit, CdkDragSortEvent} from '../drag-events';\nimport {CDK_DROP_LIST_GROUP, CdkDropListGroup} from './drop-list-group';\nimport {DropListRef} from '../drop-list-ref';\nimport {DragRef} from '../drag-ref';\nimport {DragDrop} from '../drag-drop';\nimport {DropListOrientation, DragAxis, DragDropConfig, CDK_DRAG_CONFIG} from './config';\nimport {merge, Subject} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {assertElementNode} from './assertions';\n\n/** Counter used to generate unique ids for drop zones. */\nlet _uniqueIdCounter = 0;\n\n/**\n * Internal compile-time-only representation of a `CdkDropList`.\n * Used to avoid circular import issues between the `CdkDropList` and the `CdkDrag`.\n * @docs-private\n */\nexport interface CdkDropListInternal extends CdkDropList {}\n\n/**\n * Injection token that can be used to reference instances of `CdkDropList`. It serves as\n * alternative token to the actual `CdkDropList` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DROP_LIST = new InjectionToken('CdkDropList');\n\n/** Container that wraps a set of draggable items. */\n@Directive({\n selector: '[cdkDropList], cdk-drop-list',\n exportAs: 'cdkDropList',\n standalone: true,\n providers: [\n // Prevent child drop lists from picking up the same group as their parent.\n {provide: CDK_DROP_LIST_GROUP, useValue: undefined},\n {provide: CDK_DROP_LIST, useExisting: CdkDropList},\n ],\n host: {\n 'class': 'cdk-drop-list',\n '[attr.id]': 'id',\n '[class.cdk-drop-list-disabled]': 'disabled',\n '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n },\n})\nexport class CdkDropList implements OnDestroy {\n /** Emits when the list has been destroyed. */\n private readonly _destroyed = new Subject();\n\n /** Whether the element's scrollable parents have been resolved. */\n private _scrollableParentsResolved: boolean;\n\n /** Keeps track of the drop lists that are currently on the page. */\n private static _dropLists: CdkDropList[] = [];\n\n /** Reference to the underlying drop list instance. */\n _dropListRef: DropListRef>;\n\n /**\n * Other draggable containers that this container is connected to and into which the\n * container's items can be transferred. Can either be references to other drop containers,\n * or their unique IDs.\n */\n @Input('cdkDropListConnectedTo')\n connectedTo: (CdkDropList | string)[] | CdkDropList | string = [];\n\n /** Arbitrary data to attach to this container. */\n @Input('cdkDropListData') data: T;\n\n /** Direction in which the list is oriented. */\n @Input('cdkDropListOrientation') orientation: DropListOrientation;\n\n /**\n * Unique ID for the drop zone. Can be used as a reference\n * in the `connectedTo` of another `CdkDropList`.\n */\n @Input() id: string = `cdk-drop-list-${_uniqueIdCounter++}`;\n\n /** Locks the position of the draggable elements inside the container along the specified axis. */\n @Input('cdkDropListLockAxis') lockAxis: DragAxis;\n\n /** Whether starting a dragging sequence from this container is disabled. */\n @Input('cdkDropListDisabled')\n get disabled(): boolean {\n return this._disabled || (!!this._group && this._group.disabled);\n }\n set disabled(value: BooleanInput) {\n // Usually we sync the directive and ref state right before dragging starts, in order to have\n // a single point of failure and to avoid having to use setters for everything. `disabled` is\n // a special case, because it can prevent the `beforeStarted` event from firing, which can lock\n // the user in a disabled state, so we also need to sync it as it's being set.\n this._dropListRef.disabled = this._disabled = coerceBooleanProperty(value);\n }\n private _disabled: boolean;\n\n /** Whether sorting within this drop list is disabled. */\n @Input('cdkDropListSortingDisabled')\n sortingDisabled: BooleanInput;\n\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n @Input('cdkDropListEnterPredicate')\n enterPredicate: (drag: CdkDrag, drop: CdkDropList) => boolean = () => true;\n\n /** Functions that is used to determine whether an item can be sorted into a particular index. */\n @Input('cdkDropListSortPredicate')\n sortPredicate: (index: number, drag: CdkDrag, drop: CdkDropList) => boolean = () => true;\n\n /** Whether to auto-scroll the view when the user moves their pointer close to the edges. */\n @Input('cdkDropListAutoScrollDisabled')\n autoScrollDisabled: BooleanInput;\n\n /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n @Input('cdkDropListAutoScrollStep')\n autoScrollStep: NumberInput;\n\n /** Emits when the user drops an item inside the container. */\n @Output('cdkDropListDropped')\n readonly dropped: EventEmitter> = new EventEmitter>();\n\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n @Output('cdkDropListEntered')\n readonly entered: EventEmitter> = new EventEmitter>();\n\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n @Output('cdkDropListExited')\n readonly exited: EventEmitter> = new EventEmitter>();\n\n /** Emits as the user is swapping items while actively dragging. */\n @Output('cdkDropListSorted')\n readonly sorted: EventEmitter> = new EventEmitter>();\n\n /**\n * Keeps track of the items that are registered with this container. Historically we used to\n * do this with a `ContentChildren` query, however queries don't handle transplanted views very\n * well which means that we can't handle cases like dragging the headers of a `mat-table`\n * correctly. What we do instead is to have the items register themselves with the container\n * and then we sort them based on their position in the DOM.\n */\n private _unsortedItems = new Set();\n\n constructor(\n /** Element that the drop list is attached to. */\n public element: ElementRef,\n dragDrop: DragDrop,\n private _changeDetectorRef: ChangeDetectorRef,\n private _scrollDispatcher: ScrollDispatcher,\n @Optional() private _dir?: Directionality,\n @Optional()\n @Inject(CDK_DROP_LIST_GROUP)\n @SkipSelf()\n private _group?: CdkDropListGroup,\n @Optional() @Inject(CDK_DRAG_CONFIG) config?: DragDropConfig,\n ) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertElementNode(element.nativeElement, 'cdkDropList');\n }\n\n this._dropListRef = dragDrop.createDropList(element);\n this._dropListRef.data = this;\n\n if (config) {\n this._assignDefaults(config);\n }\n\n this._dropListRef.enterPredicate = (drag: DragRef, drop: DropListRef) => {\n return this.enterPredicate(drag.data, drop.data);\n };\n\n this._dropListRef.sortPredicate = (\n index: number,\n drag: DragRef,\n drop: DropListRef,\n ) => {\n return this.sortPredicate(index, drag.data, drop.data);\n };\n\n this._setupInputSyncSubscription(this._dropListRef);\n this._handleEvents(this._dropListRef);\n CdkDropList._dropLists.push(this);\n\n if (_group) {\n _group._items.add(this);\n }\n }\n\n /** Registers an items with the drop list. */\n addItem(item: CdkDrag): void {\n this._unsortedItems.add(item);\n\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n\n /** Removes an item from the drop list. */\n removeItem(item: CdkDrag): void {\n this._unsortedItems.delete(item);\n\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n\n /** Gets the registered items in the list, sorted by their position in the DOM. */\n getSortedItems(): CdkDrag[] {\n return Array.from(this._unsortedItems).sort((a: CdkDrag, b: CdkDrag) => {\n const documentPosition = a._dragRef\n .getVisibleElement()\n .compareDocumentPosition(b._dragRef.getVisibleElement());\n\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n }\n\n ngOnDestroy() {\n const index = CdkDropList._dropLists.indexOf(this);\n\n if (index > -1) {\n CdkDropList._dropLists.splice(index, 1);\n }\n\n if (this._group) {\n this._group._items.delete(this);\n }\n\n this._unsortedItems.clear();\n this._dropListRef.dispose();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n private _setupInputSyncSubscription(ref: DropListRef) {\n if (this._dir) {\n this._dir.change\n .pipe(startWith(this._dir.value), takeUntil(this._destroyed))\n .subscribe(value => ref.withDirection(value));\n }\n\n ref.beforeStarted.subscribe(() => {\n const siblings = coerceArray(this.connectedTo).map(drop => {\n if (typeof drop === 'string') {\n const correspondingDropList = CdkDropList._dropLists.find(list => list.id === drop);\n\n if (!correspondingDropList && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n console.warn(`CdkDropList could not find connected drop list with id \"${drop}\"`);\n }\n\n return correspondingDropList!;\n }\n\n return drop;\n });\n\n if (this._group) {\n this._group._items.forEach(drop => {\n if (siblings.indexOf(drop) === -1) {\n siblings.push(drop);\n }\n });\n }\n\n // Note that we resolve the scrollable parents here so that we delay the resolution\n // as long as possible, ensuring that the element is in its final place in the DOM.\n if (!this._scrollableParentsResolved) {\n const scrollableParents = this._scrollDispatcher\n .getAncestorScrollContainers(this.element)\n .map(scrollable => scrollable.getElementRef().nativeElement);\n this._dropListRef.withScrollableParents(scrollableParents);\n\n // Only do this once since it involves traversing the DOM and the parents\n // shouldn't be able to change without the drop list being destroyed.\n this._scrollableParentsResolved = true;\n }\n\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.sortingDisabled = coerceBooleanProperty(this.sortingDisabled);\n ref.autoScrollDisabled = coerceBooleanProperty(this.autoScrollDisabled);\n ref.autoScrollStep = coerceNumberProperty(this.autoScrollStep, 2);\n ref\n .connectedTo(siblings.filter(drop => drop && drop !== this).map(list => list._dropListRef))\n .withOrientation(this.orientation);\n });\n }\n\n /** Handles events from the underlying DropListRef. */\n private _handleEvents(ref: DropListRef) {\n ref.beforeStarted.subscribe(() => {\n this._syncItemsWithRef();\n this._changeDetectorRef.markForCheck();\n });\n\n ref.entered.subscribe(event => {\n this.entered.emit({\n container: this,\n item: event.item.data,\n currentIndex: event.currentIndex,\n });\n });\n\n ref.exited.subscribe(event => {\n this.exited.emit({\n container: this,\n item: event.item.data,\n });\n this._changeDetectorRef.markForCheck();\n });\n\n ref.sorted.subscribe(event => {\n this.sorted.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n container: this,\n item: event.item.data,\n });\n });\n\n ref.dropped.subscribe(dropEvent => {\n this.dropped.emit({\n previousIndex: dropEvent.previousIndex,\n currentIndex: dropEvent.currentIndex,\n previousContainer: dropEvent.previousContainer.data,\n container: dropEvent.container.data,\n item: dropEvent.item.data,\n isPointerOverContainer: dropEvent.isPointerOverContainer,\n distance: dropEvent.distance,\n dropPoint: dropEvent.dropPoint,\n event: dropEvent.event,\n });\n\n // Mark for check since all of these events run outside of change\n // detection and we're not guaranteed for something else to have triggered it.\n this._changeDetectorRef.markForCheck();\n });\n\n merge(ref.receivingStarted, ref.receivingStopped).subscribe(() =>\n this._changeDetectorRef.markForCheck(),\n );\n }\n\n /** Assigns the default input values based on a provided config object. */\n private _assignDefaults(config: DragDropConfig) {\n const {lockAxis, draggingDisabled, sortingDisabled, listAutoScrollDisabled, listOrientation} =\n config;\n\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.sortingDisabled = sortingDisabled == null ? false : sortingDisabled;\n this.autoScrollDisabled = listAutoScrollDisabled == null ? false : listAutoScrollDisabled;\n this.orientation = listOrientation || 'vertical';\n\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n }\n\n /** Syncs up the registered drag items with underlying drop list ref. */\n private _syncItemsWithRef() {\n this._dropListRef.withItems(this.getSortedItems().map(item => item._dragRef));\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n Directive,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n Optional,\n SkipSelf,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {CDK_DRAG_PARENT} from '../drag-parent';\nimport {assertElementNode} from './assertions';\n\n/**\n * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as\n * alternative token to the actual `CdkDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DRAG_HANDLE = new InjectionToken('CdkDragHandle');\n\n/** Handle that can be used to drag a CdkDrag instance. */\n@Directive({\n selector: '[cdkDragHandle]',\n standalone: true,\n host: {\n 'class': 'cdk-drag-handle',\n },\n providers: [{provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle}],\n})\nexport class CdkDragHandle implements OnDestroy {\n /** Closest parent draggable instance. */\n _parentDrag: {} | undefined;\n\n /** Emits when the state of the handle has changed. */\n readonly _stateChanges = new Subject();\n\n /** Whether starting to drag through this handle is disabled. */\n @Input('cdkDragHandleDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this._stateChanges.next(this);\n }\n private _disabled = false;\n\n constructor(\n public element: ElementRef,\n @Inject(CDK_DRAG_PARENT) @Optional() @SkipSelf() parentDrag?: any,\n ) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertElementNode(element.nativeElement, 'cdkDragHandle');\n }\n\n this._parentDrag = parentDrag;\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, TemplateRef, Input, InjectionToken} from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as\n * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DRAG_PLACEHOLDER = new InjectionToken('CdkDragPlaceholder');\n\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n */\n@Directive({\n selector: 'ng-template[cdkDragPlaceholder]',\n standalone: true,\n providers: [{provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder}],\n})\nexport class CdkDragPlaceholder {\n /** Context data to be added to the placeholder template instance. */\n @Input() data: T;\n constructor(public templateRef: TemplateRef) {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, InjectionToken, Input, TemplateRef} from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as\n * alternative token to the actual `CdkDragPreview` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DRAG_PREVIEW = new InjectionToken('CdkDragPreview');\n\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n */\n@Directive({\n selector: 'ng-template[cdkDragPreview]',\n standalone: true,\n providers: [{provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview}],\n})\nexport class CdkDragPreview {\n /** Context data to be added to the preview template instance. */\n @Input() data: T;\n\n /** Whether the preview should preserve the same size as the item that is being dragged. */\n @Input()\n get matchSize(): boolean {\n return this._matchSize;\n }\n set matchSize(value: BooleanInput) {\n this._matchSize = coerceBooleanProperty(value);\n }\n private _matchSize = false;\n\n constructor(public templateRef: TemplateRef) {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n SkipSelf,\n ViewContainerRef,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n Self,\n} from '@angular/core';\nimport {\n coerceBooleanProperty,\n coerceNumberProperty,\n coerceElement,\n BooleanInput,\n} from '@angular/cdk/coercion';\nimport {Observable, Observer, Subject, merge} from 'rxjs';\nimport {startWith, take, map, takeUntil, switchMap, tap} from 'rxjs/operators';\nimport {\n CdkDragDrop,\n CdkDragEnd,\n CdkDragEnter,\n CdkDragExit,\n CdkDragMove,\n CdkDragStart,\n CdkDragRelease,\n} from '../drag-events';\nimport {CDK_DRAG_HANDLE, CdkDragHandle} from './drag-handle';\nimport {CDK_DRAG_PLACEHOLDER, CdkDragPlaceholder} from './drag-placeholder';\nimport {CDK_DRAG_PREVIEW, CdkDragPreview} from './drag-preview';\nimport {CDK_DRAG_PARENT} from '../drag-parent';\nimport {DragRef, Point, PreviewContainer} from '../drag-ref';\nimport {CDK_DROP_LIST, CdkDropListInternal as CdkDropList} from './drop-list';\nimport {DragDrop} from '../drag-drop';\nimport {CDK_DRAG_CONFIG, DragDropConfig, DragStartDelay, DragAxis} from './config';\nimport {assertElementNode} from './assertions';\n\nconst DRAG_HOST_CLASS = 'cdk-drag';\n\n/** Element that can be moved inside a CdkDropList container. */\n@Directive({\n selector: '[cdkDrag]',\n exportAs: 'cdkDrag',\n standalone: true,\n host: {\n 'class': DRAG_HOST_CLASS,\n '[class.cdk-drag-disabled]': 'disabled',\n '[class.cdk-drag-dragging]': '_dragRef.isDragging()',\n },\n providers: [{provide: CDK_DRAG_PARENT, useExisting: CdkDrag}],\n})\nexport class CdkDrag implements AfterViewInit, OnChanges, OnDestroy {\n private readonly _destroyed = new Subject();\n private static _dragInstances: CdkDrag[] = [];\n\n /** Reference to the underlying drag instance. */\n _dragRef: DragRef>;\n\n /** Elements that can be used to drag the draggable item. */\n @ContentChildren(CDK_DRAG_HANDLE, {descendants: true}) _handles: QueryList;\n\n /** Element that will be used as a template to create the draggable item's preview. */\n @ContentChild(CDK_DRAG_PREVIEW) _previewTemplate: CdkDragPreview;\n\n /** Template for placeholder element rendered to show where a draggable would be dropped. */\n @ContentChild(CDK_DRAG_PLACEHOLDER) _placeholderTemplate: CdkDragPlaceholder;\n\n /** Arbitrary data to attach to this drag instance. */\n @Input('cdkDragData') data: T;\n\n /** Locks the position of the dragged element along the specified axis. */\n @Input('cdkDragLockAxis') lockAxis: DragAxis;\n\n /**\n * Selector that will be used to determine the root draggable element, starting from\n * the `cdkDrag` element and going up the DOM. Passing an alternate root element is useful\n * when trying to enable dragging on an element that you might not have access to.\n */\n @Input('cdkDragRootElement') rootElementSelector: string;\n\n /**\n * Node or selector that will be used to determine the element to which the draggable's\n * position will be constrained. If a string is passed in, it'll be used as a selector that\n * will be matched starting from the element's parent and going up the DOM until a match\n * has been found.\n */\n @Input('cdkDragBoundary') boundaryElement: string | ElementRef | HTMLElement;\n\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n @Input('cdkDragStartDelay') dragStartDelay: DragStartDelay;\n\n /**\n * Sets the position of a `CdkDrag` that is outside of a drop container.\n * Can be used to restore the element's position for a returning user.\n */\n @Input('cdkDragFreeDragPosition') freeDragPosition: Point;\n\n /** Whether starting to drag this element is disabled. */\n @Input('cdkDragDisabled')\n get disabled(): boolean {\n return this._disabled || (this.dropContainer && this.dropContainer.disabled);\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this._dragRef.disabled = this._disabled;\n }\n private _disabled: boolean;\n\n /**\n * Function that can be used to customize the logic of how the position of the drag item\n * is limited while it's being dragged. Gets called with a point containing the current position\n * of the user's pointer on the page, a reference to the item being dragged and its dimensions.\n * Should return a point describing where the item should be rendered.\n */\n @Input('cdkDragConstrainPosition') constrainPosition?: (\n userPointerPosition: Point,\n dragRef: DragRef,\n dimensions: ClientRect,\n pickupPositionInElement: Point,\n ) => Point;\n\n /** Class to be added to the preview element. */\n @Input('cdkDragPreviewClass') previewClass: string | string[];\n\n /**\n * Configures the place into which the preview of the item will be inserted. Can be configured\n * globally through `CDK_DROP_LIST`. Possible values:\n * - `global` - Preview will be inserted at the bottom of the ``. The advantage is that\n * you don't have to worry about `overflow: hidden` or `z-index`, but the item won't retain\n * its inherited styles.\n * - `parent` - Preview will be inserted into the parent of the drag item. The advantage is that\n * inherited styles will be preserved, but it may be clipped by `overflow: hidden` or not be\n * visible due to `z-index`. Furthermore, the preview is going to have an effect over selectors\n * like `:nth-child` and some flexbox configurations.\n * - `ElementRef | HTMLElement` - Preview will be inserted into a specific element.\n * Same advantages and disadvantages as `parent`.\n */\n @Input('cdkDragPreviewContainer') previewContainer: PreviewContainer;\n\n /** Emits when the user starts dragging the item. */\n @Output('cdkDragStarted') readonly started: EventEmitter =\n new EventEmitter();\n\n /** Emits when the user has released a drag item, before any animations have started. */\n @Output('cdkDragReleased') readonly released: EventEmitter =\n new EventEmitter();\n\n /** Emits when the user stops dragging an item in the container. */\n @Output('cdkDragEnded') readonly ended: EventEmitter = new EventEmitter();\n\n /** Emits when the user has moved the item into a new container. */\n @Output('cdkDragEntered') readonly entered: EventEmitter> = new EventEmitter<\n CdkDragEnter\n >();\n\n /** Emits when the user removes the item its container by dragging it into another container. */\n @Output('cdkDragExited') readonly exited: EventEmitter> = new EventEmitter<\n CdkDragExit\n >();\n\n /** Emits when the user drops the item inside a container. */\n @Output('cdkDragDropped') readonly dropped: EventEmitter> = new EventEmitter<\n CdkDragDrop\n >();\n\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n @Output('cdkDragMoved')\n readonly moved: Observable> = new Observable(\n (observer: Observer>) => {\n const subscription = this._dragRef.moved\n .pipe(\n map(movedEvent => ({\n source: this,\n pointerPosition: movedEvent.pointerPosition,\n event: movedEvent.event,\n delta: movedEvent.delta,\n distance: movedEvent.distance,\n })),\n )\n .subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n };\n },\n );\n\n constructor(\n /** Element that the draggable is attached to. */\n public element: ElementRef,\n /** Droppable container that the draggable is a part of. */\n @Inject(CDK_DROP_LIST) @Optional() @SkipSelf() public dropContainer: CdkDropList,\n /**\n * @deprecated `_document` parameter no longer being used and will be removed.\n * @breaking-change 12.0.0\n */\n @Inject(DOCUMENT) _document: any,\n private _ngZone: NgZone,\n private _viewContainerRef: ViewContainerRef,\n @Optional() @Inject(CDK_DRAG_CONFIG) config: DragDropConfig,\n @Optional() private _dir: Directionality,\n dragDrop: DragDrop,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Self() @Inject(CDK_DRAG_HANDLE) private _selfHandle?: CdkDragHandle,\n @Optional() @SkipSelf() @Inject(CDK_DRAG_PARENT) private _parentDrag?: CdkDrag,\n ) {\n this._dragRef = dragDrop.createDrag(element, {\n dragStartThreshold:\n config && config.dragStartThreshold != null ? config.dragStartThreshold : 5,\n pointerDirectionChangeThreshold:\n config && config.pointerDirectionChangeThreshold != null\n ? config.pointerDirectionChangeThreshold\n : 5,\n zIndex: config?.zIndex,\n });\n this._dragRef.data = this;\n\n // We have to keep track of the drag instances in order to be able to match an element to\n // a drag instance. We can't go through the global registry of `DragRef`, because the root\n // element could be different.\n CdkDrag._dragInstances.push(this);\n\n if (config) {\n this._assignDefaults(config);\n }\n\n // Note that usually the container is assigned when the drop list is picks up the item, but in\n // some cases (mainly transplanted views with OnPush, see #18341) we may end up in a situation\n // where there are no items on the first change detection pass, but the items get picked up as\n // soon as the user triggers another pass by dragging. This is a problem, because the item would\n // have to switch from standalone mode to drag mode in the middle of the dragging sequence which\n // is too late since the two modes save different kinds of information. We work around it by\n // assigning the drop container both from here and the list.\n if (dropContainer) {\n this._dragRef._withDropContainer(dropContainer._dropListRef);\n dropContainer.addItem(this);\n }\n\n this._syncInputs(this._dragRef);\n this._handleEvents(this._dragRef);\n }\n\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement(): HTMLElement {\n return this._dragRef.getPlaceholderElement();\n }\n\n /** Returns the root draggable element. */\n getRootElement(): HTMLElement {\n return this._dragRef.getRootElement();\n }\n\n /** Resets a standalone drag item to its initial position. */\n reset(): void {\n this._dragRef.reset();\n }\n\n /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n */\n getFreeDragPosition(): Readonly {\n return this._dragRef.getFreeDragPosition();\n }\n\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n setFreeDragPosition(value: Point): void {\n this._dragRef.setFreeDragPosition(value);\n }\n\n ngAfterViewInit() {\n // Normally this isn't in the zone, but it can cause major performance regressions for apps\n // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.\n this._ngZone.runOutsideAngular(() => {\n // We need to wait for the zone to stabilize, in order for the reference\n // element to be in the proper place in the DOM. This is mostly relevant\n // for draggable elements inside portals since they get stamped out in\n // their original DOM position and then they get transferred to the portal.\n this._ngZone.onStable.pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {\n this._updateRootElement();\n this._setupHandlesListener();\n\n if (this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n });\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const rootSelectorChange = changes['rootElementSelector'];\n const positionChange = changes['freeDragPosition'];\n\n // We don't have to react to the first change since it's being\n // handled in `ngAfterViewInit` where it needs to be deferred.\n if (rootSelectorChange && !rootSelectorChange.firstChange) {\n this._updateRootElement();\n }\n\n // Skip the first change since it's being handled in `ngAfterViewInit`.\n if (positionChange && !positionChange.firstChange && this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n }\n\n ngOnDestroy() {\n if (this.dropContainer) {\n this.dropContainer.removeItem(this);\n }\n\n const index = CdkDrag._dragInstances.indexOf(this);\n if (index > -1) {\n CdkDrag._dragInstances.splice(index, 1);\n }\n\n // Unnecessary in most cases, but used to avoid extra change detections with `zone-paths-rxjs`.\n this._ngZone.runOutsideAngular(() => {\n this._destroyed.next();\n this._destroyed.complete();\n this._dragRef.dispose();\n });\n }\n\n /** Syncs the root element with the `DragRef`. */\n private _updateRootElement() {\n const element = this.element.nativeElement as HTMLElement;\n let rootElement = element;\n if (this.rootElementSelector) {\n rootElement =\n element.closest !== undefined\n ? (element.closest(this.rootElementSelector) as HTMLElement)\n : // Comment tag doesn't have closest method, so use parent's one.\n (element.parentElement?.closest(this.rootElementSelector) as HTMLElement);\n }\n\n if (rootElement && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n assertElementNode(rootElement, 'cdkDrag');\n }\n\n this._dragRef.withRootElement(rootElement || element);\n }\n\n /** Gets the boundary element, based on the `boundaryElement` value. */\n private _getBoundaryElement() {\n const boundary = this.boundaryElement;\n\n if (!boundary) {\n return null;\n }\n\n if (typeof boundary === 'string') {\n return this.element.nativeElement.closest(boundary);\n }\n\n return coerceElement(boundary);\n }\n\n /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n private _syncInputs(ref: DragRef>) {\n ref.beforeStarted.subscribe(() => {\n if (!ref.isDragging()) {\n const dir = this._dir;\n const dragStartDelay = this.dragStartDelay;\n const placeholder = this._placeholderTemplate\n ? {\n template: this._placeholderTemplate.templateRef,\n context: this._placeholderTemplate.data,\n viewContainer: this._viewContainerRef,\n }\n : null;\n const preview = this._previewTemplate\n ? {\n template: this._previewTemplate.templateRef,\n context: this._previewTemplate.data,\n matchSize: this._previewTemplate.matchSize,\n viewContainer: this._viewContainerRef,\n }\n : null;\n\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.dragStartDelay =\n typeof dragStartDelay === 'object' && dragStartDelay\n ? dragStartDelay\n : coerceNumberProperty(dragStartDelay);\n ref.constrainPosition = this.constrainPosition;\n ref.previewClass = this.previewClass;\n ref\n .withBoundaryElement(this._getBoundaryElement())\n .withPlaceholderTemplate(placeholder)\n .withPreviewTemplate(preview)\n .withPreviewContainer(this.previewContainer || 'global');\n\n if (dir) {\n ref.withDirection(dir.value);\n }\n }\n });\n\n // This only needs to be resolved once.\n ref.beforeStarted.pipe(take(1)).subscribe(() => {\n // If we managed to resolve a parent through DI, use it.\n if (this._parentDrag) {\n ref.withParent(this._parentDrag._dragRef);\n return;\n }\n\n // Otherwise fall back to resolving the parent by looking up the DOM. This can happen if\n // the item was projected into another item by something like `ngTemplateOutlet`.\n let parent = this.element.nativeElement.parentElement;\n while (parent) {\n if (parent.classList.contains(DRAG_HOST_CLASS)) {\n ref.withParent(\n CdkDrag._dragInstances.find(drag => {\n return drag.element.nativeElement === parent;\n })?._dragRef || null,\n );\n break;\n }\n parent = parent.parentElement;\n }\n });\n }\n\n /** Handles the events from the underlying `DragRef`. */\n private _handleEvents(ref: DragRef>) {\n ref.started.subscribe(startEvent => {\n this.started.emit({source: this, event: startEvent.event});\n\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n\n ref.released.subscribe(releaseEvent => {\n this.released.emit({source: this, event: releaseEvent.event});\n });\n\n ref.ended.subscribe(endEvent => {\n this.ended.emit({\n source: this,\n distance: endEvent.distance,\n dropPoint: endEvent.dropPoint,\n event: endEvent.event,\n });\n\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n\n ref.entered.subscribe(enterEvent => {\n this.entered.emit({\n container: enterEvent.container.data,\n item: this,\n currentIndex: enterEvent.currentIndex,\n });\n });\n\n ref.exited.subscribe(exitEvent => {\n this.exited.emit({\n container: exitEvent.container.data,\n item: this,\n });\n });\n\n ref.dropped.subscribe(dropEvent => {\n this.dropped.emit({\n previousIndex: dropEvent.previousIndex,\n currentIndex: dropEvent.currentIndex,\n previousContainer: dropEvent.previousContainer.data,\n container: dropEvent.container.data,\n isPointerOverContainer: dropEvent.isPointerOverContainer,\n item: this,\n distance: dropEvent.distance,\n dropPoint: dropEvent.dropPoint,\n event: dropEvent.event,\n });\n });\n }\n\n /** Assigns the default input values based on a provided config object. */\n private _assignDefaults(config: DragDropConfig) {\n const {\n lockAxis,\n dragStartDelay,\n constrainPosition,\n previewClass,\n boundaryElement,\n draggingDisabled,\n rootElementSelector,\n previewContainer,\n } = config;\n\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.dragStartDelay = dragStartDelay || 0;\n\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n\n if (constrainPosition) {\n this.constrainPosition = constrainPosition;\n }\n\n if (previewClass) {\n this.previewClass = previewClass;\n }\n\n if (boundaryElement) {\n this.boundaryElement = boundaryElement;\n }\n\n if (rootElementSelector) {\n this.rootElementSelector = rootElementSelector;\n }\n\n if (previewContainer) {\n this.previewContainer = previewContainer;\n }\n }\n\n /** Sets up the listener that syncs the handles with the drag ref. */\n private _setupHandlesListener() {\n // Listen for any newly-added handles.\n this._handles.changes\n .pipe(\n startWith(this._handles),\n // Sync the new handles with the DragRef.\n tap((handles: QueryList) => {\n const childHandleElements = handles\n .filter(handle => handle._parentDrag === this)\n .map(handle => handle.element);\n\n // Usually handles are only allowed to be a descendant of the drag element, but if\n // the consumer defined a different drag root, we should allow the drag element\n // itself to be a handle too.\n if (this._selfHandle && this.rootElementSelector) {\n childHandleElements.push(this.element);\n }\n\n this._dragRef.withHandles(childHandleElements);\n }),\n // Listen if the state of any of the handles changes.\n switchMap((handles: QueryList) => {\n return merge(\n ...handles.map(item => {\n return item._stateChanges.pipe(startWith(item));\n }),\n ) as Observable;\n }),\n takeUntil(this._destroyed),\n )\n .subscribe(handleInstance => {\n // Enabled/disable the handle that changed in the DragRef.\n const dragRef = this._dragRef;\n const handle = handleInstance.element.nativeElement;\n handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);\n });\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {CdkDropList} from './directives/drop-list';\nimport {CdkDropListGroup} from './directives/drop-list-group';\nimport {CdkDrag} from './directives/drag';\nimport {CdkDragHandle} from './directives/drag-handle';\nimport {CdkDragPreview} from './directives/drag-preview';\nimport {CdkDragPlaceholder} from './directives/drag-placeholder';\nimport {DragDrop} from './drag-drop';\n\nconst DRAG_DROP_DIRECTIVES = [\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n];\n\n@NgModule({\n imports: DRAG_DROP_DIRECTIVES,\n exports: [CdkScrollableModule, ...DRAG_DROP_DIRECTIVES],\n providers: [DragDrop],\n})\nexport class DragDropModule {}\n","import * as i0 from '@angular/core';\nimport { Injectable, Optional, Inject, Directive, EventEmitter, forwardRef, Component, ChangeDetectionStrategy, Input, Output, ViewChild, NgModule } from '@angular/core';\nimport { takeUntil, filter, take } from 'rxjs/operators';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\n\n/// \nconst MONACO_PATH = 'MONACO_PATH';\n\nclass MonacoEditorLoaderService {\n constructor(ngZone, monacoPathConfig) {\n this.ngZone = ngZone;\n this.monacoPathConfig = monacoPathConfig;\n this.isMonacoLoaded$ = new BehaviorSubject(false);\n this._monacoPath = 'assets/monaco-editor/min/vs';\n if (window.monacoEditorAlreadyInitialized) {\n ngZone.run(() => this.isMonacoLoaded$.next(true));\n return;\n }\n window.monacoEditorAlreadyInitialized = true;\n if (this.monacoPathConfig) {\n this.monacoPath = this.monacoPathConfig;\n }\n this.loadMonaco();\n }\n set monacoPath(value) {\n if (value) {\n this._monacoPath = value;\n }\n }\n loadMonaco() {\n const onGotAmdLoader = () => {\n let vsPath = this._monacoPath;\n window.amdRequire = window.require;\n const isElectron = !!this.nodeRequire;\n const isPathUrl = vsPath.includes('http');\n if (isElectron) {\n // Restore node require in window\n window.require = this.nodeRequire;\n if (!isPathUrl) {\n const path = window.require('path');\n vsPath = path.resolve(window.__dirname, this._monacoPath);\n }\n }\n window.amdRequire.config({ paths: { vs: vsPath } });\n // Load monaco\n window.amdRequire(['vs/editor/editor.main'], () => {\n this.ngZone.run(() => this.isMonacoLoaded$.next(true));\n }, (error) => console.error('Error loading monaco-editor: ', error));\n };\n // Check if AMD loader already available\n const isAmdLoaderAvailable = !!window.amdRequire;\n if (isAmdLoaderAvailable) {\n return onGotAmdLoader();\n }\n const isElectron = !!window.require;\n if (isElectron) {\n this.addElectronFixScripts();\n this.nodeRequire = window.require;\n }\n const loaderScript = document.createElement('script');\n loaderScript.type = 'text/javascript';\n loaderScript.src = `${this._monacoPath}/loader.js`;\n loaderScript.addEventListener('load', onGotAmdLoader);\n document.body.appendChild(loaderScript);\n }\n addElectronFixScripts() {\n const electronFixScript = document.createElement('script');\n // workaround monaco-css not understanding the environment\n const inlineScript = document.createTextNode('self.module = undefined;');\n // workaround monaco-typescript not understanding the environment\n const inlineScript2 = document.createTextNode('self.process.browser = true;');\n electronFixScript.appendChild(inlineScript);\n electronFixScript.appendChild(inlineScript2);\n document.body.appendChild(electronFixScript);\n }\n}\nMonacoEditorLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorLoaderService, deps: [{ token: i0.NgZone }, { token: MONACO_PATH, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nMonacoEditorLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorLoaderService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorLoaderService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MONACO_PATH]\n }] }]; } });\n\nclass MonacoEditorLoaderDirective {\n constructor(templateRef, viewContainer, monacoEditorLoaderService) {\n this.templateRef = templateRef;\n this.viewContainer = viewContainer;\n this.monacoEditorLoaderService = monacoEditorLoaderService;\n this.isMonacoLoaded$ = this.monacoEditorLoaderService.isMonacoLoaded$.asObservable();\n this.destroyed$ = new Subject();\n }\n ngOnInit() {\n this.isMonacoLoaded$.pipe(takeUntil(this.destroyed$)).subscribe((loaded) => {\n if (!loaded) {\n return this.viewContainer.clear();\n }\n this.viewContainer.createEmbeddedView(this.templateRef);\n });\n }\n ngOnDestroy() {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\nMonacoEditorLoaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorLoaderDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: MonacoEditorLoaderService }], target: i0.ɵɵFactoryTarget.Directive });\nMonacoEditorLoaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.0.2\", type: MonacoEditorLoaderDirective, selector: \"[ngxLoadMonacoEditor]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorLoaderDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[ngxLoadMonacoEditor]' }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: MonacoEditorLoaderService }]; } });\n\nclass MonacoEditorComponent {\n constructor(monacoLoader) {\n this.monacoLoader = monacoLoader;\n this.init = new EventEmitter();\n this.onTouched = () => { };\n this.onErrorStatusChange = () => { };\n this.propagateChange = () => { };\n }\n get model() {\n return this.editor && this.editor.getModel();\n }\n get modelMarkers() {\n return this.model && monaco.editor.getModelMarkers({\n resource: this.model.uri\n });\n }\n ngOnInit() {\n this.monacoLoader.isMonacoLoaded$.pipe(filter(isLoaded => isLoaded), take(1)).subscribe(() => {\n this.initEditor();\n });\n }\n ngOnChanges(changes) {\n if (this.editor && changes.options && !changes.options.firstChange) {\n const { language: toLanguage, theme: toTheme, ...options } = changes.options.currentValue;\n const { language: fromLanguage, theme: fromTheme } = changes.options.previousValue;\n if (fromLanguage !== toLanguage) {\n monaco.editor.setModelLanguage(this.editor.getModel(), this.options && this.options.language ? this.options.language : 'text');\n }\n if (fromTheme !== toTheme) {\n monaco.editor.setTheme(toTheme);\n }\n this.editor.updateOptions(options);\n }\n if (this.editor && changes.uri) {\n const toUri = changes.uri.currentValue;\n const fromUri = changes.uri.previousValue;\n if (fromUri && !toUri || !fromUri && toUri || toUri && fromUri && toUri.path !== fromUri.path) {\n const value = this.editor.getValue();\n if (this.modelUriInstance) {\n this.modelUriInstance.dispose();\n }\n let existingModel;\n if (toUri) {\n existingModel = monaco.editor.getModels().find((model) => model.uri.path === toUri.path);\n }\n this.modelUriInstance = existingModel ? existingModel : monaco.editor.createModel(value, this.options.language || 'text', this.uri);\n this.editor.setModel(this.modelUriInstance);\n }\n }\n }\n writeValue(value) {\n this.value = value;\n if (this.editor && value) {\n this.editor.setValue(value);\n }\n else if (this.editor) {\n this.editor.setValue('');\n }\n }\n registerOnChange(fn) {\n this.propagateChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n validate() {\n return !this.parsedError ? null : {\n monaco: {\n value: this.parsedError.split('|'),\n }\n };\n }\n registerOnValidatorChange(fn) {\n this.onErrorStatusChange = fn;\n }\n initEditor() {\n const options = {\n value: [this.value].join('\\n'),\n language: 'text',\n automaticLayout: true,\n scrollBeyondLastLine: false,\n theme: 'vc'\n };\n this.editor = monaco.editor.create(this.editorContent.nativeElement, this.options ? { ...options, ...this.options } : options);\n this.registerEditorListeners();\n this.init.emit(this.editor);\n }\n registerEditorListeners() {\n this.editor.onDidChangeModelContent(() => {\n this.propagateChange(this.editor.getValue());\n });\n this.editor.onDidChangeModelDecorations(() => {\n const currentParsedError = this.modelMarkers.map(({ message }) => message).join('|');\n const hasValidationStatusChanged = this.parsedError !== currentParsedError;\n if (hasValidationStatusChanged) {\n this.parsedError = currentParsedError;\n this.onErrorStatusChange();\n }\n });\n this.editor.onDidBlurEditorText(() => {\n this.onTouched();\n });\n }\n ngOnDestroy() {\n if (this.editor) {\n this.editor.dispose();\n }\n }\n}\nMonacoEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorComponent, deps: [{ token: MonacoEditorLoaderService }], target: i0.ɵɵFactoryTarget.Component });\nMonacoEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.0.2\", type: MonacoEditorComponent, selector: \"ngx-monaco-editor\", inputs: { options: \"options\", uri: \"uri\" }, outputs: { init: \"init\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MonacoEditorComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MonacoEditorComponent),\n multi: true,\n }\n ], viewQueries: [{ propertyName: \"editorContent\", first: true, predicate: [\"editor\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
\n\t\t
\n`, isInline: true, styles: [\".monaco-editor{position:absolute;top:0;bottom:0;left:0;right:0}.editor-container{overflow:hidden;position:relative;display:table;width:100%;height:100%;min-width:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'ngx-monaco-editor',\n template: `
\n\t\t
\n`,\n styles: [\n `\n.monaco-editor {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n}\n.editor-container {\n\toverflow: hidden;\n\tposition: relative;\n\tdisplay: table;\n\twidth: 100%;\n height: 100%;\n min-width: 0;\n}`\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MonacoEditorComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MonacoEditorComponent),\n multi: true,\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: MonacoEditorLoaderService }]; }, propDecorators: { options: [{\n type: Input\n }], uri: [{\n type: Input\n }], init: [{\n type: Output\n }], editorContent: [{\n type: ViewChild,\n args: ['editor', { static: true }]\n }] } });\n\nclass MonacoDiffEditorComponent {\n constructor(monacoLoader) {\n this.monacoLoader = monacoLoader;\n this.init = new EventEmitter();\n }\n ngOnInit() {\n this.container = this.editorContent.nativeElement;\n this.monacoLoader.isMonacoLoaded$.pipe(filter(isLoaded => isLoaded), take(1)).subscribe(() => {\n this.initMonaco();\n });\n }\n ngOnChanges(changes) {\n if (this.editor && ((changes.code && !changes.code.firstChange) || (changes.modified && !changes.modified.firstChange))) {\n const modified = monaco.editor.createModel(this.modified);\n const original = monaco.editor.createModel(this.original);\n this.editor.setModel({\n original,\n modified\n });\n }\n if (this.editor &&\n changes.options &&\n !changes.options.firstChange) {\n if (changes.options.previousValue.theme !== changes.options.currentValue.theme) {\n monaco.editor.setTheme(changes.options.currentValue.theme);\n }\n this.editor.updateOptions(changes.options.currentValue);\n }\n }\n initMonaco() {\n let opts = {\n readOnly: true,\n automaticLayout: true,\n theme: 'vc'\n };\n if (this.options) {\n opts = Object.assign({}, opts, this.options);\n }\n this.editor = monaco.editor.createDiffEditor(this.container, opts);\n const original = monaco.editor.createModel(this.original);\n const modified = monaco.editor.createModel(this.modified);\n this.editor.setModel({\n original,\n modified\n });\n this.editor.layout();\n this.init.emit(this.editor);\n }\n ngOnDestroy() {\n if (this.editor) {\n this.editor.dispose();\n }\n }\n}\nMonacoDiffEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoDiffEditorComponent, deps: [{ token: MonacoEditorLoaderService }], target: i0.ɵɵFactoryTarget.Component });\nMonacoDiffEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.0.2\", type: MonacoDiffEditorComponent, selector: \"ngx-monaco-diff-editor\", inputs: { original: \"original\", modified: \"modified\", options: \"options\" }, outputs: { init: \"init\" }, viewQueries: [{ propertyName: \"editorContent\", first: true, predicate: [\"diffEditor\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
\n\t\t
\n`, isInline: true, styles: [\".monaco-editor{position:absolute;top:0;bottom:0;left:0;right:0}.editor-container{overflow:hidden;position:relative;display:table;width:100%;height:100%;min-width:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoDiffEditorComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'ngx-monaco-diff-editor',\n template: `
\n\t\t
\n`,\n styles: [\n `\n.monaco-editor {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n}\n.editor-container {\n\toverflow: hidden;\n\tposition: relative;\n\tdisplay: table;\n\twidth: 100%;\n height: 100%;\n min-width: 0;\n}`\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], ctorParameters: function () { return [{ type: MonacoEditorLoaderService }]; }, propDecorators: { original: [{\n type: Input\n }], modified: [{\n type: Input\n }], options: [{\n type: Input\n }], init: [{\n type: Output\n }], editorContent: [{\n type: ViewChild,\n args: ['diffEditor', { static: true }]\n }] } });\n\nclass MonacoEditorModule {\n}\nMonacoEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMonacoEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorModule, declarations: [MonacoEditorLoaderDirective,\n MonacoEditorComponent,\n MonacoDiffEditorComponent], exports: [MonacoEditorLoaderDirective,\n MonacoEditorComponent,\n MonacoDiffEditorComponent] });\nMonacoEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorModule, imports: [[]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.2\", ngImport: i0, type: MonacoEditorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n declarations: [\n MonacoEditorLoaderDirective,\n MonacoEditorComponent,\n MonacoDiffEditorComponent\n ],\n exports: [\n MonacoEditorLoaderDirective,\n MonacoEditorComponent,\n MonacoDiffEditorComponent\n ]\n }]\n }] });\n\n/*\n * Public API Surface of materia-monaco-editor-lib\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MONACO_PATH, MonacoDiffEditorComponent, MonacoEditorComponent, MonacoEditorLoaderDirective, MonacoEditorLoaderService, MonacoEditorModule };\n","/*\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */\n\nimport { NgModule } from '@angular/core';\nimport { NbIconLibraries, NbSvgIcon, NbIcons } from '@nebular/theme';\nimport { icons } from 'eva-icons';\n\ninterface NbOriginalEvaIcon {\n toSvg(options: NbEvaIconOptions);\n}\n\nexport interface NbEvaIconOptions {\n width: string,\n height: string,\n fill: string,\n animation: {\n type: string,\n hover: boolean,\n infinite: boolean,\n },\n}\n\nexport class NbEvaSvgIcon extends NbSvgIcon {\n\n constructor(protected name, protected content: NbOriginalEvaIcon) {\n super(name, '');\n }\n\n getContent(options): string {\n return this.content.toSvg({\n width: '100%',\n height: '100%',\n fill: 'currentColor',\n ...options,\n });\n }\n}\n\n@NgModule({})\nexport class NbEvaIconsModule {\n\n private NAME = 'eva';\n\n constructor(iconLibrary: NbIconLibraries) {\n iconLibrary.registerSvgPack(this.NAME, this.createIcons());\n iconLibrary.setDefaultPack(this.NAME);\n }\n\n private createIcons(): NbIcons {\n return Object\n .entries(icons)\n .map(([name, icon]) => {\n return [name, new NbEvaSvgIcon(name, icon)] as [string, NbSvgIcon];\n })\n .reduce((newIcons, [name, icon]: [string, NbSvgIcon]) => {\n newIcons[name] = icon;\n return newIcons;\n }, {});\n }\n}\n","export type CountdownFormatFn = (opt: CountdownFormatFnOption) => string;\n\nexport interface CountdownFormatFnOption {\n date: number;\n formatStr: string;\n timezone?: string;\n}\n\nexport enum CountdownStatus {\n ing,\n pause,\n stop,\n done,\n}\n\nexport interface CountdownConfig {\n /**\n * Start the counter on demand, must call `begin()` to starting, Default: `false`\n */\n demand?: boolean;\n\n /**\n * Calculate the remaining time based on the server, e.g: `10`,`5.5`, (Unit: seconds)\n */\n leftTime?: number;\n\n /**\n * Refers to counting down from local time to end time (Unit: Milliseconds second UNIX timestamp)\n */\n stopTime?: number;\n\n /**\n * Formats a date value, pls refer to [Accepted patterns](https://angular.io/api/common/DatePipe#usage-notes), Default: `HH:mm:ss`\n */\n format?: string;\n\n /**\n * Beautify text, generally used to convert formatted time text into HTML\n */\n prettyText?: (text: string) => string;\n\n /**\n * Should be trigger type `notify` event on the x second. When values is `0` will be trigger every time.\n */\n notify?: number[] | number;\n\n /**\n * Default based on the implementation of `formatDate` in `@angular/common`\n *\n * You can changed to other libs, e.g: [date-fns](https://date-fns.org/v2.0.1/docs/format)\n */\n formatDate?: CountdownFormatFn;\n\n /**\n * A timezone offset (such as '+0430'), or a standard UTC/GMT.\n * When not supplied, uses the end-user's local system timezone, Default: `+0000`\n */\n timezone?: string;\n}\n\nexport type CountdownEventAction = 'start' | 'stop' | 'restart' | 'pause' | 'resume' | 'notify' | 'done';\n\nexport interface CountdownEvent {\n action: CountdownEventAction;\n status: CountdownStatus;\n left: number;\n text: string;\n}\n\nexport interface CountdownItem {\n text?: string;\n value?: number;\n}\n","import { Injectable, NgZone } from '@angular/core';\n\n@Injectable()\nexport class CountdownTimer {\n private fns: Array<((count: number) => number | void) | number> = [];\n private commands: Array<() => void> = [];\n private nextTime = 0;\n private ing = false;\n\n constructor(private ngZone: NgZone) {}\n\n start(): void {\n if (this.ing === true) {\n return;\n }\n\n this.ing = true;\n this.nextTime = +new Date();\n this.ngZone.runOutsideAngular(() => {\n this.process();\n });\n }\n\n private process(): void {\n while (this.commands.length) {\n this.commands.shift()!();\n }\n let diff = +new Date() - this.nextTime;\n const count = 1 + Math.floor(diff / 100);\n\n diff = 100 - (diff % 100);\n this.nextTime += 100 * count;\n\n for (let i = 0, len = this.fns.length; i < len; i += 2) {\n let frequency = this.fns[i + 1] as number;\n\n // 100/s\n if (0 === frequency) {\n (this.fns[i] as (count: number) => void)(count);\n // 1000/s\n } else {\n // 先把末位至0,再每次加2\n frequency += 2 * count - 1;\n\n const step = Math.floor(frequency / 20);\n if (step > 0) {\n (this.fns[i] as (count: number) => void)(step);\n }\n\n // 把末位还原成1\n this.fns[i + 1] = (frequency % 20) + 1;\n }\n }\n\n if (!this.ing) {\n return;\n }\n\n setTimeout(() => this.process(), diff);\n }\n\n add(fn: () => void, frequency: number): this {\n this.commands.push(() => {\n this.fns.push(fn);\n this.fns.push(frequency === 1000 ? 1 : 0);\n this.ing = true;\n });\n return this;\n }\n\n remove(fn: () => void): this {\n this.commands.push(() => {\n const i = this.fns.indexOf(fn);\n if (i !== -1) {\n this.fns.splice(i, 2);\n }\n this.ing = this.fns.length > 0;\n });\n return this;\n }\n}\n","// tslint:disable: no-inferrable-types\nimport { Injectable, Inject, LOCALE_ID } from '@angular/core';\nimport { formatDate } from '@angular/common';\nimport { CountdownFormatFn, CountdownConfig } from './interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class CountdownGlobalConfig implements CountdownConfig {\n constructor(@Inject(LOCALE_ID) private locale: string) {}\n\n demand?: boolean = false;\n\n leftTime?: number = 0;\n\n format?: string = 'HH:mm:ss';\n\n timezone?: string = '+0000';\n\n formatDate?: CountdownFormatFn = ({ date, formatStr, timezone }) => {\n return formatDate(new Date(date), formatStr, this.locale, timezone || this.timezone || '+0000');\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n OnDestroy,\n Output,\n EventEmitter,\n OnInit,\n SimpleChange,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Inject,\n LOCALE_ID,\n ChangeDetectorRef,\n TemplateRef,\n NgZone,\n} from '@angular/core';\n\nimport { CountdownConfig, CountdownStatus, CountdownEvent, CountdownEventAction, CountdownItem } from './interfaces';\nimport { CountdownTimer } from './countdown.timer';\nimport { CountdownGlobalConfig } from './countdown.config';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'countdown',\n template: `\n \n \n \n \n `,\n host: { '[class.count-down]': 'true' },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n providers: [CountdownTimer],\n standalone: true,\n})\nexport class CountdownComponent implements OnInit, OnChanges, OnDestroy {\n private frequency = 1000;\n private _notify: { [key: number]: boolean } = {};\n private status: CountdownStatus = CountdownStatus.ing;\n private isDestroy = false;\n private _config!: CountdownConfig;\n i: CountdownItem = {};\n left = 0;\n\n @Input()\n set config(i: CountdownConfig) {\n if (i.notify != null && !Array.isArray(i.notify) && i.notify > 0) {\n i.notify = [i.notify];\n }\n this._config = i;\n }\n get config(): CountdownConfig {\n return this._config;\n }\n @Input() render!: TemplateRef;\n @Output() readonly event = new EventEmitter();\n\n constructor(\n @Inject(LOCALE_ID) private locale: string,\n private timer: CountdownTimer,\n private defCog: CountdownGlobalConfig,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n ) {}\n\n /**\n * Start countdown, you must manually call when `demand: false`\n */\n begin(): void {\n this.status = CountdownStatus.ing;\n this.callEvent('start');\n }\n\n /**\n * Restart countdown\n */\n restart(): void {\n if (this.status !== CountdownStatus.stop) {\n this.destroy();\n }\n this.init();\n this.callEvent('restart');\n }\n\n /**\n * Stop countdown, must call `restart` when stopped, it's different from pause, unable to recover\n */\n stop(): void {\n if (this.status === CountdownStatus.stop) {\n return;\n }\n this.status = CountdownStatus.stop;\n this.destroy();\n this.callEvent('stop');\n }\n\n /**\n * Pause countdown, you can use `resume` to recover again\n */\n pause(): void {\n if (this.status === CountdownStatus.stop || this.status === CountdownStatus.pause) {\n return;\n }\n this.status = CountdownStatus.pause;\n this.callEvent('pause');\n }\n\n /**\n * Resume countdown\n */\n resume(): void {\n if (this.status === CountdownStatus.stop || this.status !== CountdownStatus.pause) {\n return;\n }\n this.status = CountdownStatus.ing;\n this.callEvent('resume');\n }\n\n private callEvent(action: CountdownEventAction): void {\n this.event.emit({ action, left: this.left, status: this.status, text: this.i.text! });\n }\n\n private init(): void {\n const { locale, defCog } = this;\n const config = (this.config = {\n ...new CountdownGlobalConfig(locale),\n ...defCog,\n ...this.config,\n });\n // tslint:disable-next-line: no-bitwise\n const frq = (this.frequency = ~config.format!.indexOf('S') ? 100 : 1000);\n this.status = config.demand ? CountdownStatus.pause : CountdownStatus.ing;\n\n this.getLeft();\n\n // bind reflow to me\n const _reflow = this.reflow;\n this.reflow = (count: number = 0, force: boolean = false) => _reflow.apply(this, [count, force]);\n\n if (Array.isArray(config.notify)) {\n config.notify.forEach((time: number) => {\n if (time < 1) {\n throw new Error(`The notify config must be a positive integer.`);\n }\n\n time = time * 1000;\n time = time - (time % frq);\n this._notify[time] = true;\n });\n }\n\n this.timer.add(this.reflow, frq).start();\n\n this.reflow(0, true);\n }\n\n private destroy(): this {\n this.timer.remove(this.reflow);\n return this;\n }\n\n /**\n * 更新时钟\n */\n private reflow(count: number = 0, force: boolean = false): void {\n if (this.isDestroy) {\n return;\n }\n\n const { status, config, _notify } = this;\n if (!force && status !== CountdownStatus.ing) {\n return;\n }\n\n let value = (this.left = this.left - this.frequency * count);\n if (value < 1) {\n value = 0;\n }\n this.i = {\n value,\n text: config.formatDate!({ date: value, formatStr: config.format!, timezone: config.timezone }),\n };\n if (typeof config.prettyText === 'function') {\n this.i.text = config.prettyText(this.i.text!);\n }\n this.cdr.detectChanges();\n\n if (config.notify === 0 || _notify[value]) {\n this.ngZone.run(() => {\n this.callEvent('notify');\n });\n }\n\n if (value === 0) {\n this.ngZone.run(() => {\n this.status = CountdownStatus.done;\n this.destroy();\n this.callEvent('done');\n });\n }\n }\n\n /**\n * 获取倒计时剩余帧数\n */\n private getLeft(): void {\n const { config, frequency } = this;\n let left = config.leftTime! * 1000;\n const end = config.stopTime;\n\n if (!left && end) {\n left = end - new Date().getTime();\n }\n\n this.left = left - (left % frequency);\n }\n\n ngOnInit(): void {\n this.init();\n if (!this.config.demand) {\n this.begin();\n }\n }\n\n ngOnDestroy(): void {\n this.isDestroy = true;\n this.destroy();\n }\n\n ngOnChanges(changes: { [P in keyof this]?: SimpleChange } & SimpleChanges): void {\n if (!changes.config!.firstChange) {\n this.restart();\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { CountdownComponent } from './countdown.component';\n\n@NgModule({\n imports: [CountdownComponent],\n exports: [CountdownComponent],\n})\nexport class CountdownModule {}\n","/**\n * Gets the original marked default options.\n */\nexport function _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\nexport let _defaults = _getDefaults();\nexport function changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null };\nfunction edit(regex, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\\nconst blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\nconst emStrongRDelimAstCore = '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n + '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n + '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nexport function escape(html, encode) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nexport function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nexport function cleanUrl(href) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n }\n catch {\n return null;\n }\n return href;\n}\nexport function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(other.splitPipe);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nexport function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport { rtrim, splitCells, findClosingBracket, } from './helpers.ts';\nfunction outputLink(cap, link, raw, lexer, rules) {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text,\n };\n}\nfunction indentCodeCompensation(raw, text, rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n }\n else if (!inBlockquote) {\n currentLines.push(lines[i]);\n }\n else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n }\n else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n }\n else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1).raw.length).split('\\n');\n continue;\n }\n }\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else if (blankLine) {\n indent = cap[1].length + 1;\n }\n else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n }\n else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n }\n else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n }\n else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n }\n else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n }\n else {\n text = cap[1];\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\n/**\n * Block Lexer\n */\nexport class _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src.replace(other.carriageReturn, '\\n');\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n while (src) {\n let token;\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1).src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match = null;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n let token;\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { cleanUrl, escape, } from './helpers.ts';\nimport { other } from './rules.ts';\n/**\n * Renderer\n */\nexport class _Renderer {\n options;\n parser; // set by the parser\n constructor(options) {\n this.options = options || _defaults;\n }\n space(token) {\n return '';\n }\n code({ text, lang, escaped }) {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n const code = text.replace(other.endingNewline, '') + '\\n';\n if (!langString) {\n return '
'\n                + (escaped ? code : escape(code, true))\n                + '
\\n';\n }\n return '
'\n            + (escaped ? code : escape(code, true))\n            + '
\\n';\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `
\\n${body}
\\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `${this.parser.parseInline(tokens)}\\n`;\n }\n hr(token) {\n return '
\\n';\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '\\n';\n }\n listitem(item) {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n escaped: true,\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `
  • ${itemBody}
  • \\n`;\n }\n checkbox({ checked }) {\n return '';\n }\n paragraph({ tokens }) {\n return `

    ${this.parser.parseInline(tokens)}

    \\n`;\n }\n table(token) {\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body)\n body = `${body}`;\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n tablerow({ text }) {\n return `\\n${text}\\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `\\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n em({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n codespan({ text }) {\n return `${escape(text, true)}`;\n }\n br(token) {\n return '
    ';\n }\n del({ tokens }) {\n return `${this.parser.parseInline(tokens)}`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '
    ';\n return out;\n }\n image({ href, title, text }) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text);\n }\n href = cleanHref;\n let out = `\"${text}\"`;\n {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n parseMarkdown(blockType) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse = (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n return parse;\n }\n onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '

    An error occurred:

    '\n                    + escape(e.message + '', true)\n                    + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { merge, of, Subject, timer } from 'rxjs';\r\nimport { distinctUntilChanged, map, mapTo, shareReplay, startWith, switchMap } from 'rxjs/operators';\r\n\r\nconst BUTTON_TEXT_COPY = 'Copy';\r\nconst BUTTON_TEXT_COPIED = 'Copied';\r\n\r\n@Component({\r\n selector: 'markdown-clipboard',\r\n template: `\r\n {{ copiedText$ | async }}\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ClipboardButtonComponent {\r\n\r\n private _buttonClick$ = new Subject();\r\n\r\n readonly copied$ = this._buttonClick$.pipe(\r\n switchMap(() => merge(\r\n of(true),\r\n timer(3000).pipe(mapTo(false)),\r\n )),\r\n distinctUntilChanged(),\r\n shareReplay(1),\r\n );\r\n\r\n readonly copiedText$ = this.copied$.pipe(\r\n startWith(false),\r\n map(copied => copied\r\n ? BUTTON_TEXT_COPIED\r\n : BUTTON_TEXT_COPY),\r\n );\r\n\r\n onCopyToClipboardClick(): void {\r\n this._buttonClick$.next();\r\n }\r\n}\r\n","import { ReplaySubject } from '../ReplaySubject';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { share } from './share';\n\nexport interface ShareReplayConfig {\n bufferSize?: number;\n windowTime?: number;\n refCount: boolean;\n scheduler?: SchedulerLike;\n}\n\nexport function shareReplay(config: ShareReplayConfig): MonoTypeOperatorFunction;\nexport function shareReplay(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n * Share source and replay specified number of emissions on subscription.\n *\n * This operator is a specialization of `replay` that connects to a source observable\n * and multicasts through a `ReplaySubject` constructed with the specified arguments.\n * A successfully completed source will stay cached in the `shareReplay`ed observable forever,\n * but an errored source can be retried.\n *\n * ## Why use `shareReplay`?\n *\n * You generally want to use `shareReplay` when you have side-effects or taxing computations\n * that you do not wish to be executed amongst multiple subscribers.\n * It may also be valuable in situations where you know you will have late subscribers to\n * a stream that need access to previously emitted values.\n * This ability to replay values on subscription is what differentiates {@link share} and `shareReplay`.\n *\n * ## Reference counting\n *\n * By default `shareReplay` will use `refCount` of false, meaning that it will _not_ unsubscribe the\n * source when the reference counter drops to zero, i.e. the inner `ReplaySubject` will _not_ be unsubscribed\n * (and potentially run for ever).\n * This is the default as it is expected that `shareReplay` is often used to keep around expensive to setup\n * observables which we want to keep running instead of having to do the expensive setup again.\n *\n * As of RXJS version 6.4.0 a new overload signature was added to allow for manual control over what\n * happens when the operators internal reference counter drops to zero.\n * If `refCount` is true, the source will be unsubscribed from once the reference count drops to zero, i.e.\n * the inner `ReplaySubject` will be unsubscribed. All new subscribers will receive value emissions from a\n * new `ReplaySubject` which in turn will cause a new subscription to the source observable.\n *\n * ## Examples\n *\n * Example with a third subscriber coming late to the party\n *\n * ```ts\n * import { interval, take, shareReplay } from 'rxjs';\n *\n * const shared$ = interval(2000).pipe(\n * take(6),\n * shareReplay(3)\n * );\n *\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * setTimeout(() => {\n * shared$.subscribe(y => console.log('sub C: ', y));\n * }, 11000);\n *\n * // Logs:\n * // (after ~2000 ms)\n * // sub A: 0\n * // sub B: 0\n * // (after ~4000 ms)\n * // sub A: 1\n * // sub B: 1\n * // (after ~6000 ms)\n * // sub A: 2\n * // sub B: 2\n * // (after ~8000 ms)\n * // sub A: 3\n * // sub B: 3\n * // (after ~10000 ms)\n * // sub A: 4\n * // sub B: 4\n * // (after ~11000 ms, sub C gets the last 3 values)\n * // sub C: 2\n * // sub C: 3\n * // sub C: 4\n * // (after ~12000 ms)\n * // sub A: 5\n * // sub B: 5\n * // sub C: 5\n * ```\n *\n * Example for `refCount` usage\n *\n * ```ts\n * import { Observable, tap, interval, shareReplay, take } from 'rxjs';\n *\n * const log = (name: string, source: Observable) => source.pipe(\n * tap({\n * subscribe: () => console.log(`${ name }: subscribed`),\n * next: value => console.log(`${ name }: ${ value }`),\n * complete: () => console.log(`${ name }: completed`),\n * finalize: () => console.log(`${ name }: unsubscribed`)\n * })\n * );\n *\n * const obs$ = log('source', interval(1000));\n *\n * const shared$ = log('shared', obs$.pipe(\n * shareReplay({ bufferSize: 1, refCount: true }),\n * take(2)\n * ));\n *\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * // PRINTS:\n * // shared: subscribed <-- reference count = 1\n * // source: subscribed\n * // shared: subscribed <-- reference count = 2\n * // source: 0\n * // shared: 0\n * // sub A: 0\n * // shared: 0\n * // sub B: 0\n * // source: 1\n * // shared: 1\n * // sub A: 1\n * // shared: completed <-- take(2) completes the subscription for sub A\n * // shared: unsubscribed <-- reference count = 1\n * // shared: 1\n * // sub B: 1\n * // shared: completed <-- take(2) completes the subscription for sub B\n * // shared: unsubscribed <-- reference count = 0\n * // source: unsubscribed <-- replaySubject unsubscribes from source observable because the reference count dropped to 0 and refCount is true\n *\n * // In case of refCount being false, the unsubscribe is never called on the source and the source would keep on emitting, even if no subscribers\n * // are listening.\n * // source: 2\n * // source: 3\n * // source: 4\n * // ...\n * ```\n *\n * @see {@link publish}\n * @see {@link share}\n * @see {@link publishReplay}\n *\n * @param configOrBufferSize Maximum element count of the replay buffer or {@link ShareReplayConfig configuration}\n * object.\n * @param windowTime Maximum time length of the replay buffer in milliseconds.\n * @param scheduler Scheduler where connected observers within the selector function\n * will be invoked on.\n * @return A function that returns an Observable sequence that contains the\n * elements of a sequence produced by multicasting the source sequence within a\n * selector function.\n */\nexport function shareReplay(\n configOrBufferSize?: ShareReplayConfig | number,\n windowTime?: number,\n scheduler?: SchedulerLike\n): MonoTypeOperatorFunction {\n let bufferSize: number;\n let refCount = false;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n ({ bufferSize = Infinity, windowTime = Infinity, refCount = false, scheduler } = configOrBufferSize);\n } else {\n bufferSize = (configOrBufferSize ?? Infinity) as number;\n }\n return share({\n connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),\n resetOnError: true,\n resetOnComplete: false,\n resetOnRefCountZero: refCount,\n });\n}\n","import { TemplateRef, Type } from '@angular/core';\r\n\r\nexport class ClipboardOptions {\r\n buttonComponent?: Type;\r\n}\r\n\r\nexport class ClipboardRenderOptions extends ClipboardOptions {\r\n buttonTemplate?: TemplateRef;\r\n}\r\n","export enum PrismPlugin {\r\n CommandLine = 'command-line',\r\n LineHighlight = 'line-highlight',\r\n LineNumbers = 'line-numbers',\r\n}\r\n","/* eslint-disable */\r\nimport { MarkedRenderer } from './marked-renderer';\r\n\r\nexport class MarkedOptions {\r\n /**\r\n * A prefix URL for any relative link.\r\n */\r\n baseUrl?: string;\r\n\r\n /**\r\n * Enable GFM line breaks. This option requires the gfm option to be true.\r\n */\r\n breaks?: boolean;\r\n\r\n /**\r\n * Enable GitHub flavored markdown.\r\n */\r\n gfm?: boolean;\r\n\r\n /**\r\n * Include an id attribute when emitting headings.\r\n */\r\n headerIds?: boolean;\r\n\r\n /**\r\n * Set the prefix for header tag ids.\r\n */\r\n headerPrefix?: string;\r\n\r\n /**\r\n * Set the prefix for code block classes.\r\n */\r\n langPrefix?: string;\r\n\r\n /**\r\n * Mangle autolinks ().\r\n */\r\n mangle?: boolean;\r\n\r\n /**\r\n * Conform to obscure parts of markdown.pl as much as possible. Don't fix any of the original markdown bugs or poor behavior.\r\n */\r\n pedantic?: boolean;\r\n\r\n /**\r\n * Type: object Default: new Renderer()\r\n *\r\n * An object containing functions to render tokens to HTML.\r\n */\r\n renderer?: MarkedRenderer;\r\n\r\n /**\r\n * Shows an HTML error message when rendering fails.\r\n */\r\n silent?: boolean;\r\n\r\n /**\r\n * Use smarter list behavior than the original markdown. May eventually be default with the old behavior moved into pedantic.\r\n */\r\n smartLists?: boolean;\r\n\r\n /**\r\n * Use \"smart\" typograhic punctuation for things like quotes and dashes.\r\n */\r\n smartypants?: boolean;\r\n\r\n /**\r\n * Generate closing slash for self-closing tags (
    instead of
    )\r\n */\r\n xhtml?: boolean;\r\n\r\n /**\r\n * A function to highlight code blocks. The function takes three arguments: code, lang, and callback.\r\n */\r\n highlight?(code: string, lang: string, callback?: (error: any | undefined, code: string) => void): string;\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { EmbeddedViewRef, Inject, Injectable, InjectionToken, Optional, PLATFORM_ID, SecurityContext, ViewContainerRef } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { marked, Renderer } from 'marked';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { ClipboardButtonComponent } from './clipboard-button.component';\r\nimport { ClipboardOptions, ClipboardRenderOptions } from './clipboard-options';\r\nimport { KatexOptions } from './katex-options';\r\nimport { MarkedOptions } from './marked-options';\r\nimport { MarkedRenderer } from './marked-renderer';\r\nimport { MermaidAPI } from './mermaid-options';\r\n\r\n// clipboard\r\ndeclare let ClipboardJS: {\r\n new (\r\n selector: string | Element | NodeListOf,\r\n options?: { text?: (elem: Element) => string; },\r\n ): typeof ClipboardJS;\r\n destroy(): void;\r\n};\r\n\r\n// emoji\r\ndeclare let joypixels: {\r\n shortnameToUnicode(input: string): string;\r\n};\r\n\r\n// katex\r\ndeclare let katex: unknown;\r\ndeclare function renderMathInElement(elem: HTMLElement, options?: KatexOptions): void;\r\n\r\n// mermaid\r\ndeclare let mermaid: {\r\n initialize: (options: MermaidAPI.Config) => void;\r\n init: (nodes: string | Node | NodeList) => void;\r\n parse: (text: string) => string;\r\n};\r\n\r\n// prism\r\ndeclare let Prism: {\r\n highlightAllUnder: (element: Element | Document) => void;\r\n};\r\n\r\n/* eslint-disable max-len */\r\nexport const errorJoyPixelsNotLoaded = '[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information';\r\nexport const errorKatexNotLoaded = '[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information';\r\nexport const errorMermaidNotLoaded = '[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information';\r\nexport const errorClipboardNotLoaded = '[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information';\r\nexport const errorClipboardViewContainerRequired = '[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function';\r\nexport const errorSrcWithoutHttpClient = '[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information';\r\n/* eslint-enable max-len */\r\n\r\nexport const SECURITY_CONTEXT = new InjectionToken('SECURITY_CONTEXT');\r\n\r\nexport interface ParseOptions {\r\n decodeHtml?: boolean;\r\n inline?: boolean;\r\n emoji?: boolean;\r\n mermaid?: boolean;\r\n markedOptions?: MarkedOptions;\r\n disableSanitizer?: boolean;\r\n}\r\n\r\nexport interface RenderOptions {\r\n clipboard?: boolean;\r\n clipboardOptions?: ClipboardRenderOptions;\r\n katex?: boolean;\r\n katexOptions?: KatexOptions;\r\n mermaid?: boolean;\r\n mermaidOptions?: MermaidAPI.Config;\r\n}\r\n\r\nexport class ExtendedRenderer extends Renderer {\r\n ɵNgxMarkdownRendererExtended = false;\r\n}\r\n\r\n@Injectable()\r\nexport class MarkdownService {\r\n\r\n private readonly DEFAULT_MARKED_OPTIONS: MarkedOptions = {\r\n renderer: new MarkedRenderer(),\r\n };\r\n\r\n private readonly DEFAULT_KATEX_OPTIONS: KatexOptions = {\r\n delimiters: [\r\n { left: \"$$\", right: \"$$\", display: true },\r\n { left: \"$\", right: \"$\", display: false },\r\n { left: \"\\\\(\", right: \"\\\\)\", display: false },\r\n { left: \"\\\\begin{equation}\", right: \"\\\\end{equation}\", display: true },\r\n { left: \"\\\\begin{align}\", right: \"\\\\end{align}\", display: true },\r\n { left: \"\\\\begin{alignat}\", right: \"\\\\end{alignat}\", display: true },\r\n { left: \"\\\\begin{gather}\", right: \"\\\\end{gather}\", display: true },\r\n { left: \"\\\\begin{CD}\", right: \"\\\\end{CD}\", display: true },\r\n { left: \"\\\\[\", right: \"\\\\]\", display: true },\r\n ],\r\n };\r\n\r\n private readonly DEFAULT_MERMAID_OPTIONS: MermaidAPI.Config = {\r\n startOnLoad: false,\r\n };\r\n\r\n private readonly DEFAULT_CLIPBOARD_OPTIONS: ClipboardOptions = {\r\n buttonComponent: undefined,\r\n };\r\n\r\n private readonly DEFAULT_PARSE_OPTIONS: ParseOptions = {\r\n decodeHtml: false,\r\n inline: false,\r\n emoji: false,\r\n mermaid: false,\r\n markedOptions: this.DEFAULT_MARKED_OPTIONS,\r\n disableSanitizer: false,\r\n };\r\n\r\n private readonly DEFAULT_RENDER_OPTIONS: RenderOptions = {\r\n clipboard: false,\r\n clipboardOptions: undefined,\r\n katex: false,\r\n katexOptions: undefined,\r\n mermaid: false,\r\n mermaidOptions: undefined,\r\n };\r\n\r\n private _options: MarkedOptions | undefined;\r\n\r\n get options(): MarkedOptions { return this._options!; }\r\n set options(value: MarkedOptions | undefined) {\r\n this._options = { ...this.DEFAULT_MARKED_OPTIONS, ...value };\r\n }\r\n\r\n get renderer(): MarkedRenderer { return this.options.renderer!; }\r\n set renderer(value: MarkedRenderer) {\r\n this.options.renderer = value;\r\n }\r\n\r\n private readonly _reload$ = new Subject();\r\n readonly reload$ = this._reload$.asObservable();\r\n\r\n constructor(\r\n @Inject(PLATFORM_ID) private platform: Object,\r\n @Inject(SECURITY_CONTEXT) private securityContext: SecurityContext,\r\n @Optional() private http: HttpClient,\r\n @Optional() private clipboardOptions: ClipboardOptions,\r\n @Optional() options: MarkedOptions,\r\n private sanitizer: DomSanitizer,\r\n ) {\r\n this.options = options;\r\n }\r\n\r\n parse(markdown: string, parseOptions: ParseOptions = this.DEFAULT_PARSE_OPTIONS): string {\r\n const {\r\n decodeHtml,\r\n inline,\r\n emoji,\r\n mermaid,\r\n disableSanitizer,\r\n } = parseOptions;\r\n\r\n const markedOptions = {\r\n ...this.options,\r\n ...parseOptions.markedOptions,\r\n };\r\n\r\n if (mermaid) {\r\n this.renderer = this.extendRenderer(markedOptions.renderer || new Renderer());\r\n }\r\n\r\n const trimmed = this.trimIndentation(markdown);\r\n const decoded = decodeHtml ? this.decodeHtml(trimmed) : trimmed;\r\n const emojified = emoji ? this.parseEmoji(decoded) : decoded;\r\n const marked = this.parseMarked(emojified, markedOptions, inline);\r\n const sanitized = disableSanitizer ? marked : this.sanitizer.sanitize(this.securityContext, marked);\r\n\r\n return sanitized || '';\r\n }\r\n\r\n render(element: HTMLElement, options: RenderOptions = this.DEFAULT_RENDER_OPTIONS, viewContainerRef?: ViewContainerRef): void {\r\n const {\r\n clipboard,\r\n clipboardOptions,\r\n katex,\r\n katexOptions,\r\n mermaid,\r\n mermaidOptions,\r\n } = options;\r\n\r\n if (clipboard) {\r\n this.renderClipboard(element, viewContainerRef, {\r\n ...this.DEFAULT_CLIPBOARD_OPTIONS,\r\n ...this.clipboardOptions,\r\n ...clipboardOptions,\r\n });\r\n }\r\n if (katex) {\r\n this.renderKatex(element, {\r\n ...this.DEFAULT_KATEX_OPTIONS,\r\n ...katexOptions,\r\n });\r\n }\r\n if (mermaid) {\r\n this.renderMermaid(element, {\r\n ...this.DEFAULT_MERMAID_OPTIONS,\r\n ...mermaidOptions,\r\n });\r\n }\r\n\r\n this.highlight(element);\r\n }\r\n\r\n reload(): void {\r\n this._reload$.next();\r\n }\r\n\r\n getSource(src: string): Observable {\r\n if (!this.http) {\r\n throw new Error(errorSrcWithoutHttpClient);\r\n }\r\n return this.http\r\n .get(src, { responseType: 'text' })\r\n .pipe(map(markdown => this.handleExtension(src, markdown)));\r\n }\r\n\r\n highlight(element?: Element | Document): void {\r\n if (!isPlatformBrowser(this.platform)) {\r\n return;\r\n }\r\n if (typeof Prism === 'undefined' || typeof Prism.highlightAllUnder === 'undefined') {\r\n return;\r\n }\r\n if (!element) {\r\n element = document;\r\n }\r\n const noLanguageElements = element.querySelectorAll('pre code:not([class*=\"language-\"])');\r\n Array.prototype.forEach.call(noLanguageElements, (x: Element) => x.classList.add('language-none'));\r\n Prism.highlightAllUnder(element);\r\n }\r\n\r\n private decodeHtml(html: string): string {\r\n if (!isPlatformBrowser(this.platform)) {\r\n return html;\r\n }\r\n const textarea = document.createElement('textarea');\r\n textarea.innerHTML = html;\r\n return textarea.value;\r\n }\r\n\r\n private extendRenderer(renderer: Renderer): Renderer {\r\n const extendedRenderer = renderer as ExtendedRenderer;\r\n if (extendedRenderer.ɵNgxMarkdownRendererExtended === true) {\r\n return renderer;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/unbound-method\r\n const defaultCode = renderer.code;\r\n renderer.code = function (code: string, language: string | undefined, isEscaped: boolean) {\r\n return language === 'mermaid'\r\n ? `
    ${code}
    `\r\n : defaultCode.call(this, code, language, isEscaped);\r\n };\r\n\r\n extendedRenderer.ɵNgxMarkdownRendererExtended = true;\r\n\r\n return renderer;\r\n }\r\n\r\n private handleExtension(src: string, markdown: string): string {\r\n const urlProtocolIndex = src.lastIndexOf('://');\r\n const urlWithoutProtocol = urlProtocolIndex > -1\r\n ? src.substring(urlProtocolIndex + 4)\r\n : src;\r\n\r\n const lastSlashIndex = urlWithoutProtocol.lastIndexOf('/');\r\n const lastUrlSegment = lastSlashIndex > -1\r\n ? urlWithoutProtocol.substring(lastSlashIndex + 1).split('?')[0]\r\n : '';\r\n\r\n const lastDotIndex = lastUrlSegment.lastIndexOf('.');\r\n const extension = lastDotIndex > -1\r\n ? lastUrlSegment.substring(lastDotIndex + 1)\r\n : '';\r\n\r\n return !!extension && extension !== 'md'\r\n ? '```' + extension + '\\n' + markdown + '\\n```'\r\n : markdown;\r\n }\r\n\r\n private parseMarked(html: string, markedOptions: MarkedOptions, inline = false): string {\r\n return inline\r\n ? marked.parseInline(html, markedOptions)\r\n : marked.parse(html, markedOptions);\r\n }\r\n\r\n private parseEmoji(html: string): string {\r\n if (!isPlatformBrowser(this.platform)) {\r\n return html;\r\n }\r\n if (typeof joypixels === 'undefined' || typeof joypixels.shortnameToUnicode === 'undefined') {\r\n throw new Error(errorJoyPixelsNotLoaded);\r\n }\r\n return joypixels.shortnameToUnicode(html);\r\n }\r\n\r\n private renderKatex(element: HTMLElement, options: KatexOptions): void {\r\n if (!isPlatformBrowser(this.platform)) {\r\n return;\r\n }\r\n if (typeof katex === 'undefined' || typeof renderMathInElement === 'undefined') {\r\n throw new Error(errorKatexNotLoaded);\r\n }\r\n renderMathInElement(element, options);\r\n }\r\n\r\n private renderClipboard(element: HTMLElement, viewContainerRef: ViewContainerRef | undefined, options: ClipboardRenderOptions): void {\r\n if (!isPlatformBrowser(this.platform)) {\r\n return;\r\n }\r\n if (typeof ClipboardJS === 'undefined') {\r\n throw new Error(errorClipboardNotLoaded);\r\n }\r\n if (!viewContainerRef) {\r\n throw new Error(errorClipboardViewContainerRequired);\r\n }\r\n\r\n const {\r\n buttonComponent,\r\n buttonTemplate,\r\n } = options;\r\n\r\n // target every
     elements\r\n    const preElements = element.querySelectorAll('pre');\r\n    for (let i = 0; i < preElements.length; i++) {\r\n      const preElement = preElements.item(i);\r\n\r\n      // create 
     wrapper element\r\n      const preWrapperElement = document.createElement('div');\r\n      preWrapperElement.style.position = 'relative';\r\n      preElement.parentNode!.insertBefore(preWrapperElement, preElement);\r\n      preWrapperElement.appendChild(preElement);\r\n\r\n      // create toolbar element\r\n      const toolbarWrapperElement = document.createElement('div');\r\n      toolbarWrapperElement.style.position = 'absolute';\r\n      toolbarWrapperElement.style.top = '.5em';\r\n      toolbarWrapperElement.style.right = '.5em';\r\n      toolbarWrapperElement.style.opacity = '0';\r\n      toolbarWrapperElement.style.transition = 'opacity 250ms ease-out';\r\n      preWrapperElement.insertAdjacentElement('beforeend', toolbarWrapperElement);\r\n\r\n      // register listener to show/hide toolbar\r\n      preElement.onmouseover = () => toolbarWrapperElement.style.opacity = '1';\r\n      preElement.onmouseout = () => toolbarWrapperElement.style.opacity = '0';\r\n\r\n      // declare embeddedViewRef holding variable\r\n      let embeddedViewRef: EmbeddedViewRef;\r\n\r\n      // use provided component via input property\r\n      // or provided via ClipboardOptions provider\r\n      if (buttonComponent) {\r\n        const componentRef = viewContainerRef.createComponent(buttonComponent);\r\n        embeddedViewRef = componentRef.hostView as EmbeddedViewRef;\r\n      }\r\n      // use provided template via input property\r\n      else if (buttonTemplate) {\r\n        embeddedViewRef = viewContainerRef.createEmbeddedView(buttonTemplate);\r\n      }\r\n      // use default component\r\n      else {\r\n        const componentRef = viewContainerRef.createComponent(ClipboardButtonComponent);\r\n        embeddedViewRef = componentRef.hostView as EmbeddedViewRef;\r\n      }\r\n\r\n      // declare clipboard instance variable\r\n      let clipboardInstance: typeof ClipboardJS;\r\n\r\n      // attach clipboard.js to root node\r\n      embeddedViewRef.rootNodes.forEach((node: HTMLElement) => {\r\n        node.onmouseover = () => toolbarWrapperElement.style.opacity = '1';\r\n        toolbarWrapperElement.appendChild(node);\r\n        clipboardInstance = new ClipboardJS(node, { text: () => preElement.innerText });\r\n      });\r\n\r\n      // destroy clipboard instance when view is destroyed\r\n      embeddedViewRef.onDestroy(() => clipboardInstance.destroy());\r\n    }\r\n  }\r\n\r\n  private renderMermaid(element: HTMLElement, options: MermaidAPI.Config = this.DEFAULT_MERMAID_OPTIONS): void {\r\n    if (!isPlatformBrowser(this.platform)) {\r\n      return;\r\n    }\r\n    if (typeof mermaid === 'undefined' || typeof mermaid.init === 'undefined') {\r\n      throw new Error(errorMermaidNotLoaded);\r\n    }\r\n    const mermaidElements = element.querySelectorAll('.mermaid');\r\n    if (mermaidElements.length === 0) {\r\n      return;\r\n    }\r\n    mermaid.initialize(options);\r\n    mermaid.init(mermaidElements);\r\n  }\r\n\r\n  private trimIndentation(markdown: string): string {\r\n    if (!markdown) {\r\n      return '';\r\n    }\r\n    let indentStart: number;\r\n    return markdown\r\n      .split('\\n')\r\n      .map(line => {\r\n        let lineIdentStart = indentStart;\r\n        if (line.length > 0) {\r\n          lineIdentStart = isNaN(lineIdentStart)\r\n            ? line.search(/\\S|$/)\r\n            : Math.min(line.search(/\\S|$/), lineIdentStart);\r\n        }\r\n        if (isNaN(indentStart)) {\r\n          indentStart = lineIdentStart;\r\n        }\r\n        return lineIdentStart\r\n          ? line.substring(lineIdentStart)\r\n          : line;\r\n      }).join('\\n');\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  TemplateRef,\r\n  Type,\r\n  ViewContainerRef,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { KatexOptions } from './katex-options';\r\nimport { MarkdownService, ParseOptions, RenderOptions } from './markdown.service';\r\nimport { MarkedOptions } from './marked-options';\r\nimport { MermaidAPI } from './mermaid-options';\r\nimport { PrismPlugin } from './prism-plugin';\r\n\r\n@Component({\r\n  // eslint-disable-next-line @angular-eslint/component-selector\r\n  selector: 'markdown, [markdown]',\r\n  template: '',\r\n})\r\nexport class MarkdownComponent implements OnChanges, AfterViewInit, OnDestroy {\r\n\r\n  protected static ngAcceptInputType_clipboard: boolean | '';\r\n  protected static ngAcceptInputType_emoji: boolean | '';\r\n  protected static ngAcceptInputType_katex: boolean | '';\r\n  protected static ngAcceptInputType_mermaid: boolean | '';\r\n  protected static ngAcceptInputType_lineHighlight: boolean | '';\r\n  protected static ngAcceptInputType_lineNumbers: boolean | '';\r\n  protected static ngAcceptInputType_commandLine: boolean | '';\r\n\r\n  @Input() data: string | null | undefined;\r\n  @Input() src: string | null | undefined;\r\n\r\n  @Input()\r\n  get disableSanitizer(): boolean { return this._disableSanitizer; }\r\n  set disableSanitizer(value: boolean) { this._disableSanitizer = this.coerceBooleanProperty(value); }\r\n\r\n  @Input()\r\n  get inline(): boolean { return this._inline; }\r\n  set inline(value: boolean) { this._inline = this.coerceBooleanProperty(value); }\r\n\r\n  @Input()\r\n  get srcRelativeLink(): boolean { return this._srcRelativeLink; }\r\n  set srcRelativeLink(value: boolean) { this._srcRelativeLink = this.coerceBooleanProperty(value); }\r\n\r\n  // Plugin - clipboard\r\n  @Input()\r\n  get clipboard(): boolean { return this._clipboard; }\r\n  set clipboard(value: boolean) { this._clipboard = this.coerceBooleanProperty(value); }\r\n  @Input() clipboardButtonComponent: Type | undefined;\r\n  @Input() clipboardButtonTemplate: TemplateRef | undefined;\r\n\r\n  // Plugin - emoji\r\n  @Input()\r\n  get emoji(): boolean { return this._emoji; }\r\n  set emoji(value: boolean) { this._emoji = this.coerceBooleanProperty(value); }\r\n\r\n  // Plugin - katex\r\n  @Input()\r\n  get katex(): boolean { return this._katex; }\r\n  set katex(value: boolean) { this._katex = this.coerceBooleanProperty(value); }\r\n  @Input() katexOptions: KatexOptions | undefined;\r\n\r\n  // Plugin - mermaid\r\n  @Input()\r\n  get mermaid(): boolean { return this._mermaid; }\r\n  set mermaid(value: boolean) { this._mermaid = this.coerceBooleanProperty(value); }\r\n  @Input() mermaidOptions: MermaidAPI.Config | undefined;\r\n\r\n  // Plugin - lineHighlight\r\n  @Input()\r\n  get lineHighlight(): boolean { return this._lineHighlight; }\r\n  set lineHighlight(value: boolean) { this._lineHighlight = this.coerceBooleanProperty(value); }\r\n  @Input() line: string | string[] | undefined;\r\n  @Input() lineOffset: number | undefined;\r\n\r\n  // Plugin - lineNumbers\r\n  @Input()\r\n  get lineNumbers(): boolean { return this._lineNumbers; }\r\n  set lineNumbers(value: boolean) { this._lineNumbers = this.coerceBooleanProperty(value); }\r\n  @Input() start: number | undefined;\r\n\r\n  // Plugin - commandLine\r\n  @Input()\r\n  get commandLine(): boolean { return this._commandLine; }\r\n  set commandLine(value: boolean) { this._commandLine = this.coerceBooleanProperty(value); }\r\n  @Input() filterOutput: string | undefined;\r\n  @Input() host: string | undefined;\r\n  @Input() prompt: string | undefined;\r\n  @Input() output: string | undefined;\r\n  @Input() user: string | undefined;\r\n\r\n  // Event emitters\r\n  @Output() error = new EventEmitter();\r\n  @Output() load = new EventEmitter();\r\n  @Output() ready = new EventEmitter();\r\n\r\n  private _clipboard = false;\r\n  private _commandLine = false;\r\n  private _disableSanitizer = false;\r\n  private _emoji = false;\r\n  private _inline = false;\r\n  private _katex = false;\r\n  private _lineHighlight = false;\r\n  private _lineNumbers = false;\r\n  private _mermaid = false;\r\n  private _srcRelativeLink = false;\r\n\r\n  private readonly destroyed$ = new Subject();\r\n\r\n  constructor(\r\n    public element: ElementRef,\r\n    public markdownService: MarkdownService,\r\n    public viewContainerRef: ViewContainerRef,\r\n  ) { }\r\n\r\n  ngOnChanges(): void {\r\n    this.loadContent();\r\n  }\r\n\r\n  loadContent(): void {\r\n    if (this.data != null) {\r\n      this.handleData();\r\n      return;\r\n    }\r\n    if (this.src != null) {\r\n      this.handleSrc();\r\n      return;\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (!this.data && !this.src) {\r\n      this.handleTransclusion();\r\n    }\r\n\r\n    this.markdownService.reload$\r\n      .pipe(takeUntil(this.destroyed$))\r\n      .subscribe(() => this.loadContent());\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroyed$.next();\r\n    this.destroyed$.complete();\r\n  }\r\n\r\n  render(markdown: string, decodeHtml = false): void {\r\n    let markedOptions: MarkedOptions | undefined;\r\n    if (this.src && this.srcRelativeLink) {\r\n      const baseUrl = new URL(this.src, location.origin).pathname;\r\n      markedOptions = { baseUrl };\r\n    }\r\n\r\n    const parsedOptions: ParseOptions = {\r\n      decodeHtml,\r\n      inline: this.inline,\r\n      emoji: this.emoji,\r\n      mermaid: this.mermaid,\r\n      markedOptions,\r\n      disableSanitizer: this.disableSanitizer,\r\n    };\r\n\r\n    const renderOptions: RenderOptions = {\r\n      clipboard: this.clipboard,\r\n      clipboardOptions: {\r\n        buttonComponent: this.clipboardButtonComponent,\r\n        buttonTemplate: this.clipboardButtonTemplate,\r\n      },\r\n      katex: this.katex,\r\n      katexOptions: this.katexOptions,\r\n      mermaid: this.mermaid,\r\n      mermaidOptions: this.mermaidOptions,\r\n    };\r\n\r\n    const parsed = this.markdownService.parse(markdown, parsedOptions);\r\n\r\n    this.element.nativeElement.innerHTML = parsed;\r\n\r\n    this.handlePlugins();\r\n\r\n    this.markdownService.render(this.element.nativeElement, renderOptions, this.viewContainerRef);\r\n\r\n    this.ready.emit();\r\n  }\r\n\r\n  private coerceBooleanProperty(value: boolean | ''): boolean {\r\n    return value != null && `${String(value)}` !== 'false';\r\n  }\r\n\r\n  private handleData(): void {\r\n    this.render(this.data!);\r\n  }\r\n\r\n  private handleSrc(): void {\r\n    this.markdownService\r\n      .getSource(this.src!)\r\n      .subscribe({\r\n        next: markdown => {\r\n          this.render(markdown);\r\n          this.load.emit(markdown);\r\n        },\r\n        error: (error: string | Error) => this.error.emit(error),\r\n      });\r\n  }\r\n\r\n  private handleTransclusion(): void {\r\n    this.render(this.element.nativeElement.innerHTML, true);\r\n  }\r\n\r\n  private handlePlugins(): void {\r\n    if (this.commandLine) {\r\n      this.setPluginClass(this.element.nativeElement, PrismPlugin.CommandLine);\r\n      this.setPluginOptions(this.element.nativeElement, {\r\n        dataFilterOutput: this.filterOutput,\r\n        dataHost: this.host,\r\n        dataPrompt: this.prompt,\r\n        dataOutput: this.output,\r\n        dataUser: this.user,\r\n      });\r\n    }\r\n    if (this.lineHighlight) {\r\n      this.setPluginOptions(this.element.nativeElement, { dataLine: this.line, dataLineOffset: this.lineOffset });\r\n    }\r\n    if (this.lineNumbers) {\r\n      this.setPluginClass(this.element.nativeElement, PrismPlugin.LineNumbers);\r\n      this.setPluginOptions(this.element.nativeElement, { dataStart: this.start });\r\n    }\r\n  }\r\n\r\n  private setPluginClass(element: HTMLElement, plugin: string | string[]): void {\r\n    const preElements = element.querySelectorAll('pre');\r\n    for (let i = 0; i < preElements.length; i++) {\r\n      const classes = plugin instanceof Array ? plugin : [plugin];\r\n      preElements.item(i).classList.add(...classes);\r\n    }\r\n  }\r\n\r\n  private setPluginOptions(element: HTMLElement, options: { [key: string]: number | string | string[] | undefined }): void {\r\n    const preElements = element.querySelectorAll('pre');\r\n    for (let i = 0; i < preElements.length; i++) {\r\n      Object.keys(options).forEach(option => {\r\n        const attributeValue = options[option];\r\n        if (attributeValue) {\r\n          const attributeName = this.toLispCase(option);\r\n          preElements.item(i).setAttribute(attributeName, attributeValue.toString());\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  private toLispCase(value: string): string {\r\n    const upperChars = value.match(/([A-Z])/g);\r\n    if (!upperChars) {\r\n      return value;\r\n    }\r\n    let str = value.toString();\r\n    for (let i = 0, n = upperChars.length; i < n; i++) {\r\n      str = str.replace(new RegExp(upperChars[i]), '-' + upperChars[i].toLowerCase());\r\n    }\r\n    if (str.slice(0, 1) === '-') {\r\n      str = str.slice(1);\r\n    }\r\n    return str;\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Provider, SecurityContext } from '@angular/core';\r\n\r\nimport { ClipboardButtonComponent } from './clipboard-button.component';\r\nimport { LanguagePipe } from './language.pipe';\r\nimport { MarkdownComponent } from './markdown.component';\r\nimport { MarkdownPipe } from './markdown.pipe';\r\nimport { MarkdownService, SECURITY_CONTEXT } from './markdown.service';\r\n\r\n// having a dependency on `HttpClientModule` within a library\r\n// breaks all the interceptors from the app consuming the library\r\n// here, we explicitely ask the user to pass a provider with\r\n// their own instance of `HttpClientModule`\r\nexport interface MarkdownModuleConfig {\r\n  loader?: Provider;\r\n  clipboardOptions?: Provider;\r\n  markedOptions?: Provider;\r\n  sanitize?: SecurityContext;\r\n}\r\n\r\nconst sharedDeclarations = [\r\n  ClipboardButtonComponent,\r\n  LanguagePipe,\r\n  MarkdownComponent,\r\n  MarkdownPipe,\r\n];\r\n\r\nconst sharedEntryComponents = [\r\n  ClipboardButtonComponent,\r\n];\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  exports: sharedDeclarations,\r\n  declarations: sharedDeclarations,\r\n  entryComponents: sharedEntryComponents,\r\n})\r\nexport class MarkdownModule {\r\n  static forRoot(markdownModuleConfig?: MarkdownModuleConfig): ModuleWithProviders {\r\n    return {\r\n      ngModule: MarkdownModule,\r\n      providers: [\r\n        MarkdownService,\r\n        markdownModuleConfig && markdownModuleConfig.loader || [],\r\n        markdownModuleConfig && markdownModuleConfig.clipboardOptions || [],\r\n        markdownModuleConfig && markdownModuleConfig.markedOptions || [],\r\n        {\r\n          provide: SECURITY_CONTEXT,\r\n          useValue: markdownModuleConfig && markdownModuleConfig.sanitize != null\r\n            ? markdownModuleConfig.sanitize\r\n            : SecurityContext.HTML,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n\r\n  static forChild(): ModuleWithProviders {\r\n    return {\r\n      ngModule: MarkdownModule,\r\n    };\r\n  }\r\n}\r\n","/* eslint-disable */\r\nexport namespace MermaidAPI {\r\n  export enum SecurityLevel {\r\n    /**\r\n     * (default) tags in text are encoded, click functionality is disabled\r\n     */\r\n    Strict = 'strict',\r\n\r\n    /**\r\n     * tags in text are allowed, click functionality is enabled\r\n     */\r\n    Loose = 'loose',\r\n\r\n    /**\r\n     * html tags in text are allowed, (only script element is removed), click functionality is enabled\r\n     */\r\n    Antiscript = 'antiscript',\r\n\r\n    /**\r\n     * with this security level all rendering takes place in a sandboxed iframe.\r\n     * This prevent any javascript running in the context.\r\n     * This may hinder interactive functionality of the diagram like scripts,\r\n     * popups in sequence diagram or links to other tabs/targets etc.\r\n     */\r\n    Sandbox = 'sandbox'\r\n  }\r\n\r\n  export enum Theme {\r\n    /**\r\n     * Designed to modified, as the name implies it is supposed to be used as the base for making custom themes.\r\n     */\r\n    Base = 'base',\r\n\r\n    /**\r\n     * A theme full of light greens that is easy on the eyes.\r\n     */\r\n    Forest = 'forest',\r\n\r\n    /**\r\n     * A theme that would go well with other dark colored elements.\r\n     */\r\n    Dark = 'dark',\r\n\r\n    /**\r\n     *  The default theme for all diagrams.\r\n     */\r\n    Default = 'default',\r\n\r\n    /**\r\n     * The theme to be used for black and white printing\r\n     */\r\n    Neutral = 'neutral'\r\n  }\r\n\r\n  export enum LogLevel {\r\n    Debug = 1,\r\n    Info,\r\n    Warn,\r\n    Error,\r\n    Fatal\r\n  }\r\n\r\n  export interface FlowChartConfig {\r\n    /**\r\n     * **diagramPadding** - amount of padding around the diagram as a whole\r\n     * default: 8\r\n     */\r\n    diagramPadding?: number | undefined;\r\n\r\n    /**\r\n     * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels\r\n     * on the edges\r\n     * default: true\r\n     */\r\n    htmlLabels?: boolean | undefined;\r\n\r\n    /**\r\n     * **nodeSpacing** - Defines the spacing between nodes on the same level\r\n     * default: 50\r\n     */\r\n    nodeSpacing?: number | undefined;\r\n\r\n    /**\r\n     * **rankSpacing** - Defines the spacing between nodes on different levels\r\n     * default: 50\r\n     */\r\n    rankSpacing?: number | undefined;\r\n\r\n    /**\r\n     * default: 'monotoneX'\r\n     */\r\n    curve?: string | undefined;\r\n\r\n    /**\r\n     * **rankSpacing** - Only used in new experimental rendering, represents the padding between the labels and the shape\r\n     * default: 15\r\n     */\r\n    padding?: number | undefined;\r\n\r\n    /**\r\n     * default: true\r\n     */\r\n    useMaxWidth?: boolean | undefined;\r\n  }\r\n\r\n  export interface SequenceDiagramConfig {\r\n    /**\r\n     * **diagramMarginX** - margin to the right and left of the sequence diagram\r\n     * default: 50\r\n     */\r\n    diagramMarginX?: number | undefined;\r\n\r\n    /**\r\n     * **diagramMarginY** - margin to the over and under the sequence diagram\r\n     * default: 10\r\n     */\r\n    diagramMarginY?: number | undefined;\r\n\r\n    /**\r\n     * **actorMargin** - Margin between actors\r\n     * default: 10\r\n     */\r\n    actorMargin?: number | undefined;\r\n\r\n    /**\r\n     * **width** - Width of actor boxes\r\n     * default: 150\r\n     */\r\n    width?: number | undefined;\r\n\r\n    /**\r\n     * **height** - Height of actor boxes\r\n     * default: 65\r\n     */\r\n    height?: number | undefined;\r\n\r\n    /**\r\n     * **boxMargin** - Margin around loop boxes\r\n     * default: 10\r\n     */\r\n    boxMargin?: number | undefined;\r\n\r\n    /**\r\n     * **boxTextMargin** - margin around the text in loop/alt/opt boxes\r\n     * default: 5\r\n     */\r\n    boxTextMargin?: number | undefined;\r\n\r\n    /**\r\n     * **noteMargin** - margin around notes\r\n     * default: 10\r\n     */\r\n    noteMargin?: number | undefined;\r\n\r\n    /**\r\n     * **messageMargin** - Space between messages\r\n     * default: 35\r\n     */\r\n    messageMargin?: number | undefined;\r\n\r\n    /**\r\n     * **mirrorActors** - mirror actors under diagram\r\n     * default: true\r\n     */\r\n    mirrorActors?: boolean | undefined;\r\n\r\n    /**\r\n     * **bottomMarginAdj** - Depending on css styling this might need adjustment.\r\n     * Prolongs the edge of the diagram downwards\r\n     * default: 1\r\n     */\r\n    bottomMarginAdj?: number | undefined;\r\n\r\n    /**\r\n     * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the\r\n     * available space if not the absolute space required is used\r\n     * default: true\r\n     */\r\n    useMaxWidth?: boolean | undefined;\r\n\r\n    /**\r\n     * This will display arrows that start and begin at the same node as right angles, rather than a curve\r\n     * Default value: false\r\n     */\r\n    rightAngles?: boolean | undefined;\r\n  }\r\n\r\n  export interface GanttConfig {\r\n    /**\r\n     * **titleTopMargin** - margin top for the text over the gantt diagram\r\n     * default: 25\r\n     */\r\n    titleTopMargin?: number | undefined;\r\n\r\n    /**\r\n     * **barHeight** - the height of the bars in the graph\r\n     * default: 20\r\n     */\r\n    barHeight?: number | undefined;\r\n\r\n    /**\r\n     * **barGap** - the margin between the different activities in the gantt diagram\r\n     * default: 4\r\n     */\r\n    barGap?: number | undefined;\r\n\r\n    /**\r\n     *  **topPadding** - margin between title and gantt diagram and between axis and gantt diagram.\r\n     * default: 50\r\n     */\r\n    topPadding?: number | undefined;\r\n\r\n    /**\r\n     *  **leftPadding** - the space allocated for the section name to the left of the activities.\r\n     * default: 75\r\n     */\r\n    leftPadding?: number | undefined;\r\n\r\n    /**\r\n     *  **gridLineStartPadding** - Vertical starting position of the grid lines\r\n     * default: 35\r\n     */\r\n    gridLineStartPadding?: number | undefined;\r\n\r\n    /**\r\n     *  **fontSize** - font size ...\r\n     * default: 11\r\n     */\r\n    fontSize?: number | undefined;\r\n\r\n    /**\r\n     * **fontFamily** - font family ...\r\n     * default:  '\"Open-Sans\", \"sans-serif\"'\r\n     */\r\n    fontFamily?: string | undefined;\r\n\r\n    /**\r\n     * **numberSectionStyles** - the number of alternating section styles\r\n     * default: 4\r\n     */\r\n    numberSectionStyles?: number | undefined;\r\n\r\n    /**\r\n     * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences\r\n     * default: '%Y-%m-%d'\r\n     */\r\n    axisFormat?: string | undefined;\r\n  }\r\n\r\n  export interface Config {\r\n    /**\r\n     * ### securityLevel\r\n     * This changes the default behaviour of mermaid so that after upgrade to 8.2,\r\n     * unless the `securityLevel` is not changed, tags in flowcharts are encoded as tags and clicking is disabled.\r\n     * **sandbox** security level is still in the beta version.\r\n     * default: SecurityLevel.Strict\r\n     */\r\n    securityLevel?: SecurityLevel | undefined;\r\n\r\n    theme?: Theme | undefined;\r\n\r\n    themeVariables?: any; // [todo]\r\n\r\n    themeCSS?: string | undefined;\r\n\r\n    maxTextSize?: number | undefined;\r\n\r\n    darkMode?: boolean | undefined;\r\n\r\n    fontFamily?: string | undefined;\r\n\r\n    /**\r\n     * logLevel , decides the amount of logging to be used.\r\n     * default: LogLevel.Fatal\r\n     */\r\n    logLevel?: LogLevel | undefined;\r\n\r\n    /**\r\n     * **startOnLoad** - This options controls whether or mermaid starts when the page loads\r\n     * default: true\r\n     */\r\n    startOnLoad?: boolean | undefined;\r\n\r\n    /**\r\n     * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or\r\n     * an anchor, #. This matters if you are using base tag settings.\r\n     * default: false\r\n     */\r\n    arrowMarkerAbsolute?: boolean | undefined;\r\n\r\n    secure?: Array | undefined;\r\n\r\n    deterministicIds?: boolean | undefined;\r\n\r\n    deterministicIDSeed?: string | undefined;\r\n\r\n    /**\r\n     * ### flowchart\r\n     * *The object containing configurations specific for flowcharts*\r\n     */\r\n    flowchart?: FlowChartConfig | undefined;\r\n\r\n    /**\r\n     * ###  sequenceDiagram\r\n     * The object containing configurations specific for sequence diagrams\r\n     */\r\n    sequence?: SequenceDiagramConfig | undefined;\r\n\r\n    /**\r\n     * ### gantt\r\n     * The object containing configurations specific for gantt diagrams*\r\n     */\r\n    gantt?: GanttConfig | undefined;\r\n\r\n    journey?: any; // [todo]\r\n\r\n    class?: any; // [todo]\r\n\r\n    git?: any; // [todo]\r\n\r\n    state?: any; // [todo]\r\n\r\n    pie?: any; // [todo]\r\n\r\n    requirement?: any; // [todo]\r\n  }\r\n}\r\n"],"names":["NGX_SKELETON_LOADER_CONFIG","InjectionToken","NgxSkeletonLoaderModule","static","config","ngModule","providers","provide","useValue","CommonModule","ComponentsModule","MarkdownModule","NbLayoutModule","NbButtonModule","NbUserModule","NbActionsModule","NbCardModule","NbSelectModule","RouterModule","NbAutocompleteModule","FormsModule","NbInputModule","NbIconModule","NbEvaIconsModule","NbContextMenuModule","NbTooltipModule","DirectivesModule","NbMenuModule","Ng2SmartTableModule","NbSpinnerModule","NbSidebarModule","NbCheckboxModule","NbRadioModule","NbPopoverModule","NbFormFieldModule","NbDatepickerModule","NbTimepickerModule","NbToggleModule","CountdownModule","ReactiveFormsModule","NbAccordionModule","TimeagoModule","NbTreeGridModule","NbTagModule","NbTabsetModule","NbBadgeModule","MonacoEditorModule","PluralizePipeModule","DragDropModule","NbListModule","AgChartsAngularModule","SentenceCasePipeModule","NbStepperModule","AgChartsAngular","constructor","elementDef","this","_initialised","options","EventEmitter","_nativeElement","nativeElement","ngAfterViewInit","applyContainerIfNotSet","chart","AgChart","waitForUpdate","then","onChartReady","emit","ngOnChanges","changes","ngOnDestroy","destroy","undefined","propsOptions","container","Object","_angular_core__WEBPACK_IMPORTED_MODULE_1__","selectors","extendStatics","__extends","d","b","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","create","TimeInterval","encode","decode","rangeCallback","_encode","_decode","_rangeCallback","floor","date","Date","e","ceil","Number","range","start","stop","extend","_a","e0","e1","push","CountableTimeInterval","_super","apply","arguments","getOffset","snapTo","step","s","Math","every","_this","offset","initialOffset_1","encoded","millisecond","getTime","epochYear","getFullYear","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","getTimezoneOffset","second","minute","hour","day","utc","UTC","getMonth","getDate","setDate","setHours","baseSunday","weekday","n","base","sunday","month","year","setFullYear","setMonth","setUTCDate","getUTCDate","setUTCHours","getUTCFullYear","getUTCMonth","setUTCFullYear","setUTCMonth","MOBILE","isDesktop","userAgent","navigator","some","r","test","HdpiCanvas","_b","document","window","_c","width","_d","height","_e","domLayer","_f","zIndex","_g","name","_h","overrideDevicePixelRatio","_container","_enabled","_pixelRatio","NaN","_width","_height","element","createElement","context","getContext","imageSource","canvas","style","userSelect","display","position","String","top","left","pointerEvents","opacity","id","setPixelRatio","resize","defineProperty","get","set","value","remove","appendChild","enumerable","configurable","parentNode","removeChild","clearRect","freeze","snapshot","clear","save","resetTransform","restore","toImage","img","src","getDataURL","type","toDataURL","download","fileName","fileFormat","trim","dataUrl","a","href","body","click","ratio","pixelRatio","devicePixelRatio","overrideScale","imageRendering","round","_textMeasuringContext","_svgText","xmlns","svg","createElementNS","setAttribute","classList","add","visibility","svgText","_has","isChrome","indexOf","isFirefox","isSafari","textMetrics","textMeasuringContext","measureText","actualBoundingBoxDescent","getTransform","text","font","textBaseline","textAlign","ctx","getTextSize","has","metrics","actualBoundingBoxAscent","measureSvgText","cache","textSizeCache","fontCache","size_1","textContent","bbox","getBBox","size","scale","depth","overrides","$save","Error","$restore","setTransform","c","f","$setTransform","verifyDepthZero","name_1","__assign","assign","t","i","length","BBox","x","y","clone","equals","other","containsPoint","collidesBBox","isInfinite","abs","Infinity","shrink","amount","pos","amt","entries","forEach","o","m","Symbol","iterator","ar","next","done","error","return","__read","grow","paddingCopy","key","merge","boxes","right","bottom","box","Matrix","elements","setElements","AxB","A","B","C","multiplySelf","multiply","preMultiplySelf","inverse","el","rD","inverseTo","invertSelf","transformPoint","transformBBox","target","xx","xy","yx","yy","h_w","h_h","cx","cy","w","h","toContext","identity","transform","flyweight","sourceMatrix","instance","updateTransformMatrix","matrix","scalingX","scalingY","rotation","translationX","translationY","opts","scx","scy","bbcx","bbcy","sx","sy","scalingCenterX","scalingCenterY","rcx","rcy","cos","sin","rotationCenterX","rotationCenterY","tx4","ty4","fromContext","domMatrix","ID_MAP","createId","className","nextId","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","__values","TypeError","__spread","concat","PointerEvents","All","None","zIndexChangedCallback","parent","dirtyZIndex","zIndexChanged","Node","serialNumber","_nextSerialNumber","tag","isContainerNode","_children","childSet","inverseMatrix","_dirtyTransform","visible","zIndexSubOrder","_datum","_parent","datum","_setLayerManager","e_1","_layerManager","_debug","debug","children","e_1_1","append","nodes","e_2","isArray","nodes_1","nodes_1_1","node","layerManager","e_2_1","markDirty","RedrawType","splice","insertBefore","nextNode","calculateCumulativeMatrix","computeTransformMatrix","inverseTransformPoint","inverseTransformBBox","markDirtyTransform","_x","_y","pickNode","hit","computeBBox","findNodes","predicate","e_3","result","childResult","e_3_1","computeTransformedBBox","render","renderCtx","stats","_dirty","nodesRendered","clearBBox","topLeft","bottomRight","_source","parentType","markClean","e_4","force","recursive","e_4_1","visibilityChanged","e_5","count","dirtyCount","visibleCount","nodeCount","childDirtyCount","e_5_1","SceneChangeDetection","redraw","changeCb","ChangeDetectable","ascendingStringNumberUndefined","diff","localeCompare","compoundAscending","comparator","toLiteral","v","idx","doOnceFlags","doOnce","func","Logger","logContent","_i","console","log","warn","message","warnOnce","errorOnce","Group","lastBBox","layer","moveLayer","isLayer","scene","removeLayer","addLayer","getComputedOpacity","getVisibility","enabled","source","consoleLog","dirty","clipRect","forceRender","clipBBox","resized","canvasCtxTransform","isDirty","isChildDirty","group","currentBBox","counts","layersSkipped","nodesSkipped","groupVisible","ctxTransform","clipCtx","globalAlpha","sortChildren","childRenderContext","skipped","children_1","children_1_1","child","layersRendered","sort","beginPath","moveTo","lineTo","closePath","clip","setClipRectInGroupCoordinateSpace","convertor","min","max","HdpiOffscreenCanvas","OffscreenCanvas","transferToImageBitmap","isSupported","close","Scene","layers","_nextZIndex","_nextLayerId","_root","dirtyTree","renderBoundingBoxes","sceneNodeHighlight","mode","windowValue","buildSceneNodeHighlight","pendingSize","lessThanZero","nan","isNaN","includes","newLayer","sortLayers","domCanvases","map","filter","newLayerIndex","findIndex","insertAdjacentElement","index","l","newZIndex","newZIndexSubOrder","find","root","strip","layers_1","layers_1_1","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","rejected","throw","adopt","__awaiter","debugSplitTimes","extraDebugStats","canvasCleared","g","_","label","sent","trys","ops","verb","op","pop","__generator","performance","now","redrawType","tree","buildTree","debugStats","debugNodes","buildDirtyTree","paths","drawImage","debugSceneNodeHighlight","renderCtxStats","end","pct","rendered","total","time_1","splits","join","extras","fillStyle","fillRect","stats_1","stats_1_1","fillText","regexpPredicate","matcher","stringPredicate","match","sceneNodeHighlight_1","sceneNodeHighlight_1_1","strokeStyle","lineWidth","strokeRect","strokeText","reduce","childTree","treeNodeName","childNode","childrenDirtyTree","Observable","allEventListeners","Map","addEventListener","listener","eventListeners","Set","removeEventListener","delete","hasEventListener","clearEventListeners","fireEvent","event","isString","isStringObject","toString","isDiscrete","isContinuous","isNumber","valueOf","isDate","checkDatum","isContinuousScale","isFinite","BREAK_TRANSFORM_CHAIN","CONFIG_KEY","addTransformToInstanceProperty","propertyKeyOrSymbol","propertyKey","initialiseConfig","valueStoreKey","setters","getters","descriptor","prevSet","prevGet","oldValue","setters_1","setters_1_1","transformFn","createDeprecationWarning","msg","Deprecated","def","default","DeprecatedAndRenamedTo","newPropName","mapValue","warnDeprecated","Color","validColorString","str","parseHex","stringToRgba","nameToHex","toLowerCase","fromString","fromHexString","hex","fromRgbaString","tryParseFromString","fromArray","input","parts","replace","slice","parseInt","split","values","po","pc","contents","substring","rgba","part","parseFloat","arr","fromHSB","alpha","rgb","HSBtoRGB","padHex","toHexString","toRgbaString","fractionDigits","components","k","pow","toHSB","RGBtoHSB","H","delta","rc","gc_1","bc","S","q","derive","hueShift","saturationFactor","brightnessFactor","opacityFactor","hsb","brighter","darker","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","transparent","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","Validate","prop","cleanKey","targetClass","targetClassName","JSON","stringify","predicateWithMessage","OPTIONAL","ARRAY","OPT_ARRAY","AND","predicates","isComparable","LESS_THAN","otherField","GREATER_THAN","FUNCTION","OPT_FUNCTION","BOOLEAN","OPT_BOOLEAN","STRING","OPT_STRING","DATE","OPT_DATE","DATETIME_MS","NUMBER","OPT_DATETIME_MS","OPT_DATE_OR_DATETIME_MS","OR","colorMessage","COLOR_STRING","OPT_COLOR_STRING","COLOR_STRING_ARRAY","OPT_COLOR_STRING_ARRAY","OPT_NUMBER","NUMBER_OR_NAN","NUMBER_ARRAY","OPT_NUMBER_ARRAY","STRING_ARRAY","STRING_UNION","BOOLEAN_ARRAY","FONT_WEIGHTS","FONT_STYLE","OPT_FONT_STYLE","FONT_WEIGHT","OPT_FONT_WEIGHT","LINE_DASH","OPT_LINE_DASH","LINE_CAPS","LINE_CAP","LINE_JOINS","LINE_JOIN","POSITIONS","POSITION","INTERACTION_RANGES","INTERACTION_RANGE","Layers","SERIES_BACKGROUND_ZINDEX","AXIS_GRID_ZINDEX","AXIS_ZINDEX","SERIES_CROSSLINE_RANGE_ZINDEX","SERIES_LAYER_ZINDEX","SERIES_CROSSHAIR_ZINDEX","SERIES_LABEL_ZINDEX","SERIES_CROSSLINE_LINE_ZINDEX","LEGEND_ZINDEX","ChartAxisDirection","X","Y","DEFAULT_TOOLTIP_CLASS","defaultTooltipCss","toTooltipHtml","defaults","content","title","color","backgroundColor","POSITION_TYPES","POSITION_TYPE","TooltipPosition","xOffset","yOffset","Tooltip","canvasElement","enableInteraction","class","lastClass","delay","showTimeout","showArrow","tooltipRoot","IntersectionObserver","observer","entries_1","entries_1_1","entry","intersectionRatio","toggle","observe","tooltipDocuments","styleElement","innerHTML","head","querySelector","unobserve","isVisible","contains","updateClass","newClass","toggleClass","include","show","meta","html","instantly","limit","low","actual","high","canvasRect","getBoundingClientRect","naiveLeft","offsetX","clientWidth","naiveTop","offsetY","clientHeight","windowBounds","getWindowBoundingBox","maxTop","setTimeout","innerWidth","innerHeight","clearTimeout","pointerLeftOntoTooltip","sourceEvent","relatedTarget","classListContains","Boolean","SeriesNodePickMode","EXACT_SHAPE_MATCH","NEAREST_BY_MAIN_AXIS_FIRST","NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST","NEAREST_NODE","keyProperty","propName","continuous","property","valueType","validation","valueProperty","sumProperties","props","properties","SeriesNodeBaseClickEvent","nativeEvent","series","seriesId","_series","warnSeriesDeprecated","SeriesNodeClickEvent","SeriesNodeDoubleClickEvent","SeriesItemHighlightStyle","fill","fillOpacity","stroke","strokeWidth","SeriesHighlightStyle","dimOpacity","TextHighlightStyle","HighlightStyle","item","SeriesTooltip","interaction","SeriesTooltipInteraction","Series","useSeriesGroupLayer","useLabelLayer","pickModes","directionKeys","rootGroup","directions","nodeDataRefresh","_data","_visible","showInLegend","cursor","nodeClickRange","_declarationOrder","highlightStyle","contentGroup","highlightGroup","highlightNode","highlightLabel","labelGroup","hasData","data","visibleChanged","getBandScalePadding","inner","outer","getKeys","direction","resolvedDirection","resolveKeyDirection","keys","flatten","array","array_1","array_1_1","addValue","markNodeDataDirty","getOpacity","isItemIdHighlighted","getStrokeWidth","defaultStrokeWidth","highlightedDatum","highlightManager","getActiveHighlight","itemId","point","limitPickModes","pickModes_1","pickModes_1_1","pickMode","pickNodeExactShape","pickNodeMainAxisFirst","pickNodeClosestDatum","distance","_point","_requireCategoryAxis","fireNodeClickEvent","eventObject","getNodeClickEvent","fireNodeDoubleClickEvent","getNodeDoubleClickEvent","toggleSeriesItem","_itemId","toggleOtherSeriesItems","_seriesToggled","_datumToggled","_suggestedEnabled","isEnabled","fixNumericExtent","extent","axis","padding","calculatePadding","highlightedZIndex","Padding","Selection","classOrFactory","_nodes","_factory","isPrototypeOf","select","each","iterate","update","init","old","factory","results","traverse","selectByClass","Class","selectByTag","twoPi","PI","normalizeAngle360","radians","toRadians","degrees","LinearGradient","angle","createGradient","stops","quarteredAngle","diagonal","sqrt","diagonalAngle","atan2","gradient_1","createLinearGradient","addColorStop","Gradient","LINEAR_GRADIENT_REGEXP","Shape","lastInstanceId","strokeOpacity","defaultStyles","lineDash","lineDashOffset","lineCap","lineJoin","fillShadow","createInstance","template","shape","_setParent","restoreOwnStyles","styles","getOwnPropertyNames","restoreAllStyles","restoreOverriddenStyles","protoStyles","getPrototypeOf","updateGradient","linearGradientMatch","startsWith","colors_1","colorsPart","colorRegex","exec","gradient","align","alignedStart","fillStroke","renderFill","renderStroke","applyFill","applyFillAlpha","applyShadow","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","blur","setLineDash","isPointInPath","checkDirtyOnAssignment","SceneFontChangeDetection","Text","lines","_dirtyFont","fontSize","fontFamily","lineHeight","_splitText","_font","getFont","fontStyle","fontWeight","getPreciseBBox","getApproximateBBox","baselineDistance","actualBoundingBoxLeft","fontBoundingBoxAscent","emHeightAscent","fontBoundingBoxDescent","emHeightDescent","getVerticalOffset","firstLineHeight","lineSize","getLineHeight","line","renderLines","renderCallback","lineHeights","segmentIntersection","ax1","ay1","ax2","ay2","bx1","by1","bx2","by2","ua","ub","cubicSegmentIntersections","px1","py1","px2","py2","px3","py3","px4","py4","x1","y1","x2","y2","intersections","bx","bezierCoefficients","by","roots","cubicRoots","quadraticRoots","linearRoot","D","t1","t2","Q","R","third","sign","T","Im","t_1","theta","acos","thirdA","twoSqrtQ","t3","roots_1","roots_1_1","tt","ttt","P1","P2","P3","P4","arcIntersections","startAngle","endAngle","counterClockwise","y0","i1x","i2x","a1","a2","intersectionAngle","Command","Move","Line","Arc","Curve","ClosePath","Path2D","previousCommands","previousParams","previousClosedPath","commands","params","_closedPath","draw","j","commands_1","commands_1_1","bezierCurveTo","arc","rect","sAngle","eAngle","antiClockwise","endX","endY","cubicCurveTo","cx1","cy1","cx2","cy2","trackChanges","cn","ox","oy","px","py","intersectionCount","ci","pi","ScenePathChangeDetection","Path","path","_dirtyPath","checkPathDirty","dirtyPath","closedPath","isDirtyPath","updatePath","clipPath","clipMode","Marker","half","applyPath","moves","moves_1","moves_1_1","Square","hs","ProxyPropertyOnWrite","childName","childProperty","ActionOnSet","newValueFn","newValue","oldValueFn","changeValueFn","changeValue","MarkerLabel","_marker","_markerSize","_spacing","marker","markerSize","spacing","Circle","Cross","Diamond","Heart","rad","degree","Plus","Triangle","getMarker","ChartUpdateType","FULL","PROCESS_DATA","PERFORM_LAYOUT","SERIES_UPDATE","TOOLTIP_RECALCULATION","SCENE_RENDER","NONE","gridLayout","orientation","bboxes","maxHeight","maxWidth","itemPaddingY","itemPaddingX","forceResult","horizontal","primary","fn","secondary","processedBBoxCount","rawPages","processBBoxes","pageIndices","buildPages","maxPageWidth","maxPageHeight","pages","indices","transpose","innerData","dataIdx","itemIdx","endIndex","columns","colIndices","colBBoxes","bboxIndex","columnHeight","columnWidth","pageWidth","pageHeight","column","startIndex","indexOffset","startingGuess","estimateStartingGuess","primarySum","minGuess","guess","calculatePage","primaryCount","sumSecondary","currentMaxSecondary","currentPrimaryIndices","maxPrimaryValues","primaryValueIdx","primaryValue","sum","PaginationLabel","PaginationMarkerStyle","PaginationMarker","_shape","onMarkerShapeChange","Pagination","chartUpdateCallback","pageUpdateCallback","interactionManager","cursorManager","labelNode","activeStyle","inactiveStyle","totalPages","currentPage","nextButtonDisabled","previousButtonDisabled","_orientation","_nextButton","_previousButton","nextButton","previousButton","addListener","onPaginationClick","onPaginationMouseMove","updateMarkers","updateGroupVisibility","updateLabel","updatePositions","enableOrDisableButtons","updateLabelPosition","updateNextButtonPosition","markerPadding","labelBBox","highlightActive","buttonStyle","button","disabled","updateMarker","zeroPagesToDisplay","onFirstPage","nextButtonContainsPoint","previousButtonContainsPoint","incrementPage","onPaginationChanged","consume","decrementPage","updateCursor","attachPagination","ORIENTATIONS","OPT_ORIENTATION","LegendLabel","maxLength","formatter","LegendMarker","LegendItem","paddingX","paddingY","toggleSeriesVisible","LegendListeners","legendItemClick","legendItemDoubleClick","Legend","tooltipManager","layoutService","itemSelection","oldSize","maxPageSize","paginationTrackingIndex","listeners","truncatedItems","reverseOrder","destroyFns","characterWidths","pagination","page","updatePageNumber","interactionListeners","checkLegendClick","checkLegendDoubleClick","handleLegendMouseMove","layoutListeners","positionLegend","shrinkRect","removeListener","getOrientation","getCharacterWidths","cw","attachLegend","performLayout","markerShape","reverse","maxItemWidth","paddedMarkerWidth","markerLabel","truncate","updatePagination","pageNumber","maxCharLength","textChars","addEllipsis","truncatedText","cumulativeWidth","textChars_1","textChars_1_1","char","trackingIndex","calculatePagination","paginationBBox","paginationVertical","newCurrentPage","legendItemsHeight","paginationX","paginationY","lastPassPaginationBBox","layout","visibleStart","visibleEnd","columnCount","rowCount","itemHeight","rowSumColumnWidths","pageIndex","columnIndex","rowIndex","markerFill","markerStroke","markerStrokeWidth","markerFillOpacity","markerStrokeOpacity","getDatumForPoint","visibleChildBBoxes","closestLeftTop","dist","childBBox","distX","distY","computePagedBBox","actualBBox","newEnabled","updateHighlight","forceNodeDataRefresh","legendData","ls","getLegendData","visibleItemsCount","clickedItem","seriesItemCounts","acc","seriesItemEnabledCounts","eachSeriesHasSingleItem_1","singleEnabledInEachSeries","singleSelectedWasNotClicked_1","singleEnabledInEachSeriesWasNotClicked_1","legendBBox","pageX","pageY","pointerInsideLegend","removeTooltip","updateTooltip","newShrinkRect","calculateLegendDimensions","legendWidth","legendHeight","calculateTranslationPerpendicularDimension","legendPositionedBBox","updateExclusiveRect","aspectRatio","heightCoefficient","widthCoefficient","SizeMonitor","NativeResizeObserver","ResizeObserver","resizeObserver","contentRect","checkSize","setInterval","checkClientSize","ready","cb","circleRectOverlap","dx","dy","rectRectOverlap","r1","w2","h2","rectContainsRect","r2x","r2y","r2w","r2h","isPointLabelDatum","axisLabelsOverlap","_loop_2","state_1","buildScheduler","scheduleFn","awaitingPromise","awaitingDone","scheduleCount","promiseRunning","busy","scheduleCb","maybePromise","catch","schedule","await","MARKER_SHAPES","MARKER_SHAPE","SeriesMarker","maxSize","domain","ContinuousScale","nice","tickCount","defaultTickCount","minTickCount","maxTickCount","niceDomain","strictClampByDefault","cacheProps","transformInvert","fromDomain","getDomain","refresh","convert","strict","d0","d1","r0","invert","isReversed","toDomain","didChange","isDenseInterval","interval","defaultMaxTickCount","clamp","BandScale","ordinalRange","_domain","_bandwidth","_rawBandwidth","_paddingInner","_paddingOuter","ticks","paddingInner","paddingOuter","rawStep","x0","bw","bandwidth","rawBandwidth","isEqual","epsilon","toFixed","fractionOrSignificantDigits","power","LN10","ArcType","Open","Chord","Round","centerX","centerY","radius","fullPie","Caption","PADDING","_lineHeight","areArrayItemsStrictlyEqual","arrA","arrB","areArrayNumbersEqual","util_ticks","minCount","maxCount","tickStep","NumericTicks","tickMultipliers","log10","multiplier","isWithinBounds","diffCount","fractionalDigits","toExponential","CONSTANTS","periods","days","shortDays","months","shortMonths","dayOfYear","startOfYear","startOffset","timeDiff","weekOfYear","startDay","firstWeekStartOffset","getDay","MONDAY","THURSDAY","isoWeekOfYear","firstOfYearDay","FORMATTERS","pad","getMilliseconds","getHours","I","hours","M","getMinutes","L","getSeconds","u","U","V","W","Z","timezone","unsignedOffset","PADS","padChar","output","repeat","buildFormatter","formatString","formatParts","nextEscapeIdx","literalPart","maybePad","maybeFormatterSpecifier","maybeFormatter","dateTime","dateTimeAsDate","DefaultTimeFormats","MILLISECOND","SECOND","MINUTE","HOUR","WEEK_DAY","SHORT_MONTH","MONTH","SHORT_YEAR","YEAR","formatStrings","toNumber","TimeScale","timeYear","timeMonth","week","timeWeek","timeDay","timeHour","timeMinute","timeSecond","timeMillisecond","tickIntervals","calculateDefaultTickFormat","format","defaultTimeFormat","ticks_1","ticks_1_1","getLowestGranularityFormat","firstTick","lastTick","startYear","stopYear","buildFormatString","yearChange","formatStringArray","timeEndIndex","weekDayIndex","defaultTickFormat","getTickInterval","countableTimeInterval","t0","getTicksForInterval","getDefaultTicks","ticks_2","absInterval","reversedInterval","timeInterval","tickInterval","stopDate","setMilliseconds","tickFormat","specifier","updateNiceDomain","updateNiceDomainIteration","n0","n1","intervalRange","optionalGroup","nonCapturingGroup","formatRegEx","RegExp","surroundedRegEx","parseFormatter","prefix","suffix","surrounded","comma","precision","symbol","zero","formatBody","decimalTypes","integerTypes","removeTrailingZeros","numString","insertSeparator","separator","dotIndex","integerChars","fractionalPart","addSign","num","signType","minusSign","getSIPrefix","siPrefixes","getSIPrefixPower","addPadding","padEnd","padWidth","padLeft","padRight","padStart","absFloor","fromCharCode","toUpperCase","E","F","G","minSIPrefix","maxSIPrefix","LogScale","baseLog","basePow","exp","updateLogFn","updatePowFn","log2","logBase_1","pow10","p0","p1","absDiff","generateTicks","isPositive","availableSpacing","lastTickPosition","nextMagnitudeTickPosition","tickPosition","prevSpacing","nextSpacing","Default","defaultValue","replaces","Label","calculateLabelRotation","parallelFlipRotation","regularFlipRotation","labelRotation","parallelFlipFlag","regularFlipFlag","autoRotation","parallel","TICK_COUNT","OPT_TICK_COUNT","OPT_TICK_INTERVAL","GRID_STYLE_KEYS","GRID_STYLE","Tags","TickLine","TickLabel","GridLine","GridArc","AxisLine","AxisTick","minSpacing","maxSpacing","AxisLabel","autoRotate","autoRotateAngle","avoidCollisions","mirrored","Axis","dataDomain","axisGroup","lineNode","tickLineGroup","tickLabelGroup","crossLineGroup","gridGroup","gridLineGroup","gridArcGroup","tickLineGroupSelection","tickLabelGroupSelection","gridLineGroupSelection","gridArcGroupSelection","_crossLines","tick","translation","baseline","requestedRange","_visibleRange","_title","_gridLength","gridStyle","_radialGrid","gridPadding","seriesAreaPadding","thickness","_scale","refreshScale","crossLine","detachCrossLine","attachCrossLine","initCrossLine","crossLines","updateRange","rr","vr","visibleRange","span","clippedRange","setCrossLinesVisible","attachAxis","detachAxis","inRange","tolerance","inRangeEx","onLabelFormatChange","defaultLabelFormatter","labelFormatter","oldTitle","setTickCount","setTickInterval","updateTitle","setDomain","tickValues","tickMin","tickMax","primaryTickCount","calculateDomain","gridLength","parallelLabels","requestedRangeMin","requestedRangeMax","anySeriesActive","isAnySeriesActive","sideFlag","halfBandwidth","updatePosition","updateLine","labelOverlap","estimateTickCount","secondaryAxis","checkForOverlap","tickSpacing","maxIterations","unchanged","_loop_1","prevTicks","filterTicks","this_1","keepEvery_1","secondaryAxisTicks","updateSecondaryAxisTicks","updateSelections","updateLabels","labelData","labelSpacing","getLabelSpacing","rotated","updateGridLines","anyTickVisible","visibleFn","availableRange","defaultMinSpacing","defaultTickMinSpacing","_primaryTickCount","radialGrid","translationFn","styleCount_1","grid","angularGridLength_1","normalizeAngle360Inclusive","labelAutoRotation","labelBboxes","labelX","labelMatrix","labelSelection","formatTickDatum","userHidden","translatedBBox","rotate","labelTextBaseline","labelRotated","labelAutoRotated","labelTextAlign","combinedRotation","titleVisible","titleNode","titleRotationFlag","bboxYDimension","tickBBox","tickWidth","formatDatum","clipTickLines","clipGrid","_max","LinearScale","prev0","prev1","singleTickDomain","flipChartAxisDirection","ChartAxis","moduleCtx","boundSeries","includeInvisibleDomains","modules","_position","useCalculatedTickCount","axisContext","linkedTo","domains_1","normaliseDataDomain","getLayoutState","tickSize","addModule","module","optionsKey","axisId","seriesKeys","scaleValueFormatter","scaleBandwidth","scaleConvert","val","scaleInvert","moduleMeta","initialiseModule","removeModule","isModuleEnabled","CategoryAxis","_paddingOverrideEnabled","groupPaddingInner","valuesSet","bind","paddings","jsonDiff","sourceType","classify","targetType","targetArray","targetElement","lhs","rhs","allProps","propsChangedCount","take","lhsType","rhsType","allProps_1","allProps_1_1","DELETE","NOT_SPECIFIED","jsonMerge","json","avoidDeepClone","finalValue","nextProp","lastValue","types","props_1","props_1_1","jsonApply","matcherPath","skip","constructors","allowedTypes","targetAny","_loop_3","propertyMatcherPath","propertyPath","currentValue","ctr","currentValueType","newValueType","allowableTypes","jsonWalk","visit","jsons","jsonType","_loop_4","otherValues","HTMLElement","DEFAULT_DIRECTION_KEYS","CartesianSeriesNodeBaseClickEvent","xKey","yKey","CartesianSeriesNodeClickEvent","CartesianSeriesNodeDoubleClickEvent","CartesianSeries","_contextNodeData","nodeDataDependencies","highlightSelection","hasMarkers","markerFactory","nodeFactory","highlightLabelSelection","subGroups","subGroupId","seriesItemEnabled","pathsPerSeries","pathsZIndexSubOrderOffset","renderLayerPerSubSeries","checkDomainXY","isContinuousX","isContinuousY","checkRangeXY","xAxis","yAxis","seriesRect","seriesHighlighted","anySeriesItemEnabled","newNodeDataDependencies","seriesRectWidth","seriesRectHeight","updateNodes","updateHighlightSelection","isPathOrSelectionDirty","createNodeData","updateSeriesGroups","all","updateSeriesGroupSelections","subGroup","seriesIdx","datumSelection","markerSelection","contextData","nodeData","updatePaths","updateDatumSelection","updateLabelSelection","updateMarkerSelection","contextNodeData","totalGroups","subGroupZOffset","dataNodeGroup","markerGroup","pathParentGroup","paths_1","paths_1_1","seriesOpacity","subGroupOpacities","isSubGroupOpacityDifferent","subOp","updateMarkerNodes","isHighlight","updateDatumNodes","updateLabelNodes","subGroupVisible","subGroupOpacity","paths_2","paths_2_1","updatePathNodes","labelItem","itemId_1","contextNodeData_1","contextNodeData_1_1","updateHighlightSelectionItem","isLabelEnabled","ld","updateHighlightSelectionLabel","e_6","closestDatum","hitPoint","minDistance","contextNodeData_2","contextNodeData_2_1","_j","_k","datumX","_l","datumY","e_6_1","requireCategoryAxis","e_7","e_8","primaryDirection","hitPointCoords","contextNodeData_3","contextNodeData_3_1","_m","_o","point_1","newMinDistance","e_8_1","e_7_1","e_9","e_9_1","getLabelData","isAnySeriesVisible","e_10","e_10_1","validateXYData","xData","yData","yDepth","hasNumber","items","maxDepth","validationResult","_opts","CartesianSeriesMarker","sleep","sleepTimeoutMs","Overlay","renderer","parentElement","alignItems","boxSizing","justifyContent","margin","innerText","hide","ChartOverlays","noData","Listeners","registeredListeners","handler","dispatch","cancellableDispatch","cancelled","listeners_1","listeners_1_1","reduceDispatch","reduceFn","listenerResult","listeners_2","listeners_2_1","listenerSymbol","BaseManager","WINDOW_EVENT_HANDLERS","EVENT_HANDLERS","CSS","InteractionManager","doc","eventHandler","processEvent","mouseDown","touchDown","rootElement","EVENT_HANDLERS_1","EVENT_HANDLERS_1_1","passive","WINDOW_EVENT_HANDLERS_1","WINDOW_EVENT_HANDLERS_1_1","interactionDocuments","WINDOW_EVENT_HANDLERS_2","WINDOW_EVENT_HANDLERS_2_1","EVENT_HANDLERS_2","EVENT_HANDLERS_2_1","decideInteractionEventTypes","dispatchEvent","coords","types_1","types_1_1","calculateCoordinates","interactionEvent","buildEvent","consumed","dragStartElement","isEventOverElement","mouseButtonDown","MouseEvent","buttons","fixOffsets","clientX","clientY","TouchEvent","lastTouch","touches","changedTouches","NULL_COORDS","PageTransitionEvent","persisted","offsets","offsetLeft","offsetTop","offsetParent","offsetDragStart","offsetEvent","pageRect","builtEvent","CursorManager","states","callerId","applyStates","styleToApply","HighlightManager","activeHighlight","previousHighlight","highlightToApply","changed","currentHighlight","TooltipManager","tooltip","exclusiveAreas","hoverRef","checkExclusiveRects","area","getTooltipMeta","destroyFn","newAppliedExclusiveArea","entryId","appliedExclusiveArea","ids","contentToApply","metaToApply","appliedState","renderInstantly","ZoomManager","currentZoom","updateZoom","newZoom","getZoom","zoomToApply","LayoutService","layoutProcessors","isLayoutStage","isLayoutComplete","dispatchPerformLayout","stage","dispatchLayoutComplete","UpdateService","updateCallback","ChartHighlight","Chart","resources","processedOptions","userOptions","queuedUserOptions","seriesRoot","subtitle","footnote","_destroyed","_pendingFactoryUpdates","_performUpdateNoRenderCount","_performUpdateType","seriesToUpdate","performUpdateTrigger","debouncedCallback","error_1","performUpdate","_lastPerformUpdateError","_axes","lastInteractionEvent","pointerScheduler","debouncedAnimationFrame","requestAnimationFrame","handlePointer","onSeriesNodeClick","seriesNodeClickEvent","onSeriesNodeDoubleClick","seriesNodeDoubleClick","autoSize","zoomManager","updateService","_lastAutoSize","positionPadding","positionCaptions","legend","overlays","highlight","onClick","onDoubleClick","onMouseMove","onLeave","disablePointer","changeHighlightDatum","getOptions","destroyed","autoSizeChanged","getModuleContext","keepTransferableResources","axes","highlightOnly","requestFactoryUpdate","callbacks","_processCallbacks","updatePending","shift","awaitUpdateCompletion","seriesToUpdate_1","seriesToUpdate_1_1","performUpdateType","seriesRect_1","seriesUpdates","tooltipMeta","processData","handleOverlays","durationMs","removedAxes","removeAllSeries","addSeries","before","allSeries","beforeIndex","initSeries","addSeriesListeners","freeSeries","updateAllSeriesListeners","assignSeriesToAxes","assignAxesToSeries","directionToAxesMap","directionAxes","newAxis","findMatchingAxis","directionAxes_1","directionAxes_1_1","axisKeys","directionKeys_1","directionKeys_1_1","updateLegend","placeLabels","visibleSeries","labels","bounds","ln","positionTopAndShrinkBBox","caption","baseY","bboxHeight","positionBottomAndShrinkBBox","getSeriesRect","pickSeriesNode","exactMatchOnly","maxDistance","reverseSeries","reverseSeries_1","reverseSeries_1_1","mouseX","mouseY","lastPick","hoverRect","handlePointerTooltip","handlePointerNode","pixelRange","pick","isNewDatum","getTooltipHtml","shouldUpdateTooltip","mergePointerDatum","checkSeriesNodeRange","checkSeriesNodeClick","checkSeriesNodeDoubleClick","callback","nodeMidPoint","scrollX","scrollY","newSeries","newDatum","lastSeries","lastDatum","timeoutMs","handleNoDataOverlay","shouldDisplayNoDataOverlay","TreeNode","number","subtreeLeft","subtreeRight","screenX","screenY","leafCount","prelim","mod","ancestor","change","getLeftSibling","getLeftmostSibling","nextLeft","thread","nextRight","getSiblings","moveSubtree","wm","wp","vim","defaultAncestor","firstWalk","defaultAncestor_1","apportion","vop","vip","vom","sip","sop","sim","som","executeShifts","midpoint","leftSibling","Dimensions","secondWalk","thirdWalk","treeLayout","TreeLayout","dimensions","leafNodes","nonLeafNodes","shiftX","shiftY","flipX","xSteps","ySteps","screenDimensions","GroupedCategoryAxisLabel","GroupedCategoryAxis","tickScale","labelColor","gridLineSelection","axisLineSelection","separatorSelection","resizeTickTree","tickTreeLayout","domains","isNumericX","domain_1","tickTree","ticksToTree","unshift","insertTick","pathParts","lastPartIndex","pathPart","partIndex","existingNode","isNotLeaf","tickScaleDomain","rangeStart","rangeEnd","isHorizontal","treeLabels","isLabelTree","labelBBoxes","maxLeafLabelWidth","labelGrid","separatorData","minX","lineCount","styles_1","CartesianChart","paired","_lastAxisWidths","_lastVisibility","clipSeries","seriesPaddedRect","updateAxes","paddedRect","inputShrinkRect","axisWidths","liveAxisWidths","records","stableOutputs","otherAxisWidths","otherVisibility","otherW","lastPassAxisWidths","lastPassVisibility","updateAxesPass","out","lastPassSeriesRect","visited","newAxisWidths","primaryTickCounts","paddedBounds","applySeriesPadding","crossLinePadding","buildCrossLinePadding","axisBound","buildAxisBound","buildSeriesRect","calculateAxisDimensions","addInterAxisPadding","newClipSeries","axisThickness","axisOffset","positionAxis","side","reversedAxes","dir","horizontalPadding","verticalPadding","totalWidth","totalHeight","clampToOutsideSeriesRect","dimension","PolarSeries","computeLabelsBBox","_options","PolarChart","fullSeriesRect","computeSeriesRect","computeCircle","seriesBox","polarSeries","setSeriesCircle","initialRadius","shake","hideWhenNecessary","labelBoxes","labelBox","refined","refineCircle","labelsBox","circleTop","circleRight","circleBottom","padTop","padBottom","newRadius","minRadius","padHeight","HierarchyChart","interpolatePattern","interpolate","formats","args","formatName","toLocaleString","locales","toDateString","sanitizeHtml","NumberAxis","calculateNiceSecondaryAxis","calculateNiceStart","order","magnitude","getTickStep","calculateNextNiceStep","getTicks","stepPower","NON_ZERO_NUMBER","LogAxis","crossesZero","hasZeroExtent","extendDomain","values_1","values_1_1","sumValues","accumulator","values_2","values_2_1","toKeyString","SMALLEST_KEY_INTERVAL","initialValue","reducer","prevX","smallestSoFar","nextX","SUM_VALUE_EXTENT","calculate","processedData","INVALID_VALUE","DataModel","dataVisible","missing","sums","reducers","processors","resolveProcessedDataIndex","resolveProcessedDataDef","groupByKeys","normaliseTo","extractData","groupData","sumData","normaliseData","reduceData","postProcessData","time","keyDefs","valueDefs","initDataDomainProcessor","processValue","resultData","resultDataIdx","dataLoop","data_1","data_1_1","keyIdx","keyDefs_1","keyDefs_1_1","valueIdx","valueDefs_1","valueDefs_1_1","propertyDomain","defs","e_11","e_12","keyStr","existingData","e_11_1","dataIndex","e_12_1","e_13","e_14","e_15","sumDefs","resultSumValues","resultSumValueIndices","resultIdx","resultSumValueIndices_1","resultSumValueIndices_1_1","groupDomain","distinctValues","values_3","values_3_1","e_15_1","e_14_1","e_13_1","e_16","e_17","e_18","e_19","e_20","e_21","e_22","normalise","sumIdx","sumAbsExtent","sums_1","sums_1_1","sumAbs","e_16_1","sumRangeIdx","sums_2","sums_2_1","e_17_1","sumValues_1","valuesSumExtent","e_19_1","values_4","values_4_1","row","_p","_q","e_21_1","e_20_1","_r","_s","e_22_1","e_18_1","e_23","e_24","reducerDefs","accValues","reducerIndex","reducers_1","reducers_1_1","e_24_1","e_23_1","accIdx","reduced","e_25","processorDefs","processorDefs_1","processorDefs_1_1","e_25_1","initDataDomainKey","updateDataDomain","initDataDomain","valueInDatum","missingValue","invalidValue","TimeAxis","datumFormat","datumFormatter","_min","AreaSeriesLabel","AreaSeriesTooltip","AreaSeriesTag","Fill","Stroke","AreaSeries","fills","strokes","_xKey","xName","_yKeys","_visibles","yNames","shadow","processSeriesItemEnabled","visibles","_normalizedTo","absValue","yKeys","normalizedTo","enabledYKeys","dataModel","keyDef","yExtent","ySumExtent","groupedData","contexts","xScale","yScale","continuousY","xDataCount","cumulativePathValues","cumulativeMarkerValues","createPathCoordinates","createMarkerCoordinate","xDatum","yDatum","currY","prevYCoordinate","currYCoordinate","rawYDatum","normalized","normalizedAndValid","yKeyDataIndex","labelSelectionData","markerSelectionData","strokeSelectionData","points","yValues","fillSelectionData","fillPoints","fillPhantomPoints","strokePoints","datumIdx","datumGroup","datumArray","valuesArray","labelText","seriesDatum","nextValuesSameGroup","nextDatumGroup","nextXDatum","rawNextYDatum","nextYDatum","cumulativeValue","yValue","windowX","windowY","currCoordinates","nextCoordinates","points_1","points_1_1","moveTo_1","points_2","points_2_1","isDatumHighlighted","seriesFillOpacity","highlightedFill","highlightFillOpacity","highlightedStroke","highlightedDatumStrokeWidth","customMarker","yKeyIndex","highlighted","labelEnabled","nodeDatum","xValue","markerFormatter","xString","yString","processedYValue","yName","tooltipRenderer","tooltipFormat","Rect","borderPath","crisp","lastUpdatePathStrokeWidth","effectiveStrokeWidth","microPixelEffectOpacity","pixelSize","lx","borderClipPath","ly","halfStrokeWidth","BAR_LABEL_PLACEMENTS","OPT_BAR_LABEL_PLACEMENT","BarSeriesNodeTag","Bar","BarSeriesLabel","placement","BarSeriesTooltip","BarSeries","flipXY","groupScale","cumYKeyCount","flatYKeys","hideInLegend","yKeysCache","_grouped","stackGroups","smallestDataInterval","processYKeys","is2dArray","grouped","flattenKeys","res","flatKeys_1","keysInStacks_1","ungroupedKeys","newKeysIndices_1","from","newIndex","prevYKeyCount_1","visibleStacks_1","stack","visiblesIdx","getStackGroup","processYNames","map_1","activeSeriesItems","activeStacks","getCategoryAxis","getValueAxis","smallestX","keysExtent","calculateStep","smallestInterval","intervals","maxBands","bands","labelFontStyle","labelFontWeight","labelFontSize","labelFontFamily","labelPlacement","xBandWidth","barWidth","stackIndex","stackYKeys","prevMinY","prevMaxY","levelIndex","yIndex","barX","prevY","bottomY","labelY","colorIndex","visibleMax","stackGroup","fillIndex","visibleStacks","HISTOGRAM_AGGREGATIONS","HISTOGRAM_AGGREGATION","HistogramSeriesNodeTag","Bin","HistogramSeriesLabel","aggregationFunctions","bin","mean","HistogramBin","domainMin","domainMax","aggregatedValue","frequency","addDatum","domainWidth","calculateAggregatedValue","aggregationName","aggregationFunction","getY","areaPlot","relativeHeight","HistogramSeriesTooltip","HistogramSeries","binnedData","xDomain","yDomain","bins","aggregation","binCount","deriveBins","binStarts","binSize_1","firstBinEnd","calculateNiceBins","startGuess","segments","getBins","binSize","placeDataInBins","derivedBins","sortedData","currentBin","NEGATIVE_INFINITY","yMinMax","binOfData","xDomainMax","xMinPx","xMaxPx","yZeroPx","yMaxPx","selectionDatumLabel","rangeMin","rangeMax","LineSeriesLabel","LineSeriesTooltip","LineSeries","pointsData","_yKey","markerEnabled","prevXInRange","nextPoint","actualLength","xInRange","nextXInRange","linePath","nodeData_1","nodeData_1_1","lineStroke","ScatterSeriesNodeBaseClickEvent","sizeKey","ScatterSeriesNodeClickEvent","ScatterSeriesNodeDoubleClickEvent","ScatterSeriesTooltip","ScatterSeries","sizeScale","labelKey","sizeName","labelName","_sizeKey","sizeKeyIdx","processedSize","xDataIdx","yDataIdx","placedLabels","placedNodeDatum","isPointInSector","sector","innerRadius","outerRadius","lineCollidesSector","outerStart","outerEnd","innerStart","innerEnd","Sector","angleOffset","PieSeriesNodeBaseClickEvent","angleKey","calloutLabelKey","sectorLabelKey","radiusKey","PieSeriesNodeClickEvent","PieSeriesNodeDoubleClickEvent","PieNodeTag","Callout","PieSeriesCalloutLabel","minAngle","maxCollisionOffset","PieSeriesSectorLabel","positionOffset","positionRatio","PieSeriesCalloutLine","colors","PieSeriesTooltip","PieTitle","DoughnutInnerLabel","DoughnutInnerCircle","PieSeries","radiusScale","groupSelection","groupSelectionData","sectorFormatData","angleScale","calloutLabel","sectorLabel","calloutLine","callout","angleName","innerLabels","radiusName","radiusMin","radiusMax","calloutLabelName","sectorLabelName","legendItemKey","outerRadiusOffset","outerRadiusRatio","innerRadiusOffset","innerRadiusRatio","datumSectorRefs","WeakMap","backgroundGroup","pieCalloutLabels","pieSectorLabels","calloutLabelSelection","sectorLabelSelection","innerLabelsSelection","_innerCircleConfig","oldNode","_innerCircleNode","circle","angleData","angleDataTotal","angleDataRatios","sectorLabelData","radiusData","getLabelFormatterParams","showValueDeprecationWarning_1","sectorLabelFormatter","radii","min_1","delta_1","halfPi","datumIndex","quadrantTextOpts","angleValue","radiusValue","labelValue","calloutLabelValue","sectorLabelValue","deprecatedValue","formatterParams","getSectorFormat","midAngle","midCos","midSin","labelMinAngle","labelVisible","midAngle180","normalizeAngle180","quadrantStart","quadrantIndex","hidden","collisionTextAlign","collisionOffsetY","sectorFormat","highlightedStyle","getInnerRadius","getOuterRadius","updateRadiusScale","getTitleTranslationY","titleOffset","minLabelY","updateNodeMidPoint","updateGroupSelection","selection","updateSectorFn","updateInnerCircle","sectorParent","sectorGrandParent","updateCalloutLineNodes","updateCalloutLabelNodes","updateSectorLabelNodes","updateInnerLabelNodes","calloutLength","calloutStrokeWidth","calloutColors","length_1","paddedLength","getLabelOverflow","seriesLeft","seriesRight","visibleTextPart","hasVerticalOverflow","textLength","computeCalloutLabelCollisionOffsets","fullData","shouldSkip","leftLabels","rightLabels","topLabels","bottomLabels","tempTextNode","getTextBBox","labelRadius","setTextDimensionalProps","avoidNeighbourYCollision","avoidYCollisions","midLabel","midIndex","avoidXCollisions","labelsCollideLabelsByY","paddedBoxes","labelsCollideLabelsByX","loop","sectors","labelsCollideSectors","boxCollidesSector","bottomLeft","displayText","textBoxes","textNode","isDoughnut","singleVisibleSector","isTextVisible","sectorBounds_1","circleRadius","textBBoxes","margins","getMarginTop","getMarginBottom","labelsVisible","textBottoms","prev","formattedAngleValue","titleText","labelParts","seriesToggled","datumToggled","suggestedEnabled","pieSeriesToggled","datumToggledLegendItemValue","HierarchySeries","DropShadow","ColorScale","_range","parsedRange","interpolateColor","TreemapSeriesTooltip","TreemapSeriesNodeBaseClickEvent","colorKey","TreemapSeriesNodeClickEvent","TreemapSeriesNodeDoubleClickEvent","TreemapSeriesLabel","TreemapValueLabel","TextNodeTag","Name","Value","validateColor","TreemapTextHighlightStyle","TreemapHighlightStyle","TreemapSeries","large","medium","small","nodePadding","colorDomain","colorRange","groupFill","groupStroke","groupStrokeWidth","tileStroke","tileStrokeWidth","colorName","rootName","highlightGroups","tileShadow","labelShadow","getNodePaddingTop","isLeaf","textSize","getNodePadding","squarify","outputNodesBoxes","stackSum","minRatioDiff","partitionSum","partition","isVertical_1","partThickness","partLength","firstTileLength","stackThickness","start_1","childBox","isVertical","width_2","height_2","colorScale","createTreeNodeDatum","dataRoot","colorScaleValue","childNodeDatum","descendants","nameLabel","valueLabel","getTileFormat","isHighlighted","highlightedFillOpacity","highlightedTextColor","labelMeta","updateRectFn","updateLabelFn","buildLabelMeta","fillColor","hAlign","vAlign","treeNodeDatum","labelStyle","labelSize","availTextWidth","availTextHeight","valueConfig","valueStyle","valueMargin","valueText","valueSize","hasValueText","_direction","valueKey","valueFormatter","bar","histogram","scatter","treemap","pie","CHART_TYPES","seriesType","chartType","isCartesian","isPolar","isHierarchy","seriesTypes","cartesianTypes","polarTypes","hierarchyTypes","deepMerge","isPlainObject","result_1","isObject","palette","ChartTheme","createChartConfigPerChartType","getDefaults","common","cartesian","polar","hierarchy","applyOverrides","overrideOpts","chartConfig","getPalette","getAxisDefaults","getSeriesDefaults","getBarSeriesDefaults","getLineSeriesDefaults","seriesDefaults","getAreaSeriesDefaults","getScatterSeriesDefaults","getCartesianSeriesMarkerDefaults","getChartDefaults","background","groupedCategory","alias","getOverridesByType","obj","seriesThemeOverrides","defaultFontFamily","mergeWithParentDefaults","parentDefaults","cartesianDefaults","category","mask","minHandle","gripLineGap","gripLineLength","maxHandle","polarDefaults","hierarchyDefaults","DarkTheme","fontColor","mutedFontColor","axisDefaults","seriesLabelDefaults","chartAxesDefaults","chartDefaults","seriesDarkThemeOverrides","BaseModuleInstance","REGISTERED_MODULES","registerModule","otherModule","packageType","RangeHandle","_fill","_stroke","_strokeWidth","_lineCap","_centerX","_centerY","_gripLineGap","_gripLineLength","ax","ay","axw","ayh","RangeMask","_fillOpacity","minRange","onRangeChange","computeVisibleRangeBBox","maxX","RangeSelector","updateHandles","NavigatorMask","rangeMask","rm","NavigatorHandle","rangeHandle","rh","Navigator","rs","minHandleDragging","maxHandleDragging","panHandleOffset","onDragStart","onDrag","onDragStop","layoutComplete","getRatio","stopHandleDragging","CHART_NAVIGATOR_MODULE","chartTypes","Background","onLayoutComplete","rectNode","layoutHandle","CHART_BACKGROUND_MODULE","builtinSeriesTypes","extraSeriesFactories","initialisedSeriesModules","getSeries","SeriesConstructor","DEFAULT_CARTESIAN_CHART_OVERRIDES","DEFAULT_BAR_CHART_OVERRIDES","DEFAULT_SCATTER_HISTOGRAM_CHART_OVERRIDES","yNamesMapping","yKeysMapping","barSeriesTransform","transforms","identityTransform","SERIES_TRANSFORMS","MaterialLight","MaterialDark","PastelLight","PastelDark","SolarLight","SolarDark","VividLight","VividDark","lightTheme","darkTheme","lightThemes","null","themes","getChartTheme","stockTheme","baseTheme","flattenedTheme","FAIL","SKIP","ARRAY_REDUCER","DEFAULTING_ARRAY_REDUCER","sparse","nextValue","REDUCE_CONFIG","hideInChart","outputProp","BOOLEAN_OR_REDUCER","reduceSeries","reducerConfig","defaultReduce","CHART_AXES_TYPES","axisType","axesTypes","optionsType","isAgCartesianChartOptions","specifiedType","isAgHierarchyChartOptions","isAgPolarChartOptions","isSeriesOptionType","countArrayElements","input_1","input_1_1","takeColours","colours","colourIndex","noDataCloneMergeOptions","prepareOptions","newOptions","fallbackOptions","sanityCheckOptions","oldProp","newProp","userSuppliedOptionsType","globalTooltipPositionOptions","checkSeriesType","defaultSeriesType","defaultOverrides","prepareMainOptions","prepareTheme","theme","themeConfig","seriesThemes","axesThemes","cleanedTheme","mergedOptions","processSeriesOptions","seriesOptions","preprocessed","stacked","groupSeriesByType","indexMap","seriesOptions_1","seriesOptions_1_1","indexKey","mergedSeries","mergeSeriesOptions","mergedTooltipPosition","preparePieOptions","pieSeriesTheme","prepareSeries","paletteOptions","calculateSeriesPalette","colourCount","applySeriesTransform","isAxisType","validAxesTypes","isAxisOptionType","prepareAxis","axisTheme","removeOptions","crossLinesTheme_1","prepareEnabledOptions","visitingUserOpts","visitingMergedOpts","_enabledFromTheme","horizontalCrosslineTranslationDirections","xTranslationDirection","yTranslationDirection","topRight","inside","insideLeft","insideRight","insideTop","insideBottom","insideTopLeft","insideBottomLeft","insideTopRight","insideBottomRight","verticalCrossLineTranslationDirections","POSITION_TOP_COORDINATES","xEnd","yStart","yEnd","yDirection","POSITION_LEFT_COORDINATES","xStart","POSITION_RIGHT_COORDINATES","POSITION_BOTTOM_COORDINATES","POSITION_TOP_LEFT_COORDINATES","POSITION_BOTTOM_LEFT_COORDINATES","POSITION_TOP_RIGHT_COORDINATES","POSITION_BOTTOM_RIGHT_COORDINATES","labeldDirectionHandling","Range","startLine","endLine","isRange","CROSSLINE_LABEL_POSITIONS","OPT_CROSSLINE_LABEL_POSITION","OPT_CROSSLINE_TYPE","CrossLineLabel","CrossLine","LINE_LAYER_ZINDEX","crossLineRange","crossLineLabel","labelPoint","getZIndex","updateRangeNode","positionLabel","clippedRangeClamper","getRange","clampedYStart","clampedYEnd","validRange","computeLabelBBox","crossLineTranslationDirections","xTranslation","yTranslation","calculateLabelTranslation","RANGE_LAYER_ZINDEX","crossLineLabelBBox","labelWidth","labelHeight","paddingRight","paddingLeft","paddingBottom","paddingTop","Image","sourceImage","image","BackgroundImage","_image","loadedSynchronously","containerWidth","containerHeight","onload","onImageLoad","complete","calculatePosition","naturalWidth","naturalHeight","AgChartInternal","createOrUpdate","AgChartInstanceProxy","isInstance","updateDelta","deltaOptions","updateUserDelta","getImageDataURL","signatureProps","proxy","mixinOpts","DEBUG","initialiseSeriesModules","initialiseSeriesModule","seriesFactory","defaultOptions","chartTheme","createChartInstance","chartToUpdate","dequeue","queuedOptionsIdx","lastUpdateOptions","maybeClone","prepareResizedChart","currentWidth","currentHeight","clonedChart","oldChart","transferableResource","applyChartOptions","completeOptions","modulesChanged","applyModules","matchingChartType","rootModules","rootModules_1","rootModules_1_1","shouldBeEnabled","registerListeners","applyOptionValues","applySeries","optSeries","matchingTypes","seriesDiff","applySeriesValues","createSeries","seriesInstance","axesPresent","applyAxes","optAxes","oldOpts_1","axisDiff","createAxis","moduleContext","axisOptions","applyAxisModules","seriesDataUpdate","updateType","optionalParams","rootModules_2","rootModules_2_1","JSON_APPLY_OPTIONS","innerCircle","ctrs","seriesTypeOverrides","themeFactories","TRIVIAL","MINOR","MAJOR","evalAvailable","eval","EVAL_USEABLE","privateKey","setterJs","getterJs","setter","getter","self","exports","__webpack_require__","__nested_webpack_require_610__","_parse","StorageObject","resultSet","_parseString","_parseArray","hasOwn","_parseObject","_parseNumber","len","classSet","list","classNames","__WEBPACK_AMD_DEFINE_RESULT__","cssMapping","btoa","toComment","sourceURLs","alreadyImportedModules","mediaQuery","elem","_ref","_temp","_ref$replace","_ref$prepend","prepend","_ref$prefix","css","media","sourceMap","moduleId","inserted","cssText","b64EncodeUnicode","insertCss","defaultAnimationOptions","hover","Icon","_classCallCheck","attrs","_objectSpread","DEFAULT_ATTRS","animation","remAttrs","_objectWithoutProperties","animationOptions","getAnimationOptions","parse","mergedAnimationOptions","animationType","classnames","infinite","animationClasses","combinedAttrs","attrsToString","icons","object","icon","__nested_webpack_require_265431__","_insertCss","animationKeys","dataAttributesKeys","getAnimationObject","optionsAnimation","elementAttrsAnimation","elementsToReplace","querySelectorAll","replaceElement","_getAttrs","getAttrs","attributes","attr","_defineProperty","getAttr","elementAttrs","svgString","toSvg","svgDocument","DOMParser","parseFromString","svgElement","replaceChild","isNil","CompleterBaseData","Subject","super","cancel","searchFields","_searchFields","titleField","_titleField","descriptionField","_descriptionField","imageField","_imageField","convertToItem","formattedText","formattedDesc","extractTitle","extractValue","description","originalObject","extractMatches","term","matches","extractBySearchFields","field","titlePart","processResults","searchField","LocalData","pipe","catchError","subscribe","savedTerm","search","dataSourceChange","RemoteData","http","remoteUrl","_remoteUrl","urlFormater","_urlFormater","dataField","_dataField","requestOptions","_requestOptions","url","encodeURIComponent","remoteSearch","unsubscribe","LocalDataFactory","RemoteDataFactory","tslib_es6","__metadata","HttpClient","CompleterService","localDataFactory","remoteDataFactory","local","remote","CtrCompleter","registerList","registerDropdown","dropdown","onHighlighted","_hasHighlighted","onSelected","clearList","selected","_hasSelected","onDataSourceChange","hasSelected","isOpen","selectCurrent","nextRow","prevRow","hasHighlighted","cancelBlur","_cancelBlur","isCancelBlur","open","_isOpen","opened","autoHighlightIndex","_autoHighlightIndex","highlightRow","Output","CtrRowItem","CtrDropdown","completer","zone","getComputedStyle","isScrollOn","overflowY","run","onMouseDown","_rowMouseDown","registerRow","arrIndex","rows","_row","unregisterRow","currHighlighted","setHighlighted","getDataItem","rowTop","dropdownRowTop","dropdownScrollTopTo","getNativeElement","dropdownHeight","dropdownRowOffsetHeight","rowMouseDown","nextRowIndex","scrollTop","offsetHeight","marginTop","marginBottom","HostListener","__param","Host","ElementRef","NgZone","CtrInput","ngModel","searchStr","clearSelected","ngModelChange","fillHighlighted","_displayStr","valueChanges","keyupHandler","keyCode","preventDefault","restoreSearchValue","stopPropagation","pasteHandler","keydownHandler","which","handleSelection","ctrlKey","metaKey","altKey","onBlur","focus","blurTimer","timer","doBlur","onfocus","selectOnFocus","openOnFocus","selectOnClick","openOnClick","_searchStr","overrideSuggested","clearUnselected","Input","NgModel","CtrListContext","searching","searchInitialized","CtrList","templateRef","viewContainer","cd","ngOnInit","viewRef","createEmbeddedView","dataService","newService","_dataService","dataServiceSubscribe","initialItem","_initialValue","ctrListMinSearchLength","searchTimer","ctrListDisplaySearching","refreshTemplate","clearTimer","ctrListPause","searchTimerComplete","_clear","detectChanges","markForCheck","getBestMatchIndex","bestMatch","toLocaleLowerCase","ctrListAutoMatch","ctrListAutoHighlight","TemplateRef","ViewContainerRef","ChangeDetectorRef","CtrRow","_rowIndex","ctrRow","dataItem","_item","onMouseEnter","addClass","removeClass","Renderer2","CompleterListItemCmp","isMatch","matchStr","matchPos","matchText","matchPart","noop","COMPLETER_CONTROL_VALUE_ACCESSOR","multi","NG_VALUE_ACCESSOR","useExisting","forwardRef","CompleterCmp","completerService","cdr","pause","FormControl","_onChangeCallback","autofocus","_focus","_open","ngAfterViewChecked","ctrInput","onTouched","_onTouchedCallback","writeValue","registerOnChange","registerOnTouched","setDisabledState","isDisabled","disableInput","datasource","textNoResults","_textNoResults","displayNoResults","textSearching","_textSearching","displaySearching","blurEvent","onFocus","focusEvent","onKeyup","keyup","onKeydown","keydown","onChange","ViewChild","Ng2CompleterModule","Ng2CompleterModule_1","ɵngcc0","imports","fesm2020_forms","deepExtend","objects","cloneDeep","Deferred","promise","getDeepFromObject","level","getPageForRowIndex","perPage","prepareValue","Cell","dataSet","getColumn","getRow","getValue","getValuePrepareFunction","Function","PREPARE","getData","setValue","getId","getTitle","isEditable","isAddable","Row","_dataSet","process","getCell","cells","getCells","getIsSelected","isSelected","getNewData","cell","setData","getColumns","createCell","settings","Column","component","getOnComponentInitFunction","onComponentInitFunction","getCompareFunction","compareFunction","valuePrepareFunction","getFilterFunction","filterFunction","getConfig","editor","getFilterType","getFilterConfig","prepareType","renderComponent","isFilterable","defaultSortDirection","sortDirection","isSortable","editable","addable","prepareSortDirection","determineType","DataSet","columnSettings","createColumns","createNewRow","createRows","getRows","getFirstRow","getLastRow","findRowByData","deselectAll","selectedRow","selectRow","previousIsSelected","multipleSelectRow","selectPreviousRow","selectFirstRow","selectLastRow","selectRowByIndex","rowsLength","willSelectFirstRow","willSelect","willSelectLastRow","selectedRowIndex","newRow","isInEditing","Grid","setSettings","setSource","detach","sourceOnChangedSubscription","sourceOnUpdatedSubscription","showActionColumn","isCurrentActionsPosition","isActionsVisible","getSetting","isMultiSelectVisible","getNewRow","getDataSet","prepareSource","onChanged","processDataChange","onUpdated","onSelectRow","onSelectRowSource","asObservable","onDeselectRow","onDeselectRowSource","edit","confirmEmitter","deferred","newData","skipAdd","createFormShown","err","confirm","skipEdit","shouldProcessChange","determineRowToSelect","action","getRowIndexToSelect","shouldSkipSelection","initialSource","getInitialSort","setSort","setPaging","getPageToSelect","sortConf","compare","getSelectedRows","selectAllRows","status","getSelectionInfo","switchPageToSelectedRowPage","dataAmount","pageToSelect","maxPageAmount","CellComponent","onEdited","isNew","createConfirm","editConfirm","ɵcmp","ɵɵdefineComponent","decls","EditCellDefault","edited","onStopEditing","CustomEditComponent","resolver","customComponent","componentFactory","resolveComponentFactory","dynamicTarget","createComponent","inputClass","core","DefaultEditComponent","getEditorType","EditCellComponent","DefaultEditor","CheckboxEditorComponent","trueVal","true","falseVal","false","checked","rf","CheckboxEditorComponent_Template_input_click_0_listener","CompleterEditorComponent","onEditedCompleter","InputEditorComponent","InputEditorComponent_Template_input_ngModelChange_0_listener","SelectEditorComponent","$event","TextareaEditorComponent","CustomViewComponent","createCustomComponent","callOnComponentInit","patchInstance","getPatch","rowData","ViewCellComponent","CellModule","DataSource","emitOnChanged","load","onChangedSource","onAdded","onAddedSource","onUpdatedSource","onRemoved","onRemovedSource","emitOnAdded","emitOnRemoved","emitOnUpdated","empty","conf","doEmit","setFilter","andOperator","addFilter","fieldConf","setPage","getElements","paging","getPaging","getFilter","getSort","FilterDefault","onFilter","query","FilterComponent","firstChange","dataChangedSub","dataChanges","filterConf","filters","ɵFilterComponent_BaseFactory","DefaultFilterComponent","ɵDefaultFilterComponent_BaseFactory","CustomFilterComponent","DefaultFilter","changesSubscription","CheckboxFilterComponent","inputControl","debounceTime","filterActive","resetFilter","emitEvent","CompleterFilterComponent","completerContent","ev","distinctUntilChanged","inputTextChanged","InputFilterComponent","SelectFilterComponent","FilterModule","PagerComponent","currentPerPage","isPageOutOfBounce","processPageChange","initPages","getLast","shouldShow","paginate","changePage","getPage","getPages","pagesCount","showPagesCount","middleOne","lastOne","onChangePerPage","PagerModule","Ng2SmartTableTbodyComponent","tableColumnsCount","actionColumns","isActionAdd","isActionEdit","isActionDelete","showActionColumnLeft","editInputClass","showActionColumnRight","noDataMessage","getVisibleCells","TbodyCreateCancelComponent","onSave","onCancelEdit","saveButtonContent","cancelButtonContent","TbodyEditDeleteComponent","onEdit","editRowSelect","onDelete","deleteConfirm","editRowButtonContent","deleteRowButtonContent","TbodyCustomComponent","onCustom","custom","TBodyModule","ɵinj","Ng2SmartTableTheadComponent","isHideHeader","isHideSubHeader","ActionsComponent","createButtonContent","ActionsTitleComponent","ref","actionsColumnTitle","AddButtonComponent","addNewButtonContent","onAdd","CheckboxSelectAllComponent","ColumnTitleComponent","TitleComponent","currentDirection","_sort","changeSortDirection","TheadFitlersRowComponent","filterInputClass","getVisibleColumns","TheadFormRowComponent","onCreate","addInputClass","TheadFormRowComponent_td_3_Template","TheadTitlesRowComponent","THeadModule","compareValues","LocalSorter","customCompare","filterValues","LocalFilter","customFilter","LocalPager","LocalDataSource","reset","found","prepareData","getFilteredAndSorted","filteredAndSorted","getAll","silent","pagingConf","currentFieldConf","mergedData","Ng2SmartTableComponent","selectMode","hideHeader","hideSubHeader","actions","columnTitle","editButtonContent","confirmSave","addButtonContent","confirmCreate","deleteButtonContent","confirmDelete","pager","rowClassFunction","prepareSettings","initGrid","tableId","tableClass","isPagerDisplay","perPageSelect","destroyed$","isIndexOutOfRange","deselectAllRows","emitDeselectRow","onMultipleSelectRow","onUserSelectRow","emitUserSelectRow","emitSelectRow","onRowHover","rowHover","onSelectAllRows","isAllSelected","subscribeToOnSelectRow","subscribeToOnDeselectRow","defaultSettings","resetAllSelector","selectedRows","userRowSelect","rowSelect","rowDeselect","onSelectRowSubscription","takeUntil","onDeselectRowSubscription","Ng2SmartTableComponent_Template_tbody_delete_2_listener","ServerSourceConf","endPoint","sortFieldKey","sortDirKey","pagerPageKey","pagerLimitKey","filterFieldKey","totalKey","dataKey","SORT_FIELD_KEY","SORT_DIR_KEY","PAGER_PAGE_KEY","PAGER_LIMIT_KEY","FILTER_FIELD_KEY","TOTAL_KEY","DATA_KEY","ServerDataSource","lastRequestCount","requestElements","extractTotalFromResponse","extractDataFromResponse","toPromise","rawData","headers","httpParams","createRequesParams","HttpParams","addSortRequestParams","addFilterRequestParams","addPagerRequestParams","extendStyles","dest","importantProperties","setProperty","removeProperty","enable","toggleVisibility","initialTransform","parseCssTimeUnitsToMs","parseCssPropertyValue","computedStyle","getPropertyValue","getMutableClientRect","clientRect","isInsideClientRect","adjustClientRect","isPointerNearClientRect","threshold","pointerX","pointerY","xThreshold","yThreshold","ParentPositionTracker","_document","positions","scrollPosition","getViewportScrollPosition","scrollLeft","handleScroll","_getEventTarget","cachedPosition","newTop","newLeft","viewportScrollPosition","topDifference","leftDifference","deepCloneNode","cloneNode","descendantsWithId","nodeName","removeAttribute","transferCanvasData","transferInputData","transferData","selector","descendantElements","cloneElements","cloneUniqueId","passiveEventListenerOptions","normalizePassiveListenerOptions","activeEventListenerOptions","dragImportantProperties","DragRef","_disabled","_dropContainer","coerceBooleanProperty","_toggleNativeDragInteractions","_handles","handle","toggleNativeDragInteractions","_config","_ngZone","_viewportRuler","_dragDropRegistry","_passiveTransform","_activeTransform","_hasStartedDragging","Subscription","_boundaryElement","_nativeInteractionsEnabled","dragStartDelay","_moveEvents","beforeStarted","targetHandle","_getTargetHandle","_disabledHandles","_initializeDragSequence","_rootElement","pointerPosition","_getPointerPositionOnPage","_pickupPositionOnPage","dragStartThreshold","isDelayElapsed","_dragStartTime","_getDragStartDelay","_endDragSequence","isDragging","isReceiving","_startDragSequence","constrainedPointerPosition","_getConstrainedPointerPosition","_hasMoved","_lastKnownPointerPosition","_updatePointerDirectionDelta","_updateActiveDropContainer","constrainPosition","_initialClientRect","activeTransform","_applyRootElementTransform","observers","_getDragDistance","_pointerDirectionDelta","withRootElement","withParent","parentDragRef","_parentPositions","registerDragItem","getPlaceholderElement","_placeholder","getRootElement","getVisibleElement","withHandles","handles","coerceElement","disabledHandles","withPreviewTemplate","_previewTemplate","withPlaceholderTemplate","_placeholderTemplate","_removeRootElementListeners","runOutsideAngular","_pointerDown","_nativeDragStart","_initialTransform","SVGElement","_ownerSVGElement","ownerSVGElement","withBoundaryElement","boundaryElement","_resizeSubscription","_containInsideBoundaryOnResize","_parentDragRef","dispose","_anchor","_destroyPreview","_destroyPlaceholder","removeDragItem","_removeSubscriptions","started","released","ended","entered","exited","dropped","disableHandle","enableHandle","withDirection","_withDropContainer","getFreeDragPosition","setFreeDragPosition","withPreviewContainer","_previewContainer","_sortFromLastPointerPosition","_pointerMoveSubscription","_pointerUpSubscription","_scrollSubscription","_preview","_previewRef","_placeholderRef","stopDragging","webkitTapHighlightColor","_rootElementTapHighlight","_stopScrolling","_animatePreviewToPlaceholder","_cleanupDragArtifacts","_cleanupCachedDimensions","dropPoint","isTouchEvent","_lastTouchEventTime","dropContainer","placeholder","_createPlaceholderElement","anchor","createComment","shadowRoot","_getShadowRoot","_createPreviewElement","_getPreviewInsertionPoint","_initialContainer","_initialIndex","getItemIndex","getScrollableParents","referenceElement","isTouchSequence","isAuxiliaryMouseButton","isSyntheticEvent","isFakeEvent","isFakeTouchstartFromScreenReader","isFakeMousedownFromScreenReader","draggable","rootStyles","pointerMove","_pointerMove","pointerUp","_pointerUp","scrolled","scrollEvent","_updateOnScroll","_boundaryRect","previewTemplate","_pickupPositionInElement","matchSize","_getPointerPositionInElement","_pointerPositionAtLastDirectionChange","startDragging","_previewRect","currentIndex","isPointerOverContainer","_isOverContainer","previousIndex","previousContainer","drop","rawX","rawY","newContainer","_getSiblingContainerFromPosition","exit","enter","sortingDisabled","_startScrollingIfNecessary","_sortItem","_applyPreviewTransform","previewConfig","previewClass","preview","rootRect","getRootNode","matchElementSize","placeholderRect","duration","getTransformTransitionDurationInMs","transitionedProperties","propertyIndex","rawDurations","rawDelays","propertyName","timeout","placeholderConfig","placeholderTemplate","elementRect","handleElement","referenceRect","targetTouches","_getViewportScrollPosition","svgMatrix","getScreenCTM","svgPoint","createSVGPoint","matrixTransform","dropContainerLock","lockAxis","pickupX","pickupY","boundaryRect","previewWidth","previewHeight","_getPreviewRect","minY","maxY","pointerPositionOnPage","positionSinceLastChange","changeX","changeY","pointerDirectionChangeThreshold","shouldEnable","combineTransforms","currentPosition","pickupPosition","leftOverflow","rightOverflow","topOverflow","bottomOverflow","touch","mouse","scrollDifference","_cachedShadowRoot","initialParent","previewContainer","documentRef","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","rootNodes","nodeType","ELEMENT_NODE","wrapper","sourceRect","moveItemInArray","fromIndex","toIndex","to","transferArrayItem","currentArray","targetIndex","SingleAxisSortStrategy","_element","_itemPositions","drag","overlaps","withItems","pointerDelta","siblings","_getItemIndexFromPointerPosition","currentItem","siblingAtNewPosition","newPosition","itemOffset","_getItemOffsetPx","siblingOffset","_getSiblingOffsetPx","oldOrder","sibling","isDraggedItem","elementToOffset","_previousSwap","activeDraggables","_activeDraggables","newPositionReference","_shouldEnterAsFirstChild","_cacheItemPositions","withSortPredicate","_sortPredicate","getActiveItemsSnapshot","updateOnScroll","elementToMeasure","immediateSibling","itemPositions","lastItemRect","firstItemRect","SCROLL_PROXIMITY_THRESHOLD","DropListRef","autoScrollDisabled","autoScrollStep","_isDragging","_draggables","_siblings","_startScrollInterval","animationFrameScheduler","_stopScrollTimers","_scrollNode","scrollStep","_verticalScrollDirection","scrollBy","_horizontalScrollDirection","withScrollableParents","registerDropContainer","_sortStrategy","sortPredicate","_viewportScrollSubscription","sorted","receivingStarted","receivingStopped","_activeSiblings","removeDropContainer","_draggingStarted","_notifyReceivingSiblings","_cacheParentPositions","_reset","previousItems","connectedTo","withOrientation","_scrollableElements","_clientRect","scrollNode","verticalScrollDirection","horizontalScrollDirection","getElementScrollDirections","computedVertical","getVerticalScrollDirection","computedHorizontal","getHorizontalScrollDirection","scrollHeight","scrollWidth","getViewportSize","_initialScrollSnap","msScrollSnapType","scrollSnapType","_listenToScrollEvents","_stopReceiving","_canReceive","enterPredicate","elementFromPoint","_startReceiving","activeSiblings","initiator","receiver","draggedItems","activeCapturingEventOptions","capture","DragDropRegistry","_activeDragInstances","_draggingPredicate","_dropInstances","_dragInstances","_persistentTouchmoveListener","_globalListeners","scroll","_preventDefaultWhileDragging","_clearGlobalListeners","streams","eventOptions","i0","DOCUMENT","DEFAULT_CONFIG","DragDrop","createDrag","createDropList","i1","i2.DragDropRegistry","CDK_DRAG_PARENT","CDK_DROP_LIST_GROUP","CDK_DRAG_CONFIG","_uniqueIdCounter","CDK_DROP_LIST","CdkDropList","_group","_dropListRef","dragDrop","_changeDetectorRef","_scrollDispatcher","_dir","_assignDefaults","_setupInputSyncSubscription","_handleEvents","_dropLists","_items","addItem","_unsortedItems","_syncItemsWithRef","removeItem","getSortedItems","_dragRef","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","startWith","coerceArray","_scrollableParentsResolved","scrollableParents","getAncestorScrollContainers","scrollable","getElementRef","coerceNumberProperty","dropEvent","draggingDisabled","listAutoScrollDisabled","listOrientation","i1.DragDrop","i2","i3","CDK_DRAG_HANDLE","CDK_DRAG_PLACEHOLDER","CDK_DRAG_PREVIEW","CdkDrag","_viewContainerRef","_selfHandle","_parentDrag","subscription","moved","movedEvent","_syncInputs","onStable","_updateRootElement","_setupHandlesListener","freeDragPosition","rootSelectorChange","rootElementSelector","positionChange","closest","_getBoundaryElement","boundary","startEvent","releaseEvent","endEvent","enterEvent","exitEvent","tap","childHandleElements","switchMap","_stateChanges","handleInstance","dragRef","i2.DragDrop","CdkScrollableModule","MonacoEditorLoaderService","ngZone","monacoPathConfig","isMonacoLoaded$","BehaviorSubject","_monacoPath","monacoEditorAlreadyInitialized","monacoPath","loadMonaco","onGotAmdLoader","vsPath","amdRequire","require","isElectron","nodeRequire","isPathUrl","__dirname","vs","addElectronFixScripts","loaderScript","electronFixScript","inlineScript","createTextNode","inlineScript2","ɵfac","ɵprov","MonacoEditorComponent","monacoLoader","onErrorStatusChange","propagateChange","model","getModel","modelMarkers","monaco","getModelMarkers","resource","uri","isLoaded","initEditor","language","toLanguage","toTheme","fromLanguage","fromTheme","previousValue","setModelLanguage","setTheme","updateOptions","toUri","fromUri","existingModel","modelUriInstance","getModels","createModel","setModel","validate","parsedError","registerOnValidatorChange","automaticLayout","scrollBeyondLastLine","editorContent","registerEditorListeners","onDidChangeModelContent","onDidChangeModelDecorations","currentParsedError","onDidBlurEditorText","_c0","_t","NG_VALIDATORS","MonacoDiffEditorComponent","initMonaco","code","modified","original","readOnly","createDiffEditor","_c1","changeDetection","ɵmod","NbEvaSvgIcon","NbSvgIcon","getContent","iconLibrary","NAME","registerSvgPack","createIcons","setDefaultPack","newIcons","_angular_core__WEBPACK_IMPORTED_MODULE_2__","CountdownStatus","CountdownTimer","fns","nextTime","ing","_angular_core__WEBPACK_IMPORTED_MODULE_0__","CountdownGlobalConfig","locale","demand","leftTime","formatDate","formatStr","LOCALE_ID","CountdownComponent","defCog","_notify","isDestroy","notify","begin","callEvent","restart","resume","frq","getLeft","_reflow","reflow","prettyText","stopTime","_angular_common__WEBPACK_IMPORTED_MODULE_1__","_defaults","async","breaks","extensions","gfm","hooks","pedantic","tokenizer","walkTokens","changeDefaults","newDefaults","noopTest","regex","opt","valSource","caret","getRegex","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","blankLine","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceTabs","listReplaceNesting","listIsTask","listReplaceTask","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","unescapeTest","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","bull","nextBulletRegex","indent","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","hr","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","_blockLabel","_tag","_comment","paragraph","blockNormal","blockquote","fences","heading","newline","table","gfmTable","blockGfm","blockPedantic","br","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","_inlineLabel","link","reflink","nolink","inlineNormal","_backpedal","blockSkip","del","escape","marked_esm_link","reflinkSearch","inlinePedantic","inlineGfm","inlineBreaks","block","normal","inline","escapeReplacements","getEscapeReplacement","ch","cleanUrl","encodeURI","splitCells","tableRow","escaped","curr","at","rtrim","suffLen","charAt","outputLink","cap","raw","lexer","rules","state","inLink","token","tokens","inlineTokens","_Tokenizer","space","codeBlockStyle","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","lang","trimmed","inBlockquote","currentLines","currentRaw","currentText","blockTokens","lastToken","oldToken","newText","newToken","isordered","ordered","loose","itemRegex","endsWithBlankLine","endEarly","itemContents","nextLine","trimStart","rawLine","nextLineWithoutTabs","ischecked","istask","task","lastItem","trimEnd","spacers","hasMultipleLineBreaks","pre","aligns","header","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","findClosingBracket","linkLen","links","emStrong","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastIndex","lastCharLength","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","inlineText","_Lexer","inlineQueue","lex","lastParagraphClipped","extTokenizer","cutSrc","startBlock","tempSrc","tempStart","getStartIndex","errMsg","charCodeAt","lastIndexOf","keepPrevChar","startInline","_Renderer","parser","langString","parseInline","listitem","itemBody","checkbox","tablecell","tablerow","strong","em","cleanHref","_TextRenderer","_Parser","textRenderer","anyToken","renderers","genericToken","ret","textToken","_Hooks","preprocess","markdown","postprocess","processAllTokens","provideLexer","lexInline","provideParser","markedInstance","Marked","setOptions","parseMarkdown","Parser","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","use","tableToken","childTokens","flat","pack","ext","prevRenderer","extLevel","rendererFunc","tokenizerFunc","prevTokenizer","hooksFunc","prevHook","passThroughHooks","arg","packWalktokens","blockType","origOpt","throwError","onError","marked","_getDefaults","ClipboardButtonComponent","_buttonClick$","of","mapTo","shareReplay","configOrBufferSize","windowTime","scheduler","bufferSize","refCount","share","connector","ReplaySubject","resetOnError","resetOnComplete","resetOnRefCountZero","copied$","copied","onCopyToClipboardClick","ClipboardOptions","PrismPlugin","MarkedOptions","SECURITY_CONTEXT","MarkdownService","platform","securityContext","clipboardOptions","sanitizer","MarkedRenderer","delimiters","startOnLoad","buttonComponent","decodeHtml","emoji","mermaid","markedOptions","DEFAULT_MARKED_OPTIONS","disableSanitizer","clipboard","katex","katexOptions","mermaidOptions","_reload$","parseOptions","DEFAULT_PARSE_OPTIONS","extendRenderer","trimIndentation","decoded","emojified","parseEmoji","parseMarked","sanitize","DEFAULT_RENDER_OPTIONS","viewContainerRef","renderClipboard","DEFAULT_CLIPBOARD_OPTIONS","renderKatex","DEFAULT_KATEX_OPTIONS","renderMermaid","DEFAULT_MERMAID_OPTIONS","reload","getSource","responseType","handleExtension","isPlatformBrowser","Prism","highlightAllUnder","noLanguageElements","textarea","extendedRenderer","ɵNgxMarkdownRendererExtended","defaultCode","isEscaped","urlProtocolIndex","urlWithoutProtocol","lastSlashIndex","lastUrlSegment","lastDotIndex","extension","joypixels","shortnameToUnicode","renderMathInElement","ClipboardJS","buttonTemplate","preElements","preElement","preWrapperElement","toolbarWrapperElement","embeddedViewRef","clipboardInstance","transition","onmouseover","onmouseout","hostView","onDestroy","mermaidElements","initialize","indentStart","lineIdentStart","PLATFORM_ID","MarkdownComponent","markdownService","_clipboard","_commandLine","_disableSanitizer","_emoji","_inline","_katex","_lineHighlight","_lineNumbers","_mermaid","_srcRelativeLink","srcRelativeLink","lineHighlight","lineNumbers","commandLine","loadContent","handleSrc","handleData","handleTransclusion","reload$","baseUrl","URL","location","origin","pathname","renderOptions","clipboardButtonComponent","clipboardButtonTemplate","parsed","handlePlugins","setPluginClass","CommandLine","setPluginOptions","dataFilterOutput","filterOutput","dataHost","host","dataPrompt","prompt","dataOutput","dataUser","user","dataLine","dataLineOffset","lineOffset","LineNumbers","dataStart","plugin","classes","option","attributeValue","attributeName","toLispCase","upperChars","markdownModuleConfig","loader","SecurityContext","MermaidAPI","SecurityLevel","Theme","LogLevel"],"mappings":"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","debug_id":"0bb3e774-a4e5-5b7c-ae67-9da845b12529"}