@porscheinformatik/clr-addons 19.18.0 → 19.18.2

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.
@@ -14,6 +14,7 @@ export declare class AreaChartComponent extends ChartBase<AreaChartSelectedPoint
14
14
  readonly tooltipOrientation: import("@angular/core").InputSignal<"top" | "bottom">;
15
15
  readonly showLegend: import("@angular/core").InputSignal<boolean>;
16
16
  readonly showExportButton: import("@angular/core").InputSignal<boolean>;
17
+ readonly exportButtonTitle: import("@angular/core").InputSignal<string>;
17
18
  readonly exportFilename: import("@angular/core").InputSignal<string>;
18
19
  /** Area fill opacity (0–1). Default: 0.2. */
19
20
  readonly areaOpacity: import("@angular/core").InputSignal<number>;
@@ -36,5 +37,5 @@ export declare class AreaChartComponent extends ChartBase<AreaChartSelectedPoint
36
37
  private drawSeries;
37
38
  private openTooltip;
38
39
  static ɵfac: i0.ɵɵFactoryDeclaration<AreaChartComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<AreaChartComponent, "clr-area-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "areaOpacity": { "alias": "areaOpacity"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<AreaChartComponent, "clr-area-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportButtonTitle": { "alias": "exportButtonTitle"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "areaOpacity": { "alias": "areaOpacity"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
40
41
  }
@@ -21,9 +21,13 @@ type BarChartDataPoint = BarChartData & {
21
21
  stackValue1: number;
22
22
  percentageOfStack: number;
23
23
  };
24
+ export type BarChartLabel = {
25
+ stackKey: string;
26
+ label: string;
27
+ };
24
28
  export declare class BarChartComponent extends ChartBase<BarChartDataPoint> implements OnChanges {
25
29
  readonly data: import("@angular/core").InputSignal<BarChartData[]>;
26
- readonly stackLabels: import("@angular/core").InputSignal<string[]>;
30
+ readonly stacks: import("@angular/core").InputSignal<BarChartLabel[]>;
27
31
  readonly orientation: import("@angular/core").InputSignal<"horizontal" | "vertical">;
28
32
  readonly tooltipOrientation: import("@angular/core").InputSignal<"top" | "bottom">;
29
33
  readonly barSizePx: import("@angular/core").InputSignal<number>;
@@ -35,6 +39,7 @@ export declare class BarChartComponent extends ChartBase<BarChartDataPoint> impl
35
39
  readonly tooManyItemsGroupedMessage: import("@angular/core").InputSignal<string>;
36
40
  readonly showLegend: import("@angular/core").InputSignal<boolean>;
37
41
  readonly showExportButton: import("@angular/core").InputSignal<boolean>;
42
+ readonly exportButtonTitle: import("@angular/core").InputSignal<string>;
38
43
  readonly exportFilename: import("@angular/core").InputSignal<string>;
39
44
  /** Optional label rendered below the X axis. */
40
45
  readonly xAxisLabel: import("@angular/core").InputSignal<string>;
@@ -87,6 +92,6 @@ export declare class BarChartComponent extends ChartBase<BarChartDataPoint> impl
87
92
  private mapItems;
88
93
  private getMaxAmountOfItems;
89
94
  static ɵfac: i0.ɵɵFactoryDeclaration<BarChartComponent, never>;
90
- static ɵcmp: i0.ɵɵComponentDeclaration<BarChartComponent, "clr-bar-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "stackLabels": { "alias": "stackLabels"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": true; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "barSizePx": { "alias": "barSizePx"; "required": false; "isSignal": true; }; "barAreaSizePx": { "alias": "barAreaSizePx"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "tooltipPercentOf": { "alias": "tooltipPercentOf"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooManyItemsMessage": { "alias": "tooManyItemsMessage"; "required": false; "isSignal": true; }; "tooManyItemsGroupedMessage": { "alias": "tooManyItemsGroupedMessage"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
95
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarChartComponent, "clr-bar-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "stacks": { "alias": "stacks"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": true; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "barSizePx": { "alias": "barSizePx"; "required": false; "isSignal": true; }; "barAreaSizePx": { "alias": "barAreaSizePx"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "tooltipPercentOf": { "alias": "tooltipPercentOf"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooManyItemsMessage": { "alias": "tooManyItemsMessage"; "required": false; "isSignal": true; }; "tooManyItemsGroupedMessage": { "alias": "tooManyItemsGroupedMessage"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportButtonTitle": { "alias": "exportButtonTitle"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
91
96
  }
92
97
  export {};
@@ -1,9 +1,13 @@
1
+ import { ChartLegendItem } from '../chart-legend/chart-legend.component';
1
2
  import * as i0 from "@angular/core";
2
3
  export declare class ChartExportButtonComponent {
3
4
  readonly svgRef: import("@angular/core").InputSignal<SVGSVGElement>;
4
5
  readonly filename: import("@angular/core").InputSignal<string>;
6
+ readonly buttonTitle: import("@angular/core").InputSignal<string>;
7
+ /** Legend items to include below the chart in the exported file. */
8
+ readonly legendItems: import("@angular/core").InputSignal<ChartLegendItem[]>;
5
9
  private readonly exportService;
6
10
  export(format: 'svg' | 'png'): void;
7
11
  static ɵfac: i0.ɵɵFactoryDeclaration<ChartExportButtonComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<ChartExportButtonComponent, "cng-chart-export-button", never, { "svgRef": { "alias": "svgRef"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChartExportButtonComponent, "cng-chart-export-button", never, { "svgRef": { "alias": "svgRef"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "buttonTitle": { "alias": "buttonTitle"; "required": false; "isSignal": true; }; "legendItems": { "alias": "legendItems"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9
13
  }
@@ -1,9 +1,19 @@
1
+ import { ChartLegendItem } from '../chart-legend/chart-legend.component';
1
2
  import * as i0 from "@angular/core";
2
3
  export declare class ChartExportService {
3
- exportSvg(svgEl: SVGSVGElement, filename: string): void;
4
- exportPng(svgEl: SVGSVGElement, filename: string): void;
4
+ exportSvg(svgEl: SVGSVGElement, filename: string, legendItems?: ChartLegendItem[]): void;
5
+ exportPng(svgEl: SVGSVGElement, filename: string, legendItems?: ChartLegendItem[]): void;
6
+ private buildExportSvg;
7
+ private buildLegendGroup;
8
+ private legendItemsPerRow;
5
9
  private toCanvas;
6
- private cloneWithDimensions;
10
+ /** Recursively resolves `var(--x)` references in inline style and presentation attributes. */
11
+ private resolveStyleVariables;
12
+ /** Inlines `font-family` on every `<text>` / `<tspan>` element that doesn't already have one. */
13
+ private inlineFontFamily;
14
+ private resolveVarsInString;
15
+ private resolveColor;
16
+ private getDocumentFontFamily;
7
17
  private download;
8
18
  static ɵfac: i0.ɵɵFactoryDeclaration<ChartExportService, never>;
9
19
  static ɵprov: i0.ɵɵInjectableDeclaration<ChartExportService>;
@@ -50,6 +50,7 @@ export declare class ComboChartComponent extends ChartBase<SelectedComboItem> im
50
50
  readonly tooltipOrientation: import("@angular/core").InputSignal<"top" | "bottom">;
51
51
  readonly showLegend: import("@angular/core").InputSignal<boolean>;
52
52
  readonly showExportButton: import("@angular/core").InputSignal<boolean>;
53
+ readonly exportButtonTitle: import("@angular/core").InputSignal<string>;
53
54
  readonly exportFilename: import("@angular/core").InputSignal<string>;
54
55
  readonly noItemsMessage: import("@angular/core").InputSignal<string>;
55
56
  readonly tooltipPercentOfTotal: import("@angular/core").InputSignal<string>;
@@ -59,6 +60,10 @@ export declare class ComboChartComponent extends ChartBase<SelectedComboItem> im
59
60
  readonly yAxisLabel: import("@angular/core").InputSignal<string>;
60
61
  /** Optional label rendered rotated to the right of the Y axis (line scale). */
61
62
  readonly yLineAxisLabel: import("@angular/core").InputSignal<string>;
63
+ /** Optional fixed maximum value for the bar Y axis (left). Defaults to auto. */
64
+ readonly yBarMax: import("@angular/core").InputSignal<number>;
65
+ /** Optional fixed maximum value for the line Y axis (right). Defaults to auto. */
66
+ readonly yLineMax: import("@angular/core").InputSignal<number>;
62
67
  readonly valueClicked: import("@angular/core").OutputEmitterRef<ComboChartValue>;
63
68
  private readonly MARGIN;
64
69
  protected readonly hasData: import("@angular/core").Signal<boolean>;
@@ -72,6 +77,6 @@ export declare class ComboChartComponent extends ChartBase<SelectedComboItem> im
72
77
  private drawBars;
73
78
  private drawLines;
74
79
  static ɵfac: i0.ɵɵFactoryDeclaration<ComboChartComponent, never>;
75
- static ɵcmp: i0.ɵɵComponentDeclaration<ComboChartComponent, "clr-combo-chart", never, { "barSeries": { "alias": "barSeries"; "required": false; "isSignal": true; }; "lineSeries": { "alias": "lineSeries"; "required": false; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; "yLineAxisLabel": { "alias": "yLineAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
80
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComboChartComponent, "clr-combo-chart", never, { "barSeries": { "alias": "barSeries"; "required": false; "isSignal": true; }; "lineSeries": { "alias": "lineSeries"; "required": false; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportButtonTitle": { "alias": "exportButtonTitle"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; "yLineAxisLabel": { "alias": "yLineAxisLabel"; "required": false; "isSignal": true; }; "yBarMax": { "alias": "yBarMax"; "required": false; "isSignal": true; }; "yLineMax": { "alias": "yLineMax"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
76
81
  }
77
82
  export {};
@@ -73,6 +73,7 @@ interface SpacerDataPoint {
73
73
  export declare class FunnelChartComponent extends ChartBase<FunnelDataPoint> implements OnChanges {
74
74
  readonly data: import("@angular/core").InputSignal<FunnelChartData[]>;
75
75
  readonly showExportButton: import("@angular/core").InputSignal<boolean>;
76
+ readonly exportButtonTitle: import("@angular/core").InputSignal<string>;
76
77
  readonly exportFilename: import("@angular/core").InputSignal<string>;
77
78
  /** Rendering mode. 'default' = horizontal bars with sections; 'centered' = centered trapezoid funnel. */
78
79
  readonly orientation: import("@angular/core").InputSignal<"default" | "centered">;
@@ -148,6 +149,6 @@ export declare class FunnelChartComponent extends ChartBase<FunnelDataPoint> imp
148
149
  private getBarHeight;
149
150
  private round;
150
151
  static ɵfac: i0.ɵɵFactoryDeclaration<FunnelChartComponent, never>;
151
- static ɵcmp: i0.ɵɵComponentDeclaration<FunnelChartComponent, "clr-funnel-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "textSize": { "alias": "textSize"; "required": false; "isSignal": true; }; "lineTextPadding": { "alias": "lineTextPadding"; "required": false; "isSignal": true; }; "barGap": { "alias": "barGap"; "required": false; "isSignal": true; }; "sideLineVerticalPadding": { "alias": "sideLineVerticalPadding"; "required": false; "isSignal": true; }; "minLineSize": { "alias": "minLineSize"; "required": false; "isSignal": true; }; "barToSpacerRatio": { "alias": "barToSpacerRatio"; "required": false; "isSignal": true; }; "middleLineVerticalPadding": { "alias": "middleLineVerticalPadding"; "required": false; "isSignal": true; }; "barColor": { "alias": "barColor"; "required": false; "isSignal": true; }; "spacerColor": { "alias": "spacerColor"; "required": false; "isSignal": true; }; "chartLabels": { "alias": "chartLabels"; "required": false; "isSignal": true; }; "sectionColors": { "alias": "sectionColors"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
152
+ static ɵcmp: i0.ɵɵComponentDeclaration<FunnelChartComponent, "clr-funnel-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportButtonTitle": { "alias": "exportButtonTitle"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "textSize": { "alias": "textSize"; "required": false; "isSignal": true; }; "lineTextPadding": { "alias": "lineTextPadding"; "required": false; "isSignal": true; }; "barGap": { "alias": "barGap"; "required": false; "isSignal": true; }; "sideLineVerticalPadding": { "alias": "sideLineVerticalPadding"; "required": false; "isSignal": true; }; "minLineSize": { "alias": "minLineSize"; "required": false; "isSignal": true; }; "barToSpacerRatio": { "alias": "barToSpacerRatio"; "required": false; "isSignal": true; }; "middleLineVerticalPadding": { "alias": "middleLineVerticalPadding"; "required": false; "isSignal": true; }; "barColor": { "alias": "barColor"; "required": false; "isSignal": true; }; "spacerColor": { "alias": "spacerColor"; "required": false; "isSignal": true; }; "chartLabels": { "alias": "chartLabels"; "required": false; "isSignal": true; }; "sectionColors": { "alias": "sectionColors"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
152
153
  }
153
154
  export {};
@@ -16,6 +16,7 @@ export declare class LineChartComponent extends ChartBase<LineChartSelectedPoint
16
16
  readonly showLegend: import("@angular/core").InputSignal<boolean>;
17
17
  readonly showValues: import("@angular/core").InputSignal<boolean>;
18
18
  readonly showExportButton: import("@angular/core").InputSignal<boolean>;
19
+ readonly exportButtonTitle: import("@angular/core").InputSignal<string>;
19
20
  readonly exportFilename: import("@angular/core").InputSignal<string>;
20
21
  readonly noItemsMessage: import("@angular/core").InputSignal<string>;
21
22
  readonly tooltipPercentOfTotal: import("@angular/core").InputSignal<string>;
@@ -36,5 +37,5 @@ export declare class LineChartComponent extends ChartBase<LineChartSelectedPoint
36
37
  private drawSeries;
37
38
  private openTooltip;
38
39
  static ɵfac: i0.ɵɵFactoryDeclaration<LineChartComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<LineChartComponent, "clr-line-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "showArea": { "alias": "showArea"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<LineChartComponent, "clr-line-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "showArea": { "alias": "showArea"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportButtonTitle": { "alias": "exportButtonTitle"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
40
41
  }
@@ -19,6 +19,7 @@ export declare class PieChartComponent extends ChartBase<PieChartData> implement
19
19
  readonly donut: import("@angular/core").InputSignal<boolean>;
20
20
  readonly showLegend: import("@angular/core").InputSignal<boolean>;
21
21
  readonly showExportButton: import("@angular/core").InputSignal<boolean>;
22
+ readonly exportButtonTitle: import("@angular/core").InputSignal<string>;
22
23
  readonly exportFilename: import("@angular/core").InputSignal<string>;
23
24
  readonly tooltipOrientation: import("@angular/core").InputSignal<"top" | "bottom">;
24
25
  readonly noItemsMessage: import("@angular/core").InputSignal<string>;
@@ -35,5 +36,5 @@ export declare class PieChartComponent extends ChartBase<PieChartData> implement
35
36
  protected updateChart(): void;
36
37
  private openTooltip;
37
38
  static ɵfac: i0.ɵɵFactoryDeclaration<PieChartComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<PieChartComponent, "clr-pie-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "donut": { "alias": "donut"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<PieChartComponent, "clr-pie-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "donut": { "alias": "donut"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showExportButton": { "alias": "showExportButton"; "required": false; "isSignal": true; }; "exportButtonTitle": { "alias": "exportButtonTitle"; "required": false; "isSignal": true; }; "exportFilename": { "alias": "exportFilename"; "required": false; "isSignal": true; }; "tooltipOrientation": { "alias": "tooltipOrientation"; "required": false; "isSignal": true; }; "noItemsMessage": { "alias": "noItemsMessage"; "required": false; "isSignal": true; }; "tooltipPercentOfTotal": { "alias": "tooltipPercentOfTotal"; "required": false; "isSignal": true; }; }, { "valueClicked": "valueClicked"; }, never, never, false, never>;
39
40
  }
@@ -1,22 +1,26 @@
1
1
  import { EventEmitter, OnInit, QueryList } from '@angular/core';
2
2
  import { ClrDatagridColumn } from '@clr/angular';
3
3
  import * as i0 from "@angular/core";
4
+ interface ColumnOrderChangedEvent<T> {
5
+ columns: T[];
6
+ from?: number;
7
+ to?: number;
8
+ trigger: 'init' | 'drag' | 'reset';
9
+ }
4
10
  export declare class DatagridColumnReorderDirective<T extends {
5
11
  name: string;
6
12
  }> implements OnInit {
7
13
  columnDefinitions: T[];
8
- columnOrderChanged: EventEmitter<{
9
- columns: T[];
10
- from?: number;
11
- to?: number;
12
- trigger: "init" | "drag";
13
- }>;
14
+ columnOrderChanged: EventEmitter<ColumnOrderChangedEvent<T>> & {
15
+ emit: (value: ColumnOrderChangedEvent<T>) => void;
16
+ };
14
17
  clrColumns: QueryList<ClrDatagridColumn>;
15
18
  private readonly cdkDropList;
16
19
  private readonly datagrid;
17
20
  private readonly destroyRef;
18
21
  ngOnInit(): void;
19
22
  initializeColumnOrder(storedOrder: Record<string, number>): void;
23
+ resetColumnOrder(columns: T[]): void;
20
24
  private reconcileColumnOrder;
21
25
  private updateColumnOrder;
22
26
  private updateSeparatorVisibility;
@@ -25,3 +29,4 @@ export declare class DatagridColumnReorderDirective<T extends {
25
29
  static ɵfac: i0.ɵɵFactoryDeclaration<DatagridColumnReorderDirective<any>, never>;
26
30
  static ɵdir: i0.ɵɵDirectiveDeclaration<DatagridColumnReorderDirective<any>, "[clrDatagridColumnReorder]", never, { "columnDefinitions": { "alias": "clrDatagridColumnReorder"; "required": false; }; }, { "columnOrderChanged": "clrDatagridColumnOrderChanged"; }, ["clrColumns"], never, false, never>;
27
31
  }
32
+ export {};
@@ -45,6 +45,7 @@ export declare class StatePersistenceKeyDirective implements AfterContentInit, O
45
45
  private persistSorting;
46
46
  private persistColumnWidths;
47
47
  private persistColumnOrder;
48
+ private resetColumnOrder;
48
49
  /**
49
50
  * Pagination description must be set by this directive,
50
51
  * otherwise we can't update datagrid values from localStorage
@@ -1,3 +1,4 @@
1
+ import { ClrDatagridStatePersistenceModel } from './datagrid-state-persistence-model.interface';
1
2
  export interface StatePersistenceOptions {
2
3
  key: string;
3
4
  serverDriven: boolean;
@@ -7,4 +8,7 @@ export interface StatePersistenceOptions {
7
8
  persistHiddenColumns?: boolean;
8
9
  persistColumnWidths?: boolean;
9
10
  persistColumnOrder?: boolean;
11
+ persistColumnOrderTransformer?: (state: ClrDatagridStatePersistenceModel, columns: {
12
+ name: string;
13
+ }[]) => void;
10
14
  }
@@ -11988,7 +11988,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
11988
11988
  class DatagridColumnReorderDirective {
11989
11989
  constructor() {
11990
11990
  this.columnDefinitions = [];
11991
- this.columnOrderChanged = new EventEmitter();
11991
+ this.columnOrderChanged = Object.assign(new EventEmitter(), {
11992
+ emit: (value) => {
11993
+ this.columnOrderChanged.next(value);
11994
+ // after change detection, columns need to be rerendered first
11995
+ setTimeout(() => this.updateSeparatorVisibility(), 0);
11996
+ // After Angular has reordered the DOM,
11997
+ // force Clarity to re-project columns in the new order by triggering its render cycle.
11998
+ // DatagridRenderOrganizer is not publicly exported, so we access it via the datagrid instance.
11999
+ setTimeout(() => this.datagrid.organizer?.resize());
12000
+ },
12001
+ });
11992
12002
  this.cdkDropList = inject(CdkDropList);
11993
12003
  this.datagrid = inject(ClrDatagrid);
11994
12004
  this.destroyRef = inject(DestroyRef);
@@ -12013,8 +12023,9 @@ class DatagridColumnReorderDirective {
12013
12023
  initializeColumnOrder(storedOrder) {
12014
12024
  const orderedColumns = this.reconcileColumnOrder(this.columnDefinitions, storedOrder);
12015
12025
  this.columnOrderChanged.emit({ columns: orderedColumns, trigger: 'init' });
12016
- // after change detection, columns need to be rerendered first
12017
- setTimeout(() => this.updateSeparatorVisibility(), 0);
12026
+ }
12027
+ resetColumnOrder(columns) {
12028
+ this.columnOrderChanged.emit({ columns, trigger: 'reset' });
12018
12029
  }
12019
12030
  // This is needed in case there is a new column, which is not stored in the storage.
12020
12031
  // In that case we put it at the end of the list.
@@ -12028,7 +12039,7 @@ class DatagridColumnReorderDirective {
12028
12039
  updateColumnOrder(dragPreviousIndex, dragCurrentIndex) {
12029
12040
  // we need to divide the indexes by two, because each column has two draggable elements:
12030
12041
  // - the column itself and the resize handle
12031
- const from = dragPreviousIndex / 2;
12042
+ const from = Math.floor((dragPreviousIndex + 1) / 2);
12032
12043
  const to = Math.floor((dragCurrentIndex + 1) / 2);
12033
12044
  if (from === to) {
12034
12045
  // no change, do nothing
@@ -12037,8 +12048,6 @@ class DatagridColumnReorderDirective {
12037
12048
  const columnDefinitionCopy = [...this.columnDefinitions];
12038
12049
  moveItemInArray(columnDefinitionCopy, from, to);
12039
12050
  this.columnOrderChanged.emit({ columns: columnDefinitionCopy, from, to, trigger: 'drag' });
12040
- // after change detection, columns need to be rerendered first
12041
- setTimeout(() => this.updateSeparatorVisibility(), 0);
12042
12051
  }
12043
12052
  // show separator for all but the last visible column
12044
12053
  updateSeparatorVisibility() {
@@ -12161,7 +12170,7 @@ class StatePersistenceKeyDirective {
12161
12170
  }
12162
12171
  const columnOrderPersistenceEnabled = this.options.persistColumnOrder ?? false;
12163
12172
  if (columnOrderPersistenceEnabled && !!this.reorderDirective) {
12164
- this.initColumnOrderPersister(localStorageState);
12173
+ this.initColumnOrderPersister();
12165
12174
  this.initColumnOrder(localStorageState);
12166
12175
  }
12167
12176
  const paginationPersistenceEnabled = this.options.persistPagination ?? true;
@@ -12258,12 +12267,12 @@ class StatePersistenceKeyDirective {
12258
12267
  });
12259
12268
  this.datagrid.items.change.pipe(takeUntil(this.destroy$)).subscribe(() => this.updatePaginationDescription());
12260
12269
  }
12261
- initColumnOrderPersister(state) {
12270
+ initColumnOrderPersister() {
12262
12271
  this.reorderDirective.columnOrderChanged
12263
12272
  .pipe(takeUntil(this.destroy$),
12264
12273
  // we skip the first value (init), because it's already coming from the local storage, so no need to save it again
12265
12274
  filter$1(({ trigger }) => trigger !== 'init'))
12266
- .subscribe(({ columns }) => this.persistColumnOrder(state, columns));
12275
+ .subscribe(({ trigger, columns }) => trigger === 'reset' ? this.resetColumnOrder() : this.persistColumnOrder(columns));
12267
12276
  }
12268
12277
  initColumnOrder(savedState) {
12269
12278
  if (savedState?.columns) {
@@ -12319,12 +12328,26 @@ class StatePersistenceKeyDirective {
12319
12328
  this.saveLocalStorageState(state);
12320
12329
  }
12321
12330
  }
12322
- persistColumnOrder(state, columns) {
12331
+ persistColumnOrder(columns) {
12332
+ const state = this.getLocalStorageState();
12323
12333
  state.columns = state.columns || {};
12324
- columns.forEach(({ name }, index) => {
12325
- state.columns[name] = state.columns[name] || {};
12326
- state.columns[name].order = index;
12327
- });
12334
+ if (this.options.persistColumnOrderTransformer) {
12335
+ this.options.persistColumnOrderTransformer(state, columns);
12336
+ }
12337
+ else {
12338
+ columns.forEach(({ name }, index) => {
12339
+ state.columns[name] = state.columns[name] || {};
12340
+ state.columns[name].order = index;
12341
+ });
12342
+ }
12343
+ this.saveLocalStorageState(state);
12344
+ }
12345
+ resetColumnOrder() {
12346
+ const state = this.getLocalStorageState();
12347
+ state.columns = state.columns || {};
12348
+ for (const name in state.columns) {
12349
+ state.columns[name].order = undefined;
12350
+ }
12328
12351
  this.saveLocalStorageState(state);
12329
12352
  }
12330
12353
  /**