@porscheinformatik/material-addons 15.0.2 → 16.0.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.
Files changed (82) hide show
  1. package/lib/button/danger-button/danger-button.component.d.ts +1 -1
  2. package/lib/button/flat-button/link-button.component.d.ts +1 -1
  3. package/lib/button/icon-button/icon-button.component.d.ts +1 -1
  4. package/lib/button/outline-button/outline-button.component.d.ts +1 -1
  5. package/lib/button/primary-button/primary-button.component.d.ts +1 -1
  6. package/lib/card/card.component.d.ts +1 -1
  7. package/lib/data-table/data-table.component.d.ts +1 -1
  8. package/lib/flowbar/flowbar.component.d.ts +1 -1
  9. package/lib/material-action-button/material-action-button.component.d.ts +1 -1
  10. package/lib/numeric-field/numeric-field.directive.d.ts +1 -1
  11. package/lib/quick-list/base-quick-list.component.d.ts +1 -1
  12. package/lib/readonly/readonly-form-field/readonly-form-field.component.d.ts +1 -1
  13. package/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.d.ts +1 -1
  14. package/lib/stepper/step-header/step-header.component.d.ts +1 -1
  15. package/lib/stepper/stepper.component.d.ts +1 -1
  16. package/lib/table/table.component.d.ts +1 -1
  17. package/lib/throttle-click/throttle-click.directive.d.ts +1 -1
  18. package/package.json +9 -11
  19. package/esm2020/lib/button/button.mjs +0 -7
  20. package/esm2020/lib/button/button.module.mjs +0 -26
  21. package/esm2020/lib/button/danger-button/danger-button.component.mjs +0 -28
  22. package/esm2020/lib/button/flat-button/link-button.component.mjs +0 -28
  23. package/esm2020/lib/button/icon-button/icon-button.component.mjs +0 -28
  24. package/esm2020/lib/button/mad-basic-button.mjs +0 -39
  25. package/esm2020/lib/button/outline-button/outline-button.component.mjs +0 -28
  26. package/esm2020/lib/button/primary-button/primary-button.component.mjs +0 -28
  27. package/esm2020/lib/card/card.component.mjs +0 -129
  28. package/esm2020/lib/card/card.mjs +0 -2
  29. package/esm2020/lib/card/card.module.mjs +0 -23
  30. package/esm2020/lib/content-panel/content-header/content-header.component.mjs +0 -11
  31. package/esm2020/lib/content-panel/content-panel-container/content-panel-container.component.mjs +0 -11
  32. package/esm2020/lib/content-panel/content-panel-container-content/content-panel-container-content.component.mjs +0 -11
  33. package/esm2020/lib/content-panel/content-panel-container-footer/content-panel-container-footer.component.mjs +0 -11
  34. package/esm2020/lib/content-panel/content-panel.module.mjs +0 -42
  35. package/esm2020/lib/content-panel/main-container/main-container.component.mjs +0 -11
  36. package/esm2020/lib/data-table/data-table-action-type.mjs +0 -6
  37. package/esm2020/lib/data-table/data-table-action.mjs +0 -2
  38. package/esm2020/lib/data-table/data-table-column-definition.mjs +0 -2
  39. package/esm2020/lib/data-table/data-table-column.mjs +0 -2
  40. package/esm2020/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.mjs +0 -103
  41. package/esm2020/lib/data-table/data-table-row.mjs +0 -2
  42. package/esm2020/lib/data-table/data-table.component.mjs +0 -527
  43. package/esm2020/lib/data-table/data-table.mjs +0 -3
  44. package/esm2020/lib/data-table/data-table.module.mjs +0 -81
  45. package/esm2020/lib/flowbar/flowbar.component.mjs +0 -190
  46. package/esm2020/lib/flowbar/flowbar.module.mjs +0 -19
  47. package/esm2020/lib/material-action-button/material-action-button.component.mjs +0 -34
  48. package/esm2020/lib/material-action-button/material-action-button.module.mjs +0 -22
  49. package/esm2020/lib/material-addons.module.mjs +0 -45
  50. package/esm2020/lib/numeric-field/number-format.service.mjs +0 -139
  51. package/esm2020/lib/numeric-field/numeric-field.directive.mjs +0 -295
  52. package/esm2020/lib/numeric-field/numeric-field.mjs +0 -2
  53. package/esm2020/lib/numeric-field/numeric-field.module.mjs +0 -24
  54. package/esm2020/lib/quick-list/base-quick-list.component.mjs +0 -101
  55. package/esm2020/lib/quick-list/quick-list-compact/quick-list-compact.component.mjs +0 -20
  56. package/esm2020/lib/quick-list/quick-list.component.mjs +0 -21
  57. package/esm2020/lib/quick-list/quick-list.mjs +0 -4
  58. package/esm2020/lib/quick-list/quick-list.module.mjs +0 -23
  59. package/esm2020/lib/readonly/readonly-form-field/readonly-form-field.component.mjs +0 -155
  60. package/esm2020/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.mjs +0 -185
  61. package/esm2020/lib/readonly/readonly-form-field.module.mjs +0 -24
  62. package/esm2020/lib/stepper/mad-stepper-animation.mjs +0 -13
  63. package/esm2020/lib/stepper/step-header/step-header.component.mjs +0 -77
  64. package/esm2020/lib/stepper/stepper.component.mjs +0 -159
  65. package/esm2020/lib/stepper/stepper.module.mjs +0 -23
  66. package/esm2020/lib/table/column-header.mjs +0 -2
  67. package/esm2020/lib/table/table-action.mjs +0 -2
  68. package/esm2020/lib/table/table.component.mjs +0 -130
  69. package/esm2020/lib/table/table.mjs +0 -2
  70. package/esm2020/lib/table/table.module.mjs +0 -56
  71. package/esm2020/lib/throttle-click/throttle-click.directive.mjs +0 -38
  72. package/esm2020/lib/throttle-click/throttle-click.module.mjs +0 -18
  73. package/esm2020/lib/toolbar/toolbar-action.interface.mjs +0 -2
  74. package/esm2020/lib/toolbar/toolbar.component.mjs +0 -78
  75. package/esm2020/lib/toolbar/toolbar.module.mjs +0 -56
  76. package/esm2020/lib/toolbar/toolbar.service.mjs +0 -124
  77. package/esm2020/porscheinformatik-material-addons.mjs +0 -5
  78. package/esm2020/public_api.mjs +0 -41
  79. package/fesm2015/porscheinformatik-material-addons.mjs +0 -3007
  80. package/fesm2015/porscheinformatik-material-addons.mjs.map +0 -1
  81. package/fesm2020/porscheinformatik-material-addons.mjs +0 -2983
  82. package/fesm2020/porscheinformatik-material-addons.mjs.map +0 -1
@@ -1,101 +0,0 @@
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
- }
69
- BaseQuickListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseQuickListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
70
- BaseQuickListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", 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 });
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", 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==
@@ -1,20 +0,0 @@
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
- }
14
- QuickListCompactComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: QuickListCompactComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
15
- QuickListCompactComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", 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"] }] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL3F1aWNrLWxpc3QvcXVpY2stbGlzdC1jb21wYWN0L3F1aWNrLWxpc3QtY29tcGFjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9xdWljay1saXN0L3F1aWNrLWxpc3QtY29tcGFjdC9xdWljay1saXN0LWNvbXBhY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFpQixNQUFNLDhCQUE4QixDQUFDOzs7Ozs7QUFPckYsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHNCQUFxQztJQUNsRixZQUFtQixpQkFBb0M7UUFDckQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFEUixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBRXZELENBQUM7O3NIQUhVLHlCQUF5QjswR0FBekIseUJBQXlCLHFGQ1J0Qyw0NUJBbUJBOzJGRFhhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlUXVpY2tMaXN0Q29tcG9uZW50LCBRdWlja0xpc3RJdGVtIH0gZnJvbSAnLi4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1xdWljay1saXN0LWNvbXBhY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudCBleHRlbmRzIEJhc2VRdWlja0xpc3RDb21wb25lbnQ8UXVpY2tMaXN0SXRlbT4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICB9XG59XG4iLCI8aDM+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibGFiZWxcIj48L25nLWNvbnRlbnQ+XG48L2gzPlxuPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbGxJdGVtczsgbGV0IGlzTGFzdCA9IGxhc3Q7XCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtY29udGFpbmVyXCIgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIiAjcm93IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdztcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWFkLWljb24tYnV0dG9uICpuZ0lmPVwiIXJlYWRvbmx5ICYmIGlzRGVsZXRlQWxsb3dlZCgpXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgICAgICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFyZWFkb25seSAmJiBpc0xhc3RcIiBbZGlzYWJsZWRdPVwiIWlzQWRkQWxsb3dlZCgpXCIgKGNsaWNrKT1cImFkZEl0ZW0oKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgIDwvbWFkLWljb24tYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bWFkLWxpbmstYnV0dG9uICpuZ0lmPVwiIXJlYWRvbmx5ICYmICF0aGlzLmFsbEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtKClcIlxuICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWRkQWxsb3dlZCgpXCI+XG4gICAge3sgYWRkTGFiZWwgfX1cbjwvbWFkLWxpbmstYnV0dG9uPlxuIl19
@@ -1,21 +0,0 @@
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
- }
15
- QuickListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: QuickListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
16
- QuickListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", 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"] }] });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9xdWljay1saXN0L3F1aWNrLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvcXVpY2stbGlzdC9xdWljay1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1JQUFtSTtBQUVuSSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQWlCLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQU9wRixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsc0JBQXFDO0lBQzNFLFlBQW1CLGlCQUFvQztRQUNyRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQURSLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFFdkQsQ0FBQzs7K0dBSFUsa0JBQWtCO21HQUFsQixrQkFBa0IsNkVDVi9CLGlvQkFlQTsyRkRMYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3BvcnNjaGVpbmZvcm1hdGlrL2NsYXJpdHktYWRkb25zL2Jsb2IvbWFzdGVyL3NyYy9jbHItYWRkb25zL2dlbmVyaWMtcXVpY2stbGlzdC9nZW5lcmljLXF1aWNrLWxpc3QudHNcblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVF1aWNrTGlzdENvbXBvbmVudCwgUXVpY2tMaXN0SXRlbSB9IGZyb20gJy4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hZC1xdWljay1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1aWNrLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWlja0xpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlUXVpY2tMaXN0Q29tcG9uZW50PFF1aWNrTGlzdEl0ZW0+IHtcbiAgY29uc3RydWN0b3IocHVibGljIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGNoYW5nZURldGVjdG9yUmVmKTtcbiAgfVxufVxuIiwiPGgzPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJsYWJlbFwiPjwvbmctY29udGVudD5cbjwvaDM+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFsbEl0ZW1zXCI+XG4gIDxkaXYgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIiAjcm93IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdztcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG1hZC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFyZWFkb25seSAmJiBpc0RlbGV0ZUFsbG93ZWQoKVwiIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pXCI+XG4gICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICA8L21hZC1pY29uLWJ1dHRvbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxtYWQtb3V0bGluZS1idXR0b24gKm5nSWY9XCIhcmVhZG9ubHlcIiAoY2xpY2spPVwiYWRkSXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhZGRQb3NzaWJsZSB8fCAhaXNBZGRBbGxvd2VkKClcIj5cbiAge3sgYWRkTGFiZWwgfX1cbjwvbWFkLW91dGxpbmUtYnV0dG9uPlxuIl19
@@ -1,4 +0,0 @@
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=
@@ -1,23 +0,0 @@
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
- }
12
- QuickListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: QuickListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
- QuickListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: QuickListModule, declarations: [QuickListComponent, BaseQuickListComponent, QuickListCompactComponent], imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule], exports: [QuickListComponent, QuickListCompactComponent, BaseQuickListComponent] });
14
- QuickListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: QuickListModule, imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule] });
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stbGlzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9xdWljay1saXN0L3F1aWNrLWxpc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQU85RixNQUFNLE9BQU8sZUFBZTs7NEdBQWYsZUFBZTs2R0FBZixlQUFlLGlCQUpYLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixhQUMxRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLGFBQzFELGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQjs2R0FFcEUsZUFBZSxZQUhoQixZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZOzJGQUd6RCxlQUFlO2tCQUwzQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDO29CQUNyRixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7b0JBQ3JFLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixDQUFDO2lCQUNqRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFF1aWNrTGlzdENvbXBvbmVudCB9IGZyb20gJy4vcXVpY2stbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgQmFzZVF1aWNrTGlzdENvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1xdWljay1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWlja0xpc3RDb21wYWN0Q29tcG9uZW50IH0gZnJvbSAnLi9xdWljay1saXN0LWNvbXBhY3QvcXVpY2stbGlzdC1jb21wYWN0LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1F1aWNrTGlzdENvbXBvbmVudCwgQmFzZVF1aWNrTGlzdENvbXBvbmVudCwgUXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQnV0dG9uTW9kdWxlXSxcbiAgZXhwb3J0czogW1F1aWNrTGlzdENvbXBvbmVudCwgUXVpY2tMaXN0Q29tcGFjdENvbXBvbmVudCwgQmFzZVF1aWNrTGlzdENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFF1aWNrTGlzdE1vZHVsZSB7fVxuIl19
@@ -1,155 +0,0 @@
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', '5px');
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
- }
108
- ReadOnlyFormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ReadOnlyFormFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.NumberFormatService }], target: i0.ɵɵFactoryTarget.Component });
109
- ReadOnlyFormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", 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"] }] });
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", 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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QkFDRSxZQUFZO3NCQUFsQyxLQUFLO3VCQUFDLGNBQWM7Z0JBQ1osU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ2dCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbnVtZXJpYy1maWVsZC9udW1iZXItZm9ybWF0LnNlcnZpY2UnO1xuXG4vKipcbiAqIFJlYWQtb25seSBtYXQtZm9ybS1maWVsZCByZXByZXNlbnRhdGlvbiBvZiBwcm92aWRlZCB2YWx1ZVxuICpcbiAqIEBhdXRob3IgU3RlZmFuIExhZXNzZXJcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYWQtcmVhZG9ubHktZm9ybS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWFkb25seS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVhZG9ubHktZm9ybS1maWVsZC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRPbmx5Rm9ybUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcbiAgQElucHV0KCd2YWx1ZScpIHZhbHVlOiBhbnk7XG4gIEBJbnB1dCgnbGFiZWwnKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoJ3RleHRBbGlnbicpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdsZWZ0JztcbiAgQElucHV0KCdmb3JtYXROdW1iZXInKSBmb3JtYXROdW1iZXIgPSBmYWxzZTtcbiAgQElucHV0KCdkZWNpbWFsUGxhY2VzJykgZGVjaW1hbFBsYWNlcyA9IDI7XG4gIEBJbnB1dCgncm91bmREaXNwbGF5VmFsdWUnKSByb3VuZFZhbHVlID0gZmFsc2U7XG4gIEBJbnB1dCgnYXV0b2ZpbGxEZWNpbWFscycpIGF1dG9maWxsRGVjaW1hbHMgPSBmYWxzZTtcbiAgQElucHV0KCd1bml0JykgdW5pdDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgndW5pdFBvc2l0aW9uJykgdW5pdFBvc2l0aW9uOiAncmlnaHQnIHwgJ2xlZnQnID0gJ2xlZnQnO1xuICBASW5wdXQoJ2Vycm9yTWVzc2FnZScpIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG11bHRpbGluZSA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dzID0gMztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgLypcbiAgICogSWYgc2hyaW5rSWZFbXB0eSBpcyBzZXQgdG8gXCJmYWxzZVwiLCBub3RoaW5nIGNoYW5nZXNcbiAgICogSWYgc2V0IHRvIFwidHJ1ZVwiIGFuZCBtdWx0aWxpbmUgaXMgYWxzbyBcInRydWVcIiwgdGhlIHRleHRhcmVhIHdpbGxcbiAgICogc2hyaW5rIHRvIG9uZSByb3csIGlmIHZhbHVlIGlzIGVtcHR5L251bGwvdW5kZWZpbmVkLlxuICAgKiBPdGhlcndpc2UsIHRoZSBkZWZpbmVkIHJvd3MtdmFsdWUgd2lsbCBiZSB1c2VkXG4gICAqL1xuICBASW5wdXQoKSBzaHJpbmtJZkVtcHR5ID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWwnKSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuICBlcnJvck1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyID0ge1xuICAgIGlzRXJyb3JTdGF0ZTogKCkgPT4gISF0aGlzLmVycm9yTWVzc2FnZSxcbiAgfTtcblxuICBwcml2YXRlIHVuaXRTcGFuOiBIVE1MU3BhbkVsZW1lbnQ7XG4gIHByaXZhdGUgdGV4dFNwYW46IEhUTUxTcGFuRWxlbWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIG51bWJlckZvcm1hdFNlcnZpY2U6IE51bWJlckZvcm1hdFNlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoXzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghTnVtYmVyRm9ybWF0U2VydmljZS52YWx1ZUlzU2V0KHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJy0nO1xuICAgICAgaWYgKHRoaXMuc2hyaW5rSWZFbXB0eSkge1xuICAgICAgICB0aGlzLnJvd3MgPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtYXROdW1iZXIgJiYgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5udW1iZXJGb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLnZhbHVlLCB7XG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IHRoaXMuZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgZmluYWxGb3JtYXR0aW5nOiB0cnVlLFxuICAgICAgICBhdXRvZmlsbERlY2ltYWxzOiB0aGlzLmF1dG9maWxsRGVjaW1hbHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyBUT0RPIGRpcmVjdCBjb3B5IGZyb20gTnVtZXJpY0ZpZWxkRGlyZWN0aXZlXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmluamVjdFVuaXRTeW1ib2woKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0VW5pdFN5bWJvbCgpOiB2b2lkIHtcbiAgICAvLyBOZWVkIHRvIGluamVjdCB0aGUgdW5pdCBzeW1ib2wgd2hlbiB0aGUgaW5wdXQgZWxlbWVudCB3aWR0aCBpcyBzZXQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAvLyBvdGhlcndpc2UgdGhlIGljb24gd29udCBzaG93IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKCEhdGhpcy51bml0ICYmICF0aGlzLnVuaXRTcGFuICYmIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICE9PSAwKSB7XG4gICAgICAvLyBHZXQgdGhlIGlucHV0IHdyYXBwZXIgYW5kIGFwcGx5IG5lY2Vzc2FyeSBzdHlsZXNcbiAgICAgIGNvbnN0IGlucHV0V3JhcHBlciA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBzcGFuIHdpdGggdW5pdCBzeW1ib2wgYW5kIGFwcGx5IG5lY2Vzc2FyeSBzdHlsZXNcbiAgICAgIHRoaXMudW5pdFNwYW4gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblxuICAgICAgaWYgKHRoaXMudW5pdFBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy51bml0U3BhbiwgJ21hdFByZWZpeCcsICcnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnVuaXRTcGFuLCAncGFkZGluZy1yaWdodCcsICc1cHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoaW5wdXRXcmFwcGVyLCB0aGlzLnVuaXRTcGFuLCBpbnB1dFdyYXBwZXIuY2hpbGRyZW5bMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy51bml0U3BhbiwgJ21hdFN1ZmZpeCcsICcnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnVuaXRTcGFuLCAncGFkZGluZy1sZWZ0JywgJzVweCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGlucHV0V3JhcHBlciwgdGhpcy51bml0U3Bhbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3BlY2lhbCBoYW5kbGluZyB0byBtb3ZlIHVuaXQgc3ltYm9sIGFsb25nIHdpdGggZGlzcGxheSB2YWx1ZVxuICAgIGlmICghIXRoaXMudW5pdFNwYW4gJiYgdGhpcy50ZXh0QWxpZ24gPT09ICdsZWZ0JyAmJiB0aGlzLnVuaXRQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgY29uc3QgaW5wdXRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCBudWxsKTtcbiAgICAgIHRoaXMudW5pdFNwYW4uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5tYXJnaW5Ub3AgPSBpbnB1dFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXdpZHRoJyk7XG4gICAgICB0aGlzLnVuaXRTcGFuLnN0eWxlLnBhZGRpbmdUb3AgPSBpbnB1dFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXRvcCcpO1xuICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5wYWRkaW5nQm90dG9tID0gaW5wdXRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcblxuICAgICAgaWYgKCF0aGlzLnRleHRTcGFuKSB7XG4gICAgICAgIHRoaXMudGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy50ZXh0U3Bhbik7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUuZm9udCA9IGlucHV0U3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQnKTtcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtc2l6ZScpO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS53aWR0aCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUudG9wID0gJzAnO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAnbm8td3JhcCc7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgICAgdGhpcy50ZXh0U3Bhbi5pbm5lckhUTUwgPSB0aGlzLnZhbHVlO1xuICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbih0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCAtIHRoaXMudW5pdFNwYW4uY2xpZW50V2lkdGgsIE1hdGguY2VpbCh0aGlzLnRleHRTcGFuLmNsaWVudFdpZHRoKSk7XG4gICAgICB0aGlzLnVuaXRTcGFuLnN0eWxlLmxlZnQgPSB3aWR0aCArICdweCc7XG4gICAgfVxuICAgIC8vIGFsd2F5cyByZXNldCB1bml0IHN5bWJvbFxuICAgIGlmICghIXRoaXMudW5pdFNwYW4pIHtcbiAgICAgIHRoaXMudW5pdFNwYW4udGV4dENvbnRlbnQgPSB0aGlzLnVuaXQ7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLWdyb3VwIG1hZC1yZWFkLW9ubHlcIj5cbiAgPG1hdC1sYWJlbD57eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICA8aW5wdXRcbiAgICAqbmdJZj1cIiFtdWx0aWxpbmVcIlxuICAgIFtuZ01vZGVsXT1cInZhbHVlXCJcbiAgICBbbmdDbGFzc109XCIndGV4dC0nICsgdGV4dEFsaWduICsgJyBjb250ZW50J1wiXG4gICAgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yTWF0Y2hlclwiXG4gICAgW2lkXT1cImlkXCJcbiAgICByZWFkb25seVxuICAgIGRpc2FibGVkXG4gICAgbWF0SW5wdXRcbiAgICAjaW5wdXRFbFxuICAvPlxuXG4gIDx0ZXh0YXJlYVxuICAgICpuZ0lmPVwibXVsdGlsaW5lXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgY2xhc3M9XCJtdWx0aWxpbmUgY29udGVudFwiXG4gICAgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yTWF0Y2hlclwiXG4gICAgW2lkXT1cImlkXCJcbiAgICByZWFkb25seVxuICAgIGRpc2FibGVkXG4gICAgbWF0SW5wdXRcbiAgPjwvdGV4dGFyZWE+XG4gIDxtYXQtZXJyb3I+e3sgZXJyb3JNZXNzYWdlIH19PC9tYXQtZXJyb3I+XG48L21hdC1mb3JtLWZpZWxkPlxuIl19
@@ -1,185 +0,0 @@
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
- }
136
- ReadOnlyFormFieldWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ReadOnlyFormFieldWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
137
- ReadOnlyFormFieldWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", 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"] }] });
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", 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