@dangl/angular-ava 1.1.2-beta0091 → 1.1.2-beta0104

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.
@@ -283,12 +283,12 @@ var ModeViewType;
283
283
 
284
284
  // This file is automatically generated as part of the build process
285
285
  const version = {
286
- version: "1.1.2-beta0091",
287
- commitInfo: "Branch.develop.Sha.8c462071c14e90762932b81c72fa058e8bed371c",
288
- commitDate: "2024-12-12",
289
- commitHash: "8c462071c14e90762932b81c72fa058e8bed371c",
290
- informationalVersion: "1.1.2-beta.91+Branch.develop.Sha.8c462071c14e90762932b81c72fa058e8bed371c",
291
- buildDateUtc: new Date(Date.UTC(2024, 11, 12, 20, 0, 46))
286
+ version: "1.1.2-beta0104",
287
+ commitInfo: "Branch.develop.Sha.1fe892de7d38a2b5ee997a700c90dbe09601d77e",
288
+ commitDate: "2024-12-13",
289
+ commitHash: "1fe892de7d38a2b5ee997a700c90dbe09601d77e",
290
+ informationalVersion: "1.1.2-beta.104+Branch.develop.Sha.1fe892de7d38a2b5ee997a700c90dbe09601d77e",
291
+ buildDateUtc: new Date(Date.UTC(2024, 11, 13, 13, 1, 46))
292
292
  };
293
293
 
