@dangl/angular-ava 1.1.2-beta0049 → 1.1.2-beta0055
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/README.md +26 -8
- package/fesm2022/dangl-angular-ava.mjs +63 -556
- package/fesm2022/dangl-angular-ava.mjs.map +1 -1
- package/lib/ava-tree/tree/components/ava-tree/ava-tree.component.d.ts +1 -1
- package/lib/ava-tree/tree/components/list-structure/list-structure.component.d.ts +1 -1
- package/lib/ava-tree/tree/components/table-structure/table-structure.component.d.ts +1 -1
- package/lib/ava-tree/tree/components/tree-item/tree-item.component.d.ts +1 -1
- package/lib/ava-tree/tree/components/tree-node/tree-node.component.d.ts +1 -1
- package/lib/ava-tree/tree/components/tree-structure/tree-structure.component.d.ts +1 -1
- package/lib/ava-tree/tree/directives/save-changing-view.directive.d.ts +1 -1
- package/lib/ava-tree/tree/pipes/element-icon-name.pipe.d.ts +1 -1
- package/lib/ava-tree/tree/pipes/element-item-number.pipe.d.ts +1 -1
- package/lib/ava-tree/tree/pipes/element-text.pipe.d.ts +1 -1
- package/lib/ava-tree/tree/pipes/group-child-elements.pipe.d.ts +1 -1
- package/package.json +1 -3
- package/public-api.d.ts +1 -2
- package/esm2022/dangl-angular-ava.mjs +0 -5
- package/esm2022/lib/angular-ava.module.mjs +0 -91
- package/esm2022/lib/ava-tree/invoice/invoice-display/invoice-display.component.mjs +0 -123
- package/esm2022/lib/ava-tree/tree/components/ava-tree/ava-tree.component.mjs +0 -449
- package/esm2022/lib/ava-tree/tree/components/list-structure/list-structure.component.mjs +0 -41
- package/esm2022/lib/ava-tree/tree/components/table-structure/table-structure.component.mjs +0 -110
- package/esm2022/lib/ava-tree/tree/components/tree-item/tree-item.component.mjs +0 -102
- package/esm2022/lib/ava-tree/tree/components/tree-node/tree-node.component.mjs +0 -53
- package/esm2022/lib/ava-tree/tree/components/tree-structure/tree-structure.component.mjs +0 -33
- package/esm2022/lib/ava-tree/tree/constants/defaultFilters.mjs +0 -23
- package/esm2022/lib/ava-tree/tree/constants/defaultTextWordInvoice.mjs +0 -77
- package/esm2022/lib/ava-tree/tree/constants/defaultTextWords.mjs +0 -29
- package/esm2022/lib/ava-tree/tree/constants/defaults.mjs +0 -4
- package/esm2022/lib/ava-tree/tree/constants/index.mjs +0 -6
- package/esm2022/lib/ava-tree/tree/directives/save-changing-view.directive.mjs +0 -47
- package/esm2022/lib/ava-tree/tree/model/ava-models.mjs +0 -206
- package/esm2022/lib/ava-tree/tree/model/context-menu-data.model.mjs +0 -2
- package/esm2022/lib/ava-tree/tree/model/function-view-line.model.mjs +0 -2
- package/esm2022/lib/ava-tree/tree/model/index.mjs +0 -5
- package/esm2022/lib/ava-tree/tree/model/invoice-models.mjs +0 -45
- package/esm2022/lib/ava-tree/tree/model/invoice-words.model.mjs +0 -2
- package/esm2022/lib/ava-tree/tree/model/selecting.model.mjs +0 -2
- package/esm2022/lib/ava-tree/tree/model/tableColumnType.mjs +0 -2
- package/esm2022/lib/ava-tree/tree/model/tree-mode.model.mjs +0 -7
- package/esm2022/lib/ava-tree/tree/pipes/element-icon-name.pipe.mjs +0 -27
- package/esm2022/lib/ava-tree/tree/pipes/element-item-number.pipe.mjs +0 -23
- package/esm2022/lib/ava-tree/tree/pipes/element-text.pipe.mjs +0 -39
- package/esm2022/lib/ava-tree/tree/pipes/group-child-elements.pipe.mjs +0 -20
- package/esm2022/lib/ava-tree/tree/pipes/invoice-attachment-mime-type.pipe.mjs +0 -34
- package/esm2022/lib/ava-tree/tree/services/expand-parent-group.service.mjs +0 -32
- package/esm2022/lib/ava-tree/tree/services/flat-elements.service.mjs +0 -96
- package/esm2022/lib/ava-tree/tree/services/keyboard-operation.service.mjs +0 -116
- package/esm2022/lib/ava-tree/tree/services/select-element.service.mjs +0 -41
- package/esm2022/lib/ava-tree/tree/services/tree-node-selection.service.mjs +0 -133
- package/esm2022/lib/ava-tree/tree/services/tree-words.service.mjs +0 -21
- package/esm2022/lib/version.mjs +0 -10
- package/esm2022/public-api.mjs +0 -10
- package/lib/angular-ava.module.d.ts +0 -27
|
@@ -179,5 +179,5 @@ export declare class AvaTreeComponent implements OnInit, OnChanges, OnDestroy, A
|
|
|
179
179
|
private getFilteredList;
|
|
180
180
|
private initializeEventListeners;
|
|
181
181
|
static ɵfac: i0.ɵɵFactoryDeclaration<AvaTreeComponent, [{ self: true; }, { self: true; }, { self: true; }, { self: true; }, { self: true; }, null, null]>;
|
|
182
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AvaTreeComponent, "ava-tree", never, { "project": { "alias": "project"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "selectedNodeId": { "alias": "selectedNodeId"; "required": false; }; "indent": { "alias": "indent"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "modeView": { "alias": "modeView"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "initiallySelectedElements": { "alias": "initiallySelectedElements"; "required": false; }; "textWords": { "alias": "textWords"; "required": false; }; "mouseAwareKeyboardControl": { "alias": "mouseAwareKeyboardControl"; "required": false; }; "customKeyboardOperationConfig": { "alias": "customKeyboardOperationConfig"; "required": false; }; "listFilterFunc": { "alias": "listFilterFunc"; "required": false; }; "addTableColumns": { "alias": "addTableColumns"; "required": false; }; "functionView": { "alias": "functionView"; "required": false; }; }, { "selectClick": "selectClick"; "selectDblClick": "selectDblClick"; "contextMenuEvent": "contextMenuEvent"; "selectedElementsChanged": "selectedElementsChanged"; }, never, never,
|
|
182
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AvaTreeComponent, "ava-tree", never, { "project": { "alias": "project"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "selectedNodeId": { "alias": "selectedNodeId"; "required": false; }; "indent": { "alias": "indent"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "modeView": { "alias": "modeView"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "initiallySelectedElements": { "alias": "initiallySelectedElements"; "required": false; }; "textWords": { "alias": "textWords"; "required": false; }; "mouseAwareKeyboardControl": { "alias": "mouseAwareKeyboardControl"; "required": false; }; "customKeyboardOperationConfig": { "alias": "customKeyboardOperationConfig"; "required": false; }; "listFilterFunc": { "alias": "listFilterFunc"; "required": false; }; "addTableColumns": { "alias": "addTableColumns"; "required": false; }; "functionView": { "alias": "functionView"; "required": false; }; }, { "selectClick": "selectClick"; "selectDblClick": "selectDblClick"; "contextMenuEvent": "contextMenuEvent"; "selectedElementsChanged": "selectedElementsChanged"; }, never, never, true, never>;
|
|
183
183
|
}
|
|
@@ -14,5 +14,5 @@ export declare class ListStructureComponent implements OnDestroy, OnInit {
|
|
|
14
14
|
ngOnInit(): void;
|
|
15
15
|
ngOnDestroy(): void;
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<ListStructureComponent, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ListStructureComponent, "ava-list-structure", never, { "filteredElementList": { "alias": "filteredElementList"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never,
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ListStructureComponent, "ava-list-structure", never, { "filteredElementList": { "alias": "filteredElementList"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never, true, never>;
|
|
18
18
|
}
|
|
@@ -30,5 +30,5 @@ export declare class TableStructureComponent implements OnInit, OnDestroy {
|
|
|
30
30
|
openContextMenu(event: MouseEvent, row: IElementDto): void;
|
|
31
31
|
changeSelecting(element: IElementDto, event: boolean): void;
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableStructureComponent, never>;
|
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TableStructureComponent, "ava-table-structure", never, { "filteredElementList": { "alias": "filteredElementList"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "addTableColumns": { "alias": "addTableColumns"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never,
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TableStructureComponent, "ava-table-structure", never, { "filteredElementList": { "alias": "filteredElementList"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "addTableColumns": { "alias": "addTableColumns"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never, true, never>;
|
|
34
34
|
}
|
|
@@ -31,5 +31,5 @@ export declare class TreeItemComponent implements OnInit, OnDestroy {
|
|
|
31
31
|
openContextMenu(event: MouseEvent): void;
|
|
32
32
|
changeSelecting(element: IElementDto, isSelected: boolean): void;
|
|
33
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreeItemComponent, never>;
|
|
34
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TreeItemComponent, "ava-tree-item", never, { "element": { "alias": "element"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never,
|
|
34
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TreeItemComponent, "ava-tree-item", never, { "element": { "alias": "element"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never, true, never>;
|
|
35
35
|
}
|
|
@@ -19,5 +19,5 @@ export declare class TreeNodeComponent implements OnDestroy, OnInit {
|
|
|
19
19
|
ngOnDestroy(): void;
|
|
20
20
|
expand(element: IElementDto): void;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeComponent, never>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeComponent, "ava-tree-node", never, { "elementList": { "alias": "elementList"; "required": false; }; "indent": { "alias": "indent"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never,
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TreeNodeComponent, "ava-tree-node", never, { "elementList": { "alias": "elementList"; "required": false; }; "indent": { "alias": "indent"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never, true, never>;
|
|
23
23
|
}
|
|
@@ -10,5 +10,5 @@ export declare class TreeStructureComponent {
|
|
|
10
10
|
selectedColor: string | null;
|
|
11
11
|
allowDblClick: boolean;
|
|
12
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreeStructureComponent, never>;
|
|
13
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TreeStructureComponent, "ava-tree-structure", never, { "serviceSpecification": { "alias": "serviceSpecification"; "required": false; }; "indent": { "alias": "indent"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never,
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TreeStructureComponent, "ava-tree-structure", never, { "serviceSpecification": { "alias": "serviceSpecification"; "required": false; }; "indent": { "alias": "indent"; "required": false; }; "expansionState": { "alias": "expansionState"; "required": false; }; "isSelectionMode": { "alias": "isSelectionMode"; "required": false; }; "selectedColor": { "alias": "selectedColor"; "required": false; }; "allowDblClick": { "alias": "allowDblClick"; "required": false; }; }, {}, never, never, true, never>;
|
|
14
14
|
}
|
|
@@ -9,5 +9,5 @@ export declare class SaveChangingViewDirective implements AfterViewInit {
|
|
|
9
9
|
constructor(el: ElementRef, renderer: Renderer2, flatElementsService: FlatElementsService);
|
|
10
10
|
ngAfterViewInit(): void;
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<SaveChangingViewDirective, never>;
|
|
12
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<SaveChangingViewDirective, "[saveChangingView]", never, { "attributeValue": { "alias": "attributeValue"; "required": false; }; }, {}, never, never,
|
|
12
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<SaveChangingViewDirective, "[saveChangingView]", never, { "attributeValue": { "alias": "attributeValue"; "required": false; }; }, {}, never, never, true, never>;
|
|
13
13
|
}
|
|
@@ -4,5 +4,5 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class ElementIconNamePipe implements PipeTransform {
|
|
5
5
|
transform(element: IElementDto): string;
|
|
6
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElementIconNamePipe, never>;
|
|
7
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<ElementIconNamePipe, "elementIconName",
|
|
7
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<ElementIconNamePipe, "elementIconName", true>;
|
|
8
8
|
}
|
|
@@ -4,5 +4,5 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class ElementItemNumberPipe implements PipeTransform {
|
|
5
5
|
transform(element: IElementDto): string;
|
|
6
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElementItemNumberPipe, never>;
|
|
7
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<ElementItemNumberPipe, "elementItemNumber",
|
|
7
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<ElementItemNumberPipe, "elementItemNumber", true>;
|
|
8
8
|
}
|
|
@@ -11,5 +11,5 @@ export declare class ElementTextPipe implements PipeTransform, OnDestroy {
|
|
|
11
11
|
ngOnDestroy(): void;
|
|
12
12
|
transform(element: IElementDto): string;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElementTextPipe, never>;
|
|
14
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<ElementTextPipe, "elementText",
|
|
14
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<ElementTextPipe, "elementText", true>;
|
|
15
15
|
}
|
|
@@ -4,5 +4,5 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class GroupChildElementsPipe implements PipeTransform {
|
|
5
5
|
transform(element: IElementDto): IElementDto[] | null;
|
|
6
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<GroupChildElementsPipe, never>;
|
|
7
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<GroupChildElementsPipe, "groupChildElements",
|
|
7
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<GroupChildElementsPipe, "groupChildElements", true>;
|
|
8
8
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dangl/angular-ava",
|
|
3
|
-
"version": "1.1.2-
|
|
3
|
+
"version": "1.1.2-beta0055",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"angular",
|
|
6
6
|
"ava",
|
|
@@ -31,8 +31,6 @@
|
|
|
31
31
|
},
|
|
32
32
|
".": {
|
|
33
33
|
"types": "./index.d.ts",
|
|
34
|
-
"esm2022": "./esm2022/dangl-angular-ava.mjs",
|
|
35
|
-
"esm": "./esm2022/dangl-angular-ava.mjs",
|
|
36
34
|
"default": "./fesm2022/dangl-angular-ava.mjs"
|
|
37
35
|
}
|
|
38
36
|
}
|
package/public-api.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * from './lib/ava-tree/tree/model';
|
|
2
|
-
export * from './lib/angular-ava.module';
|
|
3
2
|
export * from './lib/version';
|
|
4
|
-
export
|
|
3
|
+
export { AvaTreeComponent } from './lib/ava-tree/tree/components/ava-tree/ava-tree.component';
|
|
5
4
|
export * from './lib/ava-tree/tree/constants';
|
|
6
5
|
export { InvoiceDisplayComponent } from './lib/ava-tree/invoice/invoice-display/invoice-display.component';
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFuZ2wtYW5ndWxhci1hdmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWF2YS9zcmMvZGFuZ2wtYW5ndWxhci1hdmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
6
|
-
import { MatRippleModule } from '@angular/material/core';
|
|
7
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
import { MatInputModule } from '@angular/material/input';
|
|
10
|
-
import { MatTableModule } from '@angular/material/table';
|
|
11
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
|
-
import { AvaTreeComponent } from './ava-tree/tree/components/ava-tree/ava-tree.component';
|
|
13
|
-
import { ListStructureComponent } from './ava-tree/tree/components/list-structure/list-structure.component';
|
|
14
|
-
import { TableStructureComponent } from './ava-tree/tree/components/table-structure/table-structure.component';
|
|
15
|
-
import { TreeItemComponent } from './ava-tree/tree/components/tree-item/tree-item.component';
|
|
16
|
-
import { TreeNodeComponent } from './ava-tree/tree/components/tree-node/tree-node.component';
|
|
17
|
-
import { TreeStructureComponent } from './ava-tree/tree/components/tree-structure/tree-structure.component';
|
|
18
|
-
import { SaveChangingViewDirective } from './ava-tree/tree/directives/save-changing-view.directive';
|
|
19
|
-
import { ElementIconNamePipe } from './ava-tree/tree/pipes/element-icon-name.pipe';
|
|
20
|
-
import { ElementItemNumberPipe } from './ava-tree/tree/pipes/element-item-number.pipe';
|
|
21
|
-
import { ElementTextPipe } from './ava-tree/tree/pipes/element-text.pipe';
|
|
22
|
-
import { GroupChildElementsPipe } from './ava-tree/tree/pipes/group-child-elements.pipe';
|
|
23
|
-
import * as i0 from "@angular/core";
|
|
24
|
-
export class AngularAvaModule {
|
|
25
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AngularAvaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: AngularAvaModule, declarations: [TreeStructureComponent,
|
|
27
|
-
TreeNodeComponent,
|
|
28
|
-
AvaTreeComponent,
|
|
29
|
-
TreeItemComponent,
|
|
30
|
-
ListStructureComponent,
|
|
31
|
-
TableStructureComponent,
|
|
32
|
-
ElementIconNamePipe,
|
|
33
|
-
ElementTextPipe,
|
|
34
|
-
GroupChildElementsPipe,
|
|
35
|
-
ElementItemNumberPipe,
|
|
36
|
-
SaveChangingViewDirective], imports: [CommonModule,
|
|
37
|
-
MatIconModule,
|
|
38
|
-
MatRippleModule,
|
|
39
|
-
MatInputModule,
|
|
40
|
-
MatFormFieldModule,
|
|
41
|
-
ReactiveFormsModule,
|
|
42
|
-
FormsModule,
|
|
43
|
-
MatButtonModule,
|
|
44
|
-
MatCheckboxModule,
|
|
45
|
-
MatTableModule,
|
|
46
|
-
MatTooltipModule], exports: [AvaTreeComponent] }); }
|
|
47
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AngularAvaModule, imports: [CommonModule,
|
|
48
|
-
MatIconModule,
|
|
49
|
-
MatRippleModule,
|
|
50
|
-
MatInputModule,
|
|
51
|
-
MatFormFieldModule,
|
|
52
|
-
ReactiveFormsModule,
|
|
53
|
-
FormsModule,
|
|
54
|
-
MatButtonModule,
|
|
55
|
-
MatCheckboxModule,
|
|
56
|
-
MatTableModule,
|
|
57
|
-
MatTooltipModule] }); }
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AngularAvaModule, decorators: [{
|
|
60
|
-
type: NgModule,
|
|
61
|
-
args: [{
|
|
62
|
-
declarations: [
|
|
63
|
-
TreeStructureComponent,
|
|
64
|
-
TreeNodeComponent,
|
|
65
|
-
AvaTreeComponent,
|
|
66
|
-
TreeItemComponent,
|
|
67
|
-
ListStructureComponent,
|
|
68
|
-
TableStructureComponent,
|
|
69
|
-
ElementIconNamePipe,
|
|
70
|
-
ElementTextPipe,
|
|
71
|
-
GroupChildElementsPipe,
|
|
72
|
-
ElementItemNumberPipe,
|
|
73
|
-
SaveChangingViewDirective
|
|
74
|
-
],
|
|
75
|
-
imports: [
|
|
76
|
-
CommonModule,
|
|
77
|
-
MatIconModule,
|
|
78
|
-
MatRippleModule,
|
|
79
|
-
MatInputModule,
|
|
80
|
-
MatFormFieldModule,
|
|
81
|
-
ReactiveFormsModule,
|
|
82
|
-
FormsModule,
|
|
83
|
-
MatButtonModule,
|
|
84
|
-
MatCheckboxModule,
|
|
85
|
-
MatTableModule,
|
|
86
|
-
MatTooltipModule
|
|
87
|
-
],
|
|
88
|
-
exports: [AvaTreeComponent]
|
|
89
|
-
}]
|
|
90
|
-
}] });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hdmEubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1hdmEvc3JjL2xpYi9hbmd1bGFyLWF2YS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDNUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDL0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDNUcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOztBQStCekYsTUFBTSxPQUFPLGdCQUFnQjs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBM0J6QixzQkFBc0I7WUFDdEIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsc0JBQXNCO1lBQ3RCLHVCQUF1QjtZQUN2QixtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLHNCQUFzQjtZQUN0QixxQkFBcUI7WUFDckIseUJBQXlCLGFBR3pCLFlBQVk7WUFDWixhQUFhO1lBQ2IsZUFBZTtZQUNmLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFDWCxlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxnQkFBZ0IsYUFFUixnQkFBZ0I7K0dBRWYsZ0JBQWdCLFlBZHpCLFlBQVk7WUFDWixhQUFhO1lBQ2IsZUFBZTtZQUNmLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFDWCxlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxnQkFBZ0I7OzJGQUlQLGdCQUFnQjtrQkE3QjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsc0JBQXNCO3dCQUN0Qix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIseUJBQXlCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRSaXBwbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgQXZhVHJlZUNvbXBvbmVudCB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9jb21wb25lbnRzL2F2YS10cmVlL2F2YS10cmVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0U3RydWN0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvbGlzdC1zdHJ1Y3R1cmUvbGlzdC1zdHJ1Y3R1cmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlU3RydWN0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL2NvbXBvbmVudHMvdGFibGUtc3RydWN0dXJlL3RhYmxlLXN0cnVjdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJlZUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2F2YS10cmVlL3RyZWUvY29tcG9uZW50cy90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9jb21wb25lbnRzL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRyZWVTdHJ1Y3R1cmVDb21wb25lbnQgfSBmcm9tICcuL2F2YS10cmVlL3RyZWUvY29tcG9uZW50cy90cmVlLXN0cnVjdHVyZS90cmVlLXN0cnVjdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2F2ZUNoYW5naW5nVmlld0RpcmVjdGl2ZSB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9kaXJlY3RpdmVzL3NhdmUtY2hhbmdpbmctdmlldy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWxlbWVudEljb25OYW1lUGlwZSB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9waXBlcy9lbGVtZW50LWljb24tbmFtZS5waXBlJztcbmltcG9ydCB7IEVsZW1lbnRJdGVtTnVtYmVyUGlwZSB9IGZyb20gJy4vYXZhLXRyZWUvdHJlZS9waXBlcy9lbGVtZW50LWl0ZW0tbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgRWxlbWVudFRleHRQaXBlIH0gZnJvbSAnLi9hdmEtdHJlZS90cmVlL3BpcGVzL2VsZW1lbnQtdGV4dC5waXBlJztcbmltcG9ydCB7IEdyb3VwQ2hpbGRFbGVtZW50c1BpcGUgfSBmcm9tICcuL2F2YS10cmVlL3RyZWUvcGlwZXMvZ3JvdXAtY2hpbGQtZWxlbWVudHMucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFRyZWVTdHJ1Y3R1cmVDb21wb25lbnQsXG4gICAgVHJlZU5vZGVDb21wb25lbnQsXG4gICAgQXZhVHJlZUNvbXBvbmVudCxcbiAgICBUcmVlSXRlbUNvbXBvbmVudCxcbiAgICBMaXN0U3RydWN0dXJlQ29tcG9uZW50LFxuICAgIFRhYmxlU3RydWN0dXJlQ29tcG9uZW50LFxuICAgIEVsZW1lbnRJY29uTmFtZVBpcGUsXG4gICAgRWxlbWVudFRleHRQaXBlLFxuICAgIEdyb3VwQ2hpbGRFbGVtZW50c1BpcGUsXG4gICAgRWxlbWVudEl0ZW1OdW1iZXJQaXBlLFxuICAgIFNhdmVDaGFuZ2luZ1ZpZXdEaXJlY3RpdmVcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFJpcHBsZU1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbQXZhVHJlZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckF2YU1vZHVsZSB7fVxuIl19
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { CurrencyPipe, DatePipe } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, Input, input } from '@angular/core';
|
|
3
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
-
import { MatExpansionModule } from '@angular/material/expansion';
|
|
5
|
-
import { DEFAULT_TEXT_WORD_INVOICE } from '../../tree/constants/defaultTextWordInvoice';
|
|
6
|
-
import { InvoiceAttachmentMimeTypePipe } from '../../tree/pipes/invoice-attachment-mime-type.pipe';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/material/button";
|
|
9
|
-
import * as i2 from "@angular/material/expansion";
|
|
10
|
-
export class InvoiceDisplayComponent {
|
|
11
|
-
/**
|
|
12
|
-
* You can supply a map of strings to be used for the text in the tree. This allows you to translate
|
|
13
|
-
* the text in the tree to other languages.
|
|
14
|
-
* {
|
|
15
|
-
* invoiceTitle?: string;
|
|
16
|
-
* vatId?: string;
|
|
17
|
-
* detailsInvoiceNumber?: string;
|
|
18
|
-
* detailsInvoiceDate?: string;
|
|
19
|
-
* detailsPaymentDueDate?: string;
|
|
20
|
-
* detailsCurrencyCode?: string;
|
|
21
|
-
* detailsPaymentTerms?: string;
|
|
22
|
-
* referencesTopic?: string;
|
|
23
|
-
* referencesBuyerReference?: string;
|
|
24
|
-
* referencesProjectReference?: string;
|
|
25
|
-
* referencesContractReference?: string;
|
|
26
|
-
* referencesPurchaseOrderReference?: string;
|
|
27
|
-
* referencesSalesOrderReference?: string;
|
|
28
|
-
* referencesReceivingAdviceReference?: string;
|
|
29
|
-
* referencesDispatchAdviceReference?: string;
|
|
30
|
-
* referencesTenderOrLotReference?: string;
|
|
31
|
-
* referencesInvoicedObjectIdentifier?: string;
|
|
32
|
-
* tableHeadDescription?: string;
|
|
33
|
-
* tableHeadQuantity?: string;
|
|
34
|
-
* tableHeadUnit?: string;
|
|
35
|
-
* tableHeadNetPrice?: string;
|
|
36
|
-
* tableHeadNetAmount?: string;
|
|
37
|
-
* totalsTopic?: string;
|
|
38
|
-
* totalsTotalNet?: string;
|
|
39
|
-
* totalsTotalAllowances?: string;
|
|
40
|
-
* totalsTotalCharges?: string;
|
|
41
|
-
* totalsTotalAfterDeductions?: string;
|
|
42
|
-
* totalsTotalVatAmount?: string;
|
|
43
|
-
* totalsTotalGross?: string;
|
|
44
|
-
* totalsAlreadyPaidTotal?: string;
|
|
45
|
-
* totalsTotalToBePaid?: string;
|
|
46
|
-
* instructionsTopic?: string;
|
|
47
|
-
* instructionsAccountIdentifier?: string;
|
|
48
|
-
* instructionsAccountName?: string;
|
|
49
|
-
* instructionsServiceProviderIdentifier?: string;
|
|
50
|
-
* notesTopic?: string;
|
|
51
|
-
* }
|
|
52
|
-
*/
|
|
53
|
-
set textWords(words) {
|
|
54
|
-
this._textWords = { ...this.textWords, ...words };
|
|
55
|
-
} // allow to translate all texts to other language
|
|
56
|
-
get textWords() {
|
|
57
|
-
return this._textWords;
|
|
58
|
-
}
|
|
59
|
-
constructor() {
|
|
60
|
-
// TODO remove type any after TODO under will be resolved
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
-
this.invoice = input.required();
|
|
63
|
-
this._textWords = null;
|
|
64
|
-
this._textWords = { ...DEFAULT_TEXT_WORD_INVOICE };
|
|
65
|
-
/**TODO: For setting invoice instead:
|
|
66
|
-
* <ava-invoice-display id="invoice"></ava-invoice-display>
|
|
67
|
-
* invoice = document.getElementById('invoice');
|
|
68
|
-
* invoice.invoice = INVOICE;
|
|
69
|
-
* we should pass value to global window variable
|
|
70
|
-
* window['IvoiceGlobalVariable'] = INVOICE;
|
|
71
|
-
* Temporary solution until the problem of setting the value for InputSignal is solved. See this PR https://github.com/angular/angular/pull/55067
|
|
72
|
-
*/
|
|
73
|
-
this.invoice = () => {
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
-
return window['IvoiceGlobalVariable'];
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
download(documentValue) {
|
|
79
|
-
if (documentValue.externalDocumentUrl) {
|
|
80
|
-
this.downloadLink(documentValue);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
this.downloadAny(documentValue);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
downloadAny(documentValue) {
|
|
87
|
-
if (documentValue.documentBase64) {
|
|
88
|
-
const byteCharacters = atob(documentValue.documentBase64);
|
|
89
|
-
const byteNumbers = new Array(byteCharacters.length);
|
|
90
|
-
for (let i = 0; i < byteCharacters.length; i++) {
|
|
91
|
-
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
|
92
|
-
}
|
|
93
|
-
const byteArray = new Uint8Array(byteNumbers);
|
|
94
|
-
const blob = new Blob([byteArray], { type: 'application/octet-stream' });
|
|
95
|
-
this.saveAs(blob, documentValue.fileName);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
async downloadLink(documentValue) {
|
|
99
|
-
try {
|
|
100
|
-
const response = await fetch(documentValue.externalDocumentUrl);
|
|
101
|
-
const blob = await response.blob();
|
|
102
|
-
this.saveAs(blob, documentValue.fileName);
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
console.error(error);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
saveAs(blob, fileName) {
|
|
109
|
-
const link = document.createElement('a');
|
|
110
|
-
link.href = URL.createObjectURL(blob);
|
|
111
|
-
link.download = fileName;
|
|
112
|
-
link.click();
|
|
113
|
-
}
|
|
114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InvoiceDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
115
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, textWords: { classPropertyName: "textWords", publicName: "textWords", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>Attachments</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>Name: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>Description: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>Url: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>Data size: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>Mime Type: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>File Name: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n Download\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}.invoice-attachments,.document{padding-bottom:15px}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "pipe", type: InvoiceAttachmentMimeTypePipe, name: "invoiceAttachmentMimeType" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
116
|
-
}
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
|
|
118
|
-
type: Component,
|
|
119
|
-
args: [{ selector: 'ava-invoice-display', standalone: true, imports: [CurrencyPipe, DatePipe, MatButtonModule, MatExpansionModule, InvoiceAttachmentMimeTypePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>Attachments</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>Name: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>Description: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>Url: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>Data size: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>Mime Type: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>File Name: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n Download\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}.invoice-attachments,.document{padding-bottom:15px}\n"] }]
|
|
120
|
-
}], ctorParameters: () => [], propDecorators: { textWords: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}] } });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUd4RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7OztBQVVuRyxNQUFNLE9BQU8sdUJBQXVCO0lBT2xDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXlDRztJQUNILElBQWEsU0FBUyxDQUFDLEtBQThCO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxDQUFDLENBQUMsaURBQWlEO0lBQ25ELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7UUF2REEseURBQXlEO1FBQ3pELDhEQUE4RDtRQUM5RCxZQUFPLEdBQVEsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRWpDLGVBQVUsR0FBNEIsSUFBSSxDQUFDO1FBb0RqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25EOzs7Ozs7O1dBT0c7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNsQiw4REFBOEQ7WUFDOUQsT0FBUSxNQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLGFBQWlDO1FBQ3hDLElBQUksYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsYUFBaUM7UUFDM0MsSUFBSSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFrQixDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWlDO1FBQ2xELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBNkIsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFrQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVUsRUFBRSxRQUFnQjtRQUNqQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDOzhHQTVHVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qiw2VkNsQnBDLHFpV0ErVEEsdTNCRGxUWSxZQUFZLDRDQUFFLFFBQVEsNENBQUUsZUFBZSwyTkFBRSxrQkFBa0IsbW5CQUFFLDZCQUE2Qjs7MkZBS3pGLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLENBQUMsbUJBR3BGLHVCQUF1QixDQUFDLE1BQU07d0RBbURsQyxTQUFTO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuXG5pbXBvcnQgeyBERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH0gZnJvbSAnLi4vLi4vdHJlZS9jb25zdGFudHMvZGVmYXVsdFRleHRXb3JkSW52b2ljZSc7XG5pbXBvcnQgeyBJVGV4dFdvcmRJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbCc7XG5pbXBvcnQgeyBJbnZvaWNlLCBTdXBwb3J0aW5nRG9jdW1lbnQgfSBmcm9tICcuLi8uLi90cmVlL21vZGVsL2ludm9pY2UtbW9kZWxzJztcbmltcG9ydCB7IEludm9pY2VBdHRhY2htZW50TWltZVR5cGVQaXBlIH0gZnJvbSAnLi4vLi4vdHJlZS9waXBlcy9pbnZvaWNlLWF0dGFjaG1lbnQtbWltZS10eXBlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdmEtaW52b2ljZS1kaXNwbGF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0N1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RXhwYW5zaW9uTW9kdWxlLCBJbnZvaWNlQXR0YWNobWVudE1pbWVUeXBlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnZvaWNlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSW52b2ljZURpc3BsYXlDb21wb25lbnQge1xuICAvLyBUT0RPIHJlbW92ZSB0eXBlIGFueSBhZnRlciBUT0RPIHVuZGVyIHdpbGwgYmUgcmVzb2x2ZWRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgaW52b2ljZTogYW55ID0gaW5wdXQucmVxdWlyZWQ8SW52b2ljZT4oKTtcblxuICBwcml2YXRlIF90ZXh0V29yZHM6IElUZXh0V29yZEludm9pY2UgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogWW91IGNhbiBzdXBwbHkgYSBtYXAgb2Ygc3RyaW5ncyB0byBiZSB1c2VkIGZvciB0aGUgdGV4dCBpbiB0aGUgdHJlZS4gVGhpcyBhbGxvd3MgeW91IHRvIHRyYW5zbGF0ZVxuICAgKiB0aGUgdGV4dCBpbiB0aGUgdHJlZSB0byBvdGhlciBsYW5ndWFnZXMuXG4gICAqIHtcbiAgICogICBpbnZvaWNlVGl0bGU/OiBzdHJpbmc7XG4gICAqICAgdmF0SWQ/OiBzdHJpbmc7XG4gICAqICAgZGV0YWlsc0ludm9pY2VOdW1iZXI/OiBzdHJpbmc7XG4gICAqICAgZGV0YWlsc0ludm9pY2VEYXRlPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNQYXltZW50RHVlRGF0ZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzQ3VycmVuY3lDb2RlPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNQYXltZW50VGVybXM/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1RvcGljPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNCdXllclJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzUHJvamVjdFJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzQ29udHJhY3RSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1B1cmNoYXNlT3JkZXJSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1NhbGVzT3JkZXJSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1JlY2VpdmluZ0FkdmljZVJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzRGlzcGF0Y2hBZHZpY2VSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1RlbmRlck9yTG90UmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNJbnZvaWNlZE9iamVjdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkUXVhbnRpdHk/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkVW5pdD86IHN0cmluZztcbiAgICogICB0YWJsZUhlYWROZXRQcmljZT86IHN0cmluZztcbiAgICogICB0YWJsZUhlYWROZXRBbW91bnQ/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG9waWM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxOZXQ/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxBbGxvd2FuY2VzPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsQ2hhcmdlcz86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbEFmdGVyRGVkdWN0aW9ucz86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbFZhdEFtb3VudD86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbEdyb3NzPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc0FscmVhZHlQYWlkVG90YWw/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxUb0JlUGFpZD86IHN0cmluZztcbiAgICogICBpbnN0cnVjdGlvbnNUb3BpYz86IHN0cmluZztcbiAgICogICBpbnN0cnVjdGlvbnNBY2NvdW50SWRlbnRpZmllcj86IHN0cmluZztcbiAgICogICBpbnN0cnVjdGlvbnNBY2NvdW50TmFtZT86IHN0cmluZztcbiAgICogICBpbnN0cnVjdGlvbnNTZXJ2aWNlUHJvdmlkZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICAgKiAgIG5vdGVzVG9waWM/OiBzdHJpbmc7XG4gICAqIH1cbiAgICovXG4gIEBJbnB1dCgpIHNldCB0ZXh0V29yZHMod29yZHM6IElUZXh0V29yZEludm9pY2UgfCBudWxsKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi50aGlzLnRleHRXb3JkcywgLi4ud29yZHMgfTtcbiAgfSAvLyBhbGxvdyB0byB0cmFuc2xhdGUgYWxsIHRleHRzIHRvIG90aGVyIGxhbmd1YWdlXG4gIGdldCB0ZXh0V29yZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHRXb3JkcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3RleHRXb3JkcyA9IHsgLi4uREVGQVVMVF9URVhUX1dPUkRfSU5WT0lDRSB9O1xuICAgIC8qKlRPRE86ICBGb3Igc2V0dGluZyBpbnZvaWNlIGluc3RlYWQ6XG4gICAgICogPGF2YS1pbnZvaWNlLWRpc3BsYXkgaWQ9XCJpbnZvaWNlXCI+PC9hdmEtaW52b2ljZS1kaXNwbGF5PlxuICAgICAqIGludm9pY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW52b2ljZScpO1xuICAgICAqIGludm9pY2UuaW52b2ljZSA9IElOVk9JQ0U7XG4gICAgICogd2Ugc2hvdWxkIHBhc3MgdmFsdWUgdG8gZ2xvYmFsIHdpbmRvdyB2YXJpYWJsZVxuICAgICAqIHdpbmRvd1snSXZvaWNlR2xvYmFsVmFyaWFibGUnXSA9IElOVk9JQ0U7XG4gICAgICogVGVtcG9yYXJ5IHNvbHV0aW9uIHVudGlsIHRoZSBwcm9ibGVtIG9mIHNldHRpbmcgdGhlIHZhbHVlIGZvciBJbnB1dFNpZ25hbCBpcyBzb2x2ZWQuIFNlZSB0aGlzIFBSIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvcHVsbC81NTA2N1xuICAgICAqL1xuICAgIHRoaXMuaW52b2ljZSA9ICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpWydJdm9pY2VHbG9iYWxWYXJpYWJsZSddO1xuICAgIH07XG4gIH1cblxuICBkb3dubG9hZChkb2N1bWVudFZhbHVlOiBTdXBwb3J0aW5nRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnRWYWx1ZS5leHRlcm5hbERvY3VtZW50VXJsKSB7XG4gICAgICB0aGlzLmRvd25sb2FkTGluayhkb2N1bWVudFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3dubG9hZEFueShkb2N1bWVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEFueShkb2N1bWVudFZhbHVlOiBTdXBwb3J0aW5nRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnRWYWx1ZS5kb2N1bWVudEJhc2U2NCkge1xuICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGRvY3VtZW50VmFsdWUuZG9jdW1lbnRCYXNlNjQpO1xuICAgICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xuICAgICAgfVxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xuICAgICAgdGhpcy5zYXZlQXMoYmxvYiwgZG9jdW1lbnRWYWx1ZS5maWxlTmFtZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkTGluayhkb2N1bWVudFZhbHVlOiBTdXBwb3J0aW5nRG9jdW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChkb2N1bWVudFZhbHVlLmV4dGVybmFsRG9jdW1lbnRVcmwgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgICB0aGlzLnNhdmVBcyhibG9iLCBkb2N1bWVudFZhbHVlLmZpbGVOYW1lIGFzIHN0cmluZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVBcyhibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICBsaW5rLmNsaWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlLWNvbnRhaW5lclwiPlxuICA8IS0tIFNlbGxlciBhbmQgQnV5ZXIgSW5mb3JtYXRpb24gLS0+XG4gIEBpZiAodGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUpIHtcbiAgICA8aDEgY2xhc3M9XCJpbnZvaWNlLXRpdGxlXCI+e3sgdGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUgfX08L2gxPlxuICB9XG4gIDxoZWFkZXIgY2xhc3M9XCJpbnZvaWNlLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxsZXItaW5mb1wiPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgaW52b2ljZSgpLnNlbGxlcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLnNlbGxlcj8uYWRkcmVzcyB9fTwvcD5cbiAgICAgIDxwPnt7IGludm9pY2UoKS5zZWxsZXI/LmNpdHkgfX0sIHt7IGludm9pY2UoKS5zZWxsZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuc2VsbGVyPy5jb3VudHJ5Q29kZSB9fTwvcD5cbiAgICAgIEBpZiAoaW52b2ljZSgpLnNlbGxlcj8udmF0SWQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnZhdElkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5zZWxsZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImludm9pY2UtZGV0YWlsc1wiPlxuICAgICAgQGlmIChpbnZvaWNlKCkuaW52b2ljZU51bWJlcikge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc0ludm9pY2VOdW1iZXIgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLmludm9pY2VEYXRlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzSW52b2ljZURhdGUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VEYXRlIHwgZGF0ZTogJ2RkLk1NLnl5eXknIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSkge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnREdWVEYXRlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSB8IGRhdGU6ICdkZC5NTS55eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzQ3VycmVuY3lDb2RlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRUZXJtcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnRUZXJtcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucGF5bWVudFRlcm1zIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJ1eWVyLWluZm9cIj5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IGludm9pY2UoKS5idXllcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5hZGRyZXNzIH19PC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5jaXR5IH19LCB7eyBpbnZvaWNlKCkuYnV5ZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuYnV5ZXI/LmNvdW50cnlDb2RlIH19PC9wPlxuICAgICAgQGlmIChpbnZvaWNlKCkuYnV5ZXI/LnZhdElkKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy52YXRJZCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkuYnV5ZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvaGVhZGVyPlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS1yZWZlcmVuY2VzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/LnJlZmVyZW5jZXNUb3BpYykge1xuICAgICAgPGgyPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1RvcGljIH19PC9oMj5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0J1eWVyUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnByb2plY3RSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5wcm9qZWN0UmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzQ29udHJhY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8ucHVyY2hhc2VPcmRlclJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzUHVyY2hhc2VPcmRlclJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnB1cmNoYXNlT3JkZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnNhbGVzT3JkZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1NhbGVzT3JkZXJSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5zYWxlc09yZGVyUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5yZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1JlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnJlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uZGlzcGF0Y2hBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LmRpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzVGVuZGVyT3JMb3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uaW52b2ljZWRPYmplY3RJZGVudGlmaWVyKSB7XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNJbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5pbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICA8L3NlY3Rpb24+XG5cbiAgPHRhYmxlIGNsYXNzPVwiaW52b2ljZS10YWJsZVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPiM8L3RoPlxuICAgICAgICA8dGg+e3sgdGV4dFdvcmRzPy50YWJsZUhlYWREZXNjcmlwdGlvbiB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZFF1YW50aXR5IH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkVW5pdCB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZE5ldFByaWNlIH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkTmV0QW1vdW50IH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChpdGVtIG9mIGludm9pY2UoKS5saW5lSXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+e3sgaSArIDEgfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLml0ZW1JbmZvcm1hdGlvbj8uZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLnF1YW50aXR5IH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS51bml0Q29kZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGl0ZW0ucHJpY2VEZXRhaWxzPy5uZXRQcmljZSB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS5uZXRBbW91bnQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2IGNsYXNzPVwiYWRkaXRpb24taW5mb1wiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS10b3RhbHNcIj5cbiAgICAgIEBpZiAodGV4dFdvcmRzPy50b3RhbHNUb3BpYykge1xuICAgICAgICA8aDI+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3BpYyB9fTwvaDI+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsTmV0KSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbE5ldCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbE5ldCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWxsb3dhbmNlcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxBbGxvd2FuY2VzIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPiB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbEFsbG93YW5jZXMgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkudG90YWxzPy50b3RhbENoYXJnZXMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQ2hhcmdlcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxDaGFyZ2VzIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxBZnRlckRlZHVjdGlvbnMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQWZ0ZXJEZWR1Y3Rpb25zIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWZ0ZXJEZWR1Y3Rpb25zIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxWYXRBbW91bnQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsVmF0QW1vdW50IH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVmF0QW1vdW50IHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxHcm9zcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcyB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LmFscmVhZHlQYWlkVG90YWwpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc0FscmVhZHlQYWlkVG90YWwgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnRvdGFscz8uYWxyZWFkeVBhaWRUb3RhbCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJ0b3RhbFwiPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbFRvQmVQYWlkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Ryb25nPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJwYXltZW50LWluc3RydWN0aW9uc1wiPlxuICAgICAgQGlmICh0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljKSB7XG4gICAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljIH19PC9oMj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRJbnN0cnVjdGlvbnM/LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIDxwPnt7IGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgIH1cbiAgICAgIEBmb3IgKG1lYW5zIG9mIGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5wYXltZW50TWVhbnM7IHRyYWNrIG1lYW5zKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQGlmIChtZWFucy5hY2NvdW50SWRlbnRpZmllcikge1xuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5pbnN0cnVjdGlvbnNBY2NvdW50SWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuYWNjb3VudElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVhbnMuYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG1lYW5zLmFjY291bnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKG1lYW5zLnNlcnZpY2VQcm92aWRlcklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuc2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJpbnZvaWNlLW5vdGVzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/Lm5vdGVzVG9waWMpIHtcbiAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lm5vdGVzVG9waWMgfX08L2gyPlxuICAgIH1cbiAgICBAZm9yIChub3RlIG9mIGludm9pY2UoKS5pbnZvaWNlTm90ZXM7IHRyYWNrIG5vdGUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAobm90ZT8uc2hvcnRUZXh0KSB7XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IG5vdGU/LnNob3J0VGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG5vdGU/LmxvbmdUZXh0KSB7XG4gICAgICAgICAgPHA+e3sgbm90ZT8ubG9uZ1RleHQgfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9zZWN0aW9uPlxuXG4gIEBpZiAoaW52b2ljZSgpLmRvY3VtZW50cz8ubGVuZ3RoKSB7XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpbnZvaWNlLWF0dGFjaG1lbnRzXCI+XG4gICAgICA8bWF0LWFjY29yZGlvbj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5BdHRhY2htZW50czwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgQGZvciAoZG9jdW1lbnQgb2YgaW52b2ljZSgpLmRvY3VtZW50czsgdHJhY2sgZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICBAaWYgKGRvY3VtZW50LmRvY3VtZW50UmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+TmFtZTogPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2N1bWVudC5kb2N1bWVudFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGRvY3VtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RGVzY3JpcHRpb246IDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jdW1lbnQuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChkb2N1bWVudC5leHRlcm5hbERvY3VtZW50VXJsKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+VXJsOiA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvY3VtZW50LmV4dGVybmFsRG9jdW1lbnRVcmwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50QmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RGF0YSBzaXplOiA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvY3VtZW50LmRvY3VtZW50QmFzZTY0Lmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAoZG9jdW1lbnQuZG9jdW1lbnRNaW1lVHlwZSkge1xuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5NaW1lIFR5cGU6IDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2N1bWVudC5kb2N1bWVudE1pbWVUeXBlIHwgaW52b2ljZUF0dGFjaG1lbnRNaW1lVHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGRvY3VtZW50LmZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmlsZSBOYW1lOiA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvY3VtZW50LmZpbGVOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKGRvY3VtZW50KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFkb2N1bWVudC5leHRlcm5hbERvY3VtZW50VXJsICYmICFkb2N1bWVudC5kb2N1bWVudEJhc2U2NFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBEb3dubG9hZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8cHJlIGlkPVwiZmlsZUNvbnRlbnRcIj48L3ByZT5cbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPC9tYXQtYWNjb3JkaW9uPlxuICAgIDwvc2VjdGlvbj5cbiAgfVxuPC9kaXY+XG4iXX0=
|