@colijnit/corecomponents_v12 258.1.7 → 258.1.9

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
@@ -16,7 +16,7 @@ export class ExcelExportService {
16
16
  exportData = data.map(item => {
17
17
  const newItem = {};
18
18
  columns.forEach(col => {
19
- newItem[col.header] = this.getNestedValue(item, col.key);
19
+ newItem[col.header] = this.getFlatValue(item, col.key);
20
20
  });
21
21
  return newItem;
22
22
  });
@@ -88,6 +88,9 @@ export class ExcelExportService {
88
88
  return current && current[key] !== undefined ? current[key] : '';
89
89
  }, obj);
90
90
  }
91
+ getFlatValue(obj, key) {
92
+ return obj && obj[key] !== undefined ? obj[key] : '';
93
+ }
91
94
  /**
92
95
  * Format date for Excel export
93
96
  * @param date - Date to format
@@ -122,4 +125,4 @@ ExcelExportService.decorators = [
122
125
  providedIn: 'root'
123
126
  },] }
124
127
  ];
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2UvZXhjZWwtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7QUFXN0IsTUFBTSxPQUFPLGtCQUFrQjtJQUU3Qjs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQ1gsSUFBVyxFQUNYLE9BQXdCLEVBQ3hCLFdBQW1CLFFBQVEsRUFDM0IsWUFBb0IsUUFBUTtRQUc1QixxRUFBcUU7UUFDckUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sRUFBRSxHQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE1BQU0sRUFBRSxHQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRSxpQ0FBaUM7UUFDakMs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QUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFN0IsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkMsS0FBSyxZQUFZO2dCQUNmLE9BQU8sR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25DLEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQztnQkFDRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7OztZQXpKRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDb2x1bW4ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeGNlbEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgZGF0YSB0byBFeGNlbCBmaWxlXHJcbiAgICogQHBhcmFtIGRhdGEgLSBBcnJheSBvZiBvYmplY3RzIHRvIGV4cG9ydFxyXG4gICAqIEBwYXJhbSBjb2x1bW5zIC0gQ29sdW1uIGNvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKVxyXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIE5hbWUgb2YgdGhlIGV4cG9ydGVkIGZpbGVcclxuICAgKiBAcGFyYW0gc2hlZXROYW1lIC0gTmFtZSBvZiB0aGUgRXhjZWwgc2hlZXRcclxuICAgKi9cclxuICBleHBvcnRUb0V4Y2VsKFxyXG4gICAgZGF0YTogYW55W10sXHJcbiAgICBjb2x1bW5zPzogRXhwb3J0Q29sdW1uW10sXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gJ2V4cG9ydCcsXHJcbiAgICBzaGVldE5hbWU6IHN0cmluZyA9ICdTaGVldDEnXHJcbiAgKTogdm9pZCB7XHJcblxyXG4gICAgLy8gSWYgY29sdW1ucyBhcmUgc3BlY2lmaWVkLCB0cmFuc2Zvcm0gZGF0YSB0byBtYXRjaCBjb2x1bW4gc3RydWN0dXJlXHJcbiAgICBsZXQgZXhwb3J0RGF0YSA9IGRhdGE7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZXhwb3J0RGF0YSA9IGRhdGEubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW06IGFueSA9IHt9O1xyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgbmV3SXRlbVtjb2wuaGVhZGVyXSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUoaXRlbSwgY29sLmtleSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSB3b3JrYm9vayBhbmQgd29ya3NoZWV0XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcclxuXHJcbiAgICAvLyBTZXQgY29sdW1uIHdpZHRocyBpZiBzcGVjaWZpZWRcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMuc29tZShjb2wgPT4gY29sLndpZHRoKSkge1xyXG4gICAgICBjb25zdCBjb2xXaWR0aHMgPSBjb2x1bW5zLm1hcChjb2wgPT4gKHt3Y2g6IGNvbC53aWR0aCB8fCAyMH0pKTtcclxuICAgICAgd3NbJyFjb2xzJ10gPSBjb2xXaWR0aHM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHdvcmtzaGVldCB0byB3b3JrYm9va1xyXG4gICAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsIHNoZWV0TmFtZSk7XHJcblxyXG4gICAgLy8gU2F2ZSBmaWxlXHJcbiAgICBYTFNYLndyaXRlRmlsZSh3YiwgYCR7ZmlsZU5hbWV9Lnhsc3hgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBtdWx0aXBsZSBzaGVldHMgdG8gb25lIEV4Y2VsIGZpbGVcclxuICAgKiBAcGFyYW0gc2hlZXRzIC0gQXJyYXkgb2Ygc2hlZXQgZGF0YVxyXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIE5hbWUgb2YgdGhlIGV4cG9ydGVkIGZpbGVcclxuICAgKi9cclxuICBleHBvcnRNdWx0aXBsZVNoZWV0cyhcclxuICAgIHNoZWV0czogQXJyYXk8e1xyXG4gICAgICBkYXRhOiBhbnlbXTtcclxuICAgICAgY29sdW1ucz86IEV4cG9ydENvbHVtbltdO1xyXG4gICAgICBzaGVldE5hbWU6IHN0cmluZztcclxuICAgIH0+LFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyA9ICdtdWx0aS1zaGVldC1leHBvcnQnXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuXHJcbiAgICBzaGVldHMuZm9yRWFjaChzaGVldCA9PiB7XHJcbiAgICAgIGxldCBleHBvcnREYXRhID0gc2hlZXQuZGF0YTtcclxuXHJcbiAgICAgIGlmIChzaGVldC5jb2x1bW5zICYmIHNoZWV0LmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGV4cG9ydERhdGEgPSBzaGVldC5kYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5ld0l0ZW06IGFueSA9IHt9O1xyXG4gICAgICAgICAgc2hlZXQuY29sdW1ucyEuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBuZXdJdGVtW2NvbC5oZWFkZXJdID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShpdGVtLCBjb2wua2V5KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcclxuXHJcbiAgICAgIGlmIChzaGVldC5jb2x1bW5zICYmIHNoZWV0LmNvbHVtbnMuc29tZShjb2wgPT4gY29sLndpZHRoKSkge1xyXG4gICAgICAgIGNvbnN0IGNvbFdpZHRocyA9IHNoZWV0LmNvbHVtbnMubWFwKGNvbCA9PiAoe3djaDogY29sLndpZHRoIHx8IDIwfSkpO1xyXG4gICAgICAgIHdzWychY29scyddID0gY29sV2lkdGhzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgc2hlZXQuc2hlZXROYW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIFhMU1gud3JpdGVGaWxlKHdiLCBgJHtmaWxlTmFtZX0ueGxzeGApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IEhUTUwgdGFibGUgdG8gRXhjZWxcclxuICAgKiBAcGFyYW0gdGFibGVJZCAtIElEIG9mIHRoZSBIVE1MIHRhYmxlIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gZmlsZU5hbWUgLSBOYW1lIG9mIHRoZSBleHBvcnRlZCBmaWxlXHJcbiAgICogQHBhcmFtIHNoZWV0TmFtZSAtIE5hbWUgb2YgdGhlIEV4Y2VsIHNoZWV0XHJcbiAgICovXHJcbiAgZXhwb3J0VGFibGVUb0V4Y2VsKFxyXG4gICAgdGFibGVJZDogc3RyaW5nLFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyA9ICd0YWJsZS1leHBvcnQnLFxyXG4gICAgc2hlZXROYW1lOiBzdHJpbmcgPSAnU2hlZXQxJ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkKTtcclxuICAgIGlmICghdGFibGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGFibGUgd2l0aCBJRCAnJHt0YWJsZUlkfScgbm90IGZvdW5kYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcclxuICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMudGFibGVfdG9fc2hlZXQodGFibGUpO1xyXG5cclxuICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod2IsIHdzLCBzaGVldE5hbWUpO1xyXG4gICAgWExTWC53cml0ZUZpbGUod2IsIGAke2ZpbGVOYW1lfS54bHN4YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbmVzdGVkIG9iamVjdCB2YWx1ZSB1c2luZyBkb3Qgbm90YXRpb25cclxuICAgKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIHNlYXJjaCBpblxyXG4gICAqIEBwYXJhbSBwYXRoIC0gRG90IG5vdGF0aW9uIHBhdGggKGUuZy4sICd1c2VyLmFkZHJlc3MuY2l0eScpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnQgJiYgY3VycmVudFtrZXldICE9PSB1bmRlZmluZWQgPyBjdXJyZW50W2tleV0gOiAnJztcclxuICAgIH0sIG9iaik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgZGF0ZSBmb3IgRXhjZWwgZXhwb3J0XHJcbiAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHRvIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBGb3JtYXQgc3RyaW5nIChkZWZhdWx0OiAnTU0vREQvWVlZWScpXHJcbiAgICovXHJcbiAgZm9ybWF0RGF0ZUZvckV4cG9ydChkYXRlOiBEYXRlIHwgc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9ICdNTS9ERC9ZWVlZJyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRhdGUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1vbnRoID0gKGQuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IGRheSA9IGQuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcclxuICAgICAgY2FzZSAnTU0vREQvWVlZWSc6XHJcbiAgICAgICAgcmV0dXJuIGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWA7XHJcbiAgICAgIGNhc2UgJ0REL01NL1lZWVknOlxyXG4gICAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xyXG4gICAgICBjYXNlICdZWVlZLU1NLUREJzpcclxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2UvZXhjZWwtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7QUFXN0IsTUFBTSxPQUFPLGtCQUFrQjtJQUU3Qjs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQ1gsSUFBVyxFQUNYLE9BQXdCLEVBQ3hCLFdBQW1CLFFBQVEsRUFDM0IsWUFBb0IsUUFBUTtRQUU1QixxRUFBcUU7UUFDckUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sRUFBRSxHQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELE1BQU0sRUFBRSxHQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRSxpQ0FBaUM7UUFDakMs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QUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU3QixRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkMsS0FBSyxZQUFZO2dCQUNmLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ25DO2dCQUNFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDOzs7O1lBNUpGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvbHVtbiB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4Y2VsRXhwb3J0U2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBkYXRhIHRvIEV4Y2VsIGZpbGVcclxuICAgKiBAcGFyYW0gZGF0YSAtIEFycmF5IG9mIG9iamVjdHMgdG8gZXhwb3J0XHJcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBDb2x1bW4gY29uZmlndXJhdGlvbiAob3B0aW9uYWwpXHJcbiAgICogQHBhcmFtIGZpbGVOYW1lIC0gTmFtZSBvZiB0aGUgZXhwb3J0ZWQgZmlsZVxyXG4gICAqIEBwYXJhbSBzaGVldE5hbWUgLSBOYW1lIG9mIHRoZSBFeGNlbCBzaGVldFxyXG4gICAqL1xyXG4gIGV4cG9ydFRvRXhjZWwoXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIGNvbHVtbnM/OiBFeHBvcnRDb2x1bW5bXSxcclxuICAgIGZpbGVOYW1lOiBzdHJpbmcgPSAnZXhwb3J0JyxcclxuICAgIHNoZWV0TmFtZTogc3RyaW5nID0gJ1NoZWV0MSdcclxuICApOiB2b2lkIHtcclxuICAgIC8vIElmIGNvbHVtbnMgYXJlIHNwZWNpZmllZCwgdHJhbnNmb3JtIGRhdGEgdG8gbWF0Y2ggY29sdW1uIHN0cnVjdHVyZVxyXG4gICAgbGV0IGV4cG9ydERhdGEgPSBkYXRhO1xyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGV4cG9ydERhdGEgPSBkYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgIG5ld0l0ZW1bY29sLmhlYWRlcl0gPSB0aGlzLmdldEZsYXRWYWx1ZShpdGVtLCBjb2wua2V5KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIHdvcmtib29rIGFuZCB3b3Jrc2hlZXRcclxuICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGV4cG9ydERhdGEpO1xyXG5cclxuICAgIC8vIFNldCBjb2x1bW4gd2lkdGhzIGlmIHNwZWNpZmllZFxyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5zb21lKGNvbCA9PiBjb2wud2lkdGgpKSB7XHJcbiAgICAgIGNvbnN0IGNvbFdpZHRocyA9IGNvbHVtbnMubWFwKGNvbCA9PiAoe3djaDogY29sLndpZHRoIHx8IDIwfSkpO1xyXG4gICAgICB3c1snIWNvbHMnXSA9IGNvbFdpZHRocztcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgd29ya3NoZWV0IHRvIHdvcmtib29rXHJcbiAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgc2hlZXROYW1lKTtcclxuXHJcbiAgICAvLyBTYXZlIGZpbGVcclxuICAgIFhMU1gud3JpdGVGaWxlKHdiLCBgJHtmaWxlTmFtZX0ueGxzeGApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IG11bHRpcGxlIHNoZWV0cyB0byBvbmUgRXhjZWwgZmlsZVxyXG4gICAqIEBwYXJhbSBzaGVldHMgLSBBcnJheSBvZiBzaGVldCBkYXRhXHJcbiAgICogQHBhcmFtIGZpbGVOYW1lIC0gTmFtZSBvZiB0aGUgZXhwb3J0ZWQgZmlsZVxyXG4gICAqL1xyXG4gIGV4cG9ydE11bHRpcGxlU2hlZXRzKFxyXG4gICAgc2hlZXRzOiBBcnJheTx7XHJcbiAgICAgIGRhdGE6IGFueVtdO1xyXG4gICAgICBjb2x1bW5zPzogRXhwb3J0Q29sdW1uW107XHJcbiAgICAgIHNoZWV0TmFtZTogc3RyaW5nO1xyXG4gICAgfT4sXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gJ211bHRpLXNoZWV0LWV4cG9ydCdcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG5cclxuICAgIHNoZWV0cy5mb3JFYWNoKHNoZWV0ID0+IHtcclxuICAgICAgbGV0IGV4cG9ydERhdGEgPSBzaGVldC5kYXRhO1xyXG5cclxuICAgICAgaWYgKHNoZWV0LmNvbHVtbnMgJiYgc2hlZXQuY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZXhwb3J0RGF0YSA9IHNoZWV0LmRhdGEubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgY29uc3QgbmV3SXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICBzaGVldC5jb2x1bW5zIS5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIG5ld0l0ZW1bY29sLmhlYWRlcl0gPSB0aGlzLmdldE5lc3RlZFZhbHVlKGl0ZW0sIGNvbC5rZXkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGV4cG9ydERhdGEpO1xyXG5cclxuICAgICAgaWYgKHNoZWV0LmNvbHVtbnMgJiYgc2hlZXQuY29sdW1ucy5zb21lKGNvbCA9PiBjb2wud2lkdGgpKSB7XHJcbiAgICAgICAgY29uc3QgY29sV2lkdGhzID0gc2hlZXQuY29sdW1ucy5tYXAoY29sID0+ICh7d2NoOiBjb2wud2lkdGggfHwgMjB9KSk7XHJcbiAgICAgICAgd3NbJyFjb2xzJ10gPSBjb2xXaWR0aHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQod2IsIHdzLCBzaGVldC5zaGVldE5hbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgWExTWC53cml0ZUZpbGUod2IsIGAke2ZpbGVOYW1lfS54bHN4YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgSFRNTCB0YWJsZSB0byBFeGNlbFxyXG4gICAqIEBwYXJhbSB0YWJsZUlkIC0gSUQgb2YgdGhlIEhUTUwgdGFibGUgZWxlbWVudFxyXG4gICAqIEBwYXJhbSBmaWxlTmFtZSAtIE5hbWUgb2YgdGhlIGV4cG9ydGVkIGZpbGVcclxuICAgKiBAcGFyYW0gc2hlZXROYW1lIC0gTmFtZSBvZiB0aGUgRXhjZWwgc2hlZXRcclxuICAgKi9cclxuICBleHBvcnRUYWJsZVRvRXhjZWwoXHJcbiAgICB0YWJsZUlkOiBzdHJpbmcsXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gJ3RhYmxlLWV4cG9ydCcsXHJcbiAgICBzaGVldE5hbWU6IHN0cmluZyA9ICdTaGVldDEnXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlSWQpO1xyXG4gICAgaWYgKCF0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUYWJsZSB3aXRoIElEICcke3RhYmxlSWR9JyBub3QgZm91bmRgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy50YWJsZV90b19zaGVldCh0YWJsZSk7XHJcblxyXG4gICAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsIHNoZWV0TmFtZSk7XHJcbiAgICBYTFNYLndyaXRlRmlsZSh3YiwgYCR7ZmlsZU5hbWV9Lnhsc3hgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBuZXN0ZWQgb2JqZWN0IHZhbHVlIHVzaW5nIGRvdCBub3RhdGlvblxyXG4gICAqIEBwYXJhbSBvYmogLSBPYmplY3QgdG8gc2VhcmNoIGluXHJcbiAgICogQHBhcmFtIHBhdGggLSBEb3Qgbm90YXRpb24gcGF0aCAoZS5nLiwgJ3VzZXIuYWRkcmVzcy5jaXR5JylcclxuICAgKi9cclxuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGN1cnJlbnQsIGtleSkgPT4ge1xyXG4gICAgICByZXR1cm4gY3VycmVudCAmJiBjdXJyZW50W2tleV0gIT09IHVuZGVmaW5lZCA/IGN1cnJlbnRba2V5XSA6ICcnO1xyXG4gICAgfSwgb2JqKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmxhdFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gb2JqICYmIG9ialtrZXldICE9PSB1bmRlZmluZWQgPyBvYmpba2V5XSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGRhdGUgZm9yIEV4Y2VsIGV4cG9ydFxyXG4gICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB0byBmb3JtYXRcclxuICAgKiBAcGFyYW0gZm9ybWF0IC0gRm9ybWF0IHN0cmluZyAoZGVmYXVsdDogJ01NL0REL1lZWVknKVxyXG4gICAqL1xyXG4gIGZvcm1hdERhdGVGb3JFeHBvcnQoZGF0ZTogRGF0ZSB8IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSAnTU0vREQvWVlZWScpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtb250aCA9IChkLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBkYXkgPSBkLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG5cclxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgJ01NL0REL1lZWVknOlxyXG4gICAgICAgIHJldHVybiBgJHttb250aH0vJHtkYXl9LyR7eWVhcn1gO1xyXG4gICAgICBjYXNlICdERC9NTS9ZWVlZJzpcclxuICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcclxuICAgICAgY2FzZSAnWVlZWS1NTS1ERCc6XHJcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -5014,7 +5014,7 @@ GridToolbarComponent.decorators = [
5014
5014
  <co-icon *ngIf="showEdit" [iconData]="iconsService.getIcon(icons.RotateLeftSolid)" [title]="'cancel'" (click)="cancelClick.emit()"></co-icon>
5015
5015
  <co-icon *ngIf="showEdit" [iconData]="iconsService.getIcon(icons.FloppyDiskSolid)" [title]="'save'" (click)="saveClick.emit()"></co-icon>
5016
5016
  <co-icon *ngIf="showAdd || showEdit" [iconData]="iconsService.getIcon(icons.PlusSolid)" [title]="'add'" (click)="addClick.emit()"></co-icon>
5017
- <co-icon *ngIf="showDelete" [iconData]="iconsService.getIcon(icons.TrashCanSolid)" [title]="'delete'" [class.disabled]="!deleteEnabled" (click)="handleDeleteClick()"></co-icon>
5017
+ <!-- <co-icon *ngIf="showDelete" [iconData]="iconsService.getIcon(icons.TrashCanSolid)" [title]="'delete'" [class.disabled]="!deleteEnabled" (click)="handleDeleteClick()"></co-icon>-->
5018
5018
  </div>
5019
5019
  `,
5020
5020
  encapsulation: ViewEncapsulation.None
@@ -7450,6 +7450,7 @@ class InputNumberPickerComponent extends BaseInputComponent {
7450
7450
  this.ngZoneWrapper = ngZoneWrapper;
7451
7451
  this.elementRef = elementRef;
7452
7452
  this.modelChangeOnEnter = true;
7453
+ this.showPermanentLabel = false;
7453
7454
  this.minusIcon = CoreComponentsIcon.MinusSimple;
7454
7455
  this.plusIcon = CoreComponentsIcon.PlusSimple;
7455
7456
  // Whether to show buttons 'always', 'onFocusOnly', or 'never'
@@ -7675,16 +7676,19 @@ InputNumberPickerComponent.decorators = [
7675
7676
  (mousedown)="onMinusMouseDown($event)"
7676
7677
  (mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
7677
7678
  </div>
7678
- <input type="text"
7679
- [tabIndex]="readonly ? -1 : 0"
7680
- [ngModel]="model"
7681
- [readonly]="readonly"
7682
- [disabled]="disabled"
7683
- [required]="required"
7684
- [placeholder]="label"
7685
- (ngModelChange)="handleChangeModel($event)"
7686
- (keydown)="handleInputKeyDown($event)"
7687
- (blur)="handleBlur()"/>
7679
+ <div class="input-wrapper">
7680
+ <span class='permanent-label' [textContent]="label" *ngIf="showPermanentLabel"></span>
7681
+ <input type="text"
7682
+ [tabIndex]="readonly ? -1 : 0"
7683
+ [ngModel]="model"
7684
+ [readonly]="readonly"
7685
+ [disabled]="disabled"
7686
+ [required]="required"
7687
+ [placeholder]="label"
7688
+ (ngModelChange)="handleChangeModel($event)"
7689
+ (keydown)="handleInputKeyDown($event)"
7690
+ (blur)="handleBlur()"/>
7691
+ </div>
7688
7692
  <div class="button-wrapper">
7689
7693
  <co-button *ngIf="showButtons" class="plus-operator" [class.select]="plusSelected" tabindex="-1"
7690
7694
  [disabled]="readonly"
@@ -7719,6 +7723,7 @@ InputNumberPickerComponent.ctorParameters = () => [
7719
7723
  InputNumberPickerComponent.propDecorators = {
7720
7724
  model: [{ type: Input }],
7721
7725
  modelChangeOnEnter: [{ type: Input }],
7726
+ showPermanentLabel: [{ type: Input }],
7722
7727
  leftIconData: [{ type: HostBinding, args: ['class.has-icon',] }, { type: Input }],
7723
7728
  min: [{ type: Input }],
7724
7729
  step: [{ type: Input }],
@@ -9490,7 +9495,7 @@ class ExcelExportService {
9490
9495
  exportData = data.map(item => {
9491
9496
  const newItem = {};
9492
9497
  columns.forEach(col => {
9493
- newItem[col.header] = this.getNestedValue(item, col.key);
9498
+ newItem[col.header] = this.getFlatValue(item, col.key);
9494
9499
  });
9495
9500
  return newItem;
9496
9501
  });
@@ -9562,6 +9567,9 @@ class ExcelExportService {
9562
9567
  return current && current[key] !== undefined ? current[key] : '';
9563
9568
  }, obj);
9564
9569
  }
9570
+ getFlatValue(obj, key) {
9571
+ return obj && obj[key] !== undefined ? obj[key] : '';
9572
+ }
9565
9573
  /**
9566
9574
  * Format date for Excel export
9567
9575
  * @param date - Date to format
@@ -9610,7 +9618,7 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
9610
9618
  this.editOnCellClick = true;
9611
9619
  this.rightToolbar = false;
9612
9620
  this.showGridSettings = false;
9613
- this.rowsPerPage = 1000;
9621
+ this.rowsPerPage = 50;
9614
9622
  this.showColumnSort = false;
9615
9623
  this.editing = false;
9616
9624
  this.isSettingsMenuOpen = false;
@@ -9619,9 +9627,12 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
9619
9627
  this.selectedRowIndex = -1;
9620
9628
  this.currentPage = 1;
9621
9629
  this.sortDirection = 'asc';
9630
+ this.hoveredRowIndex = -1;
9622
9631
  this.Icons = CoreComponentsIcon;
9623
9632
  this._doubleClicked = false;
9624
9633
  this._newRow = false;
9634
+ this.IconCacheService = IconCacheService;
9635
+ this.CoreComponentsIcon = CoreComponentsIcon;
9625
9636
  this.dataChanged.subscribe(() => {
9626
9637
  this.currentPage = 1;
9627
9638
  });
@@ -9693,10 +9704,20 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
9693
9704
  this._detectChanges();
9694
9705
  this._newRow = true;
9695
9706
  this.editing = true;
9696
- this.editRowIndex = this.data.length - 1;
9697
- this.rowToEdit = this.data[this.editRowIndex];
9698
- this.editCellIndex = yield this._nextAvailableCellToEdit(true);
9699
- this._detectChanges();
9707
+ if (this.rowsPerPage && this.data.length > this.rowsPerPage) {
9708
+ // navigate to the last page to the new row
9709
+ this.currentPage = Math.ceil(this.data.length / this.rowsPerPage);
9710
+ // select new row
9711
+ const absoluteIndex = this.data.length - 1;
9712
+ this.selectedRowIndex = this.rowsPerPage ? (absoluteIndex - ((this.currentPage - 1) * this.rowsPerPage)) : absoluteIndex;
9713
+ this.editRow(null);
9714
+ }
9715
+ else {
9716
+ this.editRowIndex = this.data.length - 1;
9717
+ this.rowToEdit = this.data[this.editRowIndex];
9718
+ this.editCellIndex = yield this._nextAvailableCellToEdit(true);
9719
+ this._detectChanges();
9720
+ }
9700
9721
  }
9701
9722
  }
9702
9723
  else {
@@ -9770,16 +9791,19 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
9770
9791
  this._resetDblClick();
9771
9792
  });
9772
9793
  }
9773
- editRow(event, selectCell = true) {
9774
- this.editRowIndex = this.selectedRowIndex;
9775
- this.rowToEdit = this.data[this.editRowIndex];
9776
- this.editing = true;
9777
- if (selectCell) {
9778
- this._nextAvailableCellToEdit(true).then((index) => {
9779
- this.editCellIndex = index;
9780
- });
9781
- }
9782
- this._detectChanges();
9794
+ editRow(event, selectCell = true, rowIndex) {
9795
+ return __awaiter(this, void 0, void 0, function* () {
9796
+ if (rowIndex !== undefined) {
9797
+ this.selectTheRow(rowIndex, false);
9798
+ }
9799
+ this.editRowIndex = this.selectedRowIndex;
9800
+ this.rowToEdit = this.data[this.editRowIndex];
9801
+ this.editing = true;
9802
+ if (selectCell) {
9803
+ this.editCellIndex = yield this._nextAvailableCellToEdit(true);
9804
+ }
9805
+ this._detectChanges();
9806
+ });
9783
9807
  }
9784
9808
  handleCellClick(event, row, rowIndex, cellIndex) {
9785
9809
  return __awaiter(this, void 0, void 0, function* () {
@@ -9869,7 +9893,14 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
9869
9893
  this.headerColumnsCopy = this.headerColumns;
9870
9894
  }
9871
9895
  exportToExcel() {
9872
- this.excelExportService.exportTableToExcel('simple-grid-table', 'ExcelSheet', 'Sheet1');
9896
+ this.isSettingsMenuOpen = false;
9897
+ const columns = this.headerColumnsCopy.map(column => {
9898
+ return ({
9899
+ key: column.field,
9900
+ header: column.headerText
9901
+ });
9902
+ });
9903
+ this.excelExportService.exportToExcel(this.data, columns, 'ExcelSheet', 'Sheet1');
9873
9904
  }
9874
9905
  prepareDataRow(row, index) {
9875
9906
  this.isRowDisabled(row, index);
@@ -10011,158 +10042,183 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
10011
10042
  this.editing = false;
10012
10043
  this.rowToEdit = undefined;
10013
10044
  }
10045
+ get isNewRow() {
10046
+ return this._newRow;
10047
+ }
10014
10048
  }
10015
10049
  SimpleGridComponent.decorators = [
10016
10050
  { type: Component, args: [{
10017
10051
  selector: 'co-simple-grid',
10018
10052
  template: `
10019
- <co-grid-toolbar
10020
- *ngIf="showToolbar" [class.right]="rightToolbar"
10021
- [showEdit]="showEdit"
10022
- [showAdd]="showAdd"
10023
- [showDelete]="showDelete"
10024
- [deleteEnabled]="selectedRowIndex > -1"
10025
- (addClick)="addNewRow()"
10026
- (editClick)="editRow($event)"
10027
- (saveClick)="validateAndSave()"
10028
- (cancelClick)="cancelEditRow()"
10029
- (deleteClick)="removeRow()">
10030
- </co-grid-toolbar>
10053
+ <co-grid-toolbar
10054
+ *ngIf="showToolbar" [class.right]="rightToolbar"
10055
+ [showEdit]="showEdit"
10056
+ [showAdd]="showAdd"
10057
+ [showDelete]="showDelete"
10058
+ [deleteEnabled]="selectedRowIndex > -1"
10059
+ (addClick)="addNewRow()"
10060
+ (editClick)="editRow($event)"
10061
+ (saveClick)="validateAndSave()"
10062
+ (cancelClick)="cancelEditRow()"
10063
+ (deleteClick)="removeRow()">
10064
+ </co-grid-toolbar>
10031
10065
 
10032
- <table
10033
- id="simple-grid-table"
10034
- class="simple-grid-table"
10035
- [clickOutside]="editing"
10036
- (clickOutside)="handleClickOutsideRow()">
10037
- <colgroup>
10038
- <col
10039
- *ngFor="let column of headerColumnsCopy; let index = index"
10040
- [class.simple-grid-column-auto-fit]="column.autoFit"
10041
- [style.width.px]="column.width"
10042
- [style.min-width.px]="MIN_COLUMN_WIDTH">
10043
- </colgroup>
10044
- <thead>
10045
- <tr>
10046
- <th
10047
- scope="col"
10048
- #headerCell
10049
- class="simple-grid-column-header"
10050
- *ngFor="let column of headerColumnsCopy; let index = index">
10051
- <div
10052
- class="simple-grid-column-header-wrapper"
10053
- [class.resizable]="resizable"
10054
- [class.selected]="column.isSelected"
10055
- [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
10056
- <ng-container *ngIf="column.headerTemplate; else noHeaderTemplate">
10057
- <ng-container [ngTemplateOutlet]="column.headerTemplate"></ng-container>
10058
- </ng-container>
10059
- <ng-template #noHeaderTemplate>
10060
- <div
10061
- class="simple-grid-column-header-label"
10062
- [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign"
10063
- [class.with-menu]="showGridSettings"
10064
- [class.with-sort]="showColumnSort"
10065
- [textContent]="column.headerText || '&nbsp;'"
10066
- (click)="showColumnSort ? sortColumn(column, column.field) : toggleColumnMenu(column)">
10067
- </div>
10068
-
10069
- <div class="sort-column" *ngIf="showColumnSort">
10070
- <co-button
10071
- (click)="sortColumn(column, column?.field)"
10072
- [iconData]="icons.getIcon(Icons.ArrowUpArrowDown)">
10073
- </co-button>
10074
- </div>
10075
-
10076
- <div class="column-menu" *ngIf="column.isSelected">
10077
- <h3 [textContent]="'COLUMN_OPTIONS' | coreLocalize"></h3>
10078
- <ul>
10079
- <li (click)="hideColumn(column)">Hide Column</li>
10080
- <li (click)="sortColumn(column, column.field)">Sort Column</li>
10081
- </ul>
10082
- </div>
10083
- </ng-template>
10084
- <div
10085
- *ngIf="resizable && column.resizable"
10086
- class="simple-grid-column-sizer"
10087
- (mousedown)="handleSizerMouseDown($event, column)">
10088
- </div>
10089
- </div>
10090
- </th>
10091
- </tr>
10066
+ <table
10067
+ id="simple-grid-table"
10068
+ class="simple-grid-table"
10069
+ [clickOutside]="editing"
10070
+ (clickOutside)="handleClickOutsideRow()">
10071
+ <colgroup>
10072
+ <col
10073
+ *ngFor="let column of headerColumnsCopy; let index = index"
10074
+ [class.simple-grid-column-auto-fit]="column.autoFit"
10075
+ [style.width.px]="column.width"
10076
+ [style.min-width.px]="MIN_COLUMN_WIDTH">
10077
+ </colgroup>
10078
+ <thead>
10079
+ <tr>
10080
+ <th
10081
+ scope="col"
10082
+ #headerCell
10083
+ class="simple-grid-column-header"
10084
+ *ngFor="let column of headerColumnsCopy; let index = index">
10085
+ <div
10086
+ class="simple-grid-column-header-wrapper"
10087
+ [class.resizable]="resizable"
10088
+ [class.selected]="column.isSelected"
10089
+ [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
10090
+ <ng-container *ngIf="column.headerTemplate; else noHeaderTemplate">
10091
+ <ng-container [ngTemplateOutlet]="column.headerTemplate"></ng-container>
10092
+ </ng-container>
10093
+ <ng-template #noHeaderTemplate>
10094
+ <div
10095
+ class="simple-grid-column-header-label"
10096
+ [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign"
10097
+ [class.with-menu]="showGridSettings"
10098
+ [class.with-sort]="showColumnSort"
10099
+ [textContent]="column.headerText || '&nbsp;'"
10100
+ (click)="showColumnSort ? sortColumn(column, column.field) : toggleColumnMenu(column)">
10101
+ </div>
10092
10102
 
10093
- <div *ngIf="showGridSettings" class="grid-settings">
10094
- <co-button
10095
- [class.selected]="isSettingsMenuOpen"
10096
- [iconData]="icons.getIcon(Icons.CogWheels)"
10097
- (click)="toggleSettingsMenu()">
10098
- </co-button>
10103
+ <div class="sort-column" *ngIf="showColumnSort">
10104
+ <co-button
10105
+ (click)="sortColumn(column, column?.field)"
10106
+ [iconData]="icons.getIcon(Icons.ArrowUpArrowDown)">
10107
+ </co-button>
10108
+ </div>
10099
10109
 
10100
- <div class="settings-menu" *ngIf="isSettingsMenuOpen">
10101
- <h3 [textContent]="'GRID_OPTIONS' | coreLocalize"></h3>
10102
- <ul>
10103
- <li (click)="exportToExcel()">Export to Excel</li>
10104
- <li *ngIf="headerColumnsCopy.length !== headerColumns.length" (click)="showAllColumns()">
10105
- Show All Columns
10106
- </li>
10107
- </ul>
10110
+ <div class="column-menu" *ngIf="column.isSelected">
10111
+ <h3 [textContent]="'COLUMN_OPTIONS' | coreLocalize"></h3>
10112
+ <ul>
10113
+ <li (click)="hideColumn(column)">Hide Column</li>
10114
+ <li (click)="sortColumn(column, column.field)">Sort Column</li>
10115
+ </ul>
10108
10116
  </div>
10117
+ </ng-template>
10118
+ <div
10119
+ *ngIf="resizable && column.resizable"
10120
+ class="simple-grid-column-sizer"
10121
+ (mousedown)="handleSizerMouseDown($event, column)">
10122
+ </div>
10109
10123
  </div>
10110
- </thead>
10111
- <tbody
10112
- #dropList cdkDropList cdkDropListOrientation="vertical"
10113
- class="simple-grid-drag-drop-list"
10114
- [cdkDropListDisabled]="!dragDropEnabled || editing"
10115
- [cdkDropListData]="data"
10116
- [cdkDropListEnterPredicate]="handleCanDragDrop"
10117
- (cdkDropListDropped)="handleDrop($event)">
10118
- <co-form class="simple-grid-row-form">
10119
- <tr
10120
- class="simple-grid-row"
10121
- [class.selected]="rowIndex === selectedRowIndex && !editing" observeVisibility
10122
- [class.disabled]="getIsRowDisabled(rowIndex)"
10123
- [class.editing]="rowIndex === editRowIndex"
10124
- *ngFor="let row of (!!rowsPerPage ? (data | paginate: {itemsPerPage: rowsPerPage, currentPage: currentPage}) : data); last as last; let rowIndex = index"
10125
- cdkDrag
10126
- (click)="handleClickRow($event, rowIndex, row)" (dblclick)="handleDblClickRow($event, rowIndex, row)"
10127
- (visibilityChange)="rowVisible.next(row)">
10128
- <ng-container *ngIf="isSingleColumnRow(row)">
10129
- <td class="simple-grid-single-column-cell" [attr.colspan]="headerColumnsCopy.length">
10130
- <co-simple-grid-cell
10131
- [column]="columns[singleColumnIndex(row)]"
10132
- [row]="row"
10133
- [editMode]="false">
10134
- </co-simple-grid-cell>
10135
- </td>
10136
- </ng-container>
10137
- <ng-container *ngIf="!isSingleColumnRow(row)">
10138
- <ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
10139
- <td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
10140
- <co-simple-grid-cell
10141
- [column]="column"
10142
- [row]="row"
10143
- [editMode]="inlineEdit && editing && rowIndex === editRowIndex"
10144
- [fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
10145
- (cellClick)="handleCellClick($event, row, rowIndex, columnIndex)">
10146
- </co-simple-grid-cell>
10147
- <div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
10148
- </td>
10149
- </ng-container>
10150
- </ng-container>
10151
- </tr>
10152
- </co-form>
10153
- </tbody>
10154
- </table>
10124
+ </th>
10125
+ </tr>
10155
10126
 
10156
- <co-pagination-bar
10157
- *ngIf="data?.length > rowsPerPage" class="pagination-bar"
10158
- [itemsPerPage]="rowsPerPage"
10159
- [currentPage]="currentPage"
10160
- [totalItems]="data.length"
10161
- [autoHide]="true"
10162
- (previousClick)="goToPreviousPage()"
10163
- (nextClick)="goToNextPage()"
10164
- (pageClick)="setCurrentPage($event)">
10165
- </co-pagination-bar>
10127
+ <div *ngIf="showGridSettings" class="grid-settings">
10128
+ <co-button
10129
+ [class.selected]="isSettingsMenuOpen"
10130
+ [iconData]="icons.getIcon(Icons.CogWheels)"
10131
+ (click)="toggleSettingsMenu()">
10132
+ </co-button>
10133
+
10134
+ <div class="settings-menu" *ngIf="isSettingsMenuOpen">
10135
+ <h3 [textContent]="'GRID_OPTIONS' | coreLocalize"></h3>
10136
+ <ul>
10137
+ <li (click)="exportToExcel()">Export to Excel</li>
10138
+ <li *ngIf="headerColumnsCopy.length !== headerColumns.length" (click)="showAllColumns()">
10139
+ Show All Columns
10140
+ </li>
10141
+ </ul>
10142
+ </div>
10143
+ </div>
10144
+ </thead>
10145
+ <tbody
10146
+ #dropList cdkDropList cdkDropListOrientation="vertical"
10147
+ class="simple-grid-drag-drop-list"
10148
+ [cdkDropListDisabled]="!dragDropEnabled || editing"
10149
+ [cdkDropListData]="data"
10150
+ [cdkDropListEnterPredicate]="handleCanDragDrop"
10151
+ (cdkDropListDropped)="handleDrop($event)">
10152
+ <co-form class="simple-grid-row-form">
10153
+ <tr
10154
+ class="simple-grid-row"
10155
+ [class.selected]="rowIndex === selectedRowIndex && !editing" observeVisibility
10156
+ [class.disabled]="getIsRowDisabled(rowIndex)"
10157
+ [class.editing]="rowIndex === editRowIndex"
10158
+ *ngFor="let row of (!!rowsPerPage ? (data | paginate: {itemsPerPage: rowsPerPage, currentPage: currentPage}) : data); last as last; let rowIndex = index"
10159
+ cdkDrag
10160
+ (click)="handleClickRow($event, rowIndex, row)" (dblclick)="handleDblClickRow($event, rowIndex, row)"
10161
+ (visibilityChange)="rowVisible.next(row)"
10162
+ (mouseenter)="hoveredRowIndex = rowIndex"
10163
+ (mouseleave)="hoveredRowIndex = -1"
10164
+ >
10165
+ <ng-container *ngIf="isSingleColumnRow(row)">
10166
+ <td class="simple-grid-single-column-cell" [attr.colspan]="headerColumnsCopy.length">
10167
+ <co-simple-grid-cell
10168
+ [column]="columns[singleColumnIndex(row)]"
10169
+ [row]="row"
10170
+ [editMode]="false">
10171
+ </co-simple-grid-cell>
10172
+ </td>
10173
+ </ng-container>
10174
+ <ng-container *ngIf="!isSingleColumnRow(row)">
10175
+ <ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
10176
+ <td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
10177
+ <co-simple-grid-cell
10178
+ [column]="column"
10179
+ [row]="row"
10180
+ [editMode]="inlineEdit && editing && rowIndex === editRowIndex"
10181
+ [fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
10182
+ (cellClick)="handleCellClick($event, row, rowIndex, columnIndex)">
10183
+ </co-simple-grid-cell>
10184
+ <div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
10185
+ </td>
10186
+ </ng-container>
10187
+ <ng-container *ngIf="inlineEdit">
10188
+ <div class="icons-container" *ngIf="!editing">
10189
+ <co-icon class="icon-item icon-edit"
10190
+ [iconData]="icons.getIcon(Icons.PenToSquareSolid)" *ngIf="hoveredRowIndex === rowIndex"
10191
+ (click)="editRow($event, true, rowIndex); $event.stopPropagation()"></co-icon>
10192
+ <co-icon class="icon-item icon-delete"
10193
+ [iconData]="icons.getIcon(Icons.TrashBin)" *ngIf="hoveredRowIndex === rowIndex"
10194
+ (click)="removeRow()"></co-icon>
10195
+ </div>
10196
+ <div class="icons-container">
10197
+ <co-button class="save-button"
10198
+ *ngIf="editing && (selectedRowIndex === rowIndex || (isNewRow && rowIndex === editRowIndex))"
10199
+ [iconData]="icons.getIcon(Icons.CheckDuotone)"
10200
+ (click)="validateAndSave(); $event.stopPropagation()"></co-button>
10201
+ <co-button class="close-button"
10202
+ *ngIf="editing && (selectedRowIndex === rowIndex || (isNewRow && rowIndex === editRowIndex))"
10203
+ [iconData]="icons.getIcon(Icons.CrossSkinny)"
10204
+ (click)="cancelEditRow(); $event.stopPropagation() "></co-button>
10205
+ </div>
10206
+ </ng-container>
10207
+ </ng-container>
10208
+ </tr>
10209
+ </co-form>
10210
+ </tbody>
10211
+ </table>
10212
+ <co-pagination-bar
10213
+ *ngIf="data?.length > rowsPerPage" class="pagination-bar"
10214
+ [itemsPerPage]="rowsPerPage"
10215
+ [currentPage]="currentPage"
10216
+ [totalItems]="data.length"
10217
+ [autoHide]="true"
10218
+ (previousClick)="goToPreviousPage()"
10219
+ (nextClick)="goToNextPage()"
10220
+ (pageClick)="setCurrentPage($event)">
10221
+ </co-pagination-bar>
10166
10222
  `,
10167
10223
  providers: [FormMasterService],
10168
10224
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -10934,7 +10990,8 @@ SimpleGridModule.decorators = [
10934
10990
  PaginationBarModule,
10935
10991
  ClickoutsideModule,
10936
10992
  ButtonModule,
10937
- CoreComponentsTranslationModule
10993
+ CoreComponentsTranslationModule,
10994
+ IconModule
10938
10995
  ],
10939
10996
  declarations: [
10940
10997
  SimpleGridComponent,