294
294
  const DEFAULT_FILTERS = [
@@ -316,6 +316,8 @@ const DEFAULT_FILTERS = [
316
316
 
317
317
  const DEFAULT_TEXT_WORD_INVOICE = {
318
318
  invoiceTitle: 'Invoice',
319
+ invoiceBuyerTitle: 'Receiver',
320
+ invoiceSellerTitle: 'Sender',
319
321
  vatId: 'VAT ID',
320
322
  detailsInvoiceNumber: 'Invoice Number',
321
323
  detailsInvoiceDate: 'Invoice Date',
@@ -362,6 +364,8 @@ const DEFAULT_TEXT_WORD_INVOICE = {
362
364
  };
363
365
  const germanTextsInvoice = {
364
366
  invoiceTitle: 'Rechnung',
367
+ invoiceBuyerTitle: 'Empfänger',
368
+ invoiceSellerTitle: 'Rechnungssteller',
365
369
  vatId: 'USt.-ID',
366
370
  detailsInvoiceNumber: 'Rechnungsnummer',
367
371
  detailsInvoiceDate: 'Rechnungsdatum',
@@ -926,6 +930,29 @@ class TreeHoverTooltipService {
926
930
  setTooltipVisable(tooltipVisible) {
927
931
  this.tooltipVisibleSource.next(tooltipVisible);
928
932
  }
933
+ showElementOver(element) {
934
+ if (!element)
935
+ return;
936
+ const backgroundColor = element.style.backgroundColor || window.getComputedStyle(element, null).backgroundColor;
937
+ const background = backgroundColor === 'rgba(0, 0, 0, 0)' ? '' : backgroundColor;
938
+ const text = element.querySelector('.ava-tree-item__text');
939
+ const rect = text.getBoundingClientRect();
940
+ text.style.position = 'fixed';
941
+ text.style.top = `${rect.top}px`;
942
+ text.style.left = `${rect.left}px`;
943
+ text.style.zIndex = '2000';
944
+ text.style.backgroundColor = background || '#fefefe';
945
+ }
946
+ hideElementOver(element) {
947
+ if (!element)
948
+ return;
949
+ const text = element.querySelector('.ava-tree-item__text');
950
+ text.style.position = 'static';
951
+ text.style.top = ``;
952
+ text.style.left = ``;
953
+ text.style.zIndex = '';
954
+ text.style.backgroundColor = '';
955
+ }
929
956
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeHoverTooltipService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
930
957
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeHoverTooltipService, providedIn: 'root' }); }
931
958
  }
@@ -1133,7 +1160,7 @@ class TreeItemComponent {
1133
1160
  this.treeNodeSelectionService.changeSelecting(isSelected, element.id);
1134
1161
  }
1135
1162
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeItemComponent, deps: [{ token: SelectElementService }, { token: TreeNodeSelectionService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1136
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TreeItemComponent, isStandalone: true, selector: "ava-tree-item", inputs: { element: "element", expansionState: "expansionState", isSelectionMode: "isSelectionMode", allowDblClick: "allowDblClick" }, ngImport: i0, template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [attributeValue]=\"'icon'\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap}.ava-tree-item__text.choose{color:red!important}\n"], dependencies: [{ kind: "directive", type: SaveChangingViewDirective, selector: "[saveChangingView]", inputs: ["attributeValue"] }, { kind: "pipe", type: ElementItemNumberPipe, name: "elementItemNumber" }, { kind: "pipe", type: ElementTextPipe, name: "elementText" }, { kind: "pipe", type: ElementIconNamePipe, name: "elementIconName" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TreeItemComponent, isStandalone: true, selector: "ava-tree-item", inputs: { element: "element", expansionState: "expansionState", isSelectionMode: "isSelectionMode", allowDblClick: "allowDblClick" }, ngImport: i0, template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [attributeValue]=\"'icon'\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap;display:flex;align-items:center;min-height:24px}.ava-tree-item__text.choose{color:red!important}\n"], dependencies: [{ kind: "directive", type: SaveChangingViewDirective, selector: "[saveChangingView]", inputs: ["attributeValue"] }, { kind: "pipe", type: ElementItemNumberPipe, name: "elementItemNumber" }, { kind: "pipe", type: ElementTextPipe, name: "elementText" }, { kind: "pipe", type: ElementIconNamePipe, name: "elementIconName" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1137
1164
  }
1138
1165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeItemComponent, decorators: [{
1139
1166
  type: Component,
@@ -1146,7 +1173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
1146
1173
  MatCheckboxModule,
1147
1174
  FormsModule,
1148
1175
  MatIconModule
1149
- ], template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [attributeValue]=\"'icon'\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap}.ava-tree-item__text.choose{color:red!important}\n"] }]
1176
+ ], template: "@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [attributeValue]=\"'icon'\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText }}</ng-container>\n }\n</ng-template>\n", styles: ["::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox{padding:0;flex:0 0 16px;width:16px;height:16px}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control{width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:0!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background{top:0;left:0;width:100%;height:100%}::ng-deep .ava-tree-item__checkbox .mdc-form-field .mdc-checkbox .mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff!important}::ng-deep .ava-tree-item__checkbox .mdc-form-field>label{line-height:24px;padding-left:8px;-webkit-user-select:none;user-select:none}::ng-deep .ava-tree-item__checkbox .mat-mdc-checkbox-touch-target{width:16px!important;height:16px!important}.ava-tree-item{display:flex;align-items:center}.ava-tree-item__icon,.ava-tree-item__checkbox{flex-shrink:0}.ava-tree-item__text{flex-grow:1;-webkit-user-select:none;user-select:none;white-space:nowrap;display:flex;align-items:center;min-height:24px}.ava-tree-item__text.choose{color:red!important}\n"] }]
1150
1177
  }], ctorParameters: () => [{ type: SelectElementService }, { type: TreeNodeSelectionService }, { type: i0.ChangeDetectorRef }], propDecorators: { element: [{
1151
1178
  type: Input
1152
1179
  }], expansionState: [{
@@ -1170,6 +1197,8 @@ class ListStructureComponent {
1170
1197
  this.selectedElement = null;
1171
1198
  this.$destroy = new Subject();
1172
1199
  this.treeHoverTooltipService = inject(TreeHoverTooltipService);
1200
+ this.allowShow = null;
1201
+ this.currentElement = null;
1173
1202
  }
1174
1203
  ngOnInit() {
1175
1204
  this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {
@@ -1180,24 +1209,40 @@ class ListStructureComponent {
1180
1209
  this.$destroy.next(true);
1181
1210
  this.$destroy.complete();
1182
1211
  }
1183
- onMouseEnter(id) {
1184
- const template = this.templates.find((template) => {
1185
- return template.nativeElement.id === id;
1186
- });
1187
- if (!template) {
1188
- return;
1189
- }
1190
- this.treeHoverTooltipService.showTooltip(template);
1212
+ onMouseEnter(event) {
1213
+ this.currentElement = event.target;
1214
+ this.treeHoverTooltipService.showElementOver(this.currentElement);
1191
1215
  }
1192
1216
  onMouseLeave() {
1193
- this.treeHoverTooltipService.hideHoverTooltip();
1217
+ this.treeHoverTooltipService.hideElementOver(this.currentElement);
1218
+ if (this.allowShow) {
1219
+ clearTimeout(this.allowShow);
1220
+ this.allowShow = null;
1221
+ }
1222
+ }
1223
+ onMouseUp(event) {
1224
+ this.currentElement = event.currentTarget;
1225
+ this.allowShow = setTimeout(() => {
1226
+ this.onMouseLeave();
1227
+ this.treeHoverTooltipService.showElementOver(this.currentElement);
1228
+ }, 400);
1229
+ }
1230
+ onMouseMove(event) {
1231
+ const element = event.currentTarget;
1232
+ const parent = element.closest('.ava-tree-wrapper');
1233
+ if (parent) {
1234
+ const rect = parent.getBoundingClientRect();
1235
+ if (event.x > rect.right) {
1236
+ this.onMouseLeave();
1237
+ }
1238
+ }
1194
1239
  }
1195
1240
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: ListStructureComponent, deps: [{ token: SelectElementService }], target: i0.ɵɵFactoryTarget.Component }); }
1196
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: ListStructureComponent, isStandalone: true, selector: "ava-list-structure", inputs: { filteredElementList: "filteredElementList", isSelectionMode: "isSelectionMode", selectedColor: "selectedColor", allowDblClick: "allowDblClick" }, host: { listeners: { "wheel": "onWindowScroll()" } }, viewQueries: [{ propertyName: "templates", predicate: ["hoverTooltipElement"], descendants: true }], ngImport: i0, template: "@for (element of filteredElementList; track element.id) {\n <ng-container>\n <div\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.background]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n (mouseenter)=\"onMouseEnter('hover-element-id-' + element.id)\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <ava-tree-item\n [element]=\"element\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </ng-container>\n}\n", styles: [".select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"], dependencies: [{ kind: "component", type: TreeItemComponent, selector: "ava-tree-item", inputs: ["element", "expansionState", "isSelectionMode", "allowDblClick"] }] }); }
1241
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: ListStructureComponent, isStandalone: true, selector: "ava-list-structure", inputs: { filteredElementList: "filteredElementList", isSelectionMode: "isSelectionMode", selectedColor: "selectedColor", allowDblClick: "allowDblClick" }, host: { listeners: { "wheel": "onWindowScroll()" } }, viewQueries: [{ propertyName: "templates", predicate: ["hoverTooltipElement"], descendants: true }], ngImport: i0, template: "@for (element of filteredElementList; track element.id) {\n <ng-container>\n <div\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave()\"\n (mouseup)=\"onMouseUp($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (wheel)=\"onMouseLeave()\"\n >\n <ava-tree-item\n [element]=\"element\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </ng-container>\n}\n", styles: [".select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"], dependencies: [{ kind: "component", type: TreeItemComponent, selector: "ava-tree-item", inputs: ["element", "expansionState", "isSelectionMode", "allowDblClick"] }] }); }
1197
1242
  }
1198
1243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: ListStructureComponent, decorators: [{
1199
1244
  type: Component,
1200
- args: [{ selector: 'ava-list-structure', imports: [TreeItemComponent], template: "@for (element of filteredElementList; track element.id) {\n <ng-container>\n <div\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.background]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n (mouseenter)=\"onMouseEnter('hover-element-id-' + element.id)\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <ava-tree-item\n [element]=\"element\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </ng-container>\n}\n", styles: [".select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"] }]
1245
+ args: [{ selector: 'ava-list-structure', imports: [TreeItemComponent], template: "@for (element of filteredElementList; track element.id) {\n <ng-container>\n <div\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave()\"\n (mouseup)=\"onMouseUp($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (wheel)=\"onMouseLeave()\"\n >\n <ava-tree-item\n [element]=\"element\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </ng-container>\n}\n", styles: [".select{background:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"] }]
1201
1246
  }], ctorParameters: () => [{ type: SelectElementService }], propDecorators: { filteredElementList: [{
1202
1247
  type: Input
1203
1248
  }], isSelectionMode: [{
@@ -1399,6 +1444,8 @@ class TreeNodeComponent {
1399
1444
  this.treeHoverTooltipService = inject(TreeHoverTooltipService);
1400
1445
  this.selectedElement = null;
1401
1446
  this.$destroy = new Subject();
1447
+ this.allowShow = null;
1448
+ this.currentElement = null;
1402
1449
  }
1403
1450
  ngOnInit() {
1404
1451
  this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {
@@ -1412,24 +1459,40 @@ class TreeNodeComponent {
1412
1459
  expand(element) {
1413
1460
  this.expansionState[element.id] = !this.expansionState[element.id];
1414
1461
  }
1415
- onMouseEnter(id) {
1416
- const template = this.templates.find((template) => {
1417
- return template.nativeElement.id === id;
1418
- });
1419
- if (!template) {
1420
- return;
1421
- }
1422
- this.treeHoverTooltipService.showTooltip(template);
1462
+ onMouseEnter(event) {
1463
+ this.currentElement = event.target;
1464
+ this.treeHoverTooltipService.showElementOver(this.currentElement);
1423
1465
  }
1424
1466
  onMouseLeave() {
1425
- this.treeHoverTooltipService.hideHoverTooltip();
1467
+ this.treeHoverTooltipService.hideElementOver(this.currentElement);
1468
+ if (this.allowShow) {
1469
+ clearTimeout(this.allowShow);
1470
+ this.allowShow = null;
1471
+ }
1472
+ }
1473
+ onMouseUp(event) {
1474
+ this.currentElement = event.currentTarget;
1475
+ this.allowShow = setTimeout(() => {
1476
+ this.onMouseLeave();
1477
+ this.treeHoverTooltipService.showElementOver(this.currentElement);
1478
+ }, 400);
1479
+ }
1480
+ onMouseMove(event) {
1481
+ const element = event.currentTarget;
1482
+ const parent = element.closest('.ava-tree-wrapper');
1483
+ if (parent) {
1484
+ const rect = parent.getBoundingClientRect();
1485
+ if (event.x > rect.right) {
1486
+ this.onMouseLeave();
1487
+ }
1488
+ }
1426
1489
  }
1427
1490
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeNodeComponent, deps: [{ token: SelectElementService }], target: i0.ɵɵFactoryTarget.Component }); }
1428
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TreeNodeComponent, isStandalone: true, selector: "ava-tree-node", inputs: { elementList: "elementList", indent: "indent", expansionState: "expansionState", isSelectionMode: "isSelectionMode", selectedColor: "selectedColor", allowDblClick: "allowDblClick" }, host: { listeners: { "wheel": "onWindowScroll()", "click": "onCLick()" } }, viewQueries: [{ propertyName: "templates", predicate: ["hoverTooltipElement"], descendants: true }], ngImport: i0, template: "@for (element of elementList; track element.id) {\n <ng-container>\n <div\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n class=\"tree-node-wrapper\"\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.background]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n (mouseenter)=\"onMouseEnter('hover-element-id-' + element.id)\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <div class=\"tree-node-wrapper__content\">\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n <mat-icon\n matRipple\n (click)=\"expand(element)\"\n class=\"tree-node__icon\"\n >\n {{ expansionState[element.id] ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n } @else {\n <mat-icon></mat-icon>\n }\n\n <ava-tree-item\n [element]=\"element\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </div>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' && expansionState[element.id]) {\n <div [style.paddingLeft]=\"indent\">\n <ava-tree-node\n [elementList]=\"element | groupChildElements\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [selectedColor]=\"selectedColor\"\n [allowDblClick]=\"allowDblClick\"\n [indent]=\"indent\"\n ></ava-tree-node>\n </div>\n }\n </ng-container>\n}\n", styles: [".tree-node-wrapper{display:flex;align-items:center}.tree-node-wrapper__content{flex:1 0 100%;display:flex}.tree-node__icon{flex-shrink:0}.select{background-color:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "ava-tree-node", inputs: ["elementList", "indent", "expansionState", "isSelectionMode", "selectedColor", "allowDblClick"] }, { kind: "component", type: TreeItemComponent, selector: "ava-tree-item", inputs: ["element", "expansionState", "isSelectionMode", "allowDblClick"] }, { kind: "pipe", type: GroupChildElementsPipe, name: "groupChildElements" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1491
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: TreeNodeComponent, isStandalone: true, selector: "ava-tree-node", inputs: { elementList: "elementList", indent: "indent", expansionState: "expansionState", isSelectionMode: "isSelectionMode", selectedColor: "selectedColor", allowDblClick: "allowDblClick" }, host: { listeners: { "wheel": "onWindowScroll()", "click": "onCLick()" } }, viewQueries: [{ propertyName: "templates", predicate: ["hoverTooltipElement"], descendants: true }], ngImport: i0, template: "@for (element of elementList; track element.id) {\n <ng-container>\n <div\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n class=\"tree-node-wrapper\"\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave()\"\n (mouseup)=\"onMouseUp($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (wheel)=\"onMouseLeave()\"\n >\n <div class=\"tree-node-wrapper__content\">\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n <mat-icon\n matRipple\n (click)=\"expand(element)\"\n class=\"tree-node__icon\"\n >\n {{ expansionState[element.id] ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n } @else {\n <mat-icon></mat-icon>\n }\n\n <ava-tree-item\n [element]=\"element\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </div>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' && expansionState[element.id]) {\n <div [style.paddingLeft]=\"indent\">\n <ava-tree-node\n [elementList]=\"element | groupChildElements\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [selectedColor]=\"selectedColor\"\n [allowDblClick]=\"allowDblClick\"\n [indent]=\"indent\"\n ></ava-tree-node>\n </div>\n }\n </ng-container>\n}\n", styles: [".tree-node-wrapper{display:flex;align-items:center}.tree-node-wrapper__content{flex:1 0 100%;display:flex}.tree-node__icon{flex-shrink:0}.select{background-color:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"], dependencies: [{ kind: "component", type: TreeNodeComponent, selector: "ava-tree-node", inputs: ["elementList", "indent", "expansionState", "isSelectionMode", "selectedColor", "allowDblClick"] }, { kind: "component", type: TreeItemComponent, selector: "ava-tree-item", inputs: ["element", "expansionState", "isSelectionMode", "allowDblClick"] }, { kind: "pipe", type: GroupChildElementsPipe, name: "groupChildElements" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1429
1492
  }
1430
1493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: TreeNodeComponent, decorators: [{
1431
1494
  type: Component,
1432
- args: [{ selector: 'ava-tree-node', imports: [TreeItemComponent, GroupChildElementsPipe, MatIconModule], template: "@for (element of elementList; track element.id) {\n <ng-container>\n <div\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n class=\"tree-node-wrapper\"\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.background]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n (mouseenter)=\"onMouseEnter('hover-element-id-' + element.id)\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <div class=\"tree-node-wrapper__content\">\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n <mat-icon\n matRipple\n (click)=\"expand(element)\"\n class=\"tree-node__icon\"\n >\n {{ expansionState[element.id] ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n } @else {\n <mat-icon></mat-icon>\n }\n\n <ava-tree-item\n [element]=\"element\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </div>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' && expansionState[element.id]) {\n <div [style.paddingLeft]=\"indent\">\n <ava-tree-node\n [elementList]=\"element | groupChildElements\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [selectedColor]=\"selectedColor\"\n [allowDblClick]=\"allowDblClick\"\n [indent]=\"indent\"\n ></ava-tree-node>\n </div>\n }\n </ng-container>\n}\n", styles: [".tree-node-wrapper{display:flex;align-items:center}.tree-node-wrapper__content{flex:1 0 100%;display:flex}.tree-node__icon{flex-shrink:0}.select{background-color:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"] }]
1495
+ args: [{ selector: 'ava-tree-node', imports: [TreeItemComponent, GroupChildElementsPipe, MatIconModule], template: "@for (element of elementList; track element.id) {\n <ng-container>\n <div\n #hoverTooltipElement\n [id]=\"'hover-element-id-' + element.id\"\n class=\"tree-node-wrapper\"\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? selectedColor || '' : ''\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave()\"\n (mouseup)=\"onMouseUp($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (wheel)=\"onMouseLeave()\"\n >\n <div class=\"tree-node-wrapper__content\">\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n <mat-icon\n matRipple\n (click)=\"expand(element)\"\n class=\"tree-node__icon\"\n >\n {{ expansionState[element.id] ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n } @else {\n <mat-icon></mat-icon>\n }\n\n <ava-tree-item\n [element]=\"element\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [allowDblClick]=\"allowDblClick\"\n ></ava-tree-item>\n </div>\n </div>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' && expansionState[element.id]) {\n <div [style.paddingLeft]=\"indent\">\n <ava-tree-node\n [elementList]=\"element | groupChildElements\"\n [expansionState]=\"expansionState\"\n [isSelectionMode]=\"isSelectionMode\"\n [selectedColor]=\"selectedColor\"\n [allowDblClick]=\"allowDblClick\"\n [indent]=\"indent\"\n ></ava-tree-node>\n </div>\n }\n </ng-container>\n}\n", styles: [".tree-node-wrapper{display:flex;align-items:center}.tree-node-wrapper__content{flex:1 0 100%;display:flex}.tree-node__icon{flex-shrink:0}.select{background-color:var(--mdc-filled-text-field-caret-color);color:#fff}.select *{color:#fff}\n"] }]
1433
1496
  }], ctorParameters: () => [{ type: SelectElementService }], propDecorators: { elementList: [{
1434
1497
  type: Input
1435
1498
  }], indent: [{
@@ -2068,11 +2131,11 @@ class InvoiceDisplayComponent {
2068
2131
  link.click();
2069
2132
  }
2070
2133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: InvoiceDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2071
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", 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 <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\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 <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 <h2>{{ textWords.instructionsTopic }}</h2>\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 <h2>{{ textWords.notesTopic }}</h2>\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>{{ textWords.attachmentsHeading }}</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>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </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 {{ textWords.attachmentsDownloadButton }}\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-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff}.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: i8.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 }); }
2134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", 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 <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\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 <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=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\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 </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 <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 <h2>{{ textWords.instructionsTopic }}</h2>\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 <h2>{{ textWords.notesTopic }}</h2>\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>{{ textWords.attachmentsHeading }}</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>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </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 {{ textWords.attachmentsDownloadButton }}\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}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.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-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff}.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: i8.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 }); }
2072
2135
  }
2073
2136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
2074
2137
  type: Component,
2075
- args: [{ selector: 'ava-invoice-display', imports: [CurrencyPipe, DatePipe, MatButtonModule, MatExpansionModule, InvoiceAttachmentMimeTypePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\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 <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 <h2>{{ textWords.instructionsTopic }}</h2>\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 <h2>{{ textWords.notesTopic }}</h2>\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>{{ textWords.attachmentsHeading }}</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>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </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 {{ textWords.attachmentsDownloadButton }}\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-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff}.invoice-attachments,.document{padding-bottom:15px}\n"] }]
2138
+ args: [{ selector: 'ava-invoice-display', imports: [CurrencyPipe, DatePipe, MatButtonModule, MatExpansionModule, InvoiceAttachmentMimeTypePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\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 <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=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\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 </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 <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 <h2>{{ textWords.instructionsTopic }}</h2>\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 <h2>{{ textWords.notesTopic }}</h2>\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>{{ textWords.attachmentsHeading }}</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>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </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 {{ textWords.attachmentsDownloadButton }}\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}.invoice-header .header-title{background:var(--color-primary);color:#fff;text-align:center}.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-primary);color:#fff;padding:5px;border-radius:5px}th{color:#fff}.invoice-attachments,.document{padding-bottom:15px}\n"] }]
2076
2139
  }], ctorParameters: () => [], propDecorators: { textWords: [{
2077
2140
  type: Input
2078
2141
  }] } });