@colijnit/corecomponents_v12 258.1.6 → 258.1.8

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.
@@ -13,6 +13,7 @@ import { ObserveVisibilityModule } from "../../directives/observe-visibility/obs
13
13
  import { ClickoutsideModule } from '../../directives/clickoutside/clickoutside.module';
14
14
  import { ButtonModule } from "../button/button.module";
15
15
  import { CoreComponentsTranslationModule } from "../../translation/core-components-translation.module";
16
+ import { IconModule } from "../icon/icon.module";
16
17
  export class SimpleGridModule {
17
18
  }
18
19
  SimpleGridModule.decorators = [
@@ -28,7 +29,8 @@ SimpleGridModule.decorators = [
28
29
  PaginationBarModule,
29
30
  ClickoutsideModule,
30
31
  ButtonModule,
31
- CoreComponentsTranslationModule
32
+ CoreComponentsTranslationModule,
33
+ IconModule
32
34
  ],
33
35
  declarations: [
34
36
  SimpleGridComponent,
@@ -42,4 +44,4 @@ SimpleGridModule.decorators = [
42
44
  ]
43
45
  },] }
44
46
  ];
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUN0RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUNyRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sc0RBQXNELENBQUM7QUEyQnJHLE1BQU0sT0FBTyxnQkFBZ0I7OztZQXpCNUIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLGNBQWM7b0JBQ2QsaUJBQWlCO29CQUNqQixlQUFlO29CQUNmLFVBQVU7b0JBQ1YsdUJBQXVCO29CQUN2QixnQkFBZ0I7b0JBQ2hCLG1CQUFtQjtvQkFDbkIsa0JBQWtCO29CQUNsQixZQUFZO29CQUNaLCtCQUErQjtpQkFDaEM7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLG1CQUFtQjtvQkFDbkIsdUJBQXVCO29CQUN2Qix5QkFBeUI7aUJBQzFCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxtQkFBbUI7b0JBQ25CLHVCQUF1QjtvQkFDdkIseUJBQXlCO2lCQUMxQjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvbkJhck1vZHVsZSB9IGZyb20gXCIuLi9wYWdpbmF0aW9uLWJhci9wYWdpbmF0aW9uLWJhci5tb2R1bGVcIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gXCIuLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlXCI7XHJcbmltcG9ydCB7U2ltcGxlR3JpZENvbXBvbmVudH0gZnJvbSBcIi4vc2ltcGxlLWdyaWQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7RHJhZ0Ryb3BNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7U2ltcGxlR3JpZENvbHVtbkRpcmVjdGl2ZX0gZnJvbSBcIi4vc2ltcGxlLWdyaWQtY29sdW1uLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0dyaWRUb29sYmFyTW9kdWxlfSBmcm9tIFwiLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci5tb2R1bGVcIjtcclxuaW1wb3J0IHtJbnB1dFRleHRNb2R1bGV9IGZyb20gXCIuLi9pbnB1dC10ZXh0L2lucHV0LXRleHQubW9kdWxlXCI7XHJcbmltcG9ydCB7U2ltcGxlR3JpZENlbGxDb21wb25lbnR9IGZyb20gXCIuL3NpbXBsZS1ncmlkLWNlbGwuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7Rm9ybU1vZHVsZX0gZnJvbSBcIi4uL2Zvcm0vZm9ybS5tb2R1bGVcIjtcclxuaW1wb3J0IHtPYnNlcnZlVmlzaWJpbGl0eU1vZHVsZX0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvb2JzZXJ2ZS12aXNpYmlsaXR5L29ic2VydmUtdmlzaWJpbGl0eS5tb2R1bGVcIjtcclxuaW1wb3J0IHtDbGlja291dHNpZGVNb2R1bGV9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2xpY2tvdXRzaWRlL2NsaWNrb3V0c2lkZS5tb2R1bGUnO1xyXG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSBcIi4uL2J1dHRvbi9idXR0b24ubW9kdWxlXCI7XHJcbmltcG9ydCB7Q29yZUNvbXBvbmVudHNUcmFuc2xhdGlvbk1vZHVsZX0gZnJvbSBcIi4uLy4uL3RyYW5zbGF0aW9uL2NvcmUtY29tcG9uZW50cy10cmFuc2xhdGlvbi5tb2R1bGVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXHJcbiAgICBHcmlkVG9vbGJhck1vZHVsZSxcclxuICAgIElucHV0VGV4dE1vZHVsZSxcclxuICAgIEZvcm1Nb2R1bGUsXHJcbiAgICBPYnNlcnZlVmlzaWJpbGl0eU1vZHVsZSxcclxuICAgIFBhZ2luYXRpb25Nb2R1bGUsXHJcbiAgICBQYWdpbmF0aW9uQmFyTW9kdWxlLFxyXG4gICAgQ2xpY2tvdXRzaWRlTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgQ29yZUNvbXBvbmVudHNUcmFuc2xhdGlvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBTaW1wbGVHcmlkQ29tcG9uZW50LFxyXG4gICAgU2ltcGxlR3JpZENlbGxDb21wb25lbnQsXHJcbiAgICBTaW1wbGVHcmlkQ29sdW1uRGlyZWN0aXZlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBTaW1wbGVHcmlkQ29tcG9uZW50LFxyXG4gICAgU2ltcGxlR3JpZENlbGxDb21wb25lbnQsXHJcbiAgICBTaW1wbGVHcmlkQ29sdW1uRGlyZWN0aXZlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2ltcGxlR3JpZE1vZHVsZSB7IH1cclxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUN0RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUNyRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFDckcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBNEIvQyxNQUFNLE9BQU8sZ0JBQWdCOzs7WUExQjVCLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWixjQUFjO29CQUNkLGlCQUFpQjtvQkFDakIsZUFBZTtvQkFDZixVQUFVO29CQUNWLHVCQUF1QjtvQkFDdkIsZ0JBQWdCO29CQUNoQixtQkFBbUI7b0JBQ25CLGtCQUFrQjtvQkFDbEIsWUFBWTtvQkFDWiwrQkFBK0I7b0JBQy9CLFVBQVU7aUJBQ1g7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLG1CQUFtQjtvQkFDbkIsdUJBQXVCO29CQUN2Qix5QkFBeUI7aUJBQzFCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxtQkFBbUI7b0JBQ25CLHVCQUF1QjtvQkFDdkIseUJBQXlCO2lCQUMxQjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvbkJhck1vZHVsZSB9IGZyb20gXCIuLi9wYWdpbmF0aW9uLWJhci9wYWdpbmF0aW9uLWJhci5tb2R1bGVcIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gXCIuLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlXCI7XHJcbmltcG9ydCB7U2ltcGxlR3JpZENvbXBvbmVudH0gZnJvbSBcIi4vc2ltcGxlLWdyaWQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7RHJhZ0Ryb3BNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7U2ltcGxlR3JpZENvbHVtbkRpcmVjdGl2ZX0gZnJvbSBcIi4vc2ltcGxlLWdyaWQtY29sdW1uLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0dyaWRUb29sYmFyTW9kdWxlfSBmcm9tIFwiLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci5tb2R1bGVcIjtcclxuaW1wb3J0IHtJbnB1dFRleHRNb2R1bGV9IGZyb20gXCIuLi9pbnB1dC10ZXh0L2lucHV0LXRleHQubW9kdWxlXCI7XHJcbmltcG9ydCB7U2ltcGxlR3JpZENlbGxDb21wb25lbnR9IGZyb20gXCIuL3NpbXBsZS1ncmlkLWNlbGwuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7Rm9ybU1vZHVsZX0gZnJvbSBcIi4uL2Zvcm0vZm9ybS5tb2R1bGVcIjtcclxuaW1wb3J0IHtPYnNlcnZlVmlzaWJpbGl0eU1vZHVsZX0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvb2JzZXJ2ZS12aXNpYmlsaXR5L29ic2VydmUtdmlzaWJpbGl0eS5tb2R1bGVcIjtcclxuaW1wb3J0IHtDbGlja291dHNpZGVNb2R1bGV9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2xpY2tvdXRzaWRlL2NsaWNrb3V0c2lkZS5tb2R1bGUnO1xyXG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSBcIi4uL2J1dHRvbi9idXR0b24ubW9kdWxlXCI7XHJcbmltcG9ydCB7Q29yZUNvbXBvbmVudHNUcmFuc2xhdGlvbk1vZHVsZX0gZnJvbSBcIi4uLy4uL3RyYW5zbGF0aW9uL2NvcmUtY29tcG9uZW50cy10cmFuc2xhdGlvbi5tb2R1bGVcIjtcclxuaW1wb3J0IHtJY29uTW9kdWxlfSBmcm9tIFwiLi4vaWNvbi9pY29uLm1vZHVsZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBEcmFnRHJvcE1vZHVsZSxcclxuICAgIEdyaWRUb29sYmFyTW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgRm9ybU1vZHVsZSxcclxuICAgIE9ic2VydmVWaXNpYmlsaXR5TW9kdWxlLFxyXG4gICAgUGFnaW5hdGlvbk1vZHVsZSxcclxuICAgIFBhZ2luYXRpb25CYXJNb2R1bGUsXHJcbiAgICBDbGlja291dHNpZGVNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBDb3JlQ29tcG9uZW50c1RyYW5zbGF0aW9uTW9kdWxlLFxyXG4gICAgSWNvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBTaW1wbGVHcmlkQ29tcG9uZW50LFxyXG4gICAgU2ltcGxlR3JpZENlbGxDb21wb25lbnQsXHJcbiAgICBTaW1wbGVHcmlkQ29sdW1uRGlyZWN0aXZlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBTaW1wbGVHcmlkQ29tcG9uZW50LFxyXG4gICAgU2ltcGxlR3JpZENlbGxDb21wb25lbnQsXHJcbiAgICBTaW1wbGVHcmlkQ29sdW1uRGlyZWN0aXZlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2ltcGxlR3JpZE1vZHVsZSB7IH1cclxuIl19
@@ -0,0 +1,125 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as XLSX from 'xlsx';
3
+ import * as i0 from "@angular/core";
4
+ export class ExcelExportService {
5
+ /**
6
+ * Export data to Excel file
7
+ * @param data - Array of objects to export
8
+ * @param columns - Column configuration (optional)
9
+ * @param fileName - Name of the exported file
10
+ * @param sheetName - Name of the Excel sheet
11
+ */
12
+ exportToExcel(data, columns, fileName = 'export', sheetName = 'Sheet1') {
13
+ // If columns are specified, transform data to match column structure
14
+ let exportData = data;
15
+ if (columns && columns.length > 0) {
16
+ exportData = data.map(item => {
17
+ const newItem = {};
18
+ columns.forEach(col => {
19
+ newItem[col.header] = this.getNestedValue(item, col.key);
20
+ });
21
+ return newItem;
22
+ });
23
+ }
24
+ // Create workbook and worksheet
25
+ const wb = XLSX.utils.book_new();
26
+ const ws = XLSX.utils.json_to_sheet(exportData);
27
+ // Set column widths if specified
28
+ if (columns && columns.some(col => col.width)) {
29
+ const colWidths = columns.map(col => ({ wch: col.width || 20 }));
30
+ ws['!cols'] = colWidths;
31
+ }
32
+ // Add worksheet to workbook
33
+ XLSX.utils.book_append_sheet(wb, ws, sheetName);
34
+ // Save file
35
+ XLSX.writeFile(wb, `${fileName}.xlsx`);
36
+ }
37
+ /**
38
+ * Export multiple sheets to one Excel file
39
+ * @param sheets - Array of sheet data
40
+ * @param fileName - Name of the exported file
41
+ */
42
+ exportMultipleSheets(sheets, fileName = 'multi-sheet-export') {
43
+ const wb = XLSX.utils.book_new();
44
+ sheets.forEach(sheet => {
45
+ let exportData = sheet.data;
46
+ if (sheet.columns && sheet.columns.length > 0) {
47
+ exportData = sheet.data.map(item => {
48
+ const newItem = {};
49
+ sheet.columns.forEach(col => {
50
+ newItem[col.header] = this.getNestedValue(item, col.key);
51
+ });
52
+ return newItem;
53
+ });
54
+ }
55
+ const ws = XLSX.utils.json_to_sheet(exportData);
56
+ if (sheet.columns && sheet.columns.some(col => col.width)) {
57
+ const colWidths = sheet.columns.map(col => ({ wch: col.width || 20 }));
58
+ ws['!cols'] = colWidths;
59
+ }
60
+ XLSX.utils.book_append_sheet(wb, ws, sheet.sheetName);
61
+ });
62
+ XLSX.writeFile(wb, `${fileName}.xlsx`);
63
+ }
64
+ /**
65
+ * Export HTML table to Excel
66
+ * @param tableId - ID of the HTML table element
67
+ * @param fileName - Name of the exported file
68
+ * @param sheetName - Name of the Excel sheet
69
+ */
70
+ exportTableToExcel(tableId, fileName = 'table-export', sheetName = 'Sheet1') {
71
+ const table = document.getElementById(tableId);
72
+ if (!table) {
73
+ console.error(`Table with ID '${tableId}' not found`);
74
+ return;
75
+ }
76
+ const wb = XLSX.utils.book_new();
77
+ const ws = XLSX.utils.table_to_sheet(table);
78
+ XLSX.utils.book_append_sheet(wb, ws, sheetName);
79
+ XLSX.writeFile(wb, `${fileName}.xlsx`);
80
+ }
81
+ /**
82
+ * Get nested object value using dot notation
83
+ * @param obj - Object to search in
84
+ * @param path - Dot notation path (e.g., 'user.address.city')
85
+ */
86
+ getNestedValue(obj, path) {
87
+ return path.split('.').reduce((current, key) => {
88
+ return current && current[key] !== undefined ? current[key] : '';
89
+ }, obj);
90
+ }
91
+ /**
92
+ * Format date for Excel export
93
+ * @param date - Date to format
94
+ * @param format - Format string (default: 'MM/DD/YYYY')
95
+ */
96
+ formatDateForExport(date, format = 'MM/DD/YYYY') {
97
+ if (!date) {
98
+ return '';
99
+ }
100
+ const d = new Date(date);
101
+ if (isNaN(d.getTime())) {
102
+ return '';
103
+ }
104
+ const month = (d.getMonth() + 1).toString().padStart(2, '0');
105
+ const day = d.getDate().toString().padStart(2, '0');
106
+ const year = d.getFullYear();
107
+ switch (format) {
108
+ case 'MM/DD/YYYY':
109
+ return `${month}/${day}/${year}`;
110
+ case 'DD/MM/YYYY':
111
+ return `${day}/${month}/${year}`;
112
+ case 'YYYY-MM-DD':
113
+ return `${year}-${month}-${day}`;
114
+ default:
115
+ return d.toLocaleDateString();
116
+ }
117
+ }
118
+ }
119
+ ExcelExportService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ExcelExportService_Factory() { return new ExcelExportService(); }, token: ExcelExportService, providedIn: "root" });
120
+ ExcelExportService.decorators = [
121
+ { type: Injectable, args: [{
122
+ providedIn: 'root'
123
+ },] }
124
+ ];
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2UvZXhjZWwtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7QUFXN0IsTUFBTSxPQUFPLGtCQUFrQjtJQUU3Qjs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQ1gsSUFBVyxFQUNYLE9BQXdCLEVBQ3hCLFdBQW1CLFFBQVEsRUFDM0IsWUFBb0IsUUFBUTtRQUc1QixxRUFBcUU7UUFDckUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sRUFBRSxHQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE1BQU0sRUFBRSxHQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRSxpQ0FBaUM7UUFDakMs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QUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFN0IsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkMsS0FBSyxZQUFZO2dCQUNmLE9BQU8sR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25DLEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQztnQkFDRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7OztZQXpKRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDb2x1bW4ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeGNlbEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgZGF0YSB0byBFeGNlbCBmaWxlXHJcbiAgICogQHBhcmFtIGRhdGEgLSBBcnJheSBvZiBvYmplY3RzIHRvIGV4cG9ydFxyXG4gICAqIEBwYXJhbSBjb2x1bW5zIC0gQ29sdW1uIGNvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKVxyXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIE5hbWUgb2YgdGhlIGV4cG9ydGVkIGZpbGVcclxuICAgKiBAcGFyYW0gc2hlZXROYW1lIC0gTmFtZSBvZiB0aGUgRXhjZWwgc2hlZXRcclxuICAgKi9cclxuICBleHBvcnRUb0V4Y2VsKFxyXG4gICAgZGF0YTogYW55W10sXHJcbiAgICBjb2x1bW5zPzogRXhwb3J0Q29sdW1uW10sXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gJ2V4cG9ydCcsXHJcbiAgICBzaGVldE5hbWU6IHN0cmluZyA9ICdTaGVldDEnXHJcbiAgKTogdm9pZCB7XHJcblxyXG4gICAgLy8gSWYgY29sdW1ucyBhcmUgc3BlY2lmaWVkLCB0cmFuc2Zvcm0gZGF0YSB0byBtYXRjaCBjb2x1bW4gc3RydWN0dXJlXHJcbiAgICBsZXQgZXhwb3J0RGF0YSA9IGRhdGE7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZXhwb3J0RGF0YSA9IGRhdGEubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW06IGFueSA9IHt9O1xyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgbmV3SXRlbVtjb2wuaGVhZGVyXSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUoaXRlbSwgY29sLmtleSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSB3b3JrYm9vayBhbmQgd29ya3NoZWV0XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcclxuXHJcbiAgICAvLyBTZXQgY29sdW1uIHdpZHRocyBpZiBzcGVjaWZpZWRcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMuc29tZShjb2wgPT4gY29sLndpZHRoKSkge1xyXG4gICAgICBjb25zdCBjb2xXaWR0aHMgPSBjb2x1bW5zLm1hcChjb2wgPT4gKHt3Y2g6IGNvbC53aWR0aCB8fCAyMH0pKTtcclxuICAgICAgd3NbJyFjb2xzJ10gPSBjb2xXaWR0aHM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHdvcmtzaGVldCB0byB3b3JrYm9va1xyXG4gICAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsIHNoZWV0TmFtZSk7XHJcblxyXG4gICAgLy8gU2F2ZSBmaWxlXHJcbiAgICBYTFNYLndyaXRlRmlsZSh3YiwgYCR7ZmlsZU5hbWV9Lnhsc3hgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBtdWx0aXBsZSBzaGVldHMgdG8gb25lIEV4Y2VsIGZpbGVcclxuICAgKiBAcGFyYW0gc2hlZXRzIC0gQXJyYXkgb2Ygc2hlZXQgZGF0YVxyXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIE5hbWUgb2YgdGhlIGV4cG9ydGVkIGZpbGVcclxuICAgKi9cclxuICBleHBvcnRNdWx0aXBsZVNoZWV0cyhcclxuICAgIHNoZWV0czogQXJyYXk8e1xyXG4gICAgICBkYXRhOiBhbnlbXTtcclxuICAgICAgY29sdW1ucz86IEV4cG9ydENvbHVtbltdO1xyXG4gICAgICBzaGVldE5hbWU6IHN0cmluZztcclxuICAgIH0+LFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyA9ICdtdWx0aS1zaGVldC1leHBvcnQnXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuXHJcbiAgICBzaGVldHMuZm9yRWFjaChzaGVldCA9PiB7XHJcbiAgICAgIGxldCBleHBvcnREYXRhID0gc2hlZXQuZGF0YTtcclxuXHJcbiAgICAgIGlmIChzaGVldC5jb2x1bW5zICYmIHNoZWV0LmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGV4cG9ydERhdGEgPSBzaGVldC5kYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5ld0l0ZW06IGFueSA9IHt9O1xyXG4gICAgICAgICAgc2hlZXQuY29sdW1ucyEuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBuZXdJdGVtW2NvbC5oZWFkZXJdID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShpdGVtLCBjb2wua2V5KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcclxuXHJcbiAgICAgIGlmIChzaGVldC5jb2x1bW5zICYmIHNoZWV0LmNvbHVtbnMuc29tZShjb2wgPT4gY29sLndpZHRoKSkge1xyXG4gICAgICAgIGNvbnN0IGNvbFdpZHRocyA9IHNoZWV0LmNvbHVtbnMubWFwKGNvbCA9PiAoe3djaDogY29sLndpZHRoIHx8IDIwfSkpO1xyXG4gICAgICAgIHdzWychY29scyddID0gY29sV2lkdGhzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgc2hlZXQuc2hlZXROYW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIFhMU1gud3JpdGVGaWxlKHdiLCBgJHtmaWxlTmFtZX0ueGxzeGApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IEhUTUwgdGFibGUgdG8gRXhjZWxcclxuICAgKiBAcGFyYW0gdGFibGVJZCAtIElEIG9mIHRoZSBIVE1MIHRhYmxlIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gZmlsZU5hbWUgLSBOYW1lIG9mIHRoZSBleHBvcnRlZCBmaWxlXHJcbiAgICogQHBhcmFtIHNoZWV0TmFtZSAtIE5hbWUgb2YgdGhlIEV4Y2VsIHNoZWV0XHJcbiAgICovXHJcbiAgZXhwb3J0VGFibGVUb0V4Y2VsKFxyXG4gICAgdGFibGVJZDogc3RyaW5nLFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyA9ICd0YWJsZS1leHBvcnQnLFxyXG4gICAgc2hlZXROYW1lOiBzdHJpbmcgPSAnU2hlZXQxJ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkKTtcclxuICAgIGlmICghdGFibGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGFibGUgd2l0aCBJRCAnJHt0YWJsZUlkfScgbm90IGZvdW5kYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMudGFibGVfdG9fc2hlZXQodGFibGUpO1xyXG5cclxuICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod2IsIHdzLCBzaGVldE5hbWUpO1xyXG4gICAgWExTWC53cml0ZUZpbGUod2IsIGAke2ZpbGVOYW1lfS54bHN4YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbmVzdGVkIG9iamVjdCB2YWx1ZSB1c2luZyBkb3Qgbm90YXRpb25cclxuICAgKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIHNlYXJjaCBpblxyXG4gICAqIEBwYXJhbSBwYXRoIC0gRG90IG5vdGF0aW9uIHBhdGggKGUuZy4sICd1c2VyLmFkZHJlc3MuY2l0eScpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnQgJiYgY3VycmVudFtrZXldICE9PSB1bmRlZmluZWQgPyBjdXJyZW50W2tleV0gOiAnJztcclxuICAgIH0sIG9iaik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgZGF0ZSBmb3IgRXhjZWwgZXhwb3J0XHJcbiAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHRvIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBGb3JtYXQgc3RyaW5nIChkZWZhdWx0OiAnTU0vREQvWVlZWScpXHJcbiAgICovXHJcbiAgZm9ybWF0RGF0ZUZvckV4cG9ydChkYXRlOiBEYXRlIHwgc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9ICdNTS9ERC9ZWVlZJyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1vbnRoID0gKGQuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IGRheSA9IGQuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcclxuICAgICAgY2FzZSAnTU0vREQvWVlZWSc6XHJcbiAgICAgICAgcmV0dXJuIGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWA7XHJcbiAgICAgIGNhc2UgJ0REL01NL1lZWVknOlxyXG4gICAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xyXG4gICAgICBjYXNlICdZWVlZLU1NLUREJzpcclxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19