@porscheinformatik/material-addons 16.0.1 → 16.0.3
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/esm2022/lib/button/button.mjs +7 -0
- package/esm2022/lib/button/button.module.mjs +26 -0
- package/esm2022/lib/button/danger-button/danger-button.component.mjs +28 -0
- package/esm2022/lib/button/flat-button/link-button.component.mjs +28 -0
- package/esm2022/lib/button/icon-button/icon-button.component.mjs +28 -0
- package/esm2022/lib/button/mad-basic-button.mjs +39 -0
- package/esm2022/lib/button/outline-button/outline-button.component.mjs +28 -0
- package/esm2022/lib/button/primary-button/primary-button.component.mjs +28 -0
- package/esm2022/lib/card/card.component.mjs +129 -0
- package/esm2022/lib/card/card.mjs +2 -0
- package/esm2022/lib/card/card.module.mjs +23 -0
- package/esm2022/lib/content-panel/content-header/content-header.component.mjs +11 -0
- package/esm2022/lib/content-panel/content-panel-container/content-panel-container.component.mjs +11 -0
- package/esm2022/lib/content-panel/content-panel-container-content/content-panel-container-content.component.mjs +11 -0
- package/esm2022/lib/content-panel/content-panel-container-footer/content-panel-container-footer.component.mjs +11 -0
- package/esm2022/lib/content-panel/content-panel.module.mjs +42 -0
- package/esm2022/lib/content-panel/main-container/main-container.component.mjs +11 -0
- package/esm2022/lib/data-table/data-table-action-type.mjs +6 -0
- package/esm2022/lib/data-table/data-table-action.mjs +2 -0
- package/esm2022/lib/data-table/data-table-column-definition.mjs +2 -0
- package/esm2022/lib/data-table/data-table-column.mjs +2 -0
- package/esm2022/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.mjs +103 -0
- package/esm2022/lib/data-table/data-table-row.mjs +2 -0
- package/esm2022/lib/data-table/data-table.component.mjs +527 -0
- package/esm2022/lib/data-table/data-table.mjs +3 -0
- package/esm2022/lib/data-table/data-table.module.mjs +81 -0
- package/esm2022/lib/flowbar/flowbar.component.mjs +190 -0
- package/esm2022/lib/flowbar/flowbar.module.mjs +19 -0
- package/esm2022/lib/material-action-button/material-action-button.component.mjs +34 -0
- package/esm2022/lib/material-action-button/material-action-button.module.mjs +22 -0
- package/esm2022/lib/material-addons.module.mjs +45 -0
- package/esm2022/lib/numeric-field/number-format.service.mjs +139 -0
- package/esm2022/lib/numeric-field/numeric-field.directive.mjs +295 -0
- package/esm2022/lib/numeric-field/numeric-field.mjs +2 -0
- package/esm2022/lib/numeric-field/numeric-field.module.mjs +24 -0
- package/esm2022/lib/quick-list/base-quick-list.component.mjs +101 -0
- package/esm2022/lib/quick-list/quick-list-compact/quick-list-compact.component.mjs +20 -0
- package/esm2022/lib/quick-list/quick-list.component.mjs +21 -0
- package/esm2022/lib/quick-list/quick-list.mjs +4 -0
- package/esm2022/lib/quick-list/quick-list.module.mjs +23 -0
- package/esm2022/lib/readonly/readonly-form-field/readonly-form-field.component.mjs +155 -0
- package/esm2022/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.mjs +185 -0
- package/esm2022/lib/readonly/readonly-form-field.module.mjs +24 -0
- package/esm2022/lib/stepper/mad-stepper-animation.mjs +13 -0
- package/esm2022/lib/stepper/step-header/step-header.component.mjs +77 -0
- package/esm2022/lib/stepper/stepper.component.mjs +159 -0
- package/esm2022/lib/stepper/stepper.module.mjs +23 -0
- package/esm2022/lib/table/column-header.mjs +2 -0
- package/esm2022/lib/table/table-action.mjs +2 -0
- package/esm2022/lib/table/table.component.mjs +130 -0
- package/esm2022/lib/table/table.mjs +2 -0
- package/esm2022/lib/table/table.module.mjs +56 -0
- package/esm2022/lib/throttle-click/throttle-click.directive.mjs +38 -0
- package/esm2022/lib/throttle-click/throttle-click.module.mjs +18 -0
- package/esm2022/lib/toolbar/toolbar-action.interface.mjs +2 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +78 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +56 -0
- package/esm2022/lib/toolbar/toolbar.service.mjs +124 -0
- package/esm2022/porscheinformatik-material-addons.mjs +5 -0
- package/esm2022/public_api.mjs +41 -0
- package/fesm2022/porscheinformatik-material-addons.mjs +2983 -0
- package/fesm2022/porscheinformatik-material-addons.mjs.map +1 -0
- package/package.json +4 -8
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewChildren, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class BaseQuickListComponent {
|
|
4
|
+
constructor(changeDetectorRef) {
|
|
5
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
6
|
+
this.allItems = [];
|
|
7
|
+
this.addLabel = 'NOT SET';
|
|
8
|
+
this.addPossible = true;
|
|
9
|
+
this.removePossible = true;
|
|
10
|
+
this.blankItem = {};
|
|
11
|
+
this.added = new EventEmitter();
|
|
12
|
+
this.removed = new EventEmitter();
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this.addEventFunction = this.addItem.bind(this);
|
|
16
|
+
if (this.minItems) {
|
|
17
|
+
for (let n = this.allItems.length; n < this.minItems; n++) {
|
|
18
|
+
this.interalAddItem();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
ngAfterViewInit() {
|
|
23
|
+
setTimeout(() => this.setFocusOnAdd(), 1);
|
|
24
|
+
}
|
|
25
|
+
addItem() {
|
|
26
|
+
const newItem = this.interalAddItem();
|
|
27
|
+
if (!!newItem) {
|
|
28
|
+
this.added.emit(newItem);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
removeItem(item) {
|
|
32
|
+
if (this.isDeleteAllowed()) {
|
|
33
|
+
this.allItems.splice(this.allItems.indexOf(item), 1);
|
|
34
|
+
this.removed.emit(item);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
setFocusOnAdd() {
|
|
38
|
+
this.rowCountFocus = this.itemRows.length;
|
|
39
|
+
this.itemRows.changes.subscribe((els) => {
|
|
40
|
+
if (els.length > this.rowCountFocus && !!els.last) {
|
|
41
|
+
const firstFocusable = els.last.nativeElement.querySelector("button, a, input, select, textarea, [tabindex]:not([tabindex='-1'])");
|
|
42
|
+
if (firstFocusable) {
|
|
43
|
+
firstFocusable.focus();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.rowCountFocus = els.length;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
isAddAllowed() {
|
|
50
|
+
return this.addPossible && (!this.maxItems || this.allItems.length < this.maxItems);
|
|
51
|
+
}
|
|
52
|
+
isDeleteAllowed() {
|
|
53
|
+
return this.removePossible && (!this.minItems || this.allItems.length > this.minItems);
|
|
54
|
+
}
|
|
55
|
+
interalAddItem() {
|
|
56
|
+
if (this.isAddAllowed()) {
|
|
57
|
+
const newItem = { ...this.blankItem };
|
|
58
|
+
// creates ids in the form of "n5kdz1pljl8"
|
|
59
|
+
newItem.id = Math.random()
|
|
60
|
+
.toString(36)
|
|
61
|
+
.substring(2);
|
|
62
|
+
this.allItems.push(newItem);
|
|
63
|
+
this.changeDetectorRef.detectChanges();
|
|
64
|
+
return newItem;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: BaseQuickListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: BaseQuickListComponent, selector: "mad-base-quick-list", inputs: { allItems: "allItems", addLabel: "addLabel", addPossible: "addPossible", removePossible: "removePossible", blankItem: "blankItem", readonly: "readonly", maxItems: "maxItems", minItems: "minItems" }, outputs: { added: "added", removed: "removed" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "itemRows", predicate: ["row"], descendants: true }], ngImport: i0, template: '', isInline: true }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: BaseQuickListComponent, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{ selector: 'mad-base-quick-list', template: '' }]
|
|
74
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { allItems: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}], addLabel: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], addPossible: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], removePossible: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], blankItem: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], readonly: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], maxItems: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], minItems: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], added: [{
|
|
91
|
+
type: Output
|
|
92
|
+
}], removed: [{
|
|
93
|
+
type: Output
|
|
94
|
+
}], itemTemplate: [{
|
|
95
|
+
type: ContentChild,
|
|
96
|
+
args: [TemplateRef]
|
|
97
|
+
}], itemRows: [{
|
|
98
|
+
type: ViewChildren,
|
|
99
|
+
args: ['row']
|
|
100
|
+
}] } });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1xdWljay1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL3F1aWNrLWxpc3QvYmFzZS1xdWljay1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDOztBQVd2QixNQUFNLE9BQU8sc0JBQXNCO0lBa0JqQyxZQUFtQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWpCOUMsYUFBUSxHQUFHLEVBQVMsQ0FBQztRQUNyQixhQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxFQUFTLENBQUM7UUFLckIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7SUFPZ0IsQ0FBQztJQUUzRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FB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Q0csT0FBTztzQkFBaEIsTUFBTTtnQkFDb0IsWUFBWTtzQkFBdEMsWUFBWTt1QkFBQyxXQUFXO2dCQUNKLFFBQVE7c0JBQTVCLFlBQVk7dUJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVpY2tMaXN0SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1iYXNlLXF1aWNrLWxpc3QnLFxuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlVXJsczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VRdWlja0xpc3RDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBhbGxJdGVtcyA9IFtdIGFzIFRbXTtcbiAgQElucHV0KCkgYWRkTGFiZWwgPSAnTk9UIFNFVCc7XG4gIEBJbnB1dCgpIGFkZFBvc3NpYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVtb3ZlUG9zc2libGUgPSB0cnVlO1xuICBASW5wdXQoKSBibGFua0l0ZW0gPSB7fSBhcyBhbnk7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuO1xuICBASW5wdXQoKSBtYXhJdGVtczogbnVtYmVyO1xuICBASW5wdXQoKSBtaW5JdGVtczogbnVtYmVyO1xuXG4gIEBPdXRwdXQoKSBhZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZHJlbigncm93JykgaXRlbVJvd3M6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICByb3dDb3VudEZvY3VzOiBudW1iZXI7XG4gIGFkZEV2ZW50RnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRFdmVudEZ1bmN0aW9uID0gdGhpcy5hZGRJdGVtLmJpbmQodGhpcyk7XG4gICAgaWYgKHRoaXMubWluSXRlbXMpIHtcbiAgICAgIGZvciAobGV0IG4gPSB0aGlzLmFsbEl0ZW1zLmxlbmd0aDsgbiA8IHRoaXMubWluSXRlbXM7IG4rKykge1xuICAgICAgICB0aGlzLmludGVyYWxBZGRJdGVtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb2N1c09uQWRkKCksIDEpO1xuICB9XG5cbiAgYWRkSXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdJdGVtID0gdGhpcy5pbnRlcmFsQWRkSXRlbSgpO1xuICAgIGlmICghIW5ld0l0ZW0pIHtcbiAgICAgIHRoaXMuYWRkZWQuZW1pdChuZXdJdGVtKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVJdGVtKGl0ZW06IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0RlbGV0ZUFsbG93ZWQoKSkge1xuICAgICAgdGhpcy5hbGxJdGVtcy5zcGxpY2UodGhpcy5hbGxJdGVtcy5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgIHRoaXMucmVtb3ZlZC5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHNldEZvY3VzT25BZGQoKTogdm9pZCB7XG4gICAgdGhpcy5yb3dDb3VudEZvY3VzID0gdGhpcy5pdGVtUm93cy5sZW5ndGg7XG4gICAgdGhpcy5pdGVtUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoZWxzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4pID0+IHtcbiAgICAgIGlmIChlbHMubGVuZ3RoID4gdGhpcy5yb3dDb3VudEZvY3VzICYmICEhZWxzLmxhc3QpIHtcbiAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBlbHMubGFzdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9Jy0xJ10pXCIpO1xuICAgICAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJvd0NvdW50Rm9jdXMgPSBlbHMubGVuZ3RoO1xuICAgIH0pO1xuICB9XG5cbiAgaXNBZGRBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZFBvc3NpYmxlICYmICghdGhpcy5tYXhJdGVtcyB8fCB0aGlzLmFsbEl0ZW1zLmxlbmd0aCA8IHRoaXMubWF4SXRlbXMpO1xuICB9XG5cbiAgaXNEZWxldGVBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlbW92ZVBvc3NpYmxlICYmICghdGhpcy5taW5JdGVtcyB8fCB0aGlzLmFsbEl0ZW1zLmxlbmd0aCA+IHRoaXMubWluSXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcmFsQWRkSXRlbSgpOiBUIHtcbiAgICBpZiAodGhpcy5pc0FkZEFsbG93ZWQoKSkge1xuICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4udGhpcy5ibGFua0l0ZW0gfTtcbiAgICAgIC8vIGNyZWF0ZXMgaWRzIGluIHRoZSBmb3JtIG9mIFwibjVrZHoxcGxqbDhcIlxuICAgICAgbmV3SXRlbS5pZCA9IE1hdGgucmFuZG9tKClcbiAgICAgICAgLnRvU3RyaW5nKDM2KVxuICAgICAgICAuc3Vic3RyaW5nKDIpO1xuICAgICAgdGhpcy5hbGxJdGVtcy5wdXNoKG5ld0l0ZW0pO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { BaseQuickListComponent } from '../base-quick-list.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/material/icon";
|
|
6
|
+
import * as i3 from "../../button/flat-button/link-button.component";
|
|
7
|
+
import * as i4 from "../../button/icon-button/icon-button.component";
|
|
8
|
+
export class QuickListCompactComponent extends BaseQuickListComponent {
|
|
9
|
+
constructor(changeDetectorRef) {
|
|
10
|
+
super(changeDetectorRef);
|
|
11
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListCompactComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: QuickListCompactComponent, selector: "mad-quick-list-compact", usesInheritance: true, ngImport: i0, template: "<h3>\n <ng-content select=\"label\"></ng-content>\n</h3>\n<ng-container *ngFor=\"let item of allItems; let isLast = last;\">\n <div class=\"flex-container\" *ngIf=\"itemTemplate\" #row style=\"display: flex; flex-direction: row;\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n <mad-icon-button *ngIf=\"!readonly && isDeleteAllowed()\" (click)=\"removeItem(item)\">\n <mat-icon>delete</mat-icon>\n </mad-icon-button>\n <mad-icon-button *ngIf=\"!readonly && isLast\" [disabled]=\"!isAddAllowed()\" (click)=\"addItem()\">\n <mat-icon>add_circle_outline</mat-icon>\n </mad-icon-button>\n </div>\n</ng-container>\n<mad-link-button *ngIf=\"!readonly && !this.allItems.length\"\n (click)=\"addItem()\"\n [disabled]=\"!isAddAllowed()\">\n {{ addLabel }}\n</mad-link-button>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.LinkButtonComponent, selector: "mad-link-button", inputs: ["type", "disabled", "title"] }, { kind: "component", type: i4.IconButtonComponent, selector: "mad-icon-button", inputs: ["type", "disabled", "title"] }] }); }
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListCompactComponent, decorators: [{
|
|
17
|
+
type: Component,
|
|
18
|
+
args: [{ selector: 'mad-quick-list-compact', template: "<h3>\n <ng-content select=\"label\"></ng-content>\n</h3>\n<ng-container *ngFor=\"let item of allItems; let isLast = last;\">\n <div class=\"flex-container\" *ngIf=\"itemTemplate\" #row style=\"display: flex; flex-direction: row;\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n <mad-icon-button *ngIf=\"!readonly && isDeleteAllowed()\" (click)=\"removeItem(item)\">\n <mat-icon>delete</mat-icon>\n </mad-icon-button>\n <mad-icon-button *ngIf=\"!readonly && isLast\" [disabled]=\"!isAddAllowed()\" (click)=\"addItem()\">\n <mat-icon>add_circle_outline</mat-icon>\n </mad-icon-button>\n </div>\n</ng-container>\n<mad-link-button *ngIf=\"!readonly && !this.allItems.length\"\n (click)=\"addItem()\"\n [disabled]=\"!isAddAllowed()\">\n {{ addLabel }}\n</mad-link-button>\n" }]
|
|
19
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL3F1aWNrLWxpc3QvcXVpY2stbGlzdC1jb21wYWN0L3F1aWNrLWxpc3QtY29tcGFjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9xdWljay1saXN0L3F1aWNrLWxpc3QtY29tcGFjdC9xdWljay1saXN0LWNvbXBhY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFpQixNQUFNLDhCQUE4QixDQUFDOzs7Ozs7QUFPckYsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHNCQUFxQztJQUNsRixZQUFtQixpQkFBb0M7UUFDckQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFEUixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBRXZELENBQUM7OEdBSFUseUJBQXlCO2tHQUF6Qix5QkFBeUIscUZDUnRDLDQ1QkFtQkE7OzJGRFhhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlUXVpY2tMaXN0Q29tcG9uZW50LCBRdWlja0xpc3RJdGVtIH0gZnJvbSAnLi4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1xdWljay1saXN0LWNvbXBhY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudCBleHRlbmRzIEJhc2VRdWlja0xpc3RDb21wb25lbnQ8UXVpY2tMaXN0SXRlbT4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICB9XG59XG4iLCI8aDM+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibGFiZWxcIj48L25nLWNvbnRlbnQ+XG48L2gzPlxuPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbGxJdGVtczsgbGV0IGlzTGFzdCA9IGxhc3Q7XCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtY29udGFpbmVyXCIgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIiAjcm93IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdztcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwiIXJlYWRvbmx5ICYmIGlzRGVsZXRlQWxsb3dlZCgpXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICAgICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFyZWFkb25seSAmJiBpc0xhc3RcIiBbZGlzYWJsZWRdPVwiIWlzQWRkQWxsb3dlZCgpXCIgKGNsaWNrKT1cImFkZEl0ZW0oKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgIDwvbWFkLWljb24tYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bWFkLWxpbmstYnV0dG9uICpuZ0lmPVwiIXJlYWRvbmx5ICYmICF0aGlzLmFsbEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtKClcIlxuICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWRkQWxsb3dlZCgpXCI+XG4gICAge3sgYWRkTGFiZWwgfX1cbjwvbWFkLWxpbmstYnV0dG9uPlxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Based on https://github.com/porscheinformatik/clarity-addons/blob/master/src/clr-addons/generic-quick-list/generic-quick-list.ts
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { BaseQuickListComponent } from './base-quick-list.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/material/icon";
|
|
7
|
+
import * as i3 from "../button/outline-button/outline-button.component";
|
|
8
|
+
import * as i4 from "../button/icon-button/icon-button.component";
|
|
9
|
+
export class QuickListComponent extends BaseQuickListComponent {
|
|
10
|
+
constructor(changeDetectorRef) {
|
|
11
|
+
super(changeDetectorRef);
|
|
12
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: QuickListComponent, selector: "mad-quick-list", usesInheritance: true, ngImport: i0, template: "<h3>\n <ng-content select=\"label\"></ng-content>\n</h3>\n<ng-container *ngFor=\"let item of allItems\">\n <div *ngIf=\"itemTemplate\" #row style=\"display: flex; flex-direction: row;\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n <mad-icon-button *ngIf=\"!readonly && isDeleteAllowed()\" (click)=\"removeItem(item)\">\n <mat-icon>delete</mat-icon>\n </mad-icon-button>\n </div>\n</ng-container>\n<mad-outline-button *ngIf=\"!readonly\" (click)=\"addItem()\"\n [disabled]=\"!addPossible || !isAddAllowed()\">\n {{ addLabel }}\n</mad-outline-button>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.OutlineButtonComponent, selector: "mad-outline-button", inputs: ["type", "disabled", "title"] }, { kind: "component", type: i4.IconButtonComponent, selector: "mad-icon-button", inputs: ["type", "disabled", "title"] }] }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListComponent, decorators: [{
|
|
18
|
+
type: Component,
|
|
19
|
+
args: [{ selector: 'mad-quick-list', template: "<h3>\n <ng-content select=\"label\"></ng-content>\n</h3>\n<ng-container *ngFor=\"let item of allItems\">\n <div *ngIf=\"itemTemplate\" #row style=\"display: flex; flex-direction: row;\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n <mad-icon-button *ngIf=\"!readonly && isDeleteAllowed()\" (click)=\"removeItem(item)\">\n <mat-icon>delete</mat-icon>\n </mad-icon-button>\n </div>\n</ng-container>\n<mad-outline-button *ngIf=\"!readonly\" (click)=\"addItem()\"\n [disabled]=\"!addPossible || !isAddAllowed()\">\n {{ addLabel }}\n</mad-outline-button>\n" }]
|
|
20
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9xdWljay1saXN0L3F1aWNrLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvcXVpY2stbGlzdC9xdWljay1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1JQUFtSTtBQUVuSSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQWlCLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQU9wRixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsc0JBQXFDO0lBQzNFLFlBQW1CLGlCQUFvQztRQUNyRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQURSLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFFdkQsQ0FBQzs4R0FIVSxrQkFBa0I7a0dBQWxCLGtCQUFrQiw2RUNWL0IsaW9CQWVBOzsyRkRMYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3BvcnNjaGVpbmZvcm1hdGlrL2NsYXJpdHktYWRkb25zL2Jsb2IvbWFzdGVyL3NyYy9jbHItYWRkb25zL2dlbmVyaWMtcXVpY2stbGlzdC9nZW5lcmljLXF1aWNrLWxpc3QudHNcblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVF1aWNrTGlzdENvbXBvbmVudCwgUXVpY2tMaXN0SXRlbSB9IGZyb20gJy4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1xdWljay1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1aWNrLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWlja0xpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlUXVpY2tMaXN0Q29tcG9uZW50PFF1aWNrTGlzdEl0ZW0+IHtcbiAgY29uc3RydWN0b3IocHVibGljIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGNoYW5nZURldGVjdG9yUmVmKTtcbiAgfVxufVxuIiwiPGgzPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJsYWJlbFwiPjwvbmctY29udGVudD5cbjwvaDM+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFsbEl0ZW1zXCI+XG4gIDxkaXYgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIiAjcm93IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdztcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFyZWFkb25seSAmJiBpc0RlbGV0ZUFsbG93ZWQoKVwiIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pXCI+XG4gICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxtYWQtb3V0bGluZS1idXR0b24gKm5nSWY9XCIhcmVhZG9ubHlcIiAoY2xpY2spPVwiYWRkSXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhZGRQb3NzaWJsZSB8fCAhaXNBZGRBbGxvd2VkKClcIj5cbiAge3sgYWRkTGFiZWwgfX1cbjwvbWFkLW91dGxpbmUtYnV0dG9uPlxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { QuickListCompactComponent } from './quick-list-compact/quick-list-compact.component';
|
|
2
|
+
export { BaseQuickListComponent } from './base-quick-list.component';
|
|
3
|
+
export { QuickListComponent } from './quick-list.component';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL3F1aWNrLWxpc3QvcXVpY2stbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUM1RixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7UXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudH0gZnJvbSAnLi9xdWljay1saXN0LWNvbXBhY3QvcXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VRdWlja0xpc3RDb21wb25lbnR9IGZyb20gJy4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQge1F1aWNrTGlzdENvbXBvbmVudH0gZnJvbSAnLi9xdWljay1saXN0LmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
5
|
+
import { QuickListComponent } from './quick-list.component';
|
|
6
|
+
import { ButtonModule } from '../button/button.module';
|
|
7
|
+
import { BaseQuickListComponent } from './base-quick-list.component';
|
|
8
|
+
import { QuickListCompactComponent } from './quick-list-compact/quick-list-compact.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class QuickListModule {
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.1", ngImport: i0, type: QuickListModule, declarations: [QuickListComponent, BaseQuickListComponent, QuickListCompactComponent], imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule], exports: [QuickListComponent, QuickListCompactComponent, BaseQuickListComponent] }); }
|
|
13
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListModule, imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule] }); }
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: QuickListModule, decorators: [{
|
|
16
|
+
type: NgModule,
|
|
17
|
+
args: [{
|
|
18
|
+
declarations: [QuickListComponent, BaseQuickListComponent, QuickListCompactComponent],
|
|
19
|
+
imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule],
|
|
20
|
+
exports: [QuickListComponent, QuickListCompactComponent, BaseQuickListComponent],
|
|
21
|
+
}]
|
|
22
|
+
}] });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9xdWljay1saXN0L3F1aWNrLWxpc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQU85RixNQUFNLE9BQU8sZUFBZTs4R0FBZixlQUFlOytHQUFmLGVBQWUsaUJBSlgsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLGFBQzFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksYUFDMUQsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCOytHQUVwRSxlQUFlLFlBSGhCLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVk7OzJGQUd6RCxlQUFlO2tCQUwzQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDO29CQUNyRixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7b0JBQ3JFLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixDQUFDO2lCQUNqRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFF1aWNrTGlzdENvbXBvbmVudCB9IGZyb20gJy4vcXVpY2stbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgQmFzZVF1aWNrTGlzdENvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWlja0xpc3RDb21wYWN0Q29tcG9uZW50IH0gZnJvbSAnLi9xdWljay1saXN0LWNvbXBhY3QvcXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1F1aWNrTGlzdENvbXBvbmVudCwgQmFzZVF1aWNrTGlzdENvbXBvbmVudCwgUXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQnV0dG9uTW9kdWxlXSxcbiAgZXhwb3J0czogW1F1aWNrTGlzdENvbXBvbmVudCwgUXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudCwgQmFzZVF1aWNrTGlzdENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFF1aWNrTGlzdE1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { NumberFormatService } from '../../numeric-field/number-format.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../numeric-field/number-format.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/material/form-field";
|
|
7
|
+
import * as i4 from "@angular/material/input";
|
|
8
|
+
import * as i5 from "@angular/forms";
|
|
9
|
+
/**
|
|
10
|
+
* Read-only mat-form-field representation of provided value
|
|
11
|
+
*
|
|
12
|
+
* @author Stefan Laesser
|
|
13
|
+
*/
|
|
14
|
+
export class ReadOnlyFormFieldComponent {
|
|
15
|
+
constructor(changeDetector, renderer, numberFormatService) {
|
|
16
|
+
this.changeDetector = changeDetector;
|
|
17
|
+
this.renderer = renderer;
|
|
18
|
+
this.numberFormatService = numberFormatService;
|
|
19
|
+
this.textAlign = 'left';
|
|
20
|
+
this.formatNumber = false;
|
|
21
|
+
this.decimalPlaces = 2;
|
|
22
|
+
this.roundValue = false;
|
|
23
|
+
this.autofillDecimals = false;
|
|
24
|
+
this.unit = null;
|
|
25
|
+
this.unitPosition = 'left';
|
|
26
|
+
this.errorMessage = null;
|
|
27
|
+
this.multiline = false;
|
|
28
|
+
this.rows = 3;
|
|
29
|
+
/*
|
|
30
|
+
* If shrinkIfEmpty is set to "false", nothing changes
|
|
31
|
+
* If set to "true" and multiline is also "true", the textarea will
|
|
32
|
+
* shrink to one row, if value is empty/null/undefined.
|
|
33
|
+
* Otherwise, the defined rows-value will be used
|
|
34
|
+
*/
|
|
35
|
+
this.shrinkIfEmpty = false;
|
|
36
|
+
this.errorMatcher = {
|
|
37
|
+
isErrorState: () => !!this.errorMessage,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
ngOnChanges(_) {
|
|
41
|
+
if (!NumberFormatService.valueIsSet(this.value)) {
|
|
42
|
+
this.value = '-';
|
|
43
|
+
if (this.shrinkIfEmpty) {
|
|
44
|
+
this.rows = 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (this.formatNumber && typeof this.value === 'number') {
|
|
48
|
+
this.value = this.numberFormatService.format(this.value, {
|
|
49
|
+
decimalPlaces: this.decimalPlaces,
|
|
50
|
+
finalFormatting: true,
|
|
51
|
+
autofillDecimals: this.autofillDecimals,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
this.changeDetector.detectChanges();
|
|
55
|
+
}
|
|
56
|
+
// TODO direct copy from NumericFieldDirective
|
|
57
|
+
ngAfterViewChecked() {
|
|
58
|
+
this.injectUnitSymbol();
|
|
59
|
+
}
|
|
60
|
+
injectUnitSymbol() {
|
|
61
|
+
// Need to inject the unit symbol when the input element width is set to its actual value,
|
|
62
|
+
// otherwise the icon wont show in the correct position
|
|
63
|
+
if (!!this.unit && !this.unitSpan && this.inputEl.nativeElement.offsetWidth !== 0) {
|
|
64
|
+
// Get the input wrapper and apply necessary styles
|
|
65
|
+
const inputWrapper = this.inputEl.nativeElement.parentNode.parentNode;
|
|
66
|
+
// Create the span with unit symbol and apply necessary styles
|
|
67
|
+
this.unitSpan = this.renderer.createElement('span');
|
|
68
|
+
if (this.unitPosition === 'left') {
|
|
69
|
+
this.renderer.setAttribute(this.unitSpan, 'matPrefix', '');
|
|
70
|
+
this.renderer.setStyle(this.unitSpan, 'padding-right', '5px');
|
|
71
|
+
this.renderer.insertBefore(inputWrapper, this.unitSpan, inputWrapper.children[0]);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.renderer.setAttribute(this.unitSpan, 'matSuffix', '');
|
|
75
|
+
this.renderer.setStyle(this.unitSpan, 'padding-left', '25px');
|
|
76
|
+
this.renderer.appendChild(inputWrapper, this.unitSpan);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// special handling to move unit symbol along with display value
|
|
80
|
+
if (!!this.unitSpan && this.textAlign === 'left' && this.unitPosition === 'right') {
|
|
81
|
+
const inputStyles = window.getComputedStyle(this.inputEl.nativeElement.parentElement, null);
|
|
82
|
+
this.unitSpan.style.position = 'absolute';
|
|
83
|
+
this.unitSpan.style.marginTop = inputStyles.getPropertyValue('border-top-width');
|
|
84
|
+
this.unitSpan.style.paddingTop = inputStyles.getPropertyValue('padding-top');
|
|
85
|
+
this.unitSpan.style.paddingBottom = inputStyles.getPropertyValue('padding-bottom');
|
|
86
|
+
if (!this.textSpan) {
|
|
87
|
+
this.textSpan = document.createElement('span');
|
|
88
|
+
document.body.appendChild(this.textSpan);
|
|
89
|
+
this.textSpan.style.font = inputStyles.getPropertyValue('font');
|
|
90
|
+
this.textSpan.style.fontSize = inputStyles.getPropertyValue('font-size');
|
|
91
|
+
this.textSpan.style.height = 'auto';
|
|
92
|
+
this.textSpan.style.width = 'auto';
|
|
93
|
+
this.textSpan.style.position = 'absolute';
|
|
94
|
+
this.textSpan.style.top = '0';
|
|
95
|
+
this.textSpan.style.whiteSpace = 'no-wrap';
|
|
96
|
+
this.textSpan.style.visibility = 'hidden';
|
|
97
|
+
}
|
|
98
|
+
this.textSpan.innerHTML = this.value;
|
|
99
|
+
const width = Math.min(this.inputEl.nativeElement.clientWidth - this.unitSpan.clientWidth, Math.ceil(this.textSpan.clientWidth));
|
|
100
|
+
this.unitSpan.style.left = width + 'px';
|
|
101
|
+
}
|
|
102
|
+
// always reset unit symbol
|
|
103
|
+
if (!!this.unitSpan) {
|
|
104
|
+
this.unitSpan.textContent = this.unit;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ReadOnlyFormFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.NumberFormatService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: ReadOnlyFormFieldComponent, selector: "mad-readonly-form-field", inputs: { value: "value", label: "label", textAlign: "textAlign", formatNumber: "formatNumber", decimalPlaces: "decimalPlaces", roundValue: ["roundDisplayValue", "roundValue"], autofillDecimals: "autofillDecimals", unit: "unit", unitPosition: "unitPosition", errorMessage: "errorMessage", multiline: "multiline", rows: "rows", id: "id", shrinkIfEmpty: "shrinkIfEmpty" }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field class=\"form-group mad-read-only\">\n <mat-label>{{ label }}</mat-label>\n <input\n *ngIf=\"!multiline\"\n [ngModel]=\"value\"\n [ngClass]=\"'text-' + textAlign + ' content'\"\n [errorStateMatcher]=\"errorMatcher\"\n [id]=\"id\"\n readonly\n disabled\n matInput\n #inputEl\n />\n\n <textarea\n *ngIf=\"multiline\"\n [rows]=\"rows\"\n [ngModel]=\"value\"\n class=\"multiline content\"\n [errorStateMatcher]=\"errorMatcher\"\n [id]=\"id\"\n readonly\n disabled\n matInput\n ></textarea>\n <mat-error>{{ errorMessage }}</mat-error>\n</mat-form-field>\n", styles: ["mat-form-field{width:100%;width:-webkit-fill-available;width:-moz-available;width:stretch}mat-label{line-height:1.4}span[matPrefix]{padding-right:5px}span[matSuffix]{padding-left:5px}.text-left{text-align:left}.text-right{text-align:right}.multiline{resize:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ReadOnlyFormFieldComponent, decorators: [{
|
|
111
|
+
type: Component,
|
|
112
|
+
args: [{ selector: 'mad-readonly-form-field', template: "<mat-form-field class=\"form-group mad-read-only\">\n <mat-label>{{ label }}</mat-label>\n <input\n *ngIf=\"!multiline\"\n [ngModel]=\"value\"\n [ngClass]=\"'text-' + textAlign + ' content'\"\n [errorStateMatcher]=\"errorMatcher\"\n [id]=\"id\"\n readonly\n disabled\n matInput\n #inputEl\n />\n\n <textarea\n *ngIf=\"multiline\"\n [rows]=\"rows\"\n [ngModel]=\"value\"\n class=\"multiline content\"\n [errorStateMatcher]=\"errorMatcher\"\n [id]=\"id\"\n readonly\n disabled\n matInput\n ></textarea>\n <mat-error>{{ errorMessage }}</mat-error>\n</mat-form-field>\n", styles: ["mat-form-field{width:100%;width:-webkit-fill-available;width:-moz-available;width:stretch}mat-label{line-height:1.4}span[matPrefix]{padding-right:5px}span[matSuffix]{padding-left:5px}.text-left{text-align:left}.text-right{text-align:right}.multiline{resize:none}\n"] }]
|
|
113
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1.NumberFormatService }]; }, propDecorators: { value: [{
|
|
114
|
+
type: Input,
|
|
115
|
+
args: ['value']
|
|
116
|
+
}], label: [{
|
|
117
|
+
type: Input,
|
|
118
|
+
args: ['label']
|
|
119
|
+
}], textAlign: [{
|
|
120
|
+
type: Input,
|
|
121
|
+
args: ['textAlign']
|
|
122
|
+
}], formatNumber: [{
|
|
123
|
+
type: Input,
|
|
124
|
+
args: ['formatNumber']
|
|
125
|
+
}], decimalPlaces: [{
|
|
126
|
+
type: Input,
|
|
127
|
+
args: ['decimalPlaces']
|
|
128
|
+
}], roundValue: [{
|
|
129
|
+
type: Input,
|
|
130
|
+
args: ['roundDisplayValue']
|
|
131
|
+
}], autofillDecimals: [{
|
|
132
|
+
type: Input,
|
|
133
|
+
args: ['autofillDecimals']
|
|
134
|
+
}], unit: [{
|
|
135
|
+
type: Input,
|
|
136
|
+
args: ['unit']
|
|
137
|
+
}], unitPosition: [{
|
|
138
|
+
type: Input,
|
|
139
|
+
args: ['unitPosition']
|
|
140
|
+
}], errorMessage: [{
|
|
141
|
+
type: Input,
|
|
142
|
+
args: ['errorMessage']
|
|
143
|
+
}], multiline: [{
|
|
144
|
+
type: Input
|
|
145
|
+
}], rows: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}], id: [{
|
|
148
|
+
type: Input
|
|
149
|
+
}], shrinkIfEmpty: [{
|
|
150
|
+
type: Input
|
|
151
|
+
}], inputEl: [{
|
|
152
|
+
type: ViewChild,
|
|
153
|
+
args: ['inputEl']
|
|
154
|
+
}] } });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9yZWFkb25seS9yZWFkb25seS1mb3JtLWZpZWxkL3JlYWRvbmx5LWZvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvcmVhZG9ubHkvcmVhZG9ubHktZm9ybS1maWVsZC9yZWFkb25seS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7OztBQUVoRjs7OztHQUlHO0FBT0gsTUFBTSxPQUFPLDBCQUEwQjtJQTZCckMsWUFBb0IsY0FBaUMsRUFBVSxRQUFtQixFQUFVLG1CQUF3QztRQUFoSCxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTFCaEgsY0FBUyxHQUFxQixNQUFNLENBQUM7UUFDbEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDcEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDZCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNyQyxTQUFJLEdBQWtCLElBQUksQ0FBQztRQUNuQixpQkFBWSxHQUFxQixNQUFNLENBQUM7UUFDeEMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ2pELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVsQjs7Ozs7V0FLRztRQUNN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QkFDRSxZQUFZO3NCQUFsQyxLQUFLO3VCQUFDLGNBQWM7Z0JBQ1osU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ2dCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbnVtZXJpYy1maWVsZC9udW1iZXItZm9ybWF0LnNlcnZpY2UnO1xuXG4vKipcbiAqIFJlYWQtb25seSBtYXQtZm9ybS1maWVsZCByZXByZXNlbnRhdGlvbiBvZiBwcm92aWRlZCB2YWx1ZVxuICpcbiAqIEBhdXRob3IgU3RlZmFuIExhZXNzZXJcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYWQtcmVhZG9ubHktZm9ybS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWFkb25seS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVhZG9ubHktZm9ybS1maWVsZC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRPbmx5Rm9ybUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcbiAgQElucHV0KCd2YWx1ZScpIHZhbHVlOiBhbnk7XG4gIEBJbnB1dCgnbGFiZWwnKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoJ3RleHRBbGlnbicpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdsZWZ0JztcbiAgQElucHV0KCdmb3JtYXROdW1iZXInKSBmb3JtYXROdW1iZXIgPSBmYWxzZTtcbiAgQElucHV0KCdkZWNpbWFsUGxhY2VzJykgZGVjaW1hbFBsYWNlcyA9IDI7XG4gIEBJbnB1dCgncm91bmREaXNwbGF5VmFsdWUnKSByb3VuZFZhbHVlID0gZmFsc2U7XG4gIEBJbnB1dCgnYXV0b2ZpbGxEZWNpbWFscycpIGF1dG9maWxsRGVjaW1hbHMgPSBmYWxzZTtcbiAgQElucHV0KCd1bml0JykgdW5pdDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgndW5pdFBvc2l0aW9uJykgdW5pdFBvc2l0aW9uOiAncmlnaHQnIHwgJ2xlZnQnID0gJ2xlZnQnO1xuICBASW5wdXQoJ2Vycm9yTWVzc2FnZScpIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG11bHRpbGluZSA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dzID0gMztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgLypcbiAgICogSWYgc2hyaW5rSWZFbXB0eSBpcyBzZXQgdG8gXCJmYWxzZVwiLCBub3RoaW5nIGNoYW5nZXNcbiAgICogSWYgc2V0IHRvIFwidHJ1ZVwiIGFuZCBtdWx0aWxpbmUgaXMgYWxzbyBcInRydWVcIiwgdGhlIHRleHRhcmVhIHdpbGxcbiAgICogc2hyaW5rIHRvIG9uZSByb3csIGlmIHZhbHVlIGlzIGVtcHR5L251bGwvdW5kZWZpbmVkLlxuICAgKiBPdGhlcndpc2UsIHRoZSBkZWZpbmVkIHJvd3MtdmFsdWUgd2lsbCBiZSB1c2VkXG4gICAqL1xuICBASW5wdXQoKSBzaHJpbmtJZkVtcHR5ID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWwnKSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuICBlcnJvck1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyID0ge1xuICAgIGlzRXJyb3JTdGF0ZTogKCkgPT4gISF0aGlzLmVycm9yTWVzc2FnZSxcbiAgfTtcblxuICBwcml2YXRlIHVuaXRTcGFuOiBIVE1MU3BhbkVsZW1lbnQ7XG4gIHByaXZhdGUgdGV4dFNwYW46IEhUTUxTcGFuRWxlbWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIG51bWJlckZvcm1hdFNlcnZpY2U6IE51bWJlckZvcm1hdFNlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoXzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghTnVtYmVyRm9ybWF0U2VydmljZS52YWx1ZUlzU2V0KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJy0nO1xuICAgICAgaWYgKHRoaXMuc2hyaW5rSWZFbXB0eSkge1xuICAgICAgICB0aGlzLnJvd3MgPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtYXROdW1iZXIgJiYgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1iZXJGb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLnZhbHVlLCB7XG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IHRoaXMuZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgZmluYWxGb3JtYXR0aW5nOiB0cnVlLFxuICAgICAgICBhdXRvZmlsbERlY2ltYWxzOiB0aGlzLmF1dG9maWxsRGVjaW1hbHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyBUT0RPIGRpcmVjdCBjb3B5IGZyb20gTnVtZXJpY0ZpZWxkRGlyZWN0aXZlXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmluamVjdFVuaXRTeW1ib2woKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0VW5pdFN5bWJvbCgpOiB2b2lkIHtcbiAgICAvLyBOZWVkIHRvIGluamVjdCB0aGUgdW5pdCBzeW1ib2wgd2hlbiB0aGUgaW5wdXQgZWxlbWVudCB3aWR0aCBpcyBzZXQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAvLyBvdGhlcndpc2UgdGhlIGljb24gd29udCBzaG93IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKCEhdGhpcy51bml0ICYmICF0aGlzLnVuaXRTcGFuICYmIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICE9PSAwKSB7XG4gICAgICAvLyBHZXQgdGhlIGlucHV0IHdyYXBwZXIgYW5kIGFwcGx5IG5lY2Vzc2FyeSBzdHlsZXNcbiAgICAgIGNvbnN0IGlucHV0V3JhcHBlciA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBzcGFuIHdpdGggdW5pdCBzeW1ib2wgYW5kIGFwcGx5IG5lY2Vzc2FyeSBzdHlsZXNcbiAgICAgIHRoaXMudW5pdFNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblxuICAgICAgaWYgKHRoaXMudW5pdFBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy51bml0U3BhbiwgJ21hdFByZWZpeCcsICcnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnVuaXRTcGFuLCAncGFkZGluZy1yaWdodCcsICc1cHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoaW5wdXRXcmFwcGVyLCB0aGlzLnVuaXRTcGFuLCBpbnB1dFdyYXBwZXIuY2hpbGRyZW5bMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy51bml0U3BhbiwgJ21hdFN1ZmZpeCcsICcnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnVuaXRTcGFuLCAncGFkZGluZy1sZWZ0JywgJzI1cHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChpbnB1dFdyYXBwZXIsIHRoaXMudW5pdFNwYW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgdG8gbW92ZSB1bml0IHN5bWJvbCBhbG9uZyB3aXRoIGRpc3BsYXkgdmFsdWVcbiAgICBpZiAoISF0aGlzLnVuaXRTcGFuICYmIHRoaXMudGV4dEFsaWduID09PSAnbGVmdCcgJiYgdGhpcy51bml0UG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIGNvbnN0IGlucHV0U3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgbnVsbCk7XG4gICAgICB0aGlzLnVuaXRTcGFuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIHRoaXMudW5pdFNwYW4uc3R5bGUubWFyZ2luVG9wID0gaW5wdXRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXRvcC13aWR0aCcpO1xuICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5wYWRkaW5nVG9wID0gaW5wdXRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgICAgIHRoaXMudW5pdFNwYW4uc3R5bGUucGFkZGluZ0JvdHRvbSA9IGlucHV0U3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJyk7XG5cbiAgICAgIGlmICghdGhpcy50ZXh0U3Bhbikge1xuICAgICAgICB0aGlzLnRleHRTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMudGV4dFNwYW4pO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLmZvbnQgPSBpbnB1dFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdmb250Jyk7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUuZm9udFNpemUgPSBpbnB1dFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXNpemUnKTtcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUud2lkdGggPSAnYXV0byc7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLnRvcCA9ICcwJztcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gJ25vLXdyYXAnO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIH1cbiAgICAgIHRoaXMudGV4dFNwYW4uaW5uZXJIVE1MID0gdGhpcy52YWx1ZTtcbiAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5taW4odGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggLSB0aGlzLnVuaXRTcGFuLmNsaWVudFdpZHRoLCBNYXRoLmNlaWwodGhpcy50ZXh0U3Bhbi5jbGllbnRXaWR0aCkpO1xuICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5sZWZ0ID0gd2lkdGggKyAncHgnO1xuICAgIH1cbiAgICAvLyBhbHdheXMgcmVzZXQgdW5pdCBzeW1ib2xcbiAgICBpZiAoISF0aGlzLnVuaXRTcGFuKSB7XG4gICAgICB0aGlzLnVuaXRTcGFuLnRleHRDb250ZW50ID0gdGhpcy51bml0O1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1ncm91cCBtYWQtcmVhZC1vbmx5XCI+XG4gIDxtYXQtbGFiZWw+e3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgPGlucHV0XG4gICAgKm5nSWY9XCIhbXVsdGlsaW5lXCJcbiAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgW25nQ2xhc3NdPVwiJ3RleHQtJyArIHRleHRBbGlnbiArICcgY29udGVudCdcIlxuICAgIFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvck1hdGNoZXJcIlxuICAgIFtpZF09XCJpZFwiXG4gICAgcmVhZG9ubHlcbiAgICBkaXNhYmxlZFxuICAgIG1hdElucHV0XG4gICAgI2lucHV0RWxcbiAgLz5cblxuICA8dGV4dGFyZWFcbiAgICAqbmdJZj1cIm11bHRpbGluZVwiXG4gICAgW3Jvd3NdPVwicm93c1wiXG4gICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgIGNsYXNzPVwibXVsdGlsaW5lIGNvbnRlbnRcIlxuICAgIFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvck1hdGNoZXJcIlxuICAgIFtpZF09XCJpZFwiXG4gICAgcmVhZG9ubHlcbiAgICBkaXNhYmxlZFxuICAgIG1hdElucHV0XG4gID48L3RleHRhcmVhPlxuICA8bWF0LWVycm9yPnt7IGVycm9yTWVzc2FnZSB9fTwvbWF0LWVycm9yPlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
|
package/esm2022/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.mjs
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "@angular/material/tooltip";
|
|
5
|
+
import * as i3 from "../readonly-form-field/readonly-form-field.component";
|
|
6
|
+
/**
|
|
7
|
+
* Wraps a mat-form-field to replace it by a readOnly representation if necessary
|
|
8
|
+
*
|
|
9
|
+
* @author Stefan Laesser
|
|
10
|
+
*/
|
|
11
|
+
export class ReadOnlyFormFieldWrapperComponent {
|
|
12
|
+
constructor(changeDetector, elementRef) {
|
|
13
|
+
this.changeDetector = changeDetector;
|
|
14
|
+
this.elementRef = elementRef;
|
|
15
|
+
/**
|
|
16
|
+
* If set to "false", the contained mat-form-field is rendered in all it's glory.
|
|
17
|
+
* If set to "true", a readonly representation of the value is shown using the mat-form-fields label.
|
|
18
|
+
*/
|
|
19
|
+
this.readonly = true;
|
|
20
|
+
this.textAlign = 'left';
|
|
21
|
+
this.formatNumber = false;
|
|
22
|
+
this.decimalPlaces = 2;
|
|
23
|
+
this.roundValue = false;
|
|
24
|
+
this.autofillDecimals = false;
|
|
25
|
+
this.unit = null;
|
|
26
|
+
this.unitPosition = 'left';
|
|
27
|
+
this.errorMessage = null;
|
|
28
|
+
/**
|
|
29
|
+
* If set to "false", a readonly input will be rendered.
|
|
30
|
+
* If set to "true", a readonly textarea will be rendered instead.
|
|
31
|
+
*/
|
|
32
|
+
this.multiline = false;
|
|
33
|
+
/**
|
|
34
|
+
* Defines the rows for the readonly textarea.
|
|
35
|
+
*/
|
|
36
|
+
this.rows = 3;
|
|
37
|
+
/**
|
|
38
|
+
* If shrinkIfEmpty is set to "false", nothing changes
|
|
39
|
+
* If set to "true" and multiline is also "true", the textarea will
|
|
40
|
+
* shrink to one row, if value is empty/null/undefined.
|
|
41
|
+
* Otherwise, the defined rows-value will be used
|
|
42
|
+
*/
|
|
43
|
+
this.shrinkIfEmpty = false;
|
|
44
|
+
this.toolTipForInputEnabled = false;
|
|
45
|
+
}
|
|
46
|
+
ngOnInit() {
|
|
47
|
+
this.doRendering();
|
|
48
|
+
}
|
|
49
|
+
ngAfterViewInit() {
|
|
50
|
+
this.setReadonlyFieldStyle();
|
|
51
|
+
this.doRendering();
|
|
52
|
+
}
|
|
53
|
+
ngAfterViewChecked() {
|
|
54
|
+
this.setReadonlyFieldStyle();
|
|
55
|
+
this.setTooltipForOverflownField();
|
|
56
|
+
}
|
|
57
|
+
ngOnChanges(_) {
|
|
58
|
+
this.doRendering();
|
|
59
|
+
}
|
|
60
|
+
getLabel() {
|
|
61
|
+
if (!this.label) {
|
|
62
|
+
this.extractLabel();
|
|
63
|
+
}
|
|
64
|
+
return this.label;
|
|
65
|
+
}
|
|
66
|
+
doRendering() {
|
|
67
|
+
if (!this.originalContent) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (!this.readonly) {
|
|
71
|
+
this.correctWidth();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.changeDetector.detectChanges();
|
|
75
|
+
}
|
|
76
|
+
extractLabel() {
|
|
77
|
+
if (!this.originalContent || !this.originalContent.nativeElement) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const labelElement = this.originalContent.nativeElement.querySelector('mat-label');
|
|
81
|
+
this.label = labelElement ? labelElement.innerHTML : 'mat-label is missing!';
|
|
82
|
+
}
|
|
83
|
+
correctWidth() {
|
|
84
|
+
const formField = this.originalContent.nativeElement.querySelector('mat-form-field');
|
|
85
|
+
if (formField) {
|
|
86
|
+
formField.setAttribute('style', 'width:100%');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
setReadonlyFieldStyle() {
|
|
90
|
+
const input = this.readOnlyContentWrapper?.nativeElement?.querySelector('input');
|
|
91
|
+
if (input) {
|
|
92
|
+
const textOverFlowStyleValue = this.getTextOverFlowStyleValue();
|
|
93
|
+
if (textOverFlowStyleValue) {
|
|
94
|
+
input.setAttribute('style', 'text-overflow: ' + textOverFlowStyleValue);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Ellipsis is enabled by default as text-overflow behaviour
|
|
99
|
+
getTextOverFlowStyleValue() {
|
|
100
|
+
// it works only if the style is added to the component directly. Should find a way for get it from the calculated
|
|
101
|
+
// style. Than it would be possible to define the text-overflow in css for the whole application
|
|
102
|
+
const textOverflow = this.elementRef?.nativeElement?.style.textOverflow;
|
|
103
|
+
if (!textOverflow) {
|
|
104
|
+
return 'ellipsis';
|
|
105
|
+
}
|
|
106
|
+
return textOverflow;
|
|
107
|
+
}
|
|
108
|
+
setTooltipForOverflownField() {
|
|
109
|
+
if (this.isEllipsisForTextOverflowEnabled()) {
|
|
110
|
+
const input = this.readOnlyContentWrapper?.nativeElement?.querySelector('input');
|
|
111
|
+
if (input) {
|
|
112
|
+
this.toolTipForInputEnabled = this.isTextOverflown(input);
|
|
113
|
+
if (this.toolTipForInputEnabled) {
|
|
114
|
+
this.toolTipText = this.calculateToolTipText();
|
|
115
|
+
}
|
|
116
|
+
this.changeDetector.detectChanges();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
isEllipsisForTextOverflowEnabled() {
|
|
121
|
+
return this.getTextOverFlowStyleValue() === 'ellipsis';
|
|
122
|
+
}
|
|
123
|
+
isTextOverflown(input) {
|
|
124
|
+
if (input) {
|
|
125
|
+
return input.offsetWidth < input.scrollWidth;
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
calculateToolTipText() {
|
|
130
|
+
if (!this.unit) {
|
|
131
|
+
return this.value;
|
|
132
|
+
}
|
|
133
|
+
return this.unitPosition === 'left' ? this.unit + ' ' + this.value : this.value + ' ' + this.unit;
|
|
134
|
+
}
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ReadOnlyFormFieldWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
136
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: ReadOnlyFormFieldWrapperComponent, selector: "mad-readonly-form-field-wrapper", inputs: { readonly: "readonly", value: "value", textAlign: "textAlign", formatNumber: "formatNumber", decimalPlaces: "decimalPlaces", roundValue: ["roundDisplayValue", "roundValue"], autofillDecimals: "autofillDecimals", unit: "unit", unitPosition: "unitPosition", errorMessage: "errorMessage", id: "id", multiline: "multiline", rows: "rows", shrinkIfEmpty: "shrinkIfEmpty" }, viewQueries: [{ propertyName: "originalContent", first: true, predicate: ["contentWrapper"], descendants: true }, { propertyName: "readOnlyContentWrapper", first: true, predicate: ["readOnlyContentWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #contentWrapper [hidden]=\"readonly\">\n <ng-content></ng-content>\n</div>\n\n<div #readOnlyContentWrapper>\n <ng-container *ngIf=\"!!readonly\">\n <mad-readonly-form-field\n [label]=\"getLabel()\"\n [value]=\"value\"\n [textAlign]=\"textAlign\"\n [formatNumber]=\"formatNumber\"\n [decimalPlaces]=\"decimalPlaces\"\n [roundDisplayValue]=\"roundValue\"\n [autofillDecimals]=\"autofillDecimals\"\n [unit]=\"unit\"\n [unitPosition]=\"unitPosition\"\n [errorMessage]=\"errorMessage\"\n [multiline]=\"multiline\"\n [rows]=\"rows\"\n [shrinkIfEmpty]=\"shrinkIfEmpty\"\n [id]=\"id\"\n matTooltip=\"{{toolTipText}}\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"custom-tooltip\"\n matTooltipDisabled=\"{{!toolTipForInputEnabled}}\">\n </mad-readonly-form-field>\n </ng-container>\n</div>\n", styles: ["mat-form-field{width:inherit}div{width:inherit}::ng-deep .custom-tooltip{font-size:14px!important;word-break:break-all!important;white-space:normal!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i3.ReadOnlyFormFieldComponent, selector: "mad-readonly-form-field", inputs: ["value", "label", "textAlign", "formatNumber", "decimalPlaces", "roundDisplayValue", "autofillDecimals", "unit", "unitPosition", "errorMessage", "multiline", "rows", "id", "shrinkIfEmpty"] }] }); }
|
|
137
|
+
}
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: ReadOnlyFormFieldWrapperComponent, decorators: [{
|
|
139
|
+
type: Component,
|
|
140
|
+
args: [{ selector: 'mad-readonly-form-field-wrapper', template: "<div #contentWrapper [hidden]=\"readonly\">\n <ng-content></ng-content>\n</div>\n\n<div #readOnlyContentWrapper>\n <ng-container *ngIf=\"!!readonly\">\n <mad-readonly-form-field\n [label]=\"getLabel()\"\n [value]=\"value\"\n [textAlign]=\"textAlign\"\n [formatNumber]=\"formatNumber\"\n [decimalPlaces]=\"decimalPlaces\"\n [roundDisplayValue]=\"roundValue\"\n [autofillDecimals]=\"autofillDecimals\"\n [unit]=\"unit\"\n [unitPosition]=\"unitPosition\"\n [errorMessage]=\"errorMessage\"\n [multiline]=\"multiline\"\n [rows]=\"rows\"\n [shrinkIfEmpty]=\"shrinkIfEmpty\"\n [id]=\"id\"\n matTooltip=\"{{toolTipText}}\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"custom-tooltip\"\n matTooltipDisabled=\"{{!toolTipForInputEnabled}}\">\n </mad-readonly-form-field>\n </ng-container>\n</div>\n", styles: ["mat-form-field{width:inherit}div{width:inherit}::ng-deep .custom-tooltip{font-size:14px!important;word-break:break-all!important;white-space:normal!important}\n"] }]
|
|
141
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { originalContent: [{
|
|
142
|
+
type: ViewChild,
|
|
143
|
+
args: ['contentWrapper', { static: false }]
|
|
144
|
+
}], readOnlyContentWrapper: [{
|
|
145
|
+
type: ViewChild,
|
|
146
|
+
args: ['readOnlyContentWrapper', { static: false }]
|
|
147
|
+
}], readonly: [{
|
|
148
|
+
type: Input
|
|
149
|
+
}], value: [{
|
|
150
|
+
type: Input,
|
|
151
|
+
args: ['value']
|
|
152
|
+
}], textAlign: [{
|
|
153
|
+
type: Input,
|
|
154
|
+
args: ['textAlign']
|
|
155
|
+
}], formatNumber: [{
|
|
156
|
+
type: Input,
|
|
157
|
+
args: ['formatNumber']
|
|
158
|
+
}], decimalPlaces: [{
|
|
159
|
+
type: Input,
|
|
160
|
+
args: ['decimalPlaces']
|
|
161
|
+
}], roundValue: [{
|
|
162
|
+
type: Input,
|
|
163
|
+
args: ['roundDisplayValue']
|
|
164
|
+
}], autofillDecimals: [{
|
|
165
|
+
type: Input,
|
|
166
|
+
args: ['autofillDecimals']
|
|
167
|
+
}], unit: [{
|
|
168
|
+
type: Input,
|
|
169
|
+
args: ['unit']
|
|
170
|
+
}], unitPosition: [{
|
|
171
|
+
type: Input,
|
|
172
|
+
args: ['unitPosition']
|
|
173
|
+
}], errorMessage: [{
|
|
174
|
+
type: Input,
|
|
175
|
+
args: ['errorMessage']
|
|
176
|
+
}], id: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], multiline: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], rows: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], shrinkIfEmpty: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}] } });
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHktZm9ybS1maWVsZC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL3JlYWRvbmx5L3JlYWRvbmx5LWZvcm0tZmllbGQtd3JhcHBlci9yZWFkb25seS1mb3JtLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvcmVhZG9ubHkvcmVhZG9ubHktZm9ybS1maWVsZC13cmFwcGVyL3JlYWRvbmx5LWZvcm0tZmllbGQtd3JhcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRXZCOzs7O0dBSUc7QUFNSCxNQUFNLE9BQU8saUNBQWlDO0lBc0Q1QyxZQUFvQixjQUFpQyxFQUFVLFVBQXNCO1FBQWpFLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFoRHJGOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFRTCxjQUFTLEdBQXFCLE1BQU0sQ0FBQztRQUNsQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNwQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNkLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDcEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBQ25CLGlCQUFZLEdBQXFCLE1BQU0sQ0FBQztRQUN4QyxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFFMUQ7OztXQUdHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQjs7V0FFRztRQUNNLFNBQUksR0FBRyxDQUFDLENBQUM7UUFFbEI7Ozs7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QyxPQUFPO2dCQUVNLFNBQVM7c0JBQTVCLEtBQUs7dUJBQUMsV0FBVztnQkFDSyxZQUFZO3NCQUFsQyxLQUFLO3VCQUFDLGNBQWM7Z0JBQ0csYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNNLFVBQVU7c0JBQXJDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUNDLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBQ1YsSUFBSTtzQkFBbEIsS0FBSzt1QkFBQyxNQUFNO2dCQUNVLFlBQVk7c0JBQWxDLEtBQUs7dUJBQUMsY0FBYztnQkFDRSxZQUFZO3NCQUFsQyxLQUFLO3VCQUFDLGNBQWM7Z0JBQ1osRUFBRTtzQkFBVixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQVFHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogV3JhcHMgYSBtYXQtZm9ybS1maWVsZCB0byByZXBsYWNlIGl0IGJ5IGEgcmVhZE9ubHkgcmVwcmVzZW50YXRpb24gaWYgbmVjZXNzYXJ5XG4gKlxuICogQGF1dGhvciBTdGVmYW4gTGFlc3NlclxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYWQtcmVhZG9ubHktZm9ybS1maWVsZC13cmFwcGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlYWRvbmx5LWZvcm0tZmllbGQtd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlYWRvbmx5LWZvcm0tZmllbGQtd3JhcHBlci5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRPbmx5Rm9ybUZpZWxkV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcbiAgQFZpZXdDaGlsZCgnY29udGVudFdyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgb3JpZ2luYWxDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZWFkT25seUNvbnRlbnRXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHJlYWRPbmx5Q29udGVudFdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBcImZhbHNlXCIsIHRoZSBjb250YWluZWQgbWF0LWZvcm0tZmllbGQgaXMgcmVuZGVyZWQgaW4gYWxsIGl0J3MgZ2xvcnkuXG4gICAqIElmIHNldCB0byBcInRydWVcIiwgYSByZWFkb25seSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgaXMgc2hvd24gdXNpbmcgdGhlIG1hdC1mb3JtLWZpZWxkcyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhpcyBpbnB1dCAqTVVTVCBNQVRDSCogdGhlIG1hdC1mb3JtLWZpZWxkIHZhbHVlIHRvIGVuc3VyZSBjb3JyZWN0IGRhdGFcbiAgICogYmluZGluZyBhbmQgZm9ybWF0dGluZyBvZiByZWFkT25seSByZXByZXNlbnRhdGlvbiFcbiAgICovXG4gIEBJbnB1dCgndmFsdWUnKSB2YWx1ZTogYW55O1xuXG4gIEBJbnB1dCgndGV4dEFsaWduJykgdGV4dEFsaWduOiAncmlnaHQnIHwgJ2xlZnQnID0gJ2xlZnQnO1xuICBASW5wdXQoJ2Zvcm1hdE51bWJlcicpIGZvcm1hdE51bWJlciA9IGZhbHNlO1xuICBASW5wdXQoJ2RlY2ltYWxQbGFjZXMnKSBkZWNpbWFsUGxhY2VzID0gMjtcbiAgQElucHV0KCdyb3VuZERpc3BsYXlWYWx1ZScpIHJvdW5kVmFsdWUgPSBmYWxzZTtcbiAgQElucHV0KCdhdXRvZmlsbERlY2ltYWxzJykgYXV0b2ZpbGxEZWNpbWFscyA9IGZhbHNlO1xuICBASW5wdXQoJ3VuaXQnKSB1bml0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCd1bml0UG9zaXRpb24nKSB1bml0UG9zaXRpb246ICdyaWdodCcgfCAnbGVmdCcgPSAnbGVmdCc7XG4gIEBJbnB1dCgnZXJyb3JNZXNzYWdlJykgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIElmIHNldCB0byBcImZhbHNlXCIsIGEgcmVhZG9ubHkgaW5wdXQgd2lsbCBiZSByZW5kZXJlZC5cbiAgICogSWYgc2V0IHRvIFwidHJ1ZVwiLCBhIHJlYWRvbmx5IHRleHRhcmVhIHdpbGwgYmUgcmVuZGVyZWQgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpIG11bHRpbGluZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSByb3dzIGZvciB0aGUgcmVhZG9ubHkgdGV4dGFyZWEuXG4gICAqL1xuICBASW5wdXQoKSByb3dzID0gMztcblxuICAvKipcbiAgICogSWYgc2hyaW5rSWZFbXB0eSBpcyBzZXQgdG8gXCJmYWxzZVwiLCBub3RoaW5nIGNoYW5nZXNcbiAgICogSWYgc2V0IHRvIFwidHJ1ZVwiIGFuZCBtdWx0aWxpbmUgaXMgYWxzbyBcInRydWVcIiwgdGhlIHRleHRhcmVhIHdpbGxcbiAgICogc2hyaW5rIHRvIG9uZSByb3csIGlmIHZhbHVlIGlzIGVtcHR5L251bGwvdW5kZWZpbmVkLlxuICAgKiBPdGhlcndpc2UsIHRoZSBkZWZpbmVkIHJvd3MtdmFsdWUgd2lsbCBiZSB1c2VkXG4gICAqL1xuICBASW5wdXQoKSBzaHJpbmtJZkVtcHR5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgdGFrZW4gZnJvbSB0aGUgY29udGFpbmVkIDxtYXQtbGFiZWw+XG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuXG4gIHRvb2xUaXBGb3JJbnB1dEVuYWJsZWQgPSBmYWxzZTtcbiAgdG9vbFRpcFRleHQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZG9SZW5kZXJpbmcoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFJlYWRvbmx5RmllbGRTdHlsZSgpO1xuICAgIHRoaXMuZG9SZW5kZXJpbmcoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFJlYWRvbmx5RmllbGRTdHlsZSgpO1xuICAgIHRoaXMuc2V0VG9vbHRpcEZvck92ZXJmbG93bkZpZWxkKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhfOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5kb1JlbmRlcmluZygpO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMubGFiZWwpIHtcbiAgICAgIHRoaXMuZXh0cmFjdExhYmVsKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxhYmVsO1xuICB9XG5cbiAgcHJpdmF0ZSBkb1JlbmRlcmluZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3JpZ2luYWxDb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5jb3JyZWN0V2lkdGgoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdExhYmVsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcmlnaW5hbENvbnRlbnQgfHwgIXRoaXMub3JpZ2luYWxDb250ZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSB0aGlzLm9yaWdpbmFsQ29udGVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ21hdC1sYWJlbCcpO1xuICAgIHRoaXMubGFiZWwgPSBsYWJlbEVsZW1lbnQgPyBsYWJlbEVsZW1lbnQuaW5uZXJIVE1MIDogJ21hdC1sYWJlbCBpcyBtaXNzaW5nISc7XG4gIH1cblxuICBwcml2YXRlIGNvcnJlY3RXaWR0aCgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLm9yaWdpbmFsQ29udGVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ21hdC1mb3JtLWZpZWxkJyk7XG4gICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgZm9ybUZpZWxkLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnd2lkdGg6MTAwJScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVhZG9ubHlGaWVsZFN0eWxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5yZWFkT25seUNvbnRlbnRXcmFwcGVyPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCB0ZXh0T3ZlckZsb3dTdHlsZVZhbHVlID0gdGhpcy5nZXRUZXh0T3ZlckZsb3dTdHlsZVZhbHVlKCk7XG4gICAgICBpZiAodGV4dE92ZXJGbG93U3R5bGVWYWx1ZSkge1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3RleHQtb3ZlcmZsb3c6ICcgKyB0ZXh0T3ZlckZsb3dTdHlsZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBFbGxpcHNpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgdGV4dC1vdmVyZmxvdyBiZWhhdmlvdXJcbiAgcHJpdmF0ZSBnZXRUZXh0T3ZlckZsb3dTdHlsZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgLy8gaXQgd29ya3Mgb25seSBpZiB0aGUgc3R5bGUgaXMgYWRkZWQgdG8gdGhlIGNvbXBvbmVudCBkaXJlY3RseS4gU2hvdWxkIGZpbmQgYSB3YXkgZm9yIGdldCBpdCBmcm9tIHRoZSBjYWxjdWxhdGVkXG4gICAgLy8gc3R5bGUuIFRoYW4gaXQgd291bGQgYmUgcG9zc2libGUgdG8gZGVmaW5lIHRoZSB0ZXh0LW92ZXJmbG93IGluIGNzcyBmb3IgdGhlIHdob2xlIGFwcGxpY2F0aW9uXG4gICAgY29uc3QgdGV4dE92ZXJmbG93ID0gdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5zdHlsZS50ZXh0T3ZlcmZsb3c7XG4gICAgaWYgKCF0ZXh0T3ZlcmZsb3cpIHtcbiAgICAgIHJldHVybiAnZWxsaXBzaXMnO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0T3ZlcmZsb3c7XG4gIH1cblxuICBwcml2YXRlIHNldFRvb2x0aXBGb3JPdmVyZmxvd25GaWVsZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VsbGlwc2lzRm9yVGV4dE92ZXJmbG93RW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVhZE9ubHlDb250ZW50V3JhcHBlcj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIHRoaXMudG9vbFRpcEZvcklucHV0RW5hYmxlZCA9IHRoaXMuaXNUZXh0T3ZlcmZsb3duKGlucHV0KTtcbiAgICAgICAgaWYgKHRoaXMudG9vbFRpcEZvcklucHV0RW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMudG9vbFRpcFRleHQgPSB0aGlzLmNhbGN1bGF0ZVRvb2xUaXBUZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0VsbGlwc2lzRm9yVGV4dE92ZXJmbG93RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUZXh0T3ZlckZsb3dTdHlsZVZhbHVlKCkgPT09ICdlbGxpcHNpcyc7XG4gIH1cblxuICBwcml2YXRlIGlzVGV4dE92ZXJmbG93bihpbnB1dDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICByZXR1cm4gaW5wdXQub2Zmc2V0V2lkdGggPCBpbnB1dC5zY3JvbGxXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sVGlwVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy51bml0KSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51bml0UG9zaXRpb24gPT09ICdsZWZ0JyA/IHRoaXMudW5pdCArICcgJyArIHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlICsgJyAnICsgdGhpcy51bml0O1xuICB9XG59XG4iLCI8ZGl2ICNjb250ZW50V3JhcHBlciBbaGlkZGVuXT1cInJlYWRvbmx5XCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48ZGl2ICNyZWFkT25seUNvbnRlbnRXcmFwcGVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFyZWFkb25seVwiPlxuICAgIDxtYWQtcmVhZG9ubHktZm9ybS1maWVsZFxuICAgICAgW2xhYmVsXT1cImdldExhYmVsKClcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIFt0ZXh0QWxpZ25dPVwidGV4dEFsaWduXCJcbiAgICAgIFtmb3JtYXROdW1iZXJdPVwiZm9ybWF0TnVtYmVyXCJcbiAgICAgIFtkZWNpbWFsUGxhY2VzXT1cImRlY2ltYWxQbGFjZXNcIlxuICAgICAgW3JvdW5kRGlzcGxheVZhbHVlXT1cInJvdW5kVmFsdWVcIlxuICAgICAgW2F1dG9maWxsRGVjaW1hbHNdPVwiYXV0b2ZpbGxEZWNpbWFsc1wiXG4gICAgICBbdW5pdF09XCJ1bml0XCJcbiAgICAgIFt1bml0UG9zaXRpb25dPVwidW5pdFBvc2l0aW9uXCJcbiAgICAgIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCJcbiAgICAgIFttdWx0aWxpbmVdPVwibXVsdGlsaW5lXCJcbiAgICAgIFtyb3dzXT1cInJvd3NcIlxuICAgICAgW3Nocmlua0lmRW1wdHldPVwic2hyaW5rSWZFbXB0eVwiXG4gICAgICBbaWRdPVwiaWRcIlxuICAgICAgbWF0VG9vbHRpcD1cInt7dG9vbFRpcFRleHR9fVwiXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiXG4gICAgICBtYXRUb29sdGlwRGlzYWJsZWQ9XCJ7eyF0b29sVGlwRm9ySW5wdXRFbmFibGVkfX1cIj5cbiAgICA8L21hZC1yZWFkb25seS1mb3JtLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|