@porscheinformatik/clr-addons 21.1.3 → 21.3.0
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 +25 -15
- package/fesm2022/porscheinformatik-clr-addons-charts.mjs.map +1 -1
- package/fesm2022/porscheinformatik-clr-addons.mjs +369 -52
- package/fesm2022/porscheinformatik-clr-addons.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/clr-addons-phs.css +102 -26
- 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 +3 -1
- package/types/porscheinformatik-clr-addons.d.ts +69 -8
|
@@ -130,10 +130,12 @@ declare class BarChartComponent extends ChartBase<BarChartDataPoint> implements
|
|
|
130
130
|
readonly noItemsMessage: _angular_core.InputSignal<string>;
|
|
131
131
|
readonly tooManyItemsMessage: _angular_core.InputSignal<string>;
|
|
132
132
|
readonly tooManyItemsGroupedMessage: _angular_core.InputSignal<string>;
|
|
133
|
+
readonly allValuesZeroMessage: _angular_core.InputSignal<string>;
|
|
133
134
|
readonly showLegend: _angular_core.InputSignal<boolean>;
|
|
134
135
|
readonly showExportButton: _angular_core.InputSignal<boolean>;
|
|
135
136
|
readonly exportButtonTitle: _angular_core.InputSignal<string>;
|
|
136
137
|
readonly exportFilename: _angular_core.InputSignal<string>;
|
|
138
|
+
protected readonly allValuesZero: _angular_core.Signal<boolean>;
|
|
137
139
|
/** Optional label rendered below the X axis. */
|
|
138
140
|
readonly xAxisLabel: _angular_core.InputSignal<string>;
|
|
139
141
|
/** Optional label rendered rotated to the left of the Y axis. */
|
|
@@ -185,7 +187,7 @@ declare class BarChartComponent extends ChartBase<BarChartDataPoint> implements
|
|
|
185
187
|
private mapItems;
|
|
186
188
|
private getMaxAmountOfItems;
|
|
187
189
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartComponent, never>;
|
|
188
|
-
static ɵcmp: _angular_core.ɵɵ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>;
|
|
190
|
+
static ɵcmp: _angular_core.ɵɵ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; }; "allValuesZeroMessage": { "alias": "allValuesZeroMessage"; "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>;
|
|
189
191
|
}
|
|
190
192
|
|
|
191
193
|
type LineChartSelectedPoint = XYChartPoint & {
|
|
@@ -157,6 +157,9 @@ declare class ClrViewEditSection implements AfterViewInit {
|
|
|
157
157
|
_isCollapsed: boolean;
|
|
158
158
|
_titleTextStyle: ClrViewEditSectionTitleTextStyle;
|
|
159
159
|
_titleTextFontWeight: ClrViewEditSectionTitleTextFontWeight;
|
|
160
|
+
_showBadge: boolean;
|
|
161
|
+
_badgeContent: string;
|
|
162
|
+
_badgeClass: string | string[];
|
|
160
163
|
viewRef: TemplateRef<any>;
|
|
161
164
|
editRef: TemplateRef<any>;
|
|
162
165
|
_isCollapsedChange: EventEmitter<boolean>;
|
|
@@ -176,7 +179,7 @@ declare class ClrViewEditSection implements AfterViewInit {
|
|
|
176
179
|
private toggleCollapsed;
|
|
177
180
|
onCollapseExpand(): void;
|
|
178
181
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrViewEditSection, never>;
|
|
179
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrViewEditSection, "clr-view-edit-section", never, { "_title": { "alias": "clrTitle"; "required": false; }; "_saveText": { "alias": "clrSaveText"; "required": false; }; "_preventSave": { "alias": "clrPreventModeChangeOnSave"; "required": false; }; "_cancelText": { "alias": "clrCancelText"; "required": false; }; "_editable": { "alias": "clrEditable"; "required": false; }; "_editIcon": { "alias": "clrEditIcon"; "required": false; }; "_isCollapsible": { "alias": "clrIsCollapsible"; "required": false; }; "_isCollapsed": { "alias": "clrIsCollapsed"; "required": false; }; "_titleTextStyle": { "alias": "clrTitleTextStyle"; "required": false; }; "_titleTextFontWeight": { "alias": "clrTitleTextFontWeight"; "required": false; }; "viewRef": { "alias": "clrViewRef"; "required": false; }; "editRef": { "alias": "clrEditRef"; "required": false; }; "editMode": { "alias": "clrEditMode"; "required": false; }; }, { "_isCollapsedChange": "clrIsCollapsedChange"; "_editModeChanged": "clrEditModeChange"; "_submitted": "clrSectionSubmitted"; "_cancelled": "clrSectionEditCancelled"; }, never, ["[action-block]"], false, never>;
|
|
182
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrViewEditSection, "clr-view-edit-section", never, { "_title": { "alias": "clrTitle"; "required": false; }; "_saveText": { "alias": "clrSaveText"; "required": false; }; "_preventSave": { "alias": "clrPreventModeChangeOnSave"; "required": false; }; "_cancelText": { "alias": "clrCancelText"; "required": false; }; "_editable": { "alias": "clrEditable"; "required": false; }; "_editIcon": { "alias": "clrEditIcon"; "required": false; }; "_isCollapsible": { "alias": "clrIsCollapsible"; "required": false; }; "_isCollapsed": { "alias": "clrIsCollapsed"; "required": false; }; "_titleTextStyle": { "alias": "clrTitleTextStyle"; "required": false; }; "_titleTextFontWeight": { "alias": "clrTitleTextFontWeight"; "required": false; }; "_showBadge": { "alias": "clrShowBadge"; "required": false; }; "_badgeContent": { "alias": "clrBadgeContent"; "required": false; }; "_badgeClass": { "alias": "clrBadgeClass"; "required": false; }; "viewRef": { "alias": "clrViewRef"; "required": false; }; "editRef": { "alias": "clrEditRef"; "required": false; }; "editMode": { "alias": "clrEditMode"; "required": false; }; }, { "_isCollapsedChange": "clrIsCollapsedChange"; "_editModeChanged": "clrEditModeChange"; "_submitted": "clrSectionSubmitted"; "_cancelled": "clrSectionEditCancelled"; }, never, ["[badge]", "[action-block]"], false, never>;
|
|
180
183
|
}
|
|
181
184
|
|
|
182
185
|
declare class ClrViewEditSectionModule {
|
|
@@ -514,16 +517,19 @@ declare class ClrFlowBar implements OnInit {
|
|
|
514
517
|
}
|
|
515
518
|
|
|
516
519
|
declare class ClrDropdownOverflowDirective implements AfterViewChecked, OnDestroy {
|
|
517
|
-
private elRef;
|
|
520
|
+
private readonly elRef;
|
|
521
|
+
private readonly ngZone;
|
|
518
522
|
clrDropdownMenuMaxHeight: string | number;
|
|
519
523
|
clrDropdownMenuItemMinHeight: string | number;
|
|
520
524
|
set clrMarginBottom(value: string | number);
|
|
521
|
-
private nestedDropdownChildren;
|
|
525
|
+
private readonly nestedDropdownChildren;
|
|
522
526
|
readonly defaultItemMinHeightRem = 1.5;
|
|
523
527
|
private alreadyChecked;
|
|
524
528
|
private marginBottomPx;
|
|
529
|
+
private deferredCheckPending;
|
|
530
|
+
private requestAnimationFrameRetry;
|
|
525
531
|
private nestedDropdownSubscription;
|
|
526
|
-
constructor(elRef: ElementRef);
|
|
532
|
+
constructor(elRef: ElementRef, ngZone: NgZone);
|
|
527
533
|
ngAfterViewChecked(): void;
|
|
528
534
|
ngOnDestroy(): void;
|
|
529
535
|
private applyDropdownOverflowStyles;
|
|
@@ -748,8 +754,12 @@ interface ClrTreetableState<T, F = unknown> {
|
|
|
748
754
|
}
|
|
749
755
|
|
|
750
756
|
declare class ClrTreetable<T extends object> {
|
|
757
|
+
readonly treetableId: string;
|
|
758
|
+
protected readonly selectAllId: string;
|
|
751
759
|
private readonly _dataStateService;
|
|
752
760
|
private readonly _recursionService;
|
|
761
|
+
private readonly _commonStringsService;
|
|
762
|
+
protected readonly commonStrings: Readonly<i3.ClrCommonStrings>;
|
|
753
763
|
clrClickableRows: i0.InputSignal<boolean>;
|
|
754
764
|
clrHideHeader: i0.InputSignal<boolean>;
|
|
755
765
|
clrTtLoading: i0.InputSignal<boolean>;
|
|
@@ -872,6 +882,8 @@ declare class ClrTreetableColumn<T extends object> implements OnInit, OnDestroy
|
|
|
872
882
|
private readonly _internalSortOrder;
|
|
873
883
|
clrTtSortOrder: i0.InputSignal<ClrTreetableSortOrder>;
|
|
874
884
|
clrTtSortOrderChange: i0.OutputRef<ClrTreetableSortOrder>;
|
|
885
|
+
clrTtColumnSize: i0.InputSignal<number>;
|
|
886
|
+
clrTtColumnResize: i0.OutputRef<number>;
|
|
875
887
|
protected readonly isSortable: i0.Signal<boolean>;
|
|
876
888
|
protected readonly sortDirection: i0.Signal<"up" | "down">;
|
|
877
889
|
protected readonly ariaSort: i0.Signal<"none" | "ascending" | "descending">;
|
|
@@ -880,7 +892,7 @@ declare class ClrTreetableColumn<T extends object> implements OnInit, OnDestroy
|
|
|
880
892
|
constructor();
|
|
881
893
|
protected sort(reverse?: boolean): void;
|
|
882
894
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrTreetableColumn<any>, never>;
|
|
883
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrTreetableColumn<any>, "clr-tt-column", never, { "clrTtSortBy": { "alias": "clrTtSortBy"; "required": false; "isSignal": true; }; "clrTtSortOrder": { "alias": "clrTtSortOrder"; "required": false; "isSignal": true; }; }, { "clrTtSortOrderChange": "clrTtSortOrderChange"; }, never, ["clr-tt-filter, clr-tt-string-filter", "*"], false, never>;
|
|
895
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrTreetableColumn<any>, "clr-tt-column", never, { "clrTtSortBy": { "alias": "clrTtSortBy"; "required": false; "isSignal": true; }; "clrTtSortOrder": { "alias": "clrTtSortOrder"; "required": false; "isSignal": true; }; "clrTtColumnSize": { "alias": "clrTtColumnSize"; "required": false; "isSignal": true; }; }, { "clrTtSortOrderChange": "clrTtSortOrderChange"; "clrTtColumnResize": "clrTtColumnResize"; }, never, ["clr-tt-filter, clr-tt-string-filter", "*"], false, never>;
|
|
884
896
|
}
|
|
885
897
|
|
|
886
898
|
/**
|
|
@@ -908,7 +920,7 @@ declare class ClrTreetableHideableColumn implements OnInit, OnDestroy {
|
|
|
908
920
|
hidden: boolean;
|
|
909
921
|
initial?: boolean;
|
|
910
922
|
}>;
|
|
911
|
-
clrTtHiddenChange: i0.
|
|
923
|
+
clrTtHiddenChange: i0.OutputRef<boolean>;
|
|
912
924
|
private readonly resolvedHidden;
|
|
913
925
|
constructor();
|
|
914
926
|
ngOnInit(): void;
|
|
@@ -964,7 +976,8 @@ declare class TreetableMainRenderer {
|
|
|
964
976
|
private render;
|
|
965
977
|
private applyRules;
|
|
966
978
|
private createClassesRule;
|
|
967
|
-
private
|
|
979
|
+
private createColumnCellWidthRule;
|
|
980
|
+
private createColumnResizeWidthRule;
|
|
968
981
|
private createDisplayRule;
|
|
969
982
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreetableMainRenderer, never>;
|
|
970
983
|
static ɵdir: i0.ɵɵDirectiveDeclaration<TreetableMainRenderer, "clr-treetable", never, {}, {}, ["headers", "rows", "columns"], never, false, never>;
|
|
@@ -984,6 +997,7 @@ declare class TreetableHeaderRenderer {
|
|
|
984
997
|
*/
|
|
985
998
|
getColumnClasses(): string[];
|
|
986
999
|
setDefaultColumnClass(): void;
|
|
1000
|
+
setWidth(width: number): void;
|
|
987
1001
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreetableHeaderRenderer, never>;
|
|
988
1002
|
static ɵdir: i0.ɵɵDirectiveDeclaration<TreetableHeaderRenderer, "clr-tt-column", never, {}, {}, never, never, false, never>;
|
|
989
1003
|
}
|
|
@@ -995,6 +1009,7 @@ declare class TreetableCellRenderer {
|
|
|
995
1009
|
hide(): void;
|
|
996
1010
|
show(): void;
|
|
997
1011
|
setMaxWidth(maxWidth: number): void;
|
|
1012
|
+
setWidth(width: number): void;
|
|
998
1013
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreetableCellRenderer, never>;
|
|
999
1014
|
static ɵdir: i0.ɵɵDirectiveDeclaration<TreetableCellRenderer, "clr-tt-cell", never, {}, {}, never, never, false, never>;
|
|
1000
1015
|
}
|
|
@@ -1155,10 +1170,56 @@ declare class ClrTreetableColumnManagerMenuComponent {
|
|
|
1155
1170
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrTreetableColumnManagerMenuComponent, "clr-tt-column-manager-menu", never, { "resetLabel": { "alias": "resetLabel"; "required": true; "isSignal": true; }; }, {}, never, never, false, [{ directive: typeof i3.ClrPopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
1156
1171
|
}
|
|
1157
1172
|
|
|
1173
|
+
declare class ClrTreetableColumnSeparator implements AfterViewInit, OnDestroy {
|
|
1174
|
+
columnId: i0.InputSignal<string>;
|
|
1175
|
+
private readonly _columnState;
|
|
1176
|
+
private readonly _commonStringsService;
|
|
1177
|
+
private readonly _renderer;
|
|
1178
|
+
private readonly _ngZone;
|
|
1179
|
+
private readonly _el;
|
|
1180
|
+
private readonly _resizeTracker;
|
|
1181
|
+
private readonly _columnHandle;
|
|
1182
|
+
protected readonly commonStrings: Readonly<i3.ClrCommonStrings>;
|
|
1183
|
+
private _minContentWidth;
|
|
1184
|
+
private _widthBeforeResize;
|
|
1185
|
+
private _resizedBy;
|
|
1186
|
+
private _isWithinMaxResizeRange;
|
|
1187
|
+
private _resizeStartedOnKeyDown;
|
|
1188
|
+
private readonly _unlisteners;
|
|
1189
|
+
ngAfterViewInit(): void;
|
|
1190
|
+
ngOnDestroy(): void;
|
|
1191
|
+
private _onPointerDown;
|
|
1192
|
+
private _showTrackerOnFirstKeyDown;
|
|
1193
|
+
private _moveTrackerOnKeyDown;
|
|
1194
|
+
private _hideTrackerOnKeyUp;
|
|
1195
|
+
private _startResize;
|
|
1196
|
+
private _calculateResize;
|
|
1197
|
+
private _endResize;
|
|
1198
|
+
private _showTracker;
|
|
1199
|
+
private _moveTracker;
|
|
1200
|
+
private _hideTracker;
|
|
1201
|
+
private _getColumnElement;
|
|
1202
|
+
private _getTableHeight;
|
|
1203
|
+
private _isArrowHorizontal;
|
|
1204
|
+
/**
|
|
1205
|
+
* Measures the intrinsic `min-content` width (incl. padding & border, rounded
|
|
1206
|
+
* to whole pixels) of the given column by temporarily forcing `width: min-content`
|
|
1207
|
+
* directly on the element, then restoring the previous inline value.
|
|
1208
|
+
*
|
|
1209
|
+
* `.treetable-column` already declares `min-width: min-content`; forcing the
|
|
1210
|
+
* `width` collapses it so `getBoundingClientRect()` reports the min-content box.
|
|
1211
|
+
*
|
|
1212
|
+
* Falls back to (and is floored at) the MIN_COLUMN_WIDTH constant.
|
|
1213
|
+
*/
|
|
1214
|
+
private measureMinContentWidth;
|
|
1215
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrTreetableColumnSeparator, never>;
|
|
1216
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrTreetableColumnSeparator, "clr-tt-column-separator", never, { "columnId": { "alias": "columnId"; "required": true; "isSignal": true; }; }, {}, never, never, false, never>;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1158
1219
|
declare class ClrTreetableModule {
|
|
1159
1220
|
constructor();
|
|
1160
1221
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrTreetableModule, never>;
|
|
1161
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ClrTreetableModule, [typeof ClrTreetable, typeof ClrTreetableRow, typeof ClrTreetableCell, typeof ClrTreetableColumn, typeof ClrTreetableHideableColumn, typeof ClrTreetableFooter, typeof ClrTreetablePlaceholder, typeof ClrTreetableActionOverflow, typeof TreetableMainRenderer, typeof TreetableHeaderRenderer, typeof TreetableRowRenderer, typeof TreetableCellRenderer, typeof TreetableItemsDirective, typeof ClrTreetableFilter, typeof ClrTreetableStringFilter, typeof ClrTreetableRecursiveRows, typeof ClrTreetableRowCheckbox, typeof ClrTreetableColumnManagerMenuComponent], [typeof i2.CommonModule, typeof i3.ClarityModule, typeof i4.ReactiveFormsModule, typeof i4.FormsModule, typeof i3.CdkTrapFocusModule], [typeof ClrTreetable, typeof ClrTreetableRow, typeof ClrTreetableCell, typeof ClrTreetableColumn, typeof ClrTreetableHideableColumn, typeof ClrTreetableFooter, typeof ClrTreetablePlaceholder, typeof ClrTreetableActionOverflow, typeof TreetableMainRenderer, typeof TreetableHeaderRenderer, typeof TreetableRowRenderer, typeof TreetableCellRenderer, typeof TreetableItemsDirective, typeof ClrTreetableFilter, typeof ClrTreetableStringFilter]>;
|
|
1222
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ClrTreetableModule, [typeof ClrTreetable, typeof ClrTreetableRow, typeof ClrTreetableCell, typeof ClrTreetableColumn, typeof ClrTreetableHideableColumn, typeof ClrTreetableFooter, typeof ClrTreetablePlaceholder, typeof ClrTreetableActionOverflow, typeof TreetableMainRenderer, typeof TreetableHeaderRenderer, typeof TreetableRowRenderer, typeof TreetableCellRenderer, typeof TreetableItemsDirective, typeof ClrTreetableFilter, typeof ClrTreetableStringFilter, typeof ClrTreetableRecursiveRows, typeof ClrTreetableRowCheckbox, typeof ClrTreetableColumnManagerMenuComponent, typeof ClrTreetableColumnSeparator], [typeof i2.CommonModule, typeof i3.ClarityModule, typeof i4.ReactiveFormsModule, typeof i4.FormsModule, typeof i3.CdkTrapFocusModule], [typeof ClrTreetable, typeof ClrTreetableRow, typeof ClrTreetableCell, typeof ClrTreetableColumn, typeof ClrTreetableHideableColumn, typeof ClrTreetableFooter, typeof ClrTreetablePlaceholder, typeof ClrTreetableActionOverflow, typeof TreetableMainRenderer, typeof TreetableHeaderRenderer, typeof TreetableRowRenderer, typeof TreetableCellRenderer, typeof TreetableItemsDirective, typeof ClrTreetableFilter, typeof ClrTreetableStringFilter]>;
|
|
1162
1223
|
static ɵinj: i0.ɵɵInjectorDeclaration<ClrTreetableModule>;
|
|
1163
1224
|
}
|
|
1164
1225
|
|