@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.
- package/charts/area-chart/area-chart.component.d.ts +2 -1
- package/charts/bar-chart/bar-chart.component.d.ts +7 -2
- package/charts/chart-export/chart-export-button.component.d.ts +5 -1
- package/charts/chart-export/chart-export.service.d.ts +13 -3
- package/charts/combo-chart/combo-chart.component.d.ts +6 -1
- package/charts/funnel-chart/funnel-chart.component.d.ts +2 -1
- package/charts/line-chart/line-chart.component.d.ts +2 -1
- package/charts/pie-chart/pie-chart.component.d.ts +2 -1
- package/datagrid/column-reorder/column-reorder.directive.d.ts +11 -6
- package/datagrid/datagrid-state-persistence/state-persistence-key.directive.d.ts +1 -0
- package/datagrid/datagrid-state-persistence/state-persistence-options.interface.d.ts +4 -0
- package/fesm2022/clr-addons.mjs +37 -14
- package/fesm2022/clr-addons.mjs.map +1 -1
- package/fesm2022/porscheinformatik-clr-addons-charts.mjs +214 -52
- package/fesm2022/porscheinformatik-clr-addons-charts.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/clr-addons-phs.css +4 -3
- 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
|
@@ -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
|
|
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; }; "
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
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
|
}
|
package/fesm2022/clr-addons.mjs
CHANGED
|
@@ -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
|
-
|
|
12017
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
12331
|
+
persistColumnOrder(columns) {
|
|
12332
|
+
const state = this.getLocalStorageState();
|
|
12323
12333
|
state.columns = state.columns || {};
|
|
12324
|
-
|
|
12325
|
-
state
|
|
12326
|
-
|
|
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
|
/**
|