@porscheinformatik/clr-addons 19.21.2 → 21.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/porscheinformatik-clr-addons-charts.mjs +256 -251
- package/fesm2022/porscheinformatik-clr-addons-charts.mjs.map +1 -1
- package/fesm2022/{clr-addons.mjs → porscheinformatik-clr-addons.mjs} +1411 -1749
- package/fesm2022/porscheinformatik-clr-addons.mjs.map +1 -0
- package/package.json +10 -14
- package/styles/clr-addons-phs.css +25 -24
- package/styles/clr-addons-phs.css.map +1 -1
- package/styles/clr-addons-phs.min.css +1 -1
- package/styles/clr-addons-phs.min.css.map +1 -1
- package/types/porscheinformatik-clr-addons-charts.d.ts +601 -0
- package/types/porscheinformatik-clr-addons.d.ts +4773 -0
- package/abstract-form-component/abstract-form-component.d.ts +0 -32
- package/abstract-form-component/control-id.service.d.ts +0 -11
- package/abstract-form-component/form.module.d.ts +0 -7
- package/abstract-form-component/index.d.ts +0 -2
- package/abstract-form-component/label.d.ts +0 -15
- package/action-panel/action-panel-container-content.d.ts +0 -5
- package/action-panel/action-panel-container-footer.d.ts +0 -5
- package/action-panel/action-panel-container.d.ts +0 -5
- package/action-panel/action-panel.d.ts +0 -14
- package/action-panel/action-panel.module.d.ts +0 -13
- package/action-panel/index.d.ts +0 -5
- package/autocomplete-off/autocomplete-off.directive.d.ts +0 -5
- package/autocomplete-off/autocomplete-off.module.d.ts +0 -7
- package/autocomplete-off/index.d.ts +0 -2
- package/back-button/back-button.d.ts +0 -9
- package/back-button/back-button.module.d.ts +0 -10
- package/back-button/index.d.ts +0 -2
- package/brand-avatar/brand-avatar.d.ts +0 -27
- package/brand-avatar/brand-avatar.module.d.ts +0 -9
- package/brand-avatar/index.d.ts +0 -2
- package/breadcrumb/breadcrumb-model.interface.d.ts +0 -10
- package/breadcrumb/breadcrumb.d.ts +0 -17
- package/breadcrumb/breadcrumb.module.d.ts +0 -10
- package/breadcrumb/breadcrumb.service.d.ts +0 -9
- package/breadcrumb/index.d.ts +0 -4
- package/charts/area-chart/area-chart.component.d.ts +0 -41
- package/charts/bar-chart/bar-chart.component.d.ts +0 -97
- package/charts/chart-alert-overlay/chart-alert-overlay.component.d.ts +0 -7
- package/charts/chart-export/chart-export-button.component.d.ts +0 -13
- package/charts/chart-export/chart-export.service.d.ts +0 -20
- package/charts/chart-legend/chart-legend.component.d.ts +0 -12
- package/charts/chart-tooltip/chart-tooltip.component.d.ts +0 -16
- package/charts/charts.module.d.ts +0 -21
- package/charts/combo-chart/combo-chart.component.d.ts +0 -83
- package/charts/constants/alert-message-constants.d.ts +0 -5
- package/charts/constants/index.d.ts +0 -1
- package/charts/directives/auto-position.directive.d.ts +0 -16
- package/charts/directives/index.d.ts +0 -4
- package/charts/directives/outside-click.directive.d.ts +0 -10
- package/charts/directives/screen-state.service.d.ts +0 -35
- package/charts/directives/tenant-full-date-range.directive.d.ts +0 -10
- package/charts/directives/window-resize.directive.d.ts +0 -12
- package/charts/funnel-chart/funnel-chart.component.d.ts +0 -154
- package/charts/index.d.ts +0 -8
- package/charts/line-chart/line-chart.component.d.ts +0 -43
- package/charts/pie-chart/pie-chart.component.d.ts +0 -40
- package/charts/shared/chart-base.d.ts +0 -37
- package/charts/shared/chart-skeleton.component.d.ts +0 -8
- package/charts/shared/d3-chart-axes.d.ts +0 -50
- package/charts/shared/d3-dots.d.ts +0 -10
- package/charts/shared/xy-chart.types.d.ts +0 -35
- package/charts/utils/color.utils.d.ts +0 -9
- package/charts/utils/index.d.ts +0 -3
- package/charts/utils/text.utils.d.ts +0 -8
- package/charts/utils/utils.d.ts +0 -2
- package/clr-addons.module.d.ts +0 -48
- package/clr-control-warning/if-warning.directive.d.ts +0 -19
- package/clr-control-warning/if-warning.module.d.ts +0 -8
- package/clr-control-warning/index.d.ts +0 -2
- package/collapse-expand-section/collapse-expand-section.d.ts +0 -14
- package/collapse-expand-section/collapse-expand-section.module.d.ts +0 -10
- package/collapse-expand-section/index.d.ts +0 -2
- package/content-panel/content-panel-container-content.d.ts +0 -5
- package/content-panel/content-panel-container-footer.d.ts +0 -5
- package/content-panel/content-panel-container.d.ts +0 -5
- package/content-panel/content-panel.d.ts +0 -14
- package/content-panel/content-panel.module.d.ts +0 -13
- package/content-panel/index.d.ts +0 -5
- package/control-enter-submit/clr-control-enter-submit.directive.d.ts +0 -16
- package/control-enter-submit/index.d.ts +0 -1
- package/copy-to-clipboard/copy-to-clipboard.d.ts +0 -31
- package/copy-to-clipboard/index.d.ts +0 -1
- package/data-list-validator/data-list-predefined-validator.directive.d.ts +0 -14
- package/data-list-validator/data-list-validator.module.d.ts +0 -7
- package/data-list-validator/data-list.validator.d.ts +0 -26
- package/data-list-validator/index.d.ts +0 -3
- package/datagrid/column-reorder/column-reorder.directive.d.ts +0 -32
- package/datagrid/column-reorder/datagrid-column-reorder.module.d.ts +0 -9
- package/datagrid/column-reorder/dynamic-cell-content.component.d.ts +0 -9
- package/datagrid/column-reorder/dynamic-column.d.ts +0 -10
- package/datagrid/column-reorder/index.d.ts +0 -4
- package/datagrid/datagrid-state-persistence/column-hidden-state-persistence.directive.d.ts +0 -21
- package/datagrid/datagrid-state-persistence/datagrid-field.directive.d.ts +0 -8
- package/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.d.ts +0 -15
- package/datagrid/datagrid-state-persistence/datagrid-state-persistence.module.d.ts +0 -9
- package/datagrid/datagrid-state-persistence/index.d.ts +0 -6
- package/datagrid/datagrid-state-persistence/state-persistence-key.directive.d.ts +0 -82
- package/datagrid/datagrid-state-persistence/state-persistence-options.interface.d.ts +0 -14
- package/datagrid/date-filter/date-filter.component.d.ts +0 -58
- package/datagrid/date-filter/date-filter.module.d.ts +0 -12
- package/datagrid/date-filter/index.d.ts +0 -2
- package/datagrid/date-filter/nested-property.d.ts +0 -10
- package/datagrid/enum-filter/enum-filter.component.d.ts +0 -44
- package/datagrid/enum-filter/enum-filter.module.d.ts +0 -10
- package/datagrid/enum-filter/index.d.ts +0 -2
- package/datagrid/index.d.ts +0 -4
- package/date-time-container/date-time-container.d.ts +0 -11
- package/date-time-container/date-time-module.d.ts +0 -11
- package/date-time-container/index.d.ts +0 -3
- package/date-time-container/time-input.d.ts +0 -5
- package/daterangepicker/daterange.constants.d.ts +0 -21
- package/daterangepicker/daterangepicker.module.d.ts +0 -18
- package/daterangepicker/directives/abstract-container.component.d.ts +0 -53
- package/daterangepicker/directives/datepicker/datepicker.component.d.ts +0 -66
- package/daterangepicker/directives/daterangepicker/daterangepicker.directive.d.ts +0 -133
- package/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.d.ts +0 -133
- package/daterangepicker/directives/if-daterange-error.directive.d.ts +0 -40
- package/daterangepicker/directives/timepicker/timepicker.component.d.ts +0 -33
- package/daterangepicker/index.d.ts +0 -16
- package/daterangepicker/interfaces/daterange-preset.interface.d.ts +0 -8
- package/daterangepicker/interfaces/daterange.interface.d.ts +0 -12
- package/daterangepicker/interfaces/timerange-preset.interface.d.ts +0 -8
- package/daterangepicker/interfaces/timerange.interface.d.ts +0 -13
- package/daterangepicker/models/day.model.d.ts +0 -80
- package/daterangepicker/models/popover-positions.model.d.ts +0 -20
- package/daterangepicker/models/time.model.d.ts +0 -65
- package/daterangepicker/providers/daterange-control-state.service.d.ts +0 -42
- package/daterangepicker/providers/daterange-parsing.service.d.ts +0 -77
- package/daterangepicker/providers/daterange.service.d.ts +0 -47
- package/daterangepicker/providers/opened-datepickers-tracker.service.d.ts +0 -20
- package/daterangepicker/validators/daterange-max.validator.d.ts +0 -32
- package/daterangepicker/validators/daterange-min.validator.d.ts +0 -32
- package/daterangepicker/validators/daterange-order.validator.d.ts +0 -30
- package/daterangepicker/validators/daterange-required.validator.d.ts +0 -29
- package/dot-pager/dot-pager.d.ts +0 -21
- package/dot-pager/dot-pager.module.d.ts +0 -10
- package/dot-pager/index.d.ts +0 -2
- package/dropdown/clr-dropdown-overflow.directive.d.ts +0 -26
- package/dropdown/clr-dropdown-overflow.module.d.ts +0 -7
- package/dropdown/index.d.ts +0 -2
- package/export-datagrid-button/export-datagrid-button.component.d.ts +0 -39
- package/export-datagrid-button/export-datagrid-button.module.d.ts +0 -7
- package/export-datagrid-button/export-datagrid.service.d.ts +0 -15
- package/export-datagrid-button/export-type.model.d.ts +0 -9
- package/export-datagrid-button/index.d.ts +0 -4
- package/fesm2022/clr-addons.mjs.map +0 -1
- package/flow-bar/flow-bar.d.ts +0 -32
- package/flow-bar/flow-bar.module.d.ts +0 -11
- package/flow-bar/index.d.ts +0 -2
- package/focus-first-invalid-field/focus-first-invalid-field.directive.d.ts +0 -7
- package/focus-first-invalid-field/index.d.ts +0 -1
- package/generic-quick-list/generic-quick-list.d.ts +0 -29
- package/generic-quick-list/generic-quick-list.module.d.ts +0 -9
- package/generic-quick-list/index.d.ts +0 -2
- package/history/history-model.interface.d.ts +0 -38
- package/history/history-pinned.d.ts +0 -27
- package/history/history.d.ts +0 -33
- package/history/history.http.impl.service.d.ts +0 -16
- package/history/history.http.service.d.ts +0 -9
- package/history/history.module.d.ts +0 -12
- package/history/history.provider.d.ts +0 -15
- package/history/history.service.d.ts +0 -27
- package/history/index.d.ts +0 -7
- package/icon-avatar/icon-avatar.d.ts +0 -14
- package/icon-avatar/icon-avatar.module.d.ts +0 -9
- package/icon-avatar/index.d.ts +0 -2
- package/icons/index.d.ts +0 -2
- package/icons/shapes.d.ts +0 -1088
- package/icons/svg-tag-generator.d.ts +0 -8
- package/image-gallery/image-carousel.d.ts +0 -36
- package/image-gallery/image-gallery.d.ts +0 -31
- package/image-gallery/image-gallery.module.d.ts +0 -10
- package/image-gallery/image-gallery.types.d.ts +0 -8
- package/image-gallery/index.d.ts +0 -3
- package/index.d.ts +0 -44
- package/keyboard-nav/clr-keyboard-nav-alt-mnemonic.directive.d.ts +0 -50
- package/keyboard-nav/clr-keyboard-nav-ctrl-arrow.directive.d.ts +0 -60
- package/keyboard-nav/index.d.ts +0 -2
- package/letter-avatar/index.d.ts +0 -2
- package/letter-avatar/letter-avatar.d.ts +0 -14
- package/letter-avatar/letter-avatar.module.d.ts +0 -9
- package/location-bar/index.d.ts +0 -5
- package/location-bar/location-bar-node/location-bar-node.component.d.ts +0 -59
- package/location-bar/location-bar-search/location-bar-search.component.d.ts +0 -23
- package/location-bar/location-bar.component.d.ts +0 -21
- package/location-bar/location-bar.model.d.ts +0 -54
- package/location-bar/location-bar.module.d.ts +0 -16
- package/location-bar/location-bar.provider.d.ts +0 -25
- package/location-bar/location-bar.search.model.d.ts +0 -16
- package/main-nav-group/index.d.ts +0 -3
- package/main-nav-group/main-nav-group-item.d.ts +0 -12
- package/main-nav-group/main-nav-group.d.ts +0 -30
- package/main-nav-group/main-nav-group.module.d.ts +0 -11
- package/multilingual/abstract-multilingual.d.ts +0 -31
- package/multilingual/index.d.ts +0 -5
- package/multilingual/multilingual-input/multilingual-input.d.ts +0 -8
- package/multilingual/multilingual-selector.d.ts +0 -10
- package/multilingual/multilingual-textarea/multilingual-textarea.d.ts +0 -9
- package/multilingual/multilingual-validators.d.ts +0 -48
- package/multilingual/multilingual.module.d.ts +0 -14
- package/notification/index.d.ts +0 -4
- package/notification/notification-ref.d.ts +0 -33
- package/notification/notification.d.ts +0 -34
- package/notification/notification.module.d.ts +0 -10
- package/notification/notification.service.d.ts +0 -27
- package/notification/scheduler-utils.d.ts +0 -10
- package/numericfield/index.d.ts +0 -3
- package/numericfield/numeric-field-validators.d.ts +0 -65
- package/numericfield/numeric-field.d.ts +0 -51
- package/numericfield/numeric-field.module.d.ts +0 -11
- package/paged-search-result-list/index.d.ts +0 -2
- package/paged-search-result-list/paged-search-result-list.d.ts +0 -46
- package/paged-search-result-list/paged-search-result-list.module.d.ts +0 -11
- package/pager/index.d.ts +0 -2
- package/pager/pager.d.ts +0 -43
- package/pager/pager.module.d.ts +0 -10
- package/progress-spinner/index.d.ts +0 -2
- package/progress-spinner/progress-spinner.d.ts +0 -19
- package/progress-spinner/progress-spinner.module.d.ts +0 -8
- package/quick-list/add-option.d.ts +0 -25
- package/quick-list/add-option.service.d.ts +0 -6
- package/quick-list/index.d.ts +0 -3
- package/quick-list/quick-list.d.ts +0 -30
- package/quick-list/quick-list.module.d.ts +0 -11
- package/readonly/index.d.ts +0 -2
- package/readonly/readonly.directive.d.ts +0 -37
- package/readonly/readonly.module.d.ts +0 -7
- package/searchfield/index.d.ts +0 -2
- package/searchfield/search-field.d.ts +0 -26
- package/searchfield/search-field.module.d.ts +0 -10
- package/signpost/index.d.ts +0 -2
- package/signpost/signpost.component.d.ts +0 -22
- package/signpost/signpost.module.d.ts +0 -9
- package/summary-area/index.d.ts +0 -7
- package/summary-area/summary-area/summary-area-state.service.d.ts +0 -15
- package/summary-area/summary-area/summary-area.d.ts +0 -75
- package/summary-area/summary-area/summary-area.model.d.ts +0 -19
- package/summary-area/summary-area-toggle/summary-area-toggle.d.ts +0 -15
- package/summary-area/summary-item/summary-item.d.ts +0 -59
- package/summary-area/summary-item/summary-item.model.d.ts +0 -19
- package/summary-area/summary-item-value/summary-item-value.d.ts +0 -65
- package/treetable/built-in/filter/treetable-string-filter.d.ts +0 -24
- package/treetable/enums/selection-type.d.ts +0 -9
- package/treetable/enums/sort-order.enum.d.ts +0 -5
- package/treetable/index.d.ts +0 -17
- package/treetable/interfaces/comparator.interface.d.ts +0 -3
- package/treetable/interfaces/filter-model.d.ts +0 -37
- package/treetable/interfaces/treetable-model.d.ts +0 -55
- package/treetable/interfaces/treetable-state-model.d.ts +0 -20
- package/treetable/providers/filters.d.ts +0 -29
- package/treetable/providers/index.d.ts +0 -2
- package/treetable/providers/sort.d.ts +0 -28
- package/treetable/providers/treetable-data-state.service.d.ts +0 -37
- package/treetable/providers/treetable-recursion.service.d.ts +0 -17
- package/treetable/renderer/cell-renderer.d.ts +0 -11
- package/treetable/renderer/header-renderer.d.ts +0 -18
- package/treetable/renderer/index.d.ts +0 -4
- package/treetable/renderer/main-renderer.d.ts +0 -22
- package/treetable/renderer/row-renderer.d.ts +0 -8
- package/treetable/treetable-action-overflow.d.ts +0 -14
- package/treetable/treetable-cell.d.ts +0 -5
- package/treetable/treetable-column.d.ts +0 -18
- package/treetable/treetable-filter.d.ts +0 -18
- package/treetable/treetable-items.d.ts +0 -25
- package/treetable/treetable-placeholder.d.ts +0 -5
- package/treetable/treetable-recursive-rows.d.ts +0 -12
- package/treetable/treetable-row-checkbox.d.ts +0 -10
- package/treetable/treetable-row.d.ts +0 -27
- package/treetable/treetable.d.ts +0 -27
- package/treetable/treetable.module.d.ts +0 -25
- package/treetable/util/treetable-filter-util.d.ts +0 -22
- package/treetable/util/treetable-state-util.d.ts +0 -10
- package/util/escape.util.d.ts +0 -2
- package/util/index.d.ts +0 -2
- package/util/numeric.format.util.d.ts +0 -2
- package/view-edit-section/index.d.ts +0 -2
- package/view-edit-section/view-edit-section.d.ts +0 -37
- package/view-edit-section/view-edit-section.module.d.ts +0 -10
- package/view-edit-section/view-edit-section.types.d.ts +0 -2
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, viewChild, computed, signal, Directive, ChangeDetectionStrategy, Component, Injectable, inject, output, Renderer2, DestroyRef, Inject, ElementRef, contentChild, NgModule } from '@angular/core';
|
|
2
|
+
import { input, viewChild, computed, signal, Directive, ChangeDetectionStrategy, Component, Injectable, inject, output, Renderer2, DestroyRef, DOCUMENT, Inject, ElementRef, contentChild, NgModule } from '@angular/core';
|
|
3
3
|
import { format, select, scaleBand, scaleLinear, max, axisBottom, axisLeft, group, sum, scalePoint, min, line, curveMonotoneX, area, axisRight, arc, pie, color } from 'd3';
|
|
4
4
|
import * as i1 from '@clr/angular';
|
|
5
|
-
import { ClrAlertModule, ClrDropdownModule,
|
|
6
|
-
import
|
|
5
|
+
import { ClrAlertModule, ClrDropdownModule, ClrIcon, ClrSignpostContent, ClrStartDateInput, ClrEndDateInput, ClrSignpostModule } from '@clr/angular';
|
|
6
|
+
import * as i3 from '@clr/angular/icon';
|
|
7
|
+
import { ClarityIcons, downloadIcon } from '@clr/angular/icon';
|
|
8
|
+
import * as i2 from '@clr/angular/popover/common';
|
|
7
9
|
import { NgxSkeletonLoaderComponent } from 'ngx-skeleton-loader';
|
|
8
10
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
11
|
import { ReplaySubject, skip } from 'rxjs';
|
|
10
12
|
import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
|
11
13
|
import * as i8 from '@angular/common';
|
|
12
|
-
import {
|
|
14
|
+
import { CommonModule, DecimalPipe } from '@angular/common';
|
|
13
15
|
|
|
14
16
|
/*
|
|
15
17
|
* Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
|
|
@@ -106,17 +108,17 @@ class ChartBase {
|
|
|
106
108
|
constructor() {
|
|
107
109
|
// ── Common Input ───────────────────────────────────────────────────────────
|
|
108
110
|
/** Whether the chart is in loading state (shows skeleton). */
|
|
109
|
-
this.loading = input(false);
|
|
111
|
+
this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
110
112
|
// ── View references ────────────────────────────────────────────────────────
|
|
111
113
|
/** Reference to the `<svg #chart>` element in the component template. */
|
|
112
|
-
this.chartRef = viewChild('chart');
|
|
114
|
+
this.chartRef = viewChild('chart', ...(ngDevMode ? [{ debugName: "chartRef" }] : /* istanbul ignore next */ []));
|
|
113
115
|
/** Reference to the `<div #container>` host element in the component template. */
|
|
114
|
-
this.containerRef = viewChild('container');
|
|
116
|
+
this.containerRef = viewChild('container', ...(ngDevMode ? [{ debugName: "containerRef" }] : /* istanbul ignore next */ []));
|
|
115
117
|
/** Exposes the raw SVG element for the chart-export button. */
|
|
116
|
-
this.svgElement = computed(() => this.chartRef()?.nativeElement);
|
|
118
|
+
this.svgElement = computed(() => this.chartRef()?.nativeElement, ...(ngDevMode ? [{ debugName: "svgElement" }] : /* istanbul ignore next */ []));
|
|
117
119
|
// ── Tooltip State ──────────────────────────────────────────────────────────
|
|
118
|
-
this.selectedItem = signal(undefined);
|
|
119
|
-
this.tooltipPosition = signal(undefined);
|
|
120
|
+
this.selectedItem = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedItem" }] : /* istanbul ignore next */ []));
|
|
121
|
+
this.tooltipPosition = signal(undefined, ...(ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []));
|
|
120
122
|
}
|
|
121
123
|
// ── Lifecycle ──────────────────────────────────────────────────────────────
|
|
122
124
|
/** Schedules the first render after the view is ready. */
|
|
@@ -139,20 +141,20 @@ class ChartBase {
|
|
|
139
141
|
this.tooltipPosition.set(undefined);
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
143
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
144
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
145
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.13", type: ChartBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "chartRef", first: true, predicate: ["chart"], descendants: true, isSignal: true }, { propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0 }); }
|
|
144
146
|
}
|
|
145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartBase, decorators: [{
|
|
146
148
|
type: Directive
|
|
147
|
-
}] });
|
|
149
|
+
}], propDecorators: { loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], chartRef: [{ type: i0.ViewChild, args: ['chart', { isSignal: true }] }], containerRef: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }] } });
|
|
148
150
|
|
|
149
151
|
class ChartAlertOverlayComponent {
|
|
150
152
|
constructor() {
|
|
151
|
-
this.alertMessage = input.required();
|
|
152
|
-
this.alertType = input('info');
|
|
153
|
+
this.alertMessage = input.required(...(ngDevMode ? [{ debugName: "alertMessage" }] : /* istanbul ignore next */ []));
|
|
154
|
+
this.alertType = input('info', ...(ngDevMode ? [{ debugName: "alertType" }] : /* istanbul ignore next */ []));
|
|
153
155
|
}
|
|
154
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
155
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
156
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartAlertOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
157
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ChartAlertOverlayComponent, isStandalone: true, selector: "cng-chart-alert-overlay", inputs: { alertMessage: { classPropertyName: "alertMessage", publicName: "alertMessage", isSignal: true, isRequired: true, transformFunction: null }, alertType: { classPropertyName: "alertType", publicName: "alertType", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
156
158
|
<clr-alert [clrAlertSizeSmall]="true" [clrAlertClosable]="false" [clrAlertType]="alertType()">
|
|
157
159
|
<clr-alert-item>
|
|
158
160
|
<span class="alert-text">
|
|
@@ -161,9 +163,9 @@ class ChartAlertOverlayComponent {
|
|
|
161
163
|
</clr-alert-item>
|
|
162
164
|
</clr-alert>
|
|
163
165
|
<div class="overlay"></div>
|
|
164
|
-
`, isInline: true, styles: [":host{position:absolute;top:0;left:0;right:0;pointer-events:none;z-index:1
|
|
166
|
+
`, isInline: true, styles: [":host{position:absolute;top:0;left:0;right:0;pointer-events:none;z-index:1}:host clr-alert{pointer-events:auto}:host clr-alert ::ng-deep .alert{margin-bottom:0}:host .overlay{height:2rem;background:linear-gradient(to bottom,#fff,#fff0)}\n"], dependencies: [{ kind: "ngmodule", type: ClrAlertModule }, { kind: "component", type: i1.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertLightweight", "clrAlertType", "clrAlertIcon", "clrAlertClosed"], outputs: ["clrAlertClosedChange"] }, { kind: "component", type: i1.ClrAlertItem, selector: "clr-alert-item" }, { kind: "directive", type: i1.ClrAlertText, selector: ".alert-text" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
165
167
|
}
|
|
166
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartAlertOverlayComponent, decorators: [{
|
|
167
169
|
type: Component,
|
|
168
170
|
args: [{ selector: 'cng-chart-alert-overlay', template: `
|
|
169
171
|
<clr-alert [clrAlertSizeSmall]="true" [clrAlertClosable]="false" [clrAlertType]="alertType()">
|
|
@@ -174,8 +176,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
174
176
|
</clr-alert-item>
|
|
175
177
|
</clr-alert>
|
|
176
178
|
<div class="overlay"></div>
|
|
177
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ClrAlertModule], styles: [":host{position:absolute;top:0;left:0;right:0;pointer-events:none;z-index:1
|
|
178
|
-
}] });
|
|
179
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ClrAlertModule], styles: [":host{position:absolute;top:0;left:0;right:0;pointer-events:none;z-index:1}:host clr-alert{pointer-events:auto}:host clr-alert ::ng-deep .alert{margin-bottom:0}:host .overlay{height:2rem;background:linear-gradient(to bottom,#fff,#fff0)}\n"] }]
|
|
180
|
+
}], propDecorators: { alertMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "alertMessage", required: true }] }], alertType: [{ type: i0.Input, args: [{ isSignal: true, alias: "alertType", required: false }] }] } });
|
|
179
181
|
|
|
180
182
|
// ── Legend layout constants (mirror chart-legend.component styles) ─────────────
|
|
181
183
|
const LEGEND_PADDING_TOP = 12;
|
|
@@ -371,10 +373,10 @@ class ChartExportService {
|
|
|
371
373
|
a.click();
|
|
372
374
|
setTimeout(() => URL.revokeObjectURL(url), 100);
|
|
373
375
|
}
|
|
374
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
375
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
376
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
377
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartExportService, providedIn: 'root' }); }
|
|
376
378
|
}
|
|
377
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartExportService, decorators: [{
|
|
378
380
|
type: Injectable,
|
|
379
381
|
args: [{ providedIn: 'root' }]
|
|
380
382
|
}] });
|
|
@@ -382,11 +384,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
382
384
|
ClarityIcons.addIcons(downloadIcon);
|
|
383
385
|
class ChartExportButtonComponent {
|
|
384
386
|
constructor() {
|
|
385
|
-
this.svgRef = input(undefined);
|
|
386
|
-
this.filename = input('chart');
|
|
387
|
-
this.buttonTitle = input('Export');
|
|
387
|
+
this.svgRef = input(undefined, ...(ngDevMode ? [{ debugName: "svgRef" }] : /* istanbul ignore next */ []));
|
|
388
|
+
this.filename = input('chart', ...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
|
|
389
|
+
this.buttonTitle = input('Export', ...(ngDevMode ? [{ debugName: "buttonTitle" }] : /* istanbul ignore next */ []));
|
|
388
390
|
/** Legend items to include below the chart in the exported file. */
|
|
389
|
-
this.legendItems = input(undefined);
|
|
391
|
+
this.legendItems = input(undefined, ...(ngDevMode ? [{ debugName: "legendItems" }] : /* istanbul ignore next */ []));
|
|
390
392
|
this.exportService = inject(ChartExportService);
|
|
391
393
|
}
|
|
392
394
|
export(format) {
|
|
@@ -403,8 +405,8 @@ class ChartExportButtonComponent {
|
|
|
403
405
|
break;
|
|
404
406
|
}
|
|
405
407
|
}
|
|
406
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
407
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
408
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartExportButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
409
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.13", type: ChartExportButtonComponent, isStandalone: true, selector: "cng-chart-export-button", inputs: { svgRef: { classPropertyName: "svgRef", publicName: "svgRef", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, buttonTitle: { classPropertyName: "buttonTitle", publicName: "buttonTitle", isSignal: true, isRequired: false, transformFunction: null }, legendItems: { classPropertyName: "legendItems", publicName: "legendItems", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
408
410
|
<clr-dropdown>
|
|
409
411
|
<button class="btn btn-sm btn-icon btn-link export-trigger" clrDropdownTrigger title="Export chart">
|
|
410
412
|
<cds-icon shape="download" size="16"></cds-icon>
|
|
@@ -415,9 +417,9 @@ class ChartExportButtonComponent {
|
|
|
415
417
|
<button clrDropdownItem (click)="export('png')">PNG</button>
|
|
416
418
|
</clr-dropdown-menu>
|
|
417
419
|
</clr-dropdown>
|
|
418
|
-
`, isInline: true, styles: [":host{position:absolute;top:15px;right:15px;z-index:10;opacity:1;pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: ClrDropdownModule }, { kind: "component", type: i1.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i1.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i1.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i1.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type:
|
|
420
|
+
`, isInline: true, styles: [":host{position:absolute;top:15px;right:15px;z-index:10;opacity:1;pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: ClrDropdownModule }, { kind: "component", type: i1.ClrDropdown, selector: "clr-dropdown", inputs: ["clrCloseMenuOnItemClick"] }, { kind: "component", type: i1.ClrDropdownMenu, selector: "clr-dropdown-menu", inputs: ["clrPosition"] }, { kind: "directive", type: i1.ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]" }, { kind: "directive", type: i1.ClrDropdownItem, selector: "[clrDropdownItem]", inputs: ["clrDisabled", "id"] }, { kind: "directive", type: i2.ClrIfOpen, selector: "[clrIfOpen]", inputs: ["clrIfOpen"], outputs: ["clrIfOpenChange"] }, { kind: "component", type: i3.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
419
421
|
}
|
|
420
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartExportButtonComponent, decorators: [{
|
|
421
423
|
type: Component,
|
|
422
424
|
args: [{ selector: 'cng-chart-export-button', template: `
|
|
423
425
|
<clr-dropdown>
|
|
@@ -430,16 +432,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
430
432
|
<button clrDropdownItem (click)="export('png')">PNG</button>
|
|
431
433
|
</clr-dropdown-menu>
|
|
432
434
|
</clr-dropdown>
|
|
433
|
-
`, imports: [ClrDropdownModule,
|
|
434
|
-
}] });
|
|
435
|
+
`, imports: [ClrDropdownModule, ClrIcon], changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:absolute;top:15px;right:15px;z-index:10;opacity:1;pointer-events:auto}\n"] }]
|
|
436
|
+
}], propDecorators: { svgRef: [{ type: i0.Input, args: [{ isSignal: true, alias: "svgRef", required: false }] }], filename: [{ type: i0.Input, args: [{ isSignal: true, alias: "filename", required: false }] }], buttonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonTitle", required: false }] }], legendItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "legendItems", required: false }] }] } });
|
|
435
437
|
|
|
436
438
|
class ChartLegendComponent {
|
|
437
439
|
constructor() {
|
|
438
|
-
this.items = input.required();
|
|
440
|
+
this.items = input.required(...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
439
441
|
this.toChartColor = toChartColor;
|
|
440
442
|
}
|
|
441
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
442
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
443
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
444
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChartLegendComponent, isStandalone: true, selector: "cng-chart-legend", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
443
445
|
<div class="chart-legend">
|
|
444
446
|
@for (item of items(); track item.label) {
|
|
445
447
|
<div class="legend-item">
|
|
@@ -448,9 +450,9 @@ class ChartLegendComponent {
|
|
|
448
450
|
</div>
|
|
449
451
|
}
|
|
450
452
|
</div>
|
|
451
|
-
`, isInline: true, styles: [":host{display:block}.chart-legend{display:flex;flex-wrap:wrap;gap:.25rem 1rem;padding:.5rem 0 .25rem;font-size:11px;color:var(--
|
|
453
|
+
`, isInline: true, styles: [":host{display:block}.chart-legend{display:flex;flex-wrap:wrap;gap:.25rem 1rem;padding:.5rem 0 .25rem;font-size:11px;color:var(--cds-global-color-construction-400, #666)}.legend-item{display:flex;align-items:center;gap:.35rem}.legend-color-square{width:10px;height:10px;border-radius:2px;flex-shrink:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
452
454
|
}
|
|
453
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
455
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartLegendComponent, decorators: [{
|
|
454
456
|
type: Component,
|
|
455
457
|
args: [{ selector: 'cng-chart-legend', template: `
|
|
456
458
|
<div class="chart-legend">
|
|
@@ -461,40 +463,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
461
463
|
</div>
|
|
462
464
|
}
|
|
463
465
|
</div>
|
|
464
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.chart-legend{display:flex;flex-wrap:wrap;gap:.25rem 1rem;padding:.5rem 0 .25rem;font-size:11px;color:var(--
|
|
465
|
-
}] });
|
|
466
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.chart-legend{display:flex;flex-wrap:wrap;gap:.25rem 1rem;padding:.5rem 0 .25rem;font-size:11px;color:var(--cds-global-color-construction-400, #666)}.legend-item{display:flex;align-items:center;gap:.35rem}.legend-color-square{width:10px;height:10px;border-radius:2px;flex-shrink:0}\n"] }]
|
|
467
|
+
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }] } });
|
|
466
468
|
|
|
467
469
|
class ChartSkeletonComponent {
|
|
468
470
|
constructor() {
|
|
469
|
-
this.skeletonType = input('loading');
|
|
470
|
-
this.orientation = input.required();
|
|
471
|
-
this.animationStyle = computed(() => (this.skeletonType() === 'loading' ? 'pulse' : undefined));
|
|
471
|
+
this.skeletonType = input('loading', ...(ngDevMode ? [{ debugName: "skeletonType" }] : /* istanbul ignore next */ []));
|
|
472
|
+
this.orientation = input.required(...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
473
|
+
this.animationStyle = computed(() => (this.skeletonType() === 'loading' ? 'pulse' : undefined), ...(ngDevMode ? [{ debugName: "animationStyle" }] : /* istanbul ignore next */ []));
|
|
472
474
|
}
|
|
473
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
474
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
475
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
476
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChartSkeletonComponent, isStandalone: true, selector: "cng-bar-chart-skeleton", inputs: { skeletonType: { classPropertyName: "skeletonType", publicName: "skeletonType", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"chart-skeleton\" [class.placeholder-skeleton]=\"skeletonType() === 'placeholder'\">\n <div\n class=\"skeleton-bars\"\n [class.horizontal]=\"orientation() === 'horizontal'\"\n [class.vertical]=\"orientation() === 'vertical'\"\n >\n @for (_item of [1, 2, 3, 4, 5, 6]; track $index) {\n <div class=\"skeleton-bar bar-{{ $index + 1 }}\">\n <ngx-skeleton-loader\n [appearance]=\"'circle'\"\n [count]=\"1\"\n [animation]=\"animationStyle()\"\n [theme]=\"{\n width: '100%',\n height: '100%',\n 'border-radius': 'var(--clr-base-border-radius-xxs)',\n }\"\n />\n </div>\n }\n </div>\n</div>\n", styles: [".chart-skeleton{width:100%;height:100%}.placeholder-skeleton ::ng-deep .skeleton-loader{cursor:default}.skeleton-bars{display:flex;gap:var(--clr-base-gap-l);width:100%;height:100%;padding:var(--cds-global-layout-space-xs) var(--cds-global-layout-space-xl)}.skeleton-bars.vertical{flex-direction:row;align-items:flex-end;justify-content:center}.skeleton-bars.vertical .skeleton-bar{width:var(--cds-global-layout-space-md)}.skeleton-bars.vertical .skeleton-bar.bar-1{height:60%}.skeleton-bars.vertical .skeleton-bar.bar-2{height:95%}.skeleton-bars.vertical .skeleton-bar.bar-3{height:40%}.skeleton-bars.vertical .skeleton-bar.bar-4{height:75%}.skeleton-bars.vertical .skeleton-bar.bar-5{height:50%}.skeleton-bars.vertical .skeleton-bar.bar-6{height:25%}.skeleton-bars.horizontal{flex-direction:column;justify-content:center}.skeleton-bars.horizontal .skeleton-bar{height:var(--cds-global-layout-space-md)}.skeleton-bars.horizontal .skeleton-bar.bar-1{width:60%}.skeleton-bars.horizontal .skeleton-bar.bar-2{width:95%}.skeleton-bars.horizontal .skeleton-bar.bar-3{width:40%}.skeleton-bars.horizontal .skeleton-bar.bar-4{width:75%}.skeleton-bars.horizontal .skeleton-bar.bar-5{width:50%}.skeleton-bars.horizontal .skeleton-bar.bar-6{width:25%}\n"], dependencies: [{ kind: "component", type: NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
475
477
|
}
|
|
476
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
478
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartSkeletonComponent, decorators: [{
|
|
477
479
|
type: Component,
|
|
478
480
|
args: [{ selector: 'cng-bar-chart-skeleton', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgxSkeletonLoaderComponent], template: "<div class=\"chart-skeleton\" [class.placeholder-skeleton]=\"skeletonType() === 'placeholder'\">\n <div\n class=\"skeleton-bars\"\n [class.horizontal]=\"orientation() === 'horizontal'\"\n [class.vertical]=\"orientation() === 'vertical'\"\n >\n @for (_item of [1, 2, 3, 4, 5, 6]; track $index) {\n <div class=\"skeleton-bar bar-{{ $index + 1 }}\">\n <ngx-skeleton-loader\n [appearance]=\"'circle'\"\n [count]=\"1\"\n [animation]=\"animationStyle()\"\n [theme]=\"{\n width: '100%',\n height: '100%',\n 'border-radius': 'var(--clr-base-border-radius-xxs)',\n }\"\n />\n </div>\n }\n </div>\n</div>\n", styles: [".chart-skeleton{width:100%;height:100%}.placeholder-skeleton ::ng-deep .skeleton-loader{cursor:default}.skeleton-bars{display:flex;gap:var(--clr-base-gap-l);width:100%;height:100%;padding:var(--cds-global-layout-space-xs) var(--cds-global-layout-space-xl)}.skeleton-bars.vertical{flex-direction:row;align-items:flex-end;justify-content:center}.skeleton-bars.vertical .skeleton-bar{width:var(--cds-global-layout-space-md)}.skeleton-bars.vertical .skeleton-bar.bar-1{height:60%}.skeleton-bars.vertical .skeleton-bar.bar-2{height:95%}.skeleton-bars.vertical .skeleton-bar.bar-3{height:40%}.skeleton-bars.vertical .skeleton-bar.bar-4{height:75%}.skeleton-bars.vertical .skeleton-bar.bar-5{height:50%}.skeleton-bars.vertical .skeleton-bar.bar-6{height:25%}.skeleton-bars.horizontal{flex-direction:column;justify-content:center}.skeleton-bars.horizontal .skeleton-bar{height:var(--cds-global-layout-space-md)}.skeleton-bars.horizontal .skeleton-bar.bar-1{width:60%}.skeleton-bars.horizontal .skeleton-bar.bar-2{width:95%}.skeleton-bars.horizontal .skeleton-bar.bar-3{width:40%}.skeleton-bars.horizontal .skeleton-bar.bar-4{width:75%}.skeleton-bars.horizontal .skeleton-bar.bar-5{width:50%}.skeleton-bars.horizontal .skeleton-bar.bar-6{width:25%}\n"] }]
|
|
479
|
-
}] });
|
|
481
|
+
}], propDecorators: { skeletonType: [{ type: i0.Input, args: [{ isSignal: true, alias: "skeletonType", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: true }] }] } });
|
|
480
482
|
|
|
481
483
|
class ChartTooltipComponent {
|
|
482
484
|
constructor() {
|
|
483
|
-
this.tooltipPosition = input.required();
|
|
484
|
-
this.tooltipOrientation = input('top');
|
|
485
|
-
this.squareColor = input.required();
|
|
486
|
-
this.tooltipClickable = input(true);
|
|
485
|
+
this.tooltipPosition = input.required(...(ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []));
|
|
486
|
+
this.tooltipOrientation = input('top', ...(ngDevMode ? [{ debugName: "tooltipOrientation" }] : /* istanbul ignore next */ []));
|
|
487
|
+
this.squareColor = input.required(...(ngDevMode ? [{ debugName: "squareColor" }] : /* istanbul ignore next */ []));
|
|
488
|
+
this.tooltipClickable = input(true, ...(ngDevMode ? [{ debugName: "tooltipClickable" }] : /* istanbul ignore next */ []));
|
|
487
489
|
this.tooltipClosed = output();
|
|
488
490
|
this.tooltipHeaderClicked = output();
|
|
489
491
|
this.toChartColor = toChartColor;
|
|
490
492
|
}
|
|
491
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
492
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
493
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
494
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChartTooltipComponent, isStandalone: true, selector: "cng-chart-tooltip", inputs: { tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: true, transformFunction: null }, tooltipOrientation: { classPropertyName: "tooltipOrientation", publicName: "tooltipOrientation", isSignal: true, isRequired: false, transformFunction: null }, squareColor: { classPropertyName: "squareColor", publicName: "squareColor", isSignal: true, isRequired: true, transformFunction: null }, tooltipClickable: { classPropertyName: "tooltipClickable", publicName: "tooltipClickable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tooltipClosed: "tooltipClosed", tooltipHeaderClicked: "tooltipHeaderClicked" }, ngImport: i0, template: "<div\n class=\"tooltip-container\"\n [class.orientation-bottom]=\"tooltipOrientation() === 'bottom'\"\n (click)=\"$event.stopPropagation()\"\n [style.left.px]=\"tooltipPosition().x\"\n [style.top.px]=\"tooltipPosition().y\"\n>\n <div class=\"tooltip-header\">\n <div class=\"color-label-wrapper\">\n @if (squareColor()) {\n <div class=\"color-square\" [style.background-color]=\"toChartColor(squareColor())\"></div>\n }\n <h5\n [class.has-more-info]=\"tooltipClickable()\"\n (click)=\"$event.stopPropagation(); tooltipClickable() && tooltipHeaderClicked.emit()\"\n >\n <ng-content select=\"cng-title\" />\n </h5>\n </div>\n <cds-icon shape=\"times\" class=\"tooltip-close-btn\" (click)=\"$event.stopPropagation(); tooltipClosed.emit()\" />\n </div>\n <div class=\"tooltip-content\">\n <ng-content />\n </div>\n <hr />\n <div class=\"tooltip-footer\"><ng-content select=\"cng-footer\" /></div>\n</div>\n", styles: [".tooltip-container{position:absolute;background:var(--cds-global-color-gray-0, #fff);border:1px solid var(--cds-global-color-gray-400, #ccc);border-radius:4px;box-shadow:0 2px 8px #00000026;padding:12px 16px;z-index:1000;min-width:150px;transform:translate(-50%,-100%) translateY(-10px)}.tooltip-container.orientation-bottom{transform:translate(-50%) translateY(10px)}.tooltip-header{display:flex;flex-direction:row;justify-content:space-between;gap:8px}.tooltip-header h5{margin:0;font-size:14px;font-weight:600;color:var(--cds-global-color-gray-1000, #000);flex-grow:1;max-width:200px}.tooltip-close-btn{cursor:pointer;color:var(--clr-close-color)}.tooltip-close-btn:hover,.tooltip-close-btn:focus{color:var(--clr-close-color-hover)}.color-label-wrapper{display:flex;flex-direction:row;gap:8px}.tooltip-content{font-size:12px;color:var(--cds-global-color-gray-700, #565656)}hr:has(+.tooltip-footer:empty){display:none}hr{margin:6px -16px}\n"], dependencies: [{ kind: "component", type: ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
493
495
|
}
|
|
494
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
496
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChartTooltipComponent, decorators: [{
|
|
495
497
|
type: Component,
|
|
496
|
-
args: [{ selector: 'cng-chart-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
497
|
-
}] });
|
|
498
|
+
args: [{ selector: 'cng-chart-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ClrIcon], template: "<div\n class=\"tooltip-container\"\n [class.orientation-bottom]=\"tooltipOrientation() === 'bottom'\"\n (click)=\"$event.stopPropagation()\"\n [style.left.px]=\"tooltipPosition().x\"\n [style.top.px]=\"tooltipPosition().y\"\n>\n <div class=\"tooltip-header\">\n <div class=\"color-label-wrapper\">\n @if (squareColor()) {\n <div class=\"color-square\" [style.background-color]=\"toChartColor(squareColor())\"></div>\n }\n <h5\n [class.has-more-info]=\"tooltipClickable()\"\n (click)=\"$event.stopPropagation(); tooltipClickable() && tooltipHeaderClicked.emit()\"\n >\n <ng-content select=\"cng-title\" />\n </h5>\n </div>\n <cds-icon shape=\"times\" class=\"tooltip-close-btn\" (click)=\"$event.stopPropagation(); tooltipClosed.emit()\" />\n </div>\n <div class=\"tooltip-content\">\n <ng-content />\n </div>\n <hr />\n <div class=\"tooltip-footer\"><ng-content select=\"cng-footer\" /></div>\n</div>\n", styles: [".tooltip-container{position:absolute;background:var(--cds-global-color-gray-0, #fff);border:1px solid var(--cds-global-color-gray-400, #ccc);border-radius:4px;box-shadow:0 2px 8px #00000026;padding:12px 16px;z-index:1000;min-width:150px;transform:translate(-50%,-100%) translateY(-10px)}.tooltip-container.orientation-bottom{transform:translate(-50%) translateY(10px)}.tooltip-header{display:flex;flex-direction:row;justify-content:space-between;gap:8px}.tooltip-header h5{margin:0;font-size:14px;font-weight:600;color:var(--cds-global-color-gray-1000, #000);flex-grow:1;max-width:200px}.tooltip-close-btn{cursor:pointer;color:var(--clr-close-color)}.tooltip-close-btn:hover,.tooltip-close-btn:focus{color:var(--clr-close-color-hover)}.color-label-wrapper{display:flex;flex-direction:row;gap:8px}.tooltip-content{font-size:12px;color:var(--cds-global-color-gray-700, #565656)}hr:has(+.tooltip-footer:empty){display:none}hr{margin:6px -16px}\n"] }]
|
|
499
|
+
}], propDecorators: { tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPosition", required: true }] }], tooltipOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipOrientation", required: false }] }], squareColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "squareColor", required: true }] }], tooltipClickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipClickable", required: false }] }], tooltipClosed: [{ type: i0.Output, args: ["tooltipClosed"] }], tooltipHeaderClicked: [{ type: i0.Output, args: ["tooltipHeaderClicked"] }] } });
|
|
498
500
|
|
|
499
501
|
// Clarity actually has an "outside-click" directive, but they don't export it 🤷
|
|
500
502
|
class OutsideClickDirective {
|
|
@@ -507,15 +509,15 @@ class OutsideClickDirective {
|
|
|
507
509
|
const listener = this.renderer.listen('document', 'click', () => this.outsideClick.emit());
|
|
508
510
|
this.destroyRef.onDestroy(listener);
|
|
509
511
|
}
|
|
510
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
511
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
512
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: OutsideClickDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
513
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: OutsideClickDirective, isStandalone: true, selector: "[cngOutsideClick]", outputs: { outsideClick: "cngOutsideClick" }, ngImport: i0 }); }
|
|
512
514
|
}
|
|
513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
515
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: OutsideClickDirective, decorators: [{
|
|
514
516
|
type: Directive,
|
|
515
517
|
args: [{
|
|
516
518
|
selector: '[cngOutsideClick]',
|
|
517
519
|
}]
|
|
518
|
-
}] });
|
|
520
|
+
}], propDecorators: { outsideClick: [{ type: i0.Output, args: ["cngOutsideClick"] }] } });
|
|
519
521
|
|
|
520
522
|
/**
|
|
521
523
|
* Enum for the Screen size in pixels, defined by clarity here https://vmware.github.io/clarity/documentation/v0.12/grid
|
|
@@ -586,10 +588,10 @@ class ScreenStateService {
|
|
|
586
588
|
this.isUserAgentMobile = MOBILE_USERAGENT_REGEX.test(this._document.defaultView.navigator.userAgent);
|
|
587
589
|
}
|
|
588
590
|
}
|
|
589
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
590
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
591
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ScreenStateService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
592
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ScreenStateService, providedIn: 'root' }); }
|
|
591
593
|
}
|
|
592
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
594
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ScreenStateService, decorators: [{
|
|
593
595
|
type: Injectable,
|
|
594
596
|
args: [{ providedIn: 'root' }]
|
|
595
597
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
@@ -599,8 +601,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
599
601
|
|
|
600
602
|
class WindowResizeDirective {
|
|
601
603
|
constructor() {
|
|
602
|
-
this.debounce = input(250);
|
|
603
|
-
this.includeFirst = input(false);
|
|
604
|
+
this.debounce = input(250, ...(ngDevMode ? [{ debugName: "debounce" }] : /* istanbul ignore next */ []));
|
|
605
|
+
this.includeFirst = input(false, ...(ngDevMode ? [{ debugName: "includeFirst" }] : /* istanbul ignore next */ []));
|
|
604
606
|
this.windowResize = output({ alias: 'cngWindowResize' });
|
|
605
607
|
this.screenStateService = inject(ScreenStateService);
|
|
606
608
|
this.destroyRef = inject(DestroyRef);
|
|
@@ -612,51 +614,51 @@ class WindowResizeDirective {
|
|
|
612
614
|
.pipe(takeUntilDestroyed(this.destroyRef), skip(skipCount), debounceTime(this.debounce()))
|
|
613
615
|
.subscribe(width => this.windowResize.emit(width));
|
|
614
616
|
}
|
|
615
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
616
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
617
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: WindowResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
618
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.13", type: WindowResizeDirective, isStandalone: true, selector: "[cngWindowResize]", inputs: { debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null }, includeFirst: { classPropertyName: "includeFirst", publicName: "includeFirst", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { windowResize: "cngWindowResize" }, ngImport: i0 }); }
|
|
617
619
|
}
|
|
618
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
620
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: WindowResizeDirective, decorators: [{
|
|
619
621
|
type: Directive,
|
|
620
622
|
args: [{
|
|
621
623
|
selector: '[cngWindowResize]',
|
|
622
624
|
}]
|
|
623
|
-
}] });
|
|
625
|
+
}], propDecorators: { debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], includeFirst: [{ type: i0.Input, args: [{ isSignal: true, alias: "includeFirst", required: false }] }], windowResize: [{ type: i0.Output, args: ["cngWindowResize"] }] } });
|
|
624
626
|
|
|
625
627
|
class BarChartComponent extends ChartBase {
|
|
626
628
|
static { this.HORIZONTAL_BAR_MIN_HEIGHT_PX = 25; }
|
|
627
629
|
constructor() {
|
|
628
630
|
super();
|
|
629
|
-
this.data = input.required();
|
|
630
|
-
this.stacks = input(undefined);
|
|
631
|
-
this.orientation = input.required();
|
|
632
|
-
this.tooltipOrientation = input('top');
|
|
633
|
-
this.barSizePx = input(15);
|
|
634
|
-
this.barAreaSizePx = input(40);
|
|
635
|
-
this.tooltipPercentOfTotal = input('of total');
|
|
636
|
-
this.tooltipPercentOf = input('of');
|
|
637
|
-
this.noItemsMessage = input(NO_ITEMS_MESSAGE);
|
|
638
|
-
this.tooManyItemsMessage = input(TOO_MANY_ITEMS_MESSAGE);
|
|
639
|
-
this.tooManyItemsGroupedMessage = input(TOO_MANY_ITEMS_GROUPED_MESSAGE);
|
|
640
|
-
this.showLegend = input(true);
|
|
641
|
-
this.showExportButton = input(false);
|
|
642
|
-
this.exportButtonTitle = input('Export');
|
|
643
|
-
this.exportFilename = input('bar-chart');
|
|
631
|
+
this.data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
632
|
+
this.stacks = input(undefined, ...(ngDevMode ? [{ debugName: "stacks" }] : /* istanbul ignore next */ []));
|
|
633
|
+
this.orientation = input.required(...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
634
|
+
this.tooltipOrientation = input('top', ...(ngDevMode ? [{ debugName: "tooltipOrientation" }] : /* istanbul ignore next */ []));
|
|
635
|
+
this.barSizePx = input(15, ...(ngDevMode ? [{ debugName: "barSizePx" }] : /* istanbul ignore next */ []));
|
|
636
|
+
this.barAreaSizePx = input(40, ...(ngDevMode ? [{ debugName: "barAreaSizePx" }] : /* istanbul ignore next */ []));
|
|
637
|
+
this.tooltipPercentOfTotal = input('of total', ...(ngDevMode ? [{ debugName: "tooltipPercentOfTotal" }] : /* istanbul ignore next */ []));
|
|
638
|
+
this.tooltipPercentOf = input('of', ...(ngDevMode ? [{ debugName: "tooltipPercentOf" }] : /* istanbul ignore next */ []));
|
|
639
|
+
this.noItemsMessage = input(NO_ITEMS_MESSAGE, ...(ngDevMode ? [{ debugName: "noItemsMessage" }] : /* istanbul ignore next */ []));
|
|
640
|
+
this.tooManyItemsMessage = input(TOO_MANY_ITEMS_MESSAGE, ...(ngDevMode ? [{ debugName: "tooManyItemsMessage" }] : /* istanbul ignore next */ []));
|
|
641
|
+
this.tooManyItemsGroupedMessage = input(TOO_MANY_ITEMS_GROUPED_MESSAGE, ...(ngDevMode ? [{ debugName: "tooManyItemsGroupedMessage" }] : /* istanbul ignore next */ []));
|
|
642
|
+
this.showLegend = input(true, ...(ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []));
|
|
643
|
+
this.showExportButton = input(false, ...(ngDevMode ? [{ debugName: "showExportButton" }] : /* istanbul ignore next */ []));
|
|
644
|
+
this.exportButtonTitle = input('Export', ...(ngDevMode ? [{ debugName: "exportButtonTitle" }] : /* istanbul ignore next */ []));
|
|
645
|
+
this.exportFilename = input('bar-chart', ...(ngDevMode ? [{ debugName: "exportFilename" }] : /* istanbul ignore next */ []));
|
|
644
646
|
/** Optional label rendered below the X axis. */
|
|
645
|
-
this.xAxisLabel = input('');
|
|
647
|
+
this.xAxisLabel = input('', ...(ngDevMode ? [{ debugName: "xAxisLabel" }] : /* istanbul ignore next */ []));
|
|
646
648
|
/** Optional label rendered rotated to the left of the Y axis. */
|
|
647
|
-
this.yAxisLabel = input('');
|
|
649
|
+
this.yAxisLabel = input('', ...(ngDevMode ? [{ debugName: "yAxisLabel" }] : /* istanbul ignore next */ []));
|
|
648
650
|
this.valueClicked = output();
|
|
649
651
|
this.textRenderer = new TextRenderer();
|
|
650
652
|
this.MARGIN = { top: 10, right: 20, bottom: 30, left: 65 };
|
|
651
653
|
this.toChartColor = toChartColor;
|
|
652
|
-
this.total = computed(() => this.data().reduce((acc, v) => acc + v.value, 0));
|
|
654
|
+
this.total = computed(() => this.data().reduce((acc, v) => acc + v.value, 0), ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
653
655
|
this.totalByStack = computed(() => {
|
|
654
656
|
const totals = {};
|
|
655
657
|
for (const d of this.slicedDataPoints()) {
|
|
656
658
|
totals[d.stackKey] = (totals[d.stackKey] ?? 0) + d.value;
|
|
657
659
|
}
|
|
658
660
|
return totals;
|
|
659
|
-
});
|
|
661
|
+
}, ...(ngDevMode ? [{ debugName: "totalByStack" }] : /* istanbul ignore next */ []));
|
|
660
662
|
this.keysByStack = computed(() => {
|
|
661
663
|
const keys = {};
|
|
662
664
|
for (const d of this.slicedDataPoints()) {
|
|
@@ -666,14 +668,14 @@ class BarChartComponent extends ChartBase {
|
|
|
666
668
|
keys[d.stackKey].push(d.key);
|
|
667
669
|
}
|
|
668
670
|
return keys;
|
|
669
|
-
});
|
|
671
|
+
}, ...(ngDevMode ? [{ debugName: "keysByStack" }] : /* istanbul ignore next */ []));
|
|
670
672
|
// Count the total amount of bars by either the stacKey (if stacked) or the key (if not stacked)
|
|
671
673
|
this.totalBarCount = computed(() => new Set(this.data()
|
|
672
674
|
.filter(d => d.value > 0)
|
|
673
|
-
.map(d => d.stackKey ?? d.key)).size);
|
|
675
|
+
.map(d => d.stackKey ?? d.key)).size, ...(ngDevMode ? [{ debugName: "totalBarCount" }] : /* istanbul ignore next */ []));
|
|
674
676
|
this.showingBarCount = computed(() => new Set(this.slicedDataPoints()
|
|
675
677
|
.filter(d => d.value > 0)
|
|
676
|
-
.map(d => d.stackKey)).size);
|
|
678
|
+
.map(d => d.stackKey)).size, ...(ngDevMode ? [{ debugName: "showingBarCount" }] : /* istanbul ignore next */ []));
|
|
677
679
|
this.alertMessageAndType = computed(() => {
|
|
678
680
|
if (this.loading()) {
|
|
679
681
|
return undefined;
|
|
@@ -688,7 +690,7 @@ class BarChartComponent extends ChartBase {
|
|
|
688
690
|
];
|
|
689
691
|
}
|
|
690
692
|
return undefined;
|
|
691
|
-
});
|
|
693
|
+
}, ...(ngDevMode ? [{ debugName: "alertMessageAndType" }] : /* istanbul ignore next */ []));
|
|
692
694
|
this.legendItems = computed(() => {
|
|
693
695
|
if (!this.showLegend() || !this.data()?.length) {
|
|
694
696
|
return [];
|
|
@@ -708,7 +710,7 @@ class BarChartComponent extends ChartBase {
|
|
|
708
710
|
}
|
|
709
711
|
// Non-stacked: one entry per bar
|
|
710
712
|
return this.data().map(item => ({ label: item.fullLabel ?? item.label, color: item.color }));
|
|
711
|
-
});
|
|
713
|
+
}, ...(ngDevMode ? [{ debugName: "legendItems" }] : /* istanbul ignore next */ []));
|
|
712
714
|
/** Computed values used by the tooltip to avoid inline logic in the template. */
|
|
713
715
|
this.tooltipKey = computed(() => {
|
|
714
716
|
const item = this.selectedItem();
|
|
@@ -716,21 +718,21 @@ class BarChartComponent extends ChartBase {
|
|
|
716
718
|
return undefined;
|
|
717
719
|
}
|
|
718
720
|
return this.stacks()?.length ? this.keysByStack()[item.stackKey] ?? [] : [item.key];
|
|
719
|
-
});
|
|
721
|
+
}, ...(ngDevMode ? [{ debugName: "tooltipKey" }] : /* istanbul ignore next */ []));
|
|
720
722
|
this.tooltipLabel = computed(() => {
|
|
721
723
|
const item = this.selectedItem();
|
|
722
724
|
if (!item) {
|
|
723
725
|
return undefined;
|
|
724
726
|
}
|
|
725
727
|
return this.stacks()?.find(stack => stack.stackKey === item.stackKey)?.label ?? item.fullLabel ?? item.label;
|
|
726
|
-
});
|
|
728
|
+
}, ...(ngDevMode ? [{ debugName: "tooltipLabel" }] : /* istanbul ignore next */ []));
|
|
727
729
|
this.tooltipValue = computed(() => {
|
|
728
730
|
const item = this.selectedItem();
|
|
729
731
|
if (!item) {
|
|
730
732
|
return undefined;
|
|
731
733
|
}
|
|
732
734
|
return this.stacks()?.length ? this.totalByStack()[item.stackKey] ?? 0 : item.value;
|
|
733
|
-
});
|
|
735
|
+
}, ...(ngDevMode ? [{ debugName: "tooltipValue" }] : /* istanbul ignore next */ []));
|
|
734
736
|
/** Slices belonging to the currently selected stack – used by the tooltip @for loop. */
|
|
735
737
|
this.selectedStackSlices = computed(() => {
|
|
736
738
|
const item = this.selectedItem();
|
|
@@ -738,9 +740,9 @@ class BarChartComponent extends ChartBase {
|
|
|
738
740
|
return [];
|
|
739
741
|
}
|
|
740
742
|
return this.slicedDataPoints().filter(d => d.stackKey === item.stackKey);
|
|
741
|
-
});
|
|
742
|
-
this.maxAmountOfItems = signal(undefined);
|
|
743
|
-
this.slicedDataPoints = signal([]);
|
|
743
|
+
}, ...(ngDevMode ? [{ debugName: "selectedStackSlices" }] : /* istanbul ignore next */ []));
|
|
744
|
+
this.maxAmountOfItems = signal(undefined, ...(ngDevMode ? [{ debugName: "maxAmountOfItems" }] : /* istanbul ignore next */ []));
|
|
745
|
+
this.slicedDataPoints = signal([], ...(ngDevMode ? [{ debugName: "slicedDataPoints" }] : /* istanbul ignore next */ []));
|
|
744
746
|
this.barSelection = null;
|
|
745
747
|
this.labelSelection = null;
|
|
746
748
|
}
|
|
@@ -901,7 +903,7 @@ class BarChartComponent extends ChartBase {
|
|
|
901
903
|
.call(this.addBarClickHandler.bind(this));
|
|
902
904
|
}
|
|
903
905
|
addTextCommonInfo(g) {
|
|
904
|
-
g.style('font-size', '11px').style('fill', 'var(--
|
|
906
|
+
g.style('font-size', '11px').style('fill', 'var(--cds-global-color-construction-400, #666)');
|
|
905
907
|
}
|
|
906
908
|
addTextHoverHandlers(g) {
|
|
907
909
|
g.on('mouseover', (_e, d) => this.setHoverStylesByStackKey(d.stackKey, undefined, true)) //
|
|
@@ -956,7 +958,7 @@ class BarChartComponent extends ChartBase {
|
|
|
956
958
|
});
|
|
957
959
|
}
|
|
958
960
|
styleGridLines(g) {
|
|
959
|
-
g.selectAll('.tick line').style('stroke', 'var(--
|
|
961
|
+
g.selectAll('.tick line').style('stroke', 'var(--cds-global-color-gray-200, #e8e8e8)');
|
|
960
962
|
}
|
|
961
963
|
addVerticalBarRectangle(x, y, extraSize = 0) {
|
|
962
964
|
return this.barSelection
|
|
@@ -991,7 +993,7 @@ class BarChartComponent extends ChartBase {
|
|
|
991
993
|
.append('text')
|
|
992
994
|
.attr('text-anchor', 'middle')
|
|
993
995
|
.style('font-size', '12px')
|
|
994
|
-
.style('fill', 'var(--
|
|
996
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
995
997
|
.text(text)
|
|
996
998
|
.attr('x', x)
|
|
997
999
|
.attr('y', y);
|
|
@@ -1034,13 +1036,13 @@ class BarChartComponent extends ChartBase {
|
|
|
1034
1036
|
}
|
|
1035
1037
|
return Math.floor(height / BarChartComponent.HORIZONTAL_BAR_MIN_HEIGHT_PX);
|
|
1036
1038
|
}
|
|
1037
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1038
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1039
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BarChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1040
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: BarChartComponent, isStandalone: false, selector: "clr-bar-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, stacks: { classPropertyName: "stacks", publicName: "stacks", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: true, transformFunction: null }, tooltipOrientation: { classPropertyName: "tooltipOrientation", publicName: "tooltipOrientation", isSignal: true, isRequired: false, transformFunction: null }, barSizePx: { classPropertyName: "barSizePx", publicName: "barSizePx", isSignal: true, isRequired: false, transformFunction: null }, barAreaSizePx: { classPropertyName: "barAreaSizePx", publicName: "barAreaSizePx", isSignal: true, isRequired: false, transformFunction: null }, tooltipPercentOfTotal: { classPropertyName: "tooltipPercentOfTotal", publicName: "tooltipPercentOfTotal", isSignal: true, isRequired: false, transformFunction: null }, tooltipPercentOf: { classPropertyName: "tooltipPercentOf", publicName: "tooltipPercentOf", isSignal: true, isRequired: false, transformFunction: null }, noItemsMessage: { classPropertyName: "noItemsMessage", publicName: "noItemsMessage", isSignal: true, isRequired: false, transformFunction: null }, tooManyItemsMessage: { classPropertyName: "tooManyItemsMessage", publicName: "tooManyItemsMessage", isSignal: true, isRequired: false, transformFunction: null }, tooManyItemsGroupedMessage: { classPropertyName: "tooManyItemsGroupedMessage", publicName: "tooManyItemsGroupedMessage", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, xAxisLabel: { classPropertyName: "xAxisLabel", publicName: "xAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yAxisLabel: { classPropertyName: "yAxisLabel", publicName: "yAxisLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !data()?.length\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"!stacks() ? selectedItem()?.color : undefined\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"valueClicked.emit({ key: tooltipKey(), label: tooltipLabel(), value: tooltipValue() })\"\n >\n <ng-container ngProjectAs=\"cng-title\"> ({{ tooltipValue() }}) {{ tooltipLabel() }}</ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * tooltipValue()) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n\n @if (stacks()) { @for (slice of selectedStackSlices(); track slice.key) {\n <div class=\"mt-0-5 d-flex\">\n <div class=\"color-square mr-0-5\" [style.background-color]=\"toChartColor(slice.color)\"></div>\n <strong>{{ slice.fullLabel || slice.label }}: </strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n key: [slice.key],\n label: slice.fullLabel || slice.label,\n value: slice.value,\n })\n \"\n >\n {{ slice.value }}\n </span>\n </div>\n <p class=\"mt-0-25 percentage-info\">\n {{ (100 * slice.value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n {{ slice.percentageOfStack | number : '1.0-2' }}% {{ tooltipPercentOf() }} \"{{ tooltipLabel() }}\"\n </p>\n } }\n </cng-chart-tooltip>\n } @if (loading() || !data()?.length) {\n <cng-bar-chart-skeleton [orientation]=\"orientation()\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && data()?.length) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.percentage-info{margin-left:15px}\n"], dependencies: [{ kind: "component", type: ChartAlertOverlayComponent, selector: "cng-chart-alert-overlay", inputs: ["alertMessage", "alertType"] }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartLegendComponent, selector: "cng-chart-legend", inputs: ["items"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1039
1041
|
}
|
|
1040
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1042
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: BarChartComponent, decorators: [{
|
|
1041
1043
|
type: Component,
|
|
1042
1044
|
args: [{ selector: 'clr-bar-chart', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !data()?.length\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"!stacks() ? selectedItem()?.color : undefined\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"valueClicked.emit({ key: tooltipKey(), label: tooltipLabel(), value: tooltipValue() })\"\n >\n <ng-container ngProjectAs=\"cng-title\"> ({{ tooltipValue() }}) {{ tooltipLabel() }}</ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * tooltipValue()) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n\n @if (stacks()) { @for (slice of selectedStackSlices(); track slice.key) {\n <div class=\"mt-0-5 d-flex\">\n <div class=\"color-square mr-0-5\" [style.background-color]=\"toChartColor(slice.color)\"></div>\n <strong>{{ slice.fullLabel || slice.label }}: </strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n key: [slice.key],\n label: slice.fullLabel || slice.label,\n value: slice.value,\n })\n \"\n >\n {{ slice.value }}\n </span>\n </div>\n <p class=\"mt-0-25 percentage-info\">\n {{ (100 * slice.value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n {{ slice.percentageOfStack | number : '1.0-2' }}% {{ tooltipPercentOf() }} \"{{ tooltipLabel() }}\"\n </p>\n } }\n </cng-chart-tooltip>\n } @if (loading() || !data()?.length) {\n <cng-bar-chart-skeleton [orientation]=\"orientation()\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && data()?.length) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.percentage-info{margin-left:15px}\n"] }]
|
|
1043
|
-
}], ctorParameters: () => [] });
|
|
1045
|
+
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], stacks: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacks", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: true }] }], tooltipOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipOrientation", required: false }] }], barSizePx: [{ type: i0.Input, args: [{ isSignal: true, alias: "barSizePx", required: false }] }], barAreaSizePx: [{ type: i0.Input, args: [{ isSignal: true, alias: "barAreaSizePx", required: false }] }], tooltipPercentOfTotal: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPercentOfTotal", required: false }] }], tooltipPercentOf: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPercentOf", required: false }] }], noItemsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noItemsMessage", required: false }] }], tooManyItemsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooManyItemsMessage", required: false }] }], tooManyItemsGroupedMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooManyItemsGroupedMessage", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], showExportButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showExportButton", required: false }] }], exportButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportButtonTitle", required: false }] }], exportFilename: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFilename", required: false }] }], xAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "xAxisLabel", required: false }] }], yAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yAxisLabel", required: false }] }], valueClicked: [{ type: i0.Output, args: ["valueClicked"] }] } });
|
|
1044
1046
|
|
|
1045
1047
|
/*
|
|
1046
1048
|
* Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
|
|
@@ -1130,7 +1132,7 @@ function drawXYAxes(g, x, y, opts) {
|
|
|
1130
1132
|
.call(axisBottom(x).tickFormat((d) => xLabelMap.get(d) ?? d))
|
|
1131
1133
|
.selectAll('text')
|
|
1132
1134
|
.style('font-size', '11px')
|
|
1133
|
-
.style('fill', 'var(--
|
|
1135
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)');
|
|
1134
1136
|
// Y axis
|
|
1135
1137
|
const tickValues = computeYTickValues(y);
|
|
1136
1138
|
const tickFormat = computeYTickFormat(y);
|
|
@@ -1138,7 +1140,7 @@ function drawXYAxes(g, x, y, opts) {
|
|
|
1138
1140
|
.call(axisLeft(y).tickValues(tickValues).tickSize(-width).tickFormat(tickFormat))
|
|
1139
1141
|
.selectAll('text')
|
|
1140
1142
|
.style('font-size', '11px')
|
|
1141
|
-
.style('fill', 'var(--
|
|
1143
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)');
|
|
1142
1144
|
// Optional X axis description label
|
|
1143
1145
|
if (xAxisLabel) {
|
|
1144
1146
|
g.append('text')
|
|
@@ -1146,7 +1148,7 @@ function drawXYAxes(g, x, y, opts) {
|
|
|
1146
1148
|
.attr('y', height + 40)
|
|
1147
1149
|
.attr('text-anchor', 'middle')
|
|
1148
1150
|
.style('font-size', '12px')
|
|
1149
|
-
.style('fill', 'var(--
|
|
1151
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
1150
1152
|
.text(xAxisLabel);
|
|
1151
1153
|
}
|
|
1152
1154
|
// Optional Y axis description label (rotated, centred in the left-margin band)
|
|
@@ -1157,7 +1159,7 @@ function drawXYAxes(g, x, y, opts) {
|
|
|
1157
1159
|
.attr('y', -(effectiveLeft / 2))
|
|
1158
1160
|
.attr('text-anchor', 'middle')
|
|
1159
1161
|
.style('font-size', '12px')
|
|
1160
|
-
.style('fill', 'var(--
|
|
1162
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
1161
1163
|
.text(yAxisLabel);
|
|
1162
1164
|
}
|
|
1163
1165
|
}
|
|
@@ -1165,32 +1167,32 @@ function drawXYAxes(g, x, y, opts) {
|
|
|
1165
1167
|
* Styles all D3 grid tick lines inside `g` with the neutral chart grid color.
|
|
1166
1168
|
*/
|
|
1167
1169
|
function styleGridLines(g) {
|
|
1168
|
-
g.selectAll('.tick line').style('stroke', 'var(--
|
|
1170
|
+
g.selectAll('.tick line').style('stroke', 'var(--cds-global-color-gray-200, #e8e8e8)');
|
|
1169
1171
|
}
|
|
1170
1172
|
|
|
1171
1173
|
class LineChartComponent extends ChartBase {
|
|
1172
1174
|
constructor() {
|
|
1173
1175
|
super(...arguments);
|
|
1174
|
-
this.series = input.required();
|
|
1175
|
-
this.tooltipOrientation = input('top');
|
|
1176
|
-
this.showArea = input(false);
|
|
1177
|
-
this.showLegend = input(true);
|
|
1178
|
-
this.showValues = input(false);
|
|
1179
|
-
this.showExportButton = input(false);
|
|
1180
|
-
this.exportButtonTitle = input('Export');
|
|
1181
|
-
this.exportFilename = input('line-chart');
|
|
1182
|
-
this.noItemsMessage = input(NO_ITEMS_MESSAGE);
|
|
1183
|
-
this.tooltipPercentOfTotal = input('of total');
|
|
1176
|
+
this.series = input.required(...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
|
|
1177
|
+
this.tooltipOrientation = input('top', ...(ngDevMode ? [{ debugName: "tooltipOrientation" }] : /* istanbul ignore next */ []));
|
|
1178
|
+
this.showArea = input(false, ...(ngDevMode ? [{ debugName: "showArea" }] : /* istanbul ignore next */ []));
|
|
1179
|
+
this.showLegend = input(true, ...(ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []));
|
|
1180
|
+
this.showValues = input(false, ...(ngDevMode ? [{ debugName: "showValues" }] : /* istanbul ignore next */ []));
|
|
1181
|
+
this.showExportButton = input(false, ...(ngDevMode ? [{ debugName: "showExportButton" }] : /* istanbul ignore next */ []));
|
|
1182
|
+
this.exportButtonTitle = input('Export', ...(ngDevMode ? [{ debugName: "exportButtonTitle" }] : /* istanbul ignore next */ []));
|
|
1183
|
+
this.exportFilename = input('line-chart', ...(ngDevMode ? [{ debugName: "exportFilename" }] : /* istanbul ignore next */ []));
|
|
1184
|
+
this.noItemsMessage = input(NO_ITEMS_MESSAGE, ...(ngDevMode ? [{ debugName: "noItemsMessage" }] : /* istanbul ignore next */ []));
|
|
1185
|
+
this.tooltipPercentOfTotal = input('of total', ...(ngDevMode ? [{ debugName: "tooltipPercentOfTotal" }] : /* istanbul ignore next */ []));
|
|
1184
1186
|
/** Optional label rendered below the X axis. */
|
|
1185
|
-
this.xAxisLabel = input('');
|
|
1187
|
+
this.xAxisLabel = input('', ...(ngDevMode ? [{ debugName: "xAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1186
1188
|
/** Optional label rendered rotated to the left of the Y axis. */
|
|
1187
|
-
this.yAxisLabel = input('');
|
|
1188
|
-
this.yMin = input(0);
|
|
1189
|
-
this.autoscaleYAxis = input(false);
|
|
1189
|
+
this.yAxisLabel = input('', ...(ngDevMode ? [{ debugName: "yAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1190
|
+
this.yMin = input(0, ...(ngDevMode ? [{ debugName: "yMin" }] : /* istanbul ignore next */ []));
|
|
1191
|
+
this.autoscaleYAxis = input(false, ...(ngDevMode ? [{ debugName: "autoscaleYAxis" }] : /* istanbul ignore next */ []));
|
|
1190
1192
|
this.valueClicked = output();
|
|
1191
1193
|
this.MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };
|
|
1192
|
-
this.hasData = computed(() => this.series().some(s => s.data.length > 0));
|
|
1193
|
-
this.total = computed(() => this.series().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0));
|
|
1194
|
+
this.hasData = computed(() => this.series().some(s => s.data.length > 0), ...(ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []));
|
|
1195
|
+
this.total = computed(() => this.series().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0), ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
1194
1196
|
this.alertMessageAndType = computed(() => {
|
|
1195
1197
|
if (this.loading()) {
|
|
1196
1198
|
return undefined;
|
|
@@ -1199,13 +1201,13 @@ class LineChartComponent extends ChartBase {
|
|
|
1199
1201
|
return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];
|
|
1200
1202
|
}
|
|
1201
1203
|
return undefined;
|
|
1202
|
-
});
|
|
1204
|
+
}, ...(ngDevMode ? [{ debugName: "alertMessageAndType" }] : /* istanbul ignore next */ []));
|
|
1203
1205
|
this.legendItems = computed(() => {
|
|
1204
1206
|
if (!this.showLegend()) {
|
|
1205
1207
|
return [];
|
|
1206
1208
|
}
|
|
1207
1209
|
return this.series().map(s => ({ label: s.label, color: s.color }));
|
|
1208
|
-
});
|
|
1210
|
+
}, ...(ngDevMode ? [{ debugName: "legendItems" }] : /* istanbul ignore next */ []));
|
|
1209
1211
|
}
|
|
1210
1212
|
ngOnChanges(_changes) {
|
|
1211
1213
|
if (!this.svg) {
|
|
@@ -1316,35 +1318,35 @@ class LineChartComponent extends ChartBase {
|
|
|
1316
1318
|
});
|
|
1317
1319
|
this.selectedItem.set({ ...point, seriesKey: series.key, seriesLabel: series.label, color: series.color });
|
|
1318
1320
|
}
|
|
1319
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1320
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1321
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: LineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1322
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: LineChartComponent, isStandalone: false, selector: "clr-line-chart", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, tooltipOrientation: { classPropertyName: "tooltipOrientation", publicName: "tooltipOrientation", isSignal: true, isRequired: false, transformFunction: null }, showArea: { classPropertyName: "showArea", publicName: "showArea", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showValues: { classPropertyName: "showValues", publicName: "showValues", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, noItemsMessage: { classPropertyName: "noItemsMessage", publicName: "noItemsMessage", isSignal: true, isRequired: false, transformFunction: null }, tooltipPercentOfTotal: { classPropertyName: "tooltipPercentOfTotal", publicName: "tooltipPercentOfTotal", isSignal: true, isRequired: false, transformFunction: null }, xAxisLabel: { classPropertyName: "xAxisLabel", publicName: "xAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yAxisLabel: { classPropertyName: "yAxisLabel", publicName: "yAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yMin: { classPropertyName: "yMin", publicName: "yMin", isSignal: true, isRequired: false, transformFunction: null }, autoscaleYAxis: { classPropertyName: "autoscaleYAxis", publicName: "autoscaleYAxis", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.line,.area{pointer-events:none}.dot{transition:r .1s ease}\n"], dependencies: [{ kind: "component", type: ChartAlertOverlayComponent, selector: "cng-chart-alert-overlay", inputs: ["alertMessage", "alertType"] }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartLegendComponent, selector: "cng-chart-legend", inputs: ["items"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1321
1323
|
}
|
|
1322
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1324
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: LineChartComponent, decorators: [{
|
|
1323
1325
|
type: Component,
|
|
1324
1326
|
args: [{ selector: 'clr-line-chart', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.line,.area{pointer-events:none}.dot{transition:r .1s ease}\n"] }]
|
|
1325
|
-
}] });
|
|
1327
|
+
}], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }], tooltipOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipOrientation", required: false }] }], showArea: [{ type: i0.Input, args: [{ isSignal: true, alias: "showArea", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], showValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValues", required: false }] }], showExportButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showExportButton", required: false }] }], exportButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportButtonTitle", required: false }] }], exportFilename: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFilename", required: false }] }], noItemsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noItemsMessage", required: false }] }], tooltipPercentOfTotal: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPercentOfTotal", required: false }] }], xAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "xAxisLabel", required: false }] }], yAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yAxisLabel", required: false }] }], yMin: [{ type: i0.Input, args: [{ isSignal: true, alias: "yMin", required: false }] }], autoscaleYAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoscaleYAxis", required: false }] }], valueClicked: [{ type: i0.Output, args: ["valueClicked"] }] } });
|
|
1326
1328
|
|
|
1327
1329
|
class AreaChartComponent extends ChartBase {
|
|
1328
1330
|
constructor() {
|
|
1329
1331
|
super(...arguments);
|
|
1330
|
-
this.series = input.required();
|
|
1331
|
-
this.tooltipOrientation = input('top');
|
|
1332
|
-
this.showLegend = input(true);
|
|
1333
|
-
this.showExportButton = input(false);
|
|
1334
|
-
this.exportButtonTitle = input('Export');
|
|
1335
|
-
this.exportFilename = input('area-chart');
|
|
1332
|
+
this.series = input.required(...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
|
|
1333
|
+
this.tooltipOrientation = input('top', ...(ngDevMode ? [{ debugName: "tooltipOrientation" }] : /* istanbul ignore next */ []));
|
|
1334
|
+
this.showLegend = input(true, ...(ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []));
|
|
1335
|
+
this.showExportButton = input(false, ...(ngDevMode ? [{ debugName: "showExportButton" }] : /* istanbul ignore next */ []));
|
|
1336
|
+
this.exportButtonTitle = input('Export', ...(ngDevMode ? [{ debugName: "exportButtonTitle" }] : /* istanbul ignore next */ []));
|
|
1337
|
+
this.exportFilename = input('area-chart', ...(ngDevMode ? [{ debugName: "exportFilename" }] : /* istanbul ignore next */ []));
|
|
1336
1338
|
/** Area fill opacity (0–1). Default: 0.2. */
|
|
1337
|
-
this.areaOpacity = input(0.2);
|
|
1338
|
-
this.noItemsMessage = input(NO_ITEMS_MESSAGE);
|
|
1339
|
-
this.tooltipPercentOfTotal = input('of total');
|
|
1339
|
+
this.areaOpacity = input(0.2, ...(ngDevMode ? [{ debugName: "areaOpacity" }] : /* istanbul ignore next */ []));
|
|
1340
|
+
this.noItemsMessage = input(NO_ITEMS_MESSAGE, ...(ngDevMode ? [{ debugName: "noItemsMessage" }] : /* istanbul ignore next */ []));
|
|
1341
|
+
this.tooltipPercentOfTotal = input('of total', ...(ngDevMode ? [{ debugName: "tooltipPercentOfTotal" }] : /* istanbul ignore next */ []));
|
|
1340
1342
|
/** Optional label rendered below the X axis. */
|
|
1341
|
-
this.xAxisLabel = input('');
|
|
1343
|
+
this.xAxisLabel = input('', ...(ngDevMode ? [{ debugName: "xAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1342
1344
|
/** Optional label rendered rotated to the left of the Y axis. */
|
|
1343
|
-
this.yAxisLabel = input('');
|
|
1345
|
+
this.yAxisLabel = input('', ...(ngDevMode ? [{ debugName: "yAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1344
1346
|
this.valueClicked = output();
|
|
1345
1347
|
this.MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };
|
|
1346
|
-
this.hasData = computed(() => this.series().some(s => s.data.length > 0));
|
|
1347
|
-
this.total = computed(() => this.series().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0));
|
|
1348
|
+
this.hasData = computed(() => this.series().some(s => s.data.length > 0), ...(ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []));
|
|
1349
|
+
this.total = computed(() => this.series().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0), ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
1348
1350
|
this.alertMessageAndType = computed(() => {
|
|
1349
1351
|
if (this.loading()) {
|
|
1350
1352
|
return undefined;
|
|
@@ -1353,13 +1355,13 @@ class AreaChartComponent extends ChartBase {
|
|
|
1353
1355
|
return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];
|
|
1354
1356
|
}
|
|
1355
1357
|
return undefined;
|
|
1356
|
-
});
|
|
1358
|
+
}, ...(ngDevMode ? [{ debugName: "alertMessageAndType" }] : /* istanbul ignore next */ []));
|
|
1357
1359
|
this.legendItems = computed(() => {
|
|
1358
1360
|
if (!this.showLegend()) {
|
|
1359
1361
|
return [];
|
|
1360
1362
|
}
|
|
1361
1363
|
return this.series().map(s => ({ label: s.label, color: s.color }));
|
|
1362
|
-
});
|
|
1364
|
+
}, ...(ngDevMode ? [{ debugName: "legendItems" }] : /* istanbul ignore next */ []));
|
|
1363
1365
|
}
|
|
1364
1366
|
ngOnChanges(_changes) {
|
|
1365
1367
|
if (!this.svg) {
|
|
@@ -1453,48 +1455,48 @@ class AreaChartComponent extends ChartBase {
|
|
|
1453
1455
|
});
|
|
1454
1456
|
this.selectedItem.set({ ...point, seriesKey: series.key, seriesLabel: series.label, color: series.color });
|
|
1455
1457
|
}
|
|
1456
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1457
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1458
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AreaChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1459
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: AreaChartComponent, isStandalone: false, selector: "clr-area-chart", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, tooltipOrientation: { classPropertyName: "tooltipOrientation", publicName: "tooltipOrientation", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, areaOpacity: { classPropertyName: "areaOpacity", publicName: "areaOpacity", isSignal: true, isRequired: false, transformFunction: null }, noItemsMessage: { classPropertyName: "noItemsMessage", publicName: "noItemsMessage", isSignal: true, isRequired: false, transformFunction: null }, tooltipPercentOfTotal: { classPropertyName: "tooltipPercentOfTotal", publicName: "tooltipPercentOfTotal", isSignal: true, isRequired: false, transformFunction: null }, xAxisLabel: { classPropertyName: "xAxisLabel", publicName: "xAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yAxisLabel: { classPropertyName: "yAxisLabel", publicName: "yAxisLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.line,.area{pointer-events:none}.dot{transition:r .1s ease}\n"], dependencies: [{ kind: "component", type: ChartAlertOverlayComponent, selector: "cng-chart-alert-overlay", inputs: ["alertMessage", "alertType"] }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartLegendComponent, selector: "cng-chart-legend", inputs: ["items"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1458
1460
|
}
|
|
1459
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1461
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AreaChartComponent, decorators: [{
|
|
1460
1462
|
type: Component,
|
|
1461
1463
|
args: [{ selector: 'clr-area-chart', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.line,.area{pointer-events:none}.dot{transition:r .1s ease}\n"] }]
|
|
1462
|
-
}] });
|
|
1464
|
+
}], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }], tooltipOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipOrientation", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], showExportButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showExportButton", required: false }] }], exportButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportButtonTitle", required: false }] }], exportFilename: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFilename", required: false }] }], areaOpacity: [{ type: i0.Input, args: [{ isSignal: true, alias: "areaOpacity", required: false }] }], noItemsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noItemsMessage", required: false }] }], tooltipPercentOfTotal: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPercentOfTotal", required: false }] }], xAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "xAxisLabel", required: false }] }], yAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yAxisLabel", required: false }] }], valueClicked: [{ type: i0.Output, args: ["valueClicked"] }] } });
|
|
1463
1465
|
|
|
1464
1466
|
class ComboChartComponent extends ChartBase {
|
|
1465
1467
|
constructor() {
|
|
1466
1468
|
super(...arguments);
|
|
1467
1469
|
// ── Inputs ──────────────────────────────────────────────────────────────────
|
|
1468
|
-
this.barSeries = input([]);
|
|
1469
|
-
this.lineSeries = input([]);
|
|
1470
|
-
this.tooltipOrientation = input('top');
|
|
1471
|
-
this.showLegend = input(true);
|
|
1472
|
-
this.showExportButton = input(false);
|
|
1473
|
-
this.exportButtonTitle = input('Export');
|
|
1474
|
-
this.exportFilename = input('combo-chart');
|
|
1475
|
-
this.noItemsMessage = input(NO_ITEMS_MESSAGE);
|
|
1476
|
-
this.tooltipPercentOfTotal = input('of total');
|
|
1470
|
+
this.barSeries = input([], ...(ngDevMode ? [{ debugName: "barSeries" }] : /* istanbul ignore next */ []));
|
|
1471
|
+
this.lineSeries = input([], ...(ngDevMode ? [{ debugName: "lineSeries" }] : /* istanbul ignore next */ []));
|
|
1472
|
+
this.tooltipOrientation = input('top', ...(ngDevMode ? [{ debugName: "tooltipOrientation" }] : /* istanbul ignore next */ []));
|
|
1473
|
+
this.showLegend = input(true, ...(ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []));
|
|
1474
|
+
this.showExportButton = input(false, ...(ngDevMode ? [{ debugName: "showExportButton" }] : /* istanbul ignore next */ []));
|
|
1475
|
+
this.exportButtonTitle = input('Export', ...(ngDevMode ? [{ debugName: "exportButtonTitle" }] : /* istanbul ignore next */ []));
|
|
1476
|
+
this.exportFilename = input('combo-chart', ...(ngDevMode ? [{ debugName: "exportFilename" }] : /* istanbul ignore next */ []));
|
|
1477
|
+
this.noItemsMessage = input(NO_ITEMS_MESSAGE, ...(ngDevMode ? [{ debugName: "noItemsMessage" }] : /* istanbul ignore next */ []));
|
|
1478
|
+
this.tooltipPercentOfTotal = input('of total', ...(ngDevMode ? [{ debugName: "tooltipPercentOfTotal" }] : /* istanbul ignore next */ []));
|
|
1477
1479
|
/** Optional label rendered below the X axis. */
|
|
1478
|
-
this.xAxisLabel = input('');
|
|
1480
|
+
this.xAxisLabel = input('', ...(ngDevMode ? [{ debugName: "xAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1479
1481
|
/** Optional label rendered rotated to the left of the Y axis (bar scale). */
|
|
1480
|
-
this.yAxisLabel = input('');
|
|
1482
|
+
this.yAxisLabel = input('', ...(ngDevMode ? [{ debugName: "yAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1481
1483
|
/** Optional label rendered rotated to the right of the Y axis (line scale). */
|
|
1482
|
-
this.yLineAxisLabel = input('');
|
|
1484
|
+
this.yLineAxisLabel = input('', ...(ngDevMode ? [{ debugName: "yLineAxisLabel" }] : /* istanbul ignore next */ []));
|
|
1483
1485
|
/** Optional fixed maximum value for the bar Y axis (left). Defaults to auto. */
|
|
1484
|
-
this.yBarMax = input(undefined);
|
|
1486
|
+
this.yBarMax = input(undefined, ...(ngDevMode ? [{ debugName: "yBarMax" }] : /* istanbul ignore next */ []));
|
|
1485
1487
|
/** Optional fixed maximum value for the line Y axis (right). Defaults to auto. */
|
|
1486
|
-
this.yLineMax = input(undefined);
|
|
1488
|
+
this.yLineMax = input(undefined, ...(ngDevMode ? [{ debugName: "yLineMax" }] : /* istanbul ignore next */ []));
|
|
1487
1489
|
// ── Outputs ─────────────────────────────────────────────────────────────────
|
|
1488
1490
|
this.valueClicked = output();
|
|
1489
1491
|
// ── Layout ───────────────────────────────────────────────────────────────────
|
|
1490
1492
|
this.MARGIN = { top: 20, right: 30, bottom: 30, left: 65 };
|
|
1491
1493
|
// ── Computed ─────────────────────────────────────────────────────────────────
|
|
1492
|
-
this.hasData = computed(() => this.barSeries().some(s => s.data.length > 0) || this.lineSeries().some(s => s.data.length > 0));
|
|
1494
|
+
this.hasData = computed(() => this.barSeries().some(s => s.data.length > 0) || this.lineSeries().some(s => s.data.length > 0), ...(ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []));
|
|
1493
1495
|
this.total = computed(() => {
|
|
1494
1496
|
const barTotal = this.barSeries().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0);
|
|
1495
1497
|
const lineTotal = this.lineSeries().reduce((acc, s) => acc + s.data.reduce((a, d) => a + d.value, 0), 0);
|
|
1496
1498
|
return barTotal + lineTotal;
|
|
1497
|
-
});
|
|
1499
|
+
}, ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
1498
1500
|
this.alertMessageAndType = computed(() => {
|
|
1499
1501
|
if (this.loading()) {
|
|
1500
1502
|
return undefined;
|
|
@@ -1503,7 +1505,7 @@ class ComboChartComponent extends ChartBase {
|
|
|
1503
1505
|
return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];
|
|
1504
1506
|
}
|
|
1505
1507
|
return undefined;
|
|
1506
|
-
});
|
|
1508
|
+
}, ...(ngDevMode ? [{ debugName: "alertMessageAndType" }] : /* istanbul ignore next */ []));
|
|
1507
1509
|
this.legendItems = computed(() => {
|
|
1508
1510
|
if (!this.showLegend()) {
|
|
1509
1511
|
return [];
|
|
@@ -1511,7 +1513,7 @@ class ComboChartComponent extends ChartBase {
|
|
|
1511
1513
|
const barItems = this.barSeries().map(s => ({ label: s.label, color: s.color }));
|
|
1512
1514
|
const lineItems = this.lineSeries().map(s => ({ label: s.label, color: s.color }));
|
|
1513
1515
|
return [...barItems, ...lineItems];
|
|
1514
|
-
});
|
|
1516
|
+
}, ...(ngDevMode ? [{ debugName: "legendItems" }] : /* istanbul ignore next */ []));
|
|
1515
1517
|
this._clipIdCounter = 0;
|
|
1516
1518
|
}
|
|
1517
1519
|
// ── Lifecycle ────────────────────────────────────────────────────────────────
|
|
@@ -1605,11 +1607,14 @@ class ComboChartComponent extends ChartBase {
|
|
|
1605
1607
|
.append('g')
|
|
1606
1608
|
.attr('transform', `translate(${width},0)`)
|
|
1607
1609
|
.call(axisRight(yLine).tickValues(lineTickValues).tickFormat(lineTickFormat).tickSize(-width));
|
|
1608
|
-
rightAxisG
|
|
1610
|
+
rightAxisG
|
|
1611
|
+
.selectAll('text')
|
|
1612
|
+
.style('font-size', '11px')
|
|
1613
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)');
|
|
1609
1614
|
// Style the line-axis grid lines with a distinct dashed color
|
|
1610
1615
|
rightAxisG
|
|
1611
1616
|
.selectAll('.tick line')
|
|
1612
|
-
.style('stroke', 'var(--
|
|
1617
|
+
.style('stroke', 'var(--cds-global-color-gray-400, #b3b3b3)')
|
|
1613
1618
|
.style('stroke-dasharray', '4 3')
|
|
1614
1619
|
.style('stroke-opacity', '0.8');
|
|
1615
1620
|
// Remove the default domain line so it doesn't overlap the chart
|
|
@@ -1621,7 +1626,7 @@ class ComboChartComponent extends ChartBase {
|
|
|
1621
1626
|
.attr('y', width + extraRight - 4)
|
|
1622
1627
|
.attr('text-anchor', 'middle')
|
|
1623
1628
|
.style('font-size', '12px')
|
|
1624
|
-
.style('fill', 'var(--
|
|
1629
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
1625
1630
|
.text(this.yLineAxisLabel());
|
|
1626
1631
|
}
|
|
1627
1632
|
}
|
|
@@ -1745,29 +1750,29 @@ class ComboChartComponent extends ChartBase {
|
|
|
1745
1750
|
});
|
|
1746
1751
|
}
|
|
1747
1752
|
}
|
|
1748
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1749
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1753
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ComboChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1754
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ComboChartComponent, isStandalone: false, selector: "clr-combo-chart", inputs: { barSeries: { classPropertyName: "barSeries", publicName: "barSeries", isSignal: true, isRequired: false, transformFunction: null }, lineSeries: { classPropertyName: "lineSeries", publicName: "lineSeries", isSignal: true, isRequired: false, transformFunction: null }, tooltipOrientation: { classPropertyName: "tooltipOrientation", publicName: "tooltipOrientation", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, noItemsMessage: { classPropertyName: "noItemsMessage", publicName: "noItemsMessage", isSignal: true, isRequired: false, transformFunction: null }, tooltipPercentOfTotal: { classPropertyName: "tooltipPercentOfTotal", publicName: "tooltipPercentOfTotal", isSignal: true, isRequired: false, transformFunction: null }, xAxisLabel: { classPropertyName: "xAxisLabel", publicName: "xAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yAxisLabel: { classPropertyName: "yAxisLabel", publicName: "yAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yLineAxisLabel: { classPropertyName: "yLineAxisLabel", publicName: "yLineAxisLabel", isSignal: true, isRequired: false, transformFunction: null }, yBarMax: { classPropertyName: "yBarMax", publicName: "yBarMax", isSignal: true, isRequired: false, transformFunction: null }, yLineMax: { classPropertyName: "yLineMax", publicName: "yLineMax", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n seriesType: selectedItem().seriesType,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / selectedItem().total | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.combo-line{pointer-events:none}.combo-dot{transition:r .1s ease}\n"], dependencies: [{ kind: "component", type: ChartAlertOverlayComponent, selector: "cng-chart-alert-overlay", inputs: ["alertMessage", "alertType"] }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartLegendComponent, selector: "cng-chart-legend", inputs: ["items"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1750
1755
|
}
|
|
1751
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1756
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ComboChartComponent, decorators: [{
|
|
1752
1757
|
type: Component,
|
|
1753
1758
|
args: [{ selector: 'clr-combo-chart', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n seriesKey: selectedItem().seriesKey,\n seriesLabel: selectedItem().seriesLabel,\n seriesType: selectedItem().seriesType,\n x: selectedItem().x,\n xLabel: selectedItem().xLabel,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().xLabel || selectedItem().x }}\n </ng-container>\n\n <p class=\"mt-0\">\n <strong>{{ selectedItem().seriesLabel }}:</strong>\n {{ selectedItem().value }}\n </p>\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / selectedItem().total | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .domain{display:none}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.combo-line{pointer-events:none}.combo-dot{transition:r .1s ease}\n"] }]
|
|
1754
|
-
}] });
|
|
1759
|
+
}], propDecorators: { barSeries: [{ type: i0.Input, args: [{ isSignal: true, alias: "barSeries", required: false }] }], lineSeries: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineSeries", required: false }] }], tooltipOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipOrientation", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], showExportButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showExportButton", required: false }] }], exportButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportButtonTitle", required: false }] }], exportFilename: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFilename", required: false }] }], noItemsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noItemsMessage", required: false }] }], tooltipPercentOfTotal: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPercentOfTotal", required: false }] }], xAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "xAxisLabel", required: false }] }], yAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yAxisLabel", required: false }] }], yLineAxisLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yLineAxisLabel", required: false }] }], yBarMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "yBarMax", required: false }] }], yLineMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "yLineMax", required: false }] }], valueClicked: [{ type: i0.Output, args: ["valueClicked"] }] } });
|
|
1755
1760
|
|
|
1756
1761
|
class PieChartComponent extends ChartBase {
|
|
1757
1762
|
constructor() {
|
|
1758
1763
|
super(...arguments);
|
|
1759
|
-
this.data = input.required();
|
|
1760
|
-
this.donut = input(true);
|
|
1761
|
-
this.showLegend = input(true);
|
|
1762
|
-
this.showExportButton = input(false);
|
|
1763
|
-
this.exportButtonTitle = input('Export');
|
|
1764
|
-
this.exportFilename = input('pie-chart');
|
|
1765
|
-
this.tooltipOrientation = input('top');
|
|
1766
|
-
this.noItemsMessage = input(NO_ITEMS_MESSAGE);
|
|
1767
|
-
this.tooltipPercentOfTotal = input('of total');
|
|
1764
|
+
this.data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
1765
|
+
this.donut = input(true, ...(ngDevMode ? [{ debugName: "donut" }] : /* istanbul ignore next */ []));
|
|
1766
|
+
this.showLegend = input(true, ...(ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []));
|
|
1767
|
+
this.showExportButton = input(false, ...(ngDevMode ? [{ debugName: "showExportButton" }] : /* istanbul ignore next */ []));
|
|
1768
|
+
this.exportButtonTitle = input('Export', ...(ngDevMode ? [{ debugName: "exportButtonTitle" }] : /* istanbul ignore next */ []));
|
|
1769
|
+
this.exportFilename = input('pie-chart', ...(ngDevMode ? [{ debugName: "exportFilename" }] : /* istanbul ignore next */ []));
|
|
1770
|
+
this.tooltipOrientation = input('top', ...(ngDevMode ? [{ debugName: "tooltipOrientation" }] : /* istanbul ignore next */ []));
|
|
1771
|
+
this.noItemsMessage = input(NO_ITEMS_MESSAGE, ...(ngDevMode ? [{ debugName: "noItemsMessage" }] : /* istanbul ignore next */ []));
|
|
1772
|
+
this.tooltipPercentOfTotal = input('of total', ...(ngDevMode ? [{ debugName: "tooltipPercentOfTotal" }] : /* istanbul ignore next */ []));
|
|
1768
1773
|
this.valueClicked = output();
|
|
1769
|
-
this.hasData = computed(() => this.data()?.some(d => d.value > 0));
|
|
1770
|
-
this.total = computed(() => this.data()?.reduce((acc, d) => acc + d.value, 0) ?? 0);
|
|
1774
|
+
this.hasData = computed(() => this.data()?.some(d => d.value > 0), ...(ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []));
|
|
1775
|
+
this.total = computed(() => this.data()?.reduce((acc, d) => acc + d.value, 0) ?? 0, ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
1771
1776
|
this.alertMessageAndType = computed(() => {
|
|
1772
1777
|
if (this.loading()) {
|
|
1773
1778
|
return undefined;
|
|
@@ -1776,13 +1781,13 @@ class PieChartComponent extends ChartBase {
|
|
|
1776
1781
|
return [this.noItemsMessage(), NO_ITEMS_ALERT_TYPE];
|
|
1777
1782
|
}
|
|
1778
1783
|
return undefined;
|
|
1779
|
-
});
|
|
1784
|
+
}, ...(ngDevMode ? [{ debugName: "alertMessageAndType" }] : /* istanbul ignore next */ []));
|
|
1780
1785
|
this.legendItems = computed(() => {
|
|
1781
1786
|
if (!this.showLegend()) {
|
|
1782
1787
|
return [];
|
|
1783
1788
|
}
|
|
1784
1789
|
return (this.data() ?? []).filter(d => d.value > 0).map(d => ({ label: d.fullLabel ?? d.label, color: d.color }));
|
|
1785
|
-
});
|
|
1790
|
+
}, ...(ngDevMode ? [{ debugName: "legendItems" }] : /* istanbul ignore next */ []));
|
|
1786
1791
|
}
|
|
1787
1792
|
ngOnChanges(_changes) {
|
|
1788
1793
|
if (!this.svg) {
|
|
@@ -1880,14 +1885,14 @@ class PieChartComponent extends ChartBase {
|
|
|
1880
1885
|
.attr('dy', '-0.1em')
|
|
1881
1886
|
.style('font-size', '1.4rem')
|
|
1882
1887
|
.style('font-weight', '600')
|
|
1883
|
-
.style('fill', 'var(--
|
|
1888
|
+
.style('fill', 'var(--cds-global-color-gray-900, #21333b)')
|
|
1884
1889
|
.text(format('~s')(this.total()));
|
|
1885
1890
|
g.append('text')
|
|
1886
1891
|
.attr('class', 'center-sublabel')
|
|
1887
1892
|
.attr('text-anchor', 'middle')
|
|
1888
1893
|
.attr('dy', '1.2em')
|
|
1889
1894
|
.style('font-size', '0.65rem')
|
|
1890
|
-
.style('fill', 'var(--
|
|
1895
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
1891
1896
|
.style('text-transform', 'uppercase')
|
|
1892
1897
|
.style('letter-spacing', '0.05em')
|
|
1893
1898
|
.text('Total');
|
|
@@ -1901,13 +1906,13 @@ class PieChartComponent extends ChartBase {
|
|
|
1901
1906
|
});
|
|
1902
1907
|
this.selectedItem.set(d.data);
|
|
1903
1908
|
}
|
|
1904
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1905
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1909
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: PieChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1910
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: PieChartComponent, isStandalone: false, selector: "clr-pie-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, donut: { classPropertyName: "donut", publicName: "donut", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, tooltipOrientation: { classPropertyName: "tooltipOrientation", publicName: "tooltipOrientation", isSignal: true, isRequired: false, transformFunction: null }, noItemsMessage: { classPropertyName: "noItemsMessage", publicName: "noItemsMessage", isSignal: true, isRequired: false, transformFunction: null }, tooltipPercentOfTotal: { classPropertyName: "tooltipPercentOfTotal", publicName: "tooltipPercentOfTotal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n key: selectedItem().key,\n label: selectedItem().fullLabel || selectedItem().label,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().fullLabel || selectedItem().label }}\n </ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.slice{transition:d .15s ease}.label-value{font-size:11px;font-weight:600;fill:#fff}.label-percent{font-size:10px;fill:#ffffffe6}.center-label{font-size:1.4rem;font-weight:600;fill:var(--cds-global-color-gray-900, #21333b)}.center-sublabel{font-size:.65rem;fill:var(--cds-global-color-construction-400, #666);text-transform:uppercase;letter-spacing:.05em}\n"], dependencies: [{ kind: "component", type: ChartAlertOverlayComponent, selector: "cng-chart-alert-overlay", inputs: ["alertMessage", "alertType"] }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartLegendComponent, selector: "cng-chart-legend", inputs: ["items"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }, { kind: "pipe", type: i8.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1906
1911
|
}
|
|
1907
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1912
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: PieChartComponent, decorators: [{
|
|
1908
1913
|
type: Component,
|
|
1909
|
-
args: [{ selector: 'clr-pie-chart', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n key: selectedItem().key,\n label: selectedItem().fullLabel || selectedItem().label,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().fullLabel || selectedItem().label }}\n </ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.slice{transition:d .15s ease}.label-value{font-size:11px;font-weight:600;fill:#fff}.label-percent{font-size:10px;fill:#ffffffe6}.center-label{font-size:1.4rem;font-weight:600;fill:var(--
|
|
1910
|
-
}] });
|
|
1914
|
+
args: [{ selector: 'clr-pie-chart', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chart-container\">\n <div class=\"chart-area\" #container (cngWindowResize)=\"updateChart()\" [class.pt-3]=\"alertMessageAndType()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (tooltipPosition()) {\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n [tooltipOrientation]=\"tooltipOrientation()\"\n [squareColor]=\"selectedItem()?.color\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n valueClicked.emit({\n key: selectedItem().key,\n label: selectedItem().fullLabel || selectedItem().label,\n value: selectedItem().value,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n ({{ selectedItem().value }}) {{ selectedItem().fullLabel || selectedItem().label }}\n </ng-container>\n\n <p class=\"mt-0\">\n {{ (100 * selectedItem().value) / total() | number : '1.0-2' }}%\n {{ tooltipPercentOfTotal() }}\n </p>\n </cng-chart-tooltip>\n } @if (loading() || !hasData()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" [skeletonType]=\"loading() ? 'loading' : 'placeholder'\" />\n } @if (alertMessageAndType()) {\n <cng-chart-alert-overlay [alertType]=\"alertMessageAndType()[1]\" [alertMessage]=\"alertMessageAndType()[0]\" />\n }\n </div>\n\n @if (showLegend() && !loading() && legendItems().length) {\n <cng-chart-legend [items]=\"legendItems()\" />\n } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n [legendItems]=\"legendItems()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.chart-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.chart-area{flex:1;min-height:0;position:relative}svg{height:100%;width:100%}cng-bar-chart-skeleton{height:100%}.slice{transition:d .15s ease}.label-value{font-size:11px;font-weight:600;fill:#fff}.label-percent{font-size:10px;fill:#ffffffe6}.center-label{font-size:1.4rem;font-weight:600;fill:var(--cds-global-color-gray-900, #21333b)}.center-sublabel{font-size:.65rem;fill:var(--cds-global-color-construction-400, #666);text-transform:uppercase;letter-spacing:.05em}\n"] }]
|
|
1915
|
+
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], donut: [{ type: i0.Input, args: [{ isSignal: true, alias: "donut", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], showExportButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showExportButton", required: false }] }], exportButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportButtonTitle", required: false }] }], exportFilename: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFilename", required: false }] }], tooltipOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipOrientation", required: false }] }], noItemsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noItemsMessage", required: false }] }], tooltipPercentOfTotal: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPercentOfTotal", required: false }] }], valueClicked: [{ type: i0.Output, args: ["valueClicked"] }] } });
|
|
1911
1916
|
|
|
1912
1917
|
/*
|
|
1913
1918
|
* Copyright (c) 2018-2026 Porsche Informatik. All Rights Reserved.
|
|
@@ -1925,60 +1930,60 @@ class FunnelChartComponent extends ChartBase {
|
|
|
1925
1930
|
constructor() {
|
|
1926
1931
|
super(...arguments);
|
|
1927
1932
|
// ── Inputs ──────────────────────────────────────────────────────────────────
|
|
1928
|
-
this.data = input([]);
|
|
1929
|
-
this.showExportButton = input(false);
|
|
1930
|
-
this.exportButtonTitle = input('Export');
|
|
1931
|
-
this.exportFilename = input('funnel-chart');
|
|
1933
|
+
this.data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
1934
|
+
this.showExportButton = input(false, ...(ngDevMode ? [{ debugName: "showExportButton" }] : /* istanbul ignore next */ []));
|
|
1935
|
+
this.exportButtonTitle = input('Export', ...(ngDevMode ? [{ debugName: "exportButtonTitle" }] : /* istanbul ignore next */ []));
|
|
1936
|
+
this.exportFilename = input('funnel-chart', ...(ngDevMode ? [{ debugName: "exportFilename" }] : /* istanbul ignore next */ []));
|
|
1932
1937
|
/** Rendering mode. 'default' = horizontal bars with sections; 'centered' = centered trapezoid funnel. */
|
|
1933
|
-
this.orientation = input('default');
|
|
1938
|
+
this.orientation = input('default', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
1934
1939
|
/** Width reserved on each side for labels (px). */
|
|
1935
|
-
this.textSize = input(200);
|
|
1940
|
+
this.textSize = input(200, ...(ngDevMode ? [{ debugName: "textSize" }] : /* istanbul ignore next */ []));
|
|
1936
1941
|
/** Gap between funnel bars and their side-line labels (px). */
|
|
1937
|
-
this.lineTextPadding = input(8);
|
|
1942
|
+
this.lineTextPadding = input(8, ...(ngDevMode ? [{ debugName: "lineTextPadding" }] : /* istanbul ignore next */ []));
|
|
1938
1943
|
/** Vertical gap between funnel bars – default mode only (px). */
|
|
1939
|
-
this.barGap = input(2);
|
|
1944
|
+
this.barGap = input(2, ...(ngDevMode ? [{ debugName: "barGap" }] : /* istanbul ignore next */ []));
|
|
1940
1945
|
/** Vertical padding inside the side measurement lines (px). */
|
|
1941
|
-
this.sideLineVerticalPadding = input(4);
|
|
1946
|
+
this.sideLineVerticalPadding = input(4, ...(ngDevMode ? [{ debugName: "sideLineVerticalPadding" }] : /* istanbul ignore next */ []));
|
|
1942
1947
|
// ── Centered-mode specific inputs ────────────────────────────────────────────
|
|
1943
1948
|
/** Minimum length of the horizontal measurement lines on each side (px). Centered mode only. */
|
|
1944
|
-
this.minLineSize = input(30);
|
|
1949
|
+
this.minLineSize = input(30, ...(ngDevMode ? [{ debugName: "minLineSize" }] : /* istanbul ignore next */ []));
|
|
1945
1950
|
/** Ratio of bar height to spacer height. Centered mode only. */
|
|
1946
|
-
this.barToSpacerRatio = input(2);
|
|
1951
|
+
this.barToSpacerRatio = input(2, ...(ngDevMode ? [{ debugName: "barToSpacerRatio" }] : /* istanbul ignore next */ []));
|
|
1947
1952
|
/** Vertical padding inside the center divider lines (px). Centered mode only. */
|
|
1948
|
-
this.middleLineVerticalPadding = input(4);
|
|
1953
|
+
this.middleLineVerticalPadding = input(4, ...(ngDevMode ? [{ debugName: "middleLineVerticalPadding" }] : /* istanbul ignore next */ []));
|
|
1949
1954
|
/** Fill color of the centered-mode bars. Accepts hex or CSS custom property. Centered mode only. */
|
|
1950
|
-
this.barColor = input(DEFAULT_SECTION_COLORS[0]);
|
|
1955
|
+
this.barColor = input(DEFAULT_SECTION_COLORS[0], ...(ngDevMode ? [{ debugName: "barColor" }] : /* istanbul ignore next */ []));
|
|
1951
1956
|
/** Fill color of the trapezoid spacers. Accepts hex or CSS custom property. Centered mode only. */
|
|
1952
|
-
this.spacerColor = input('#D9D9D9');
|
|
1957
|
+
this.spacerColor = input('#D9D9D9', ...(ngDevMode ? [{ debugName: "spacerColor" }] : /* istanbul ignore next */ []));
|
|
1953
1958
|
/**
|
|
1954
1959
|
* Override the chart labels shown in the tooltip (total / all rows).
|
|
1955
1960
|
* Partial – any key not provided falls back to the English default.
|
|
1956
1961
|
*/
|
|
1957
|
-
this.chartLabels = input({});
|
|
1962
|
+
this.chartLabels = input({}, ...(ngDevMode ? [{ debugName: "chartLabels" }] : /* istanbul ignore next */ []));
|
|
1958
1963
|
/**
|
|
1959
1964
|
* Override section colors by section key.
|
|
1960
1965
|
* Accepts hex values ('#009ADB') or CSS custom properties ('--cds-global-color-blue-800').
|
|
1961
1966
|
* Per-section `color` in the data takes priority over this map; this map takes priority over
|
|
1962
1967
|
* the built-in default palette.
|
|
1963
1968
|
*/
|
|
1964
|
-
this.sectionColors = input({});
|
|
1969
|
+
this.sectionColors = input({}, ...(ngDevMode ? [{ debugName: "sectionColors" }] : /* istanbul ignore next */ []));
|
|
1965
1970
|
// ── Outputs ─────────────────────────────────────────────────────────────────
|
|
1966
1971
|
this.valueClicked = output();
|
|
1967
1972
|
// ── Computed ─────────────────────────────────────────────────────────────────
|
|
1968
1973
|
this.resolvedChartLabels = computed(() => ({
|
|
1969
1974
|
...DEFAULT_CHART_LABELS,
|
|
1970
1975
|
...this.chartLabels(),
|
|
1971
|
-
}));
|
|
1976
|
+
}), ...(ngDevMode ? [{ debugName: "resolvedChartLabels" }] : /* istanbul ignore next */ []));
|
|
1972
1977
|
/** CSS-ready color for the centered-mode bar. */
|
|
1973
|
-
this.centeredBarCssColor = computed(() => toChartColor(this.barColor()));
|
|
1978
|
+
this.centeredBarCssColor = computed(() => toChartColor(this.barColor()), ...(ngDevMode ? [{ debugName: "centeredBarCssColor" }] : /* istanbul ignore next */ []));
|
|
1974
1979
|
/** CSS-ready spacer color. */
|
|
1975
|
-
this.centeredSpacerCssColor = computed(() => toChartColor(this.spacerColor()));
|
|
1976
|
-
this.total = computed(() => this.data()[0]?.value ?? 0);
|
|
1977
|
-
this.hasData = computed(() => this.data().length > 0);
|
|
1980
|
+
this.centeredSpacerCssColor = computed(() => toChartColor(this.spacerColor()), ...(ngDevMode ? [{ debugName: "centeredSpacerCssColor" }] : /* istanbul ignore next */ []));
|
|
1981
|
+
this.total = computed(() => this.data()[0]?.value ?? 0, ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
1982
|
+
this.hasData = computed(() => this.data().length > 0, ...(ngDevMode ? [{ debugName: "hasData" }] : /* istanbul ignore next */ []));
|
|
1978
1983
|
// ── State ─────────────────────────────────────────────────────────────────────
|
|
1979
|
-
this.selectedItemLabel = computed(() => this.selectedItem()?.fullLabel ?? this.selectedItem()?.label ?? '');
|
|
1980
|
-
this.selectedSpacerItem = signal(undefined);
|
|
1981
|
-
this.sectionTooltips = signal([]);
|
|
1984
|
+
this.selectedItemLabel = computed(() => this.selectedItem()?.fullLabel ?? this.selectedItem()?.label ?? '', ...(ngDevMode ? [{ debugName: "selectedItemLabel" }] : /* istanbul ignore next */ []));
|
|
1985
|
+
this.selectedSpacerItem = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedSpacerItem" }] : /* istanbul ignore next */ []));
|
|
1986
|
+
this.sectionTooltips = signal([], ...(ngDevMode ? [{ debugName: "sectionTooltips" }] : /* istanbul ignore next */ []));
|
|
1982
1987
|
}
|
|
1983
1988
|
// ── Lifecycle ────────────────────────────────────────────────────────────────
|
|
1984
1989
|
ngOnChanges(_changes) {
|
|
@@ -2073,7 +2078,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2073
2078
|
.attr('y', labelY)
|
|
2074
2079
|
.attr('text-anchor', 'start')
|
|
2075
2080
|
.style('font-size', '12px')
|
|
2076
|
-
.style('fill', 'var(--
|
|
2081
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
2077
2082
|
.text(`-${this.round(d.deltaPercentage)}% (${d.delta})`);
|
|
2078
2083
|
});
|
|
2079
2084
|
}
|
|
@@ -2091,7 +2096,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2091
2096
|
.attr('text-anchor', 'end')
|
|
2092
2097
|
.style('font-size', '13px')
|
|
2093
2098
|
.style('font-weight', '600')
|
|
2094
|
-
.style('fill', 'var(--
|
|
2099
|
+
.style('fill', 'var(--cds-global-color-gray-900, #21333b)')
|
|
2095
2100
|
.style('cursor', 'pointer')
|
|
2096
2101
|
.text(d.label)
|
|
2097
2102
|
.on('click', () => this.valueClicked.emit({ value: d.value, label: d.label, key: d.key }))
|
|
@@ -2111,7 +2116,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2111
2116
|
.attr('y1', labelY - 5)
|
|
2112
2117
|
.attr('x2', this.textSize() - iconSpacing)
|
|
2113
2118
|
.attr('y2', labelY - 5)
|
|
2114
|
-
.attr('stroke', 'var(--
|
|
2119
|
+
.attr('stroke', 'var(--cds-global-color-construction-400, #666)')
|
|
2115
2120
|
.attr('stroke-width', 2)
|
|
2116
2121
|
.attr('stroke-dasharray', '2,2');
|
|
2117
2122
|
leftG
|
|
@@ -2120,7 +2125,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2120
2125
|
.attr('y', labelY + 10)
|
|
2121
2126
|
.attr('text-anchor', 'end')
|
|
2122
2127
|
.style('font-size', '12px')
|
|
2123
|
-
.style('fill', 'var(--
|
|
2128
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
2124
2129
|
.text(`${this.round(d.percentage)}% (${d.value})`);
|
|
2125
2130
|
});
|
|
2126
2131
|
this.sectionTooltips.set(positions);
|
|
@@ -2287,7 +2292,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2287
2292
|
.attr('text-anchor', 'end')
|
|
2288
2293
|
.style('font-size', '13px')
|
|
2289
2294
|
.style('font-weight', '600')
|
|
2290
|
-
.style('fill', 'var(--
|
|
2295
|
+
.style('fill', 'var(--cds-global-color-gray-900, #21333b)')
|
|
2291
2296
|
.style('cursor', 'pointer')
|
|
2292
2297
|
.text(d.label)
|
|
2293
2298
|
.on('click', () => this.valueClicked.emit({ value: d.value, label: d.label, key: d.key }))
|
|
@@ -2301,7 +2306,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2301
2306
|
.attr('y1', cy - 5)
|
|
2302
2307
|
.attr('x2', -iconSpacing)
|
|
2303
2308
|
.attr('y2', cy - 5)
|
|
2304
|
-
.attr('stroke', 'var(--
|
|
2309
|
+
.attr('stroke', 'var(--cds-global-color-construction-400, #666)')
|
|
2305
2310
|
.attr('stroke-width', 2)
|
|
2306
2311
|
.attr('stroke-dasharray', '2,2');
|
|
2307
2312
|
g.append('text')
|
|
@@ -2309,7 +2314,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2309
2314
|
.attr('y', cy + 10)
|
|
2310
2315
|
.attr('text-anchor', 'end')
|
|
2311
2316
|
.style('font-size', '12px')
|
|
2312
|
-
.style('fill', 'var(--
|
|
2317
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
2313
2318
|
.text(`${this.round(d.percentage)}% (${d.value})`);
|
|
2314
2319
|
});
|
|
2315
2320
|
this.sectionTooltips.set(positions);
|
|
@@ -2339,7 +2344,7 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2339
2344
|
.attr('y', cy)
|
|
2340
2345
|
.attr('text-anchor', 'start')
|
|
2341
2346
|
.style('font-size', '12px')
|
|
2342
|
-
.style('fill', 'var(--
|
|
2347
|
+
.style('fill', 'var(--cds-global-color-construction-400, #666)')
|
|
2343
2348
|
.text(`-${this.round(d.deltaPercentage)}% (${d.delta})`);
|
|
2344
2349
|
});
|
|
2345
2350
|
}
|
|
@@ -2507,13 +2512,13 @@ class FunnelChartComponent extends ChartBase {
|
|
|
2507
2512
|
const factor = 10 ** decimals;
|
|
2508
2513
|
return Math.round(factor * value) / factor;
|
|
2509
2514
|
}
|
|
2510
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2511
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: FunnelChartComponent, isStandalone: false, selector: "clr-funnel-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, textSize: { classPropertyName: "textSize", publicName: "textSize", isSignal: true, isRequired: false, transformFunction: null }, lineTextPadding: { classPropertyName: "lineTextPadding", publicName: "lineTextPadding", isSignal: true, isRequired: false, transformFunction: null }, barGap: { classPropertyName: "barGap", publicName: "barGap", isSignal: true, isRequired: false, transformFunction: null }, sideLineVerticalPadding: { classPropertyName: "sideLineVerticalPadding", publicName: "sideLineVerticalPadding", isSignal: true, isRequired: false, transformFunction: null }, minLineSize: { classPropertyName: "minLineSize", publicName: "minLineSize", isSignal: true, isRequired: false, transformFunction: null }, barToSpacerRatio: { classPropertyName: "barToSpacerRatio", publicName: "barToSpacerRatio", isSignal: true, isRequired: false, transformFunction: null }, middleLineVerticalPadding: { classPropertyName: "middleLineVerticalPadding", publicName: "middleLineVerticalPadding", isSignal: true, isRequired: false, transformFunction: null }, barColor: { classPropertyName: "barColor", publicName: "barColor", isSignal: true, isRequired: false, transformFunction: null }, spacerColor: { classPropertyName: "spacerColor", publicName: "spacerColor", isSignal: true, isRequired: false, transformFunction: null }, chartLabels: { classPropertyName: "chartLabels", publicName: "chartLabels", isSignal: true, isRequired: false, transformFunction: null }, sectionColors: { classPropertyName: "sectionColors", publicName: "sectionColors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"funnel-container\" #container (cngWindowResize)=\"updateChart()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (!loading()) { @for (pos of sectionTooltips(); track pos.key) {\n <clr-signpost [style.left.px]=\"pos.x\" [style.top.px]=\"pos.y\">\n <cds-icon clrSignpostTrigger shape=\"info-circle\" size=\"18\" />\n <clr-signpost-content clrPosition=\"bottom-left\">\n <p class=\"mt-0\">{{ pos.description }}</p>\n </clr-signpost-content>\n </clr-signpost>\n } } @if (loading()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" skeletonType=\"loading\" />\n } @if (tooltipPosition()) { @if (orientation() === 'centered') {\n\n <!-- \u2500\u2500 Centered mode tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"selectedSpacerItem() ? centeredSpacerCssColor() : centeredBarCssColor()\"\n [tooltipClickable]=\"!selectedSpacerItem()\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n selectedItem() && valueClicked.emit({\n value: selectedItem().value,\n label: selectedItem().label,\n key: selectedItem().key,\n section: undefined,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n @if (selectedSpacerItem()) {\n {{ data()[selectedSpacerItem().index].label }} \u2192 {{ data()[selectedSpacerItem().index + 1].label }} } @else { ({{\n selectedItem().value\n }}) {{ selectedItem().label }}\n }\n </ng-container>\n\n @if (selectedSpacerItem()) {\n <p class=\"mt-0\">\n <strong\n >{{ data()[selectedSpacerItem().index].value }} \u2192 {{ data()[selectedSpacerItem().index + 1].value }}</strong\n >\n </p>\n @for (section of (data()[selectedSpacerItem().index].sections ?? []); track section.key) { @let drillable =\n section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <strong>{{ section.label }}: </strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: data()[selectedSpacerItem().index].label + ': ' + section.label,\n key: data()[selectedSpacerItem().index].key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n ({{ pct(section.value, data()[selectedSpacerItem().index].value) }}%)\n </p>\n } } @else {\n <p class=\"mt-0\">{{ pct(selectedItem().value, total()) }}% {{ resolvedChartLabels().all }}</p>\n }\n </cng-chart-tooltip>\n\n } @else {\n\n <!-- \u2500\u2500 Default mode tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"undefined\"\n [tooltipClickable]=\"false\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n >\n <ng-container ngProjectAs=\"cng-title\">{{ selectedItemLabel() }}</ng-container>\n @for (section of selectedItem().sections; track section.key) { @let drillable = section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <span>\n <div class=\"color-square mr-0-5\" [style.background-color]=\"section.cssColor\"></div>\n </span>\n <strong>{{ section.label }}: </strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: selectedItemLabel() + ': ' + section.label,\n key: selectedItem().key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n ({{ section.percentage }}%)\n </p>\n }\n\n <p class=\"tooltip-row mt-0-5\">\n <strong>{{ resolvedChartLabels().total }}: </strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n value: selectedItem().value,\n label: selectedItemLabel(),\n key: selectedItem().key,\n section: undefined\n })\n \"\n >{{ selectedItem().value }}</span\n >\n </p>\n\n <ng-container ngProjectAs=\"cng-footer\">\n <p class=\"tooltip-row mt-0\">\n <strong>{{ resolvedChartLabels().all }}: </strong>\n <span class=\"row-right\">{{ total() }}</span>\n </p>\n </ng-container>\n </cng-chart-tooltip>\n\n } } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n class=\"funnel-export-btn\"\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.funnel-container{height:100%;width:100%;max-width:1400px;margin:auto;position:relative}svg{width:100%;height:100%}clr-signpost{position:absolute!important}.tooltip-row{display:flex;justify-content:space-between;align-items:center}.row-right{margin-left:auto}.funnel-export-btn{position:absolute;bottom:0;right:0;opacity:0;pointer-events:none;transition:opacity .2s ease}.funnel-container:hover .funnel-export-btn{opacity:1;pointer-events:auto}\n"], dependencies: [{ kind: "directive", type: i1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: i1.ClrSignpost, selector: "clr-signpost", inputs: ["clrSignpostTriggerAriaLabel"] }, { kind: "component", type: i1.ClrSignpostContent, selector: "clr-signpost-content", inputs: ["clrSignpostCloseAriaLabel", "clrPosition"] }, { kind: "directive", type: i1.ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2515
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: FunnelChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
2516
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: FunnelChartComponent, isStandalone: false, selector: "clr-funnel-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, showExportButton: { classPropertyName: "showExportButton", publicName: "showExportButton", isSignal: true, isRequired: false, transformFunction: null }, exportButtonTitle: { classPropertyName: "exportButtonTitle", publicName: "exportButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, exportFilename: { classPropertyName: "exportFilename", publicName: "exportFilename", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, textSize: { classPropertyName: "textSize", publicName: "textSize", isSignal: true, isRequired: false, transformFunction: null }, lineTextPadding: { classPropertyName: "lineTextPadding", publicName: "lineTextPadding", isSignal: true, isRequired: false, transformFunction: null }, barGap: { classPropertyName: "barGap", publicName: "barGap", isSignal: true, isRequired: false, transformFunction: null }, sideLineVerticalPadding: { classPropertyName: "sideLineVerticalPadding", publicName: "sideLineVerticalPadding", isSignal: true, isRequired: false, transformFunction: null }, minLineSize: { classPropertyName: "minLineSize", publicName: "minLineSize", isSignal: true, isRequired: false, transformFunction: null }, barToSpacerRatio: { classPropertyName: "barToSpacerRatio", publicName: "barToSpacerRatio", isSignal: true, isRequired: false, transformFunction: null }, middleLineVerticalPadding: { classPropertyName: "middleLineVerticalPadding", publicName: "middleLineVerticalPadding", isSignal: true, isRequired: false, transformFunction: null }, barColor: { classPropertyName: "barColor", publicName: "barColor", isSignal: true, isRequired: false, transformFunction: null }, spacerColor: { classPropertyName: "spacerColor", publicName: "spacerColor", isSignal: true, isRequired: false, transformFunction: null }, chartLabels: { classPropertyName: "chartLabels", publicName: "chartLabels", isSignal: true, isRequired: false, transformFunction: null }, sectionColors: { classPropertyName: "sectionColors", publicName: "sectionColors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueClicked: "valueClicked" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"funnel-container\" #container (cngWindowResize)=\"updateChart()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (!loading()) { @for (pos of sectionTooltips(); track pos.key) {\n <clr-signpost [style.left.px]=\"pos.x\" [style.top.px]=\"pos.y\">\n <cds-icon clrSignpostTrigger shape=\"info-circle\" size=\"18\" />\n <clr-signpost-content clrPosition=\"bottom-left\">\n <p class=\"mt-0\">{{ pos.description }}</p>\n </clr-signpost-content>\n </clr-signpost>\n } } @if (loading()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" skeletonType=\"loading\" />\n } @if (tooltipPosition()) { @if (orientation() === 'centered') {\n\n <!-- \u2500\u2500 Centered mode tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"selectedSpacerItem() ? centeredSpacerCssColor() : centeredBarCssColor()\"\n [tooltipClickable]=\"!selectedSpacerItem()\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n selectedItem() && valueClicked.emit({\n value: selectedItem().value,\n label: selectedItem().label,\n key: selectedItem().key,\n section: undefined,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n @if (selectedSpacerItem()) {\n {{ data()[selectedSpacerItem().index].label }} \u2192 {{ data()[selectedSpacerItem().index + 1].label }} } @else { ({{\n selectedItem().value\n }}) {{ selectedItem().label }}\n }\n </ng-container>\n\n @if (selectedSpacerItem()) {\n <p class=\"mt-0\">\n <strong\n >{{ data()[selectedSpacerItem().index].value }} \u2192 {{ data()[selectedSpacerItem().index + 1].value }}</strong\n >\n </p>\n @for (section of (data()[selectedSpacerItem().index].sections ?? []); track section.key) { @let drillable =\n section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <strong>{{ section.label }}: </strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: data()[selectedSpacerItem().index].label + ': ' + section.label,\n key: data()[selectedSpacerItem().index].key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n ({{ pct(section.value, data()[selectedSpacerItem().index].value) }}%)\n </p>\n } } @else {\n <p class=\"mt-0\">{{ pct(selectedItem().value, total()) }}% {{ resolvedChartLabels().all }}</p>\n }\n </cng-chart-tooltip>\n\n } @else {\n\n <!-- \u2500\u2500 Default mode tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"undefined\"\n [tooltipClickable]=\"false\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n >\n <ng-container ngProjectAs=\"cng-title\">{{ selectedItemLabel() }}</ng-container>\n @for (section of selectedItem().sections; track section.key) { @let drillable = section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <span>\n <div class=\"color-square mr-0-5\" [style.background-color]=\"section.cssColor\"></div>\n </span>\n <strong>{{ section.label }}: </strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: selectedItemLabel() + ': ' + section.label,\n key: selectedItem().key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n ({{ section.percentage }}%)\n </p>\n }\n\n <p class=\"tooltip-row mt-0-5\">\n <strong>{{ resolvedChartLabels().total }}: </strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n value: selectedItem().value,\n label: selectedItemLabel(),\n key: selectedItem().key,\n section: undefined\n })\n \"\n >{{ selectedItem().value }}</span\n >\n </p>\n\n <ng-container ngProjectAs=\"cng-footer\">\n <p class=\"tooltip-row mt-0\">\n <strong>{{ resolvedChartLabels().all }}: </strong>\n <span class=\"row-right\">{{ total() }}</span>\n </p>\n </ng-container>\n </cng-chart-tooltip>\n\n } } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n class=\"funnel-export-btn\"\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.funnel-container{height:100%;width:100%;max-width:1400px;margin:auto;position:relative}svg{width:100%;height:100%}clr-signpost{position:absolute!important}.tooltip-row{display:flex;justify-content:space-between;align-items:center}.row-right{margin-left:auto}.funnel-export-btn{position:absolute;bottom:0;right:0;opacity:0;pointer-events:none;transition:opacity .2s ease}.funnel-container:hover .funnel-export-btn{opacity:1;pointer-events:auto}\n"], dependencies: [{ kind: "component", type: i1.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "component", type: i1.ClrSignpost, selector: "clr-signpost", inputs: ["clrSignpostTriggerAriaLabel", "clrSignpostHideTrigger"] }, { kind: "component", type: i1.ClrSignpostContent, selector: "clr-signpost-content", inputs: ["clrSignpostCloseAriaLabel", "clrPosition"] }, { kind: "directive", type: i1.ClrSignpostTrigger, selector: "[clrSignpostTrigger]" }, { kind: "component", type: ChartExportButtonComponent, selector: "cng-chart-export-button", inputs: ["svgRef", "filename", "buttonTitle", "legendItems"] }, { kind: "component", type: ChartSkeletonComponent, selector: "cng-bar-chart-skeleton", inputs: ["skeletonType", "orientation"] }, { kind: "component", type: ChartTooltipComponent, selector: "cng-chart-tooltip", inputs: ["tooltipPosition", "tooltipOrientation", "squareColor", "tooltipClickable"], outputs: ["tooltipClosed", "tooltipHeaderClicked"] }, { kind: "directive", type: OutsideClickDirective, selector: "[cngOutsideClick]", outputs: ["cngOutsideClick"] }, { kind: "directive", type: WindowResizeDirective, selector: "[cngWindowResize]", inputs: ["debounce", "includeFirst"], outputs: ["cngWindowResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2512
2517
|
}
|
|
2513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2518
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: FunnelChartComponent, decorators: [{
|
|
2514
2519
|
type: Component,
|
|
2515
2520
|
args: [{ selector: 'clr-funnel-chart', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"funnel-container\" #container (cngWindowResize)=\"updateChart()\">\n <svg [class.d-none]=\"loading() || !hasData()\" #chart></svg>\n\n @if (!loading()) { @for (pos of sectionTooltips(); track pos.key) {\n <clr-signpost [style.left.px]=\"pos.x\" [style.top.px]=\"pos.y\">\n <cds-icon clrSignpostTrigger shape=\"info-circle\" size=\"18\" />\n <clr-signpost-content clrPosition=\"bottom-left\">\n <p class=\"mt-0\">{{ pos.description }}</p>\n </clr-signpost-content>\n </clr-signpost>\n } } @if (loading()) {\n <cng-bar-chart-skeleton orientation=\"vertical\" skeletonType=\"loading\" />\n } @if (tooltipPosition()) { @if (orientation() === 'centered') {\n\n <!-- \u2500\u2500 Centered mode tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"selectedSpacerItem() ? centeredSpacerCssColor() : centeredBarCssColor()\"\n [tooltipClickable]=\"!selectedSpacerItem()\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n (tooltipHeaderClicked)=\"\n selectedItem() && valueClicked.emit({\n value: selectedItem().value,\n label: selectedItem().label,\n key: selectedItem().key,\n section: undefined,\n })\n \"\n >\n <ng-container ngProjectAs=\"cng-title\">\n @if (selectedSpacerItem()) {\n {{ data()[selectedSpacerItem().index].label }} \u2192 {{ data()[selectedSpacerItem().index + 1].label }} } @else { ({{\n selectedItem().value\n }}) {{ selectedItem().label }}\n }\n </ng-container>\n\n @if (selectedSpacerItem()) {\n <p class=\"mt-0\">\n <strong\n >{{ data()[selectedSpacerItem().index].value }} \u2192 {{ data()[selectedSpacerItem().index + 1].value }}</strong\n >\n </p>\n @for (section of (data()[selectedSpacerItem().index].sections ?? []); track section.key) { @let drillable =\n section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <strong>{{ section.label }}: </strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: data()[selectedSpacerItem().index].label + ': ' + section.label,\n key: data()[selectedSpacerItem().index].key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n ({{ pct(section.value, data()[selectedSpacerItem().index].value) }}%)\n </p>\n } } @else {\n <p class=\"mt-0\">{{ pct(selectedItem().value, total()) }}% {{ resolvedChartLabels().all }}</p>\n }\n </cng-chart-tooltip>\n\n } @else {\n\n <!-- \u2500\u2500 Default mode tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <cng-chart-tooltip\n [tooltipPosition]=\"tooltipPosition()\"\n tooltipOrientation=\"bottom\"\n [squareColor]=\"undefined\"\n [tooltipClickable]=\"false\"\n (tooltipClosed)=\"resetTooltip()\"\n (cngOutsideClick)=\"resetTooltip()\"\n >\n <ng-container ngProjectAs=\"cng-title\">{{ selectedItemLabel() }}</ng-container>\n @for (section of selectedItem().sections; track section.key) { @let drillable = section.value > 0;\n <p class=\"tooltip-row mt-0 mt-0-5 d-flex\">\n <span>\n <div class=\"color-square mr-0-5\" [style.background-color]=\"section.cssColor\"></div>\n </span>\n <strong>{{ section.label }}: </strong>\n <span\n class=\"row-right\"\n [class.has-more-info]=\"drillable\"\n (click)=\"\n drillable && valueClicked.emit({\n value: section.value,\n label: selectedItemLabel() + ': ' + section.label,\n key: selectedItem().key,\n section: section.key,\n })\n \"\n >{{ section.value }}</span\n >\n ({{ section.percentage }}%)\n </p>\n }\n\n <p class=\"tooltip-row mt-0-5\">\n <strong>{{ resolvedChartLabels().total }}: </strong>\n <span\n class=\"has-more-info\"\n (click)=\"\n valueClicked.emit({\n value: selectedItem().value,\n label: selectedItemLabel(),\n key: selectedItem().key,\n section: undefined\n })\n \"\n >{{ selectedItem().value }}</span\n >\n </p>\n\n <ng-container ngProjectAs=\"cng-footer\">\n <p class=\"tooltip-row mt-0\">\n <strong>{{ resolvedChartLabels().all }}: </strong>\n <span class=\"row-right\">{{ total() }}</span>\n </p>\n </ng-container>\n </cng-chart-tooltip>\n\n } } @if (showExportButton() && !loading() && hasData()) {\n <cng-chart-export-button\n class=\"funnel-export-btn\"\n [svgRef]=\"svgElement()\"\n [filename]=\"exportFilename()\"\n [buttonTitle]=\"exportButtonTitle()\"\n />\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.funnel-container{height:100%;width:100%;max-width:1400px;margin:auto;position:relative}svg{width:100%;height:100%}clr-signpost{position:absolute!important}.tooltip-row{display:flex;justify-content:space-between;align-items:center}.row-right{margin-left:auto}.funnel-export-btn{position:absolute;bottom:0;right:0;opacity:0;pointer-events:none;transition:opacity .2s ease}.funnel-container:hover .funnel-export-btn{opacity:1;pointer-events:auto}\n"] }]
|
|
2516
|
-
}] });
|
|
2521
|
+
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], showExportButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showExportButton", required: false }] }], exportButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportButtonTitle", required: false }] }], exportFilename: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFilename", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], textSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "textSize", required: false }] }], lineTextPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineTextPadding", required: false }] }], barGap: [{ type: i0.Input, args: [{ isSignal: true, alias: "barGap", required: false }] }], sideLineVerticalPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideLineVerticalPadding", required: false }] }], minLineSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLineSize", required: false }] }], barToSpacerRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "barToSpacerRatio", required: false }] }], middleLineVerticalPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "middleLineVerticalPadding", required: false }] }], barColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "barColor", required: false }] }], spacerColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacerColor", required: false }] }], chartLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "chartLabels", required: false }] }], sectionColors: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionColors", required: false }] }], valueClicked: [{ type: i0.Output, args: ["valueClicked"] }] } });
|
|
2517
2522
|
|
|
2518
2523
|
const PREFERRED_ORDER = ['top-right', 'top-left', 'bottom-right', 'bottom-left'];
|
|
2519
2524
|
class AutoPositionDirective {
|
|
@@ -2576,10 +2581,10 @@ class AutoPositionDirective {
|
|
|
2576
2581
|
}
|
|
2577
2582
|
this.resizeObserver?.disconnect();
|
|
2578
2583
|
}
|
|
2579
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2580
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
2584
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AutoPositionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2585
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.13", type: AutoPositionDirective, isStandalone: true, selector: "clr-signpost-content[autoPosition]", ngImport: i0 }); }
|
|
2581
2586
|
}
|
|
2582
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: AutoPositionDirective, decorators: [{
|
|
2583
2588
|
type: Directive,
|
|
2584
2589
|
args: [{
|
|
2585
2590
|
selector: 'clr-signpost-content[autoPosition]',
|
|
@@ -2589,8 +2594,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2589
2594
|
|
|
2590
2595
|
class TenantFullDateRangeDirective {
|
|
2591
2596
|
constructor() {
|
|
2592
|
-
this.start = contentChild(ClrStartDateInput);
|
|
2593
|
-
this.end = contentChild(ClrEndDateInput);
|
|
2597
|
+
this.start = contentChild(ClrStartDateInput, ...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
|
|
2598
|
+
this.end = contentChild(ClrEndDateInput, ...(ngDevMode ? [{ debugName: "end" }] : /* istanbul ignore next */ []));
|
|
2594
2599
|
}
|
|
2595
2600
|
ngAfterContentInit() {
|
|
2596
2601
|
if (this.start()) {
|
|
@@ -2615,16 +2620,16 @@ class TenantFullDateRangeDirective {
|
|
|
2615
2620
|
result.setHours(hours, minutes, 0, 0);
|
|
2616
2621
|
return result;
|
|
2617
2622
|
}
|
|
2618
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2619
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
2623
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: TenantFullDateRangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2624
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.13", type: TenantFullDateRangeDirective, isStandalone: true, selector: "clr-date-range-container[cngTenantFullDateRange]", queries: [{ propertyName: "start", first: true, predicate: ClrStartDateInput, descendants: true, isSignal: true }, { propertyName: "end", first: true, predicate: ClrEndDateInput, descendants: true, isSignal: true }], ngImport: i0 }); }
|
|
2620
2625
|
}
|
|
2621
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2626
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: TenantFullDateRangeDirective, decorators: [{
|
|
2622
2627
|
type: Directive,
|
|
2623
2628
|
args: [{
|
|
2624
2629
|
selector: 'clr-date-range-container[cngTenantFullDateRange]',
|
|
2625
2630
|
standalone: true,
|
|
2626
2631
|
}]
|
|
2627
|
-
}] });
|
|
2632
|
+
}], propDecorators: { start: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClrStartDateInput), { isSignal: true }] }], end: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClrEndDateInput), { isSignal: true }] }] } });
|
|
2628
2633
|
|
|
2629
2634
|
/*
|
|
2630
2635
|
* Copyright (c) 2026 Porsche Informatik. All Rights Reserved.
|
|
@@ -2640,8 +2645,8 @@ const CLR_CHARTS_DECLARATIONS = [
|
|
|
2640
2645
|
PieChartComponent,
|
|
2641
2646
|
];
|
|
2642
2647
|
class ClrChartsModule {
|
|
2643
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2644
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
2648
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ClrChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2649
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.13", ngImport: i0, type: ClrChartsModule, declarations: [AreaChartComponent,
|
|
2645
2650
|
BarChartComponent,
|
|
2646
2651
|
ComboChartComponent,
|
|
2647
2652
|
FunnelChartComponent,
|
|
@@ -2649,7 +2654,7 @@ class ClrChartsModule {
|
|
|
2649
2654
|
PieChartComponent], imports: [CommonModule,
|
|
2650
2655
|
DecimalPipe,
|
|
2651
2656
|
ClrAlertModule,
|
|
2652
|
-
|
|
2657
|
+
ClrIcon,
|
|
2653
2658
|
ClrSignpostModule,
|
|
2654
2659
|
// standalone helpers consumed by the non-standalone chart components
|
|
2655
2660
|
ChartAlertOverlayComponent,
|
|
@@ -2664,9 +2669,9 @@ class ClrChartsModule {
|
|
|
2664
2669
|
FunnelChartComponent,
|
|
2665
2670
|
LineChartComponent,
|
|
2666
2671
|
PieChartComponent] }); }
|
|
2667
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
2672
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ClrChartsModule, imports: [CommonModule,
|
|
2668
2673
|
ClrAlertModule,
|
|
2669
|
-
|
|
2674
|
+
ClrIcon,
|
|
2670
2675
|
ClrSignpostModule,
|
|
2671
2676
|
// standalone helpers consumed by the non-standalone chart components
|
|
2672
2677
|
ChartAlertOverlayComponent,
|
|
@@ -2674,14 +2679,14 @@ class ClrChartsModule {
|
|
|
2674
2679
|
ChartSkeletonComponent,
|
|
2675
2680
|
ChartTooltipComponent] }); }
|
|
2676
2681
|
}
|
|
2677
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2682
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ClrChartsModule, decorators: [{
|
|
2678
2683
|
type: NgModule,
|
|
2679
2684
|
args: [{
|
|
2680
2685
|
imports: [
|
|
2681
2686
|
CommonModule,
|
|
2682
2687
|
DecimalPipe,
|
|
2683
2688
|
ClrAlertModule,
|
|
2684
|
-
|
|
2689
|
+
ClrIcon,
|
|
2685
2690
|
ClrSignpostModule,
|
|
2686
2691
|
// standalone helpers consumed by the non-standalone chart components
|
|
2687
2692
|
ChartAlertOverlayComponent,
|