@dsivd/prestations-ng 14.5.10 → 14.5.14-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/bundles/dsivd-prestations-ng.umd.js +436 -23
  3. package/bundles/dsivd-prestations-ng.umd.js.map +1 -1
  4. package/dsivd-prestations-ng-v14.5.14-beta1.tgz +0 -0
  5. package/esm2015/foehn-footer/foehn-footer.component.js +2 -2
  6. package/esm2015/foehn-page/foehn-page.component.js +22 -17
  7. package/esm2015/foehn-table/foehn-table-column-configuration.js +3 -0
  8. package/esm2015/foehn-table/foehn-table-page-change-event.js +3 -0
  9. package/esm2015/foehn-table/foehn-table.component.js +148 -0
  10. package/esm2015/foehn-table/foehn-table.module.js +34 -0
  11. package/esm2015/foehn-table/tableSort.js +3 -0
  12. package/esm2015/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.js +164 -0
  13. package/esm2015/foehn-upload/foehn-picture-upload/foehn-picture-upload.module.js +42 -0
  14. package/esm2015/index.js +10 -1
  15. package/esm2015/sdk-dictionary/default-dictionary.js +9 -2
  16. package/fesm2015/dsivd-prestations-ng.js +393 -19
  17. package/fesm2015/dsivd-prestations-ng.js.map +1 -1
  18. package/foehn-table/foehn-table-column-configuration.d.ts +8 -0
  19. package/foehn-table/foehn-table-page-change-event.d.ts +5 -0
  20. package/foehn-table/foehn-table.component.d.ts +33 -0
  21. package/foehn-table/foehn-table.module.d.ts +11 -0
  22. package/foehn-table/tableSort.d.ts +4 -0
  23. package/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.d.ts +39 -0
  24. package/foehn-upload/foehn-picture-upload/foehn-picture-upload.module.d.ts +13 -0
  25. package/index.d.ts +7 -0
  26. package/package.json +2 -1
  27. package/dsivd-prestations-ng-v14.5.10.tgz +0 -0
package/CHANGELOG.md CHANGED
@@ -26,6 +26,41 @@ A change is considered **breaking** if you have to change your code or update yo
26
26
 
27
27
  ---
28
28
 
29
+ ## [14.5.14]
30
+
31
+ ### Added
32
+
33
+ - [foehn-table.module.ts](projects/prestations-ng/src/foehn-table/foehn-table.module.ts)
34
+ - [foehn-table.component.ts](projects/prestations-ng/src/foehn-table/foehn-table.component.ts)
35
+ - [foehn-table.component.html](projects/prestations-ng/src/foehn-table/foehn-table.component.html)
36
+ - added a paginated table
37
+ - for examples, see related page in the devtool (https://dsi-vd.github.io/prestations-ng/list#foehn_table)
38
+
39
+ ## [14.5.13]
40
+
41
+ ### Added
42
+
43
+ - [foehn-picture-upload.module.ts](projects/prestations-ng/src/foehn-upload/foehn-picture-upload/foehn-picture-upload.module.ts)
44
+ - [foehn-picture-upload.component.ts](projects/prestations-ng/src/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.ts)
45
+ - [foehn-picture-upload.component.html](projects/prestations-ng/src/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.html)
46
+ - added a picture uploader that allows the user to crop the uploaded picture
47
+ - requires `ngx-image-cropper@~5.0.0`
48
+ - for examples, see related page in the devtool (https://dsi-vd.github.io/prestations-ng/upload#foehn_picture_upload)
49
+
50
+ ## [14.5.12]
51
+
52
+ ### Fixed
53
+
54
+ - [foehn-footer.component.ts](projects/prestations-ng/src/foehn-footer/foehn-footer.component.ts)
55
+ - Fixed "SecurityBestPracticeLink" URL
56
+
57
+ ## [14.5.11]
58
+
59
+ ### Fixed
60
+
61
+ - [foehn-page.component.html](projects/prestations-ng/src/foehn-page/foehn-page.component.html)
62
+ - do not try to display login messages when `neverConnected` is `true`
63
+
29
64
  ## [14.5.10]
30
65
 
31
66
  ### Removed
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/router'), require('@angular/common'), require('@angular/forms'), require('@fortawesome/free-solid-svg-icons'), require('@fortawesome/angular-fontawesome'), require('@angular/platform-browser'), require('@angular/cdk/a11y'), require('@fortawesome/free-regular-svg-icons'), require('core-js/modules/es.array.includes'), require('@angular/cdk/scrolling'), require('@angular/common/locales/fr'), require('dayjs'), require('dayjs/plugin/isToday'), require('iban'), require('dayjs/plugin/localeData')) :
3
- typeof define === 'function' && define.amd ? define('@dsivd/prestations-ng', ['exports', '@angular/core', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/router', '@angular/common', '@angular/forms', '@fortawesome/free-solid-svg-icons', '@fortawesome/angular-fontawesome', '@angular/platform-browser', '@angular/cdk/a11y', '@fortawesome/free-regular-svg-icons', 'core-js/modules/es.array.includes', '@angular/cdk/scrolling', '@angular/common/locales/fr', 'dayjs', 'dayjs/plugin/isToday', 'iban', 'dayjs/plugin/localeData'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.dsivd = global.dsivd || {}, global.dsivd['prestations-ng'] = {}), global.ng.core, global.ng.common.http, global.rxjs, global.rxjs.operators, global.ng.router, global.ng.common, global.ng.forms, global['@fortawesome/free-solid-svg-icons'], global['@fortawesome/angular-fontawesome'], global.ng.platformBrowser, global.ng.cdk.a11y, global['@fortawesome/free-regular-svg-icons'], null, global.ng.cdk.scrolling, global.ng.common.locales.fr, global.dayjs, global['dayjs/plugin/isToday'], global.iban, global['dayjs/plugin/localeData']));
5
- }(this, (function (exports, i0, i1, rxjs, operators, i1$1, i3, i4, freeSolidSvgIcons, i1$2, i1$3, i2, freeRegularSvgIcons, es_array_includes, i3$1, localeFr, dayjs, isToday, iban, localeData) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/router'), require('@angular/common'), require('@angular/forms'), require('@fortawesome/free-solid-svg-icons'), require('@fortawesome/angular-fontawesome'), require('@angular/platform-browser'), require('@angular/cdk/a11y'), require('@fortawesome/free-regular-svg-icons'), require('core-js/modules/es.array.includes'), require('@angular/cdk/scrolling'), require('@angular/common/locales/fr'), require('dayjs'), require('dayjs/plugin/isToday'), require('ngx-image-cropper'), require('iban'), require('dayjs/plugin/localeData')) :
3
+ typeof define === 'function' && define.amd ? define('@dsivd/prestations-ng', ['exports', '@angular/core', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/router', '@angular/common', '@angular/forms', '@fortawesome/free-solid-svg-icons', '@fortawesome/angular-fontawesome', '@angular/platform-browser', '@angular/cdk/a11y', '@fortawesome/free-regular-svg-icons', 'core-js/modules/es.array.includes', '@angular/cdk/scrolling', '@angular/common/locales/fr', 'dayjs', 'dayjs/plugin/isToday', 'ngx-image-cropper', 'iban', 'dayjs/plugin/localeData'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.dsivd = global.dsivd || {}, global.dsivd['prestations-ng'] = {}), global.ng.core, global.ng.common.http, global.rxjs, global.rxjs.operators, global.ng.router, global.ng.common, global.ng.forms, global['@fortawesome/free-solid-svg-icons'], global['@fortawesome/angular-fontawesome'], global.ng.platformBrowser, global.ng.cdk.a11y, global['@fortawesome/free-regular-svg-icons'], null, global.ng.cdk.scrolling, global.ng.common.locales.fr, global.dayjs, global['dayjs/plugin/isToday'], global['ngx-image-cropper'], global.iban, global['dayjs/plugin/localeData']));
5
+ }(this, (function (exports, i0, i1, rxjs, operators, i1$1, i3, i4, freeSolidSvgIcons, i1$2, i1$3, i2, freeRegularSvgIcons, es_array_includes, i3$1, localeFr, dayjs, isToday, i5, iban, localeData) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -38,6 +38,7 @@
38
38
  var localeFr__default = /*#__PURE__*/_interopDefaultLegacy(localeFr);
39
39
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
40
40
  var isToday__default = /*#__PURE__*/_interopDefaultLegacy(isToday);
41
+ var i5__namespace = /*#__PURE__*/_interopNamespace(i5);
41
42
  var iban__namespace = /*#__PURE__*/_interopNamespace(iban);
42
43
  var localeData__default = /*#__PURE__*/_interopDefaultLegacy(localeData);
43
44
 
@@ -1903,7 +1904,14 @@
1903
1904
  '(fichier au format pdf), vous devez demander la prestation en étant connecté au portail sécurisé.',
1904
1905
  'use-login.text': "Cette prestation est aussi utilisable au travers de l'espace sécurisé qui vous " +
1905
1906
  "permet de pré-remplir le formulaire et de suivre l'avancement de traitement de la demande.",
1906
- 'use-login.button.text': 'Connectez-vous'
1907
+ 'use-login.button.text': 'Connectez-vous',
1908
+ 'foehn-picture-upload.choose-button-label': 'Choisissez une photo',
1909
+ 'foehn-picture-upload.loading-label': 'Chargement...',
1910
+ 'foehn-picture-upload.loading-failure-label': 'Impossible de charger la photo sélectionnée',
1911
+ 'foehn-picture-upload.validate-selection-label': 'Valider la sélection',
1912
+ 'foehn-picture-upload.cancel-selection-label': 'Annuler',
1913
+ 'foehn-picture-upload.selection-not-validated-label': 'Merci de valider votre sélection',
1914
+ 'foehn-picture-upload.delete-picture-label': 'Supprimer'
1907
1915
  };
1908
1916
 
1909
1917
  var DICTIONARY_BASE_URL = 'api/dictionary';
@@ -5386,7 +5394,7 @@
5386
5394
 
5387
5395
  var GUIDE_URL = 'https://www.vd.ch/index.php?id=67827';
5388
5396
  var TERM_OF_USE_URL = 'https://www.vd.ch/index.php?id=2015321';
5389
- var SECURITY_BEST_PRACTICE_URL = 'https://www.vd.ch/securite-protection-donnees/';
5397
+ var SECURITY_BEST_PRACTICE_URL = 'https://www.vd.ch/index.php?id=2015320';
5390
5398
  var FoehnFooterComponent = /** @class */ (function () {
5391
5399
  function FoehnFooterComponent(applicationInfoService, gesdemEventService, gesdemService) {
5392
5400
  /**
@@ -5804,23 +5812,28 @@
5804
5812
  return false;
5805
5813
  }));
5806
5814
  var formInitializationObservable = rxjs.merge(rxjs.of(undefined), this.gesdemEventService.formInitializationObservable());
5807
- this.displayLoginMessages = rxjs.combineLatest([
5808
- formInitializationObservable,
5809
- this.sessionInfo.data,
5810
- this.applicationInfoService.currentEtapeInfo
5811
- ]).pipe(operators.debounceTime(0), // without debounceTime, the outcome is less effective...
5812
- operators.map(function (_a) {
5813
- var _b = __read(_a, 3), formInitialization = _b[0], sessionInfoData = _b[1], currentEtapeInfo = _b[2];
5814
- var isConnectedCyberOrIam = !!sessionInfoData;
5815
- var isLastPage = _this.foehnNavigationService.isLastFormPage();
5816
- if (isConnectedCyberOrIam ||
5817
- !currentEtapeInfo.deployeeCyber ||
5818
- !!formInitialization ||
5819
- isLastPage) {
5820
- return new DisplayLoginMessagesData(false, false);
5821
- }
5822
- return new DisplayLoginMessagesData(currentEtapeInfo === null || currentEtapeInfo === void 0 ? void 0 : currentEtapeInfo.decisionElectroniqueAvailable, true);
5823
- }));
5815
+ if (this.neverConnected) {
5816
+ this.displayLoginMessages = rxjs.of(new DisplayLoginMessagesData(false, false));
5817
+ }
5818
+ else {
5819
+ this.displayLoginMessages = rxjs.combineLatest([
5820
+ formInitializationObservable,
5821
+ this.sessionInfo.data,
5822
+ this.applicationInfoService.currentEtapeInfo
5823
+ ]).pipe(operators.debounceTime(0), // without debounceTime, the outcome is less effective...
5824
+ operators.map(function (_a) {
5825
+ var _b = __read(_a, 3), formInitialization = _b[0], sessionInfoData = _b[1], currentEtapeInfo = _b[2];
5826
+ var isConnectedCyberOrIam = !!sessionInfoData;
5827
+ var isLastPage = _this.foehnNavigationService.isLastFormPage();
5828
+ if (isConnectedCyberOrIam ||
5829
+ !currentEtapeInfo.deployeeCyber ||
5830
+ !!formInitialization ||
5831
+ isLastPage) {
5832
+ return new DisplayLoginMessagesData(false, false);
5833
+ }
5834
+ return new DisplayLoginMessagesData(currentEtapeInfo === null || currentEtapeInfo === void 0 ? void 0 : currentEtapeInfo.decisionElectroniqueAvailable, true);
5835
+ }));
5836
+ }
5824
5837
  };
5825
5838
  FoehnPageComponent.prototype.ngOnChanges = function (changes) {
5826
5839
  var etapeIdChange = changes.etapeId;
@@ -9699,6 +9712,199 @@
9699
9712
  return PageChangeEvent;
9700
9713
  }());
9701
9714
 
9715
+ var hasInputChanged = function (change) { return !(!change ||
9716
+ !change.currentValue ||
9717
+ change.previousValue === change.currentValue); };
9718
+ var FoehnTableComponent = /** @class */ (function () {
9719
+ function FoehnTableComponent() {
9720
+ this.itemsPerPage = 10;
9721
+ this.id = 'foehn-table';
9722
+ this.previousLabel = 'Précédent';
9723
+ this.nextLabel = 'Suivant';
9724
+ this.pageChange = new i0.EventEmitter();
9725
+ this.sortChange = new i0.EventEmitter();
9726
+ this.currentPage = 1;
9727
+ this.filteredList = [];
9728
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
9729
+ this.trackByFn = function (index, item) { return index; };
9730
+ }
9731
+ Object.defineProperty(FoehnTableComponent.prototype, "list", {
9732
+ set: function (list) {
9733
+ this._list = list;
9734
+ },
9735
+ enumerable: false,
9736
+ configurable: true
9737
+ });
9738
+ FoehnTableComponent.prototype.ngOnChanges = function (changes) {
9739
+ var itemsPerPageChange = changes.itemsPerPage;
9740
+ var listChange = changes.list;
9741
+ var fixedPageCountChange = changes.fixedPageCount;
9742
+ if (!hasInputChanged(itemsPerPageChange) &&
9743
+ !hasInputChanged(listChange) &&
9744
+ !hasInputChanged(fixedPageCountChange)) {
9745
+ return;
9746
+ }
9747
+ this.buildFilteredList();
9748
+ };
9749
+ FoehnTableComponent.prototype.previousPage = function () {
9750
+ this.currentPage = this.currentPage - 1;
9751
+ this.buildFilteredList();
9752
+ this.pageChange.next({
9753
+ previousPage: this.currentPage + 1,
9754
+ currentPage: this.currentPage,
9755
+ pageCount: this.pagesCount()
9756
+ });
9757
+ };
9758
+ FoehnTableComponent.prototype.hasPreviousPage = function () {
9759
+ return this.currentPage > 1;
9760
+ };
9761
+ FoehnTableComponent.prototype.nextPage = function () {
9762
+ this.currentPage = this.currentPage + 1;
9763
+ this.buildFilteredList();
9764
+ this.pageChange.next({
9765
+ previousPage: this.currentPage - 1,
9766
+ currentPage: this.currentPage,
9767
+ pageCount: this.pagesCount()
9768
+ });
9769
+ };
9770
+ FoehnTableComponent.prototype.hasNextPage = function () {
9771
+ return this.currentPage < this.pagesCount();
9772
+ };
9773
+ FoehnTableComponent.prototype.showPage = function (page, emitPageChangeEvent) {
9774
+ if (emitPageChangeEvent === void 0) { emitPageChangeEvent = false; }
9775
+ if (this.currentPage === page) {
9776
+ return;
9777
+ }
9778
+ var previousPage = this.currentPage;
9779
+ this.currentPage = page;
9780
+ this.buildFilteredList();
9781
+ if (emitPageChangeEvent) {
9782
+ this.pageChange.next({
9783
+ previousPage: previousPage,
9784
+ currentPage: this.currentPage,
9785
+ pageCount: this.pagesCount()
9786
+ });
9787
+ }
9788
+ };
9789
+ FoehnTableComponent.prototype.pagesCount = function () {
9790
+ if (!!this.fixedPageCount) {
9791
+ return this.fixedPageCount;
9792
+ }
9793
+ return this._list
9794
+ ? Math.ceil(this._list.length / this.itemsPerPage)
9795
+ : 0;
9796
+ };
9797
+ FoehnTableComponent.prototype.triggerSort = function (sortAttribute) {
9798
+ var sortDirection = 'DESC';
9799
+ if (this.sort.sortAttribute === sortAttribute) {
9800
+ sortDirection = this.sort.sortDirection === 'DESC' ? 'ASC' : 'DESC';
9801
+ }
9802
+ this.sortChange.next({
9803
+ sortDirection: sortDirection,
9804
+ sortAttribute: sortAttribute
9805
+ });
9806
+ };
9807
+ FoehnTableComponent.prototype.buildFilteredList = function () {
9808
+ if (!!this.fixedPageCount) {
9809
+ this.filteredList = this._list;
9810
+ return;
9811
+ }
9812
+ var currentPageExists = (this.currentPage - 1) * this.itemsPerPage <= this._list.length;
9813
+ if (!currentPageExists) {
9814
+ this.currentPage = 1;
9815
+ }
9816
+ var start = (this.currentPage - 1) * this.itemsPerPage;
9817
+ this.filteredList = this._list
9818
+ ? this._list.slice(start, start + this.itemsPerPage)
9819
+ : [];
9820
+ };
9821
+ return FoehnTableComponent;
9822
+ }());
9823
+ FoehnTableComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnTableComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
9824
+ FoehnTableComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnTableComponent, selector: "foehn-table", inputs: { itemsPerPage: "itemsPerPage", id: "id", previousLabel: "previousLabel", nextLabel: "nextLabel", totalElements: "totalElements", fixedPageCount: "fixedPageCount", columnsConfiguration: "columnsConfiguration", sort: "sort", trackByFn: "trackByFn", list: "list" }, outputs: { pageChange: "pageChange", sortChange: "sortChange" }, usesOnChanges: true, ngImport: i0__namespace, template: "<div class=\"row\" [id]=\"id\">\n <div class=\"col-12\">\n <h2 *ngIf=\"!!totalElements && totalElements === 1\">\n {{ 'list.search-criteria.totalElements.1' | fromDictionary }}\n </h2>\n <h2 *ngIf=\"!!totalElements && totalElements !== 1\">\n {{\n 'list.search-criteria.totalElements'\n | fromDictionary: { total: totalElements.toString() }\n }}\n </h2>\n </div>\n\n <div class=\"col-12 table-responsive\">\n <table class=\"table table-hover\">\n <thead class=\"vd-bg-pattern-bars-gray\">\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let col of columnsConfiguration\"\n [id]=\"col.id\"\n >\n <ng-container *ngIf=\"!col.sortAttribute\">\n <span\n [innerHTML]=\"\n col.columnLabelKey | fromDictionary\n \"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"!!col.sortAttribute\">\n <a\n href=\"#\"\n class=\"vd-text-thin\"\n (click)=\"\n $event.preventDefault();\n triggerSort(col.sortAttribute)\n \"\n [title]=\"\n 'Trier par ' +\n (col.columnLabelKey | fromDictionary)\n \"\n >\n <span\n [innerHTML]=\"\n col.columnLabelKey | fromDictionary\n \"\n ></span>\n <ng-container\n *ngIf=\"\n sort.sortAttribute === col.sortAttribute\n \"\n >\n <span\n class=\"ml-3\"\n *ngIf=\"sort.sortDirection === 'ASC'\"\n >\n <foehn-icon-chevron-up></foehn-icon-chevron-up>\n </span>\n <span\n class=\"ml-3\"\n *ngIf=\"sort.sortDirection === 'DESC'\"\n >\n <foehn-icon-chevron-down></foehn-icon-chevron-down>\n </span>\n </ng-container>\n </a>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"\n let item of filteredList;\n let index = index;\n trackBy: trackByFn\n \"\n >\n <td\n *ngFor=\"let col of columnsConfiguration\"\n [id]=\"col.id + '-' + index\"\n >\n <ng-container *ngIf=\"!!col.isImportant\">\n <span\n *ngIf=\"col.isImportant(item)\"\n class=\"cell-vertical-align-middle\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n style=\"color: var(--red)\"\n fill=\"currentColor\"\n class=\"bi bi-exclamation\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.553.553 0 0 1-1.1 0L7.1 4.995z\"\n />\n </svg>\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!col.routerLinkGetter\">\n <span\n [innerHTML]=\"col.valueGetter(item)\"\n class=\"cell-vertical-align-middle\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"!!col.routerLinkGetter\">\n <a\n [routerLink]=\"col.routerLinkGetter(item)\"\n queryParamsHandling=\"merge\"\n class=\"cell-vertical-align-middle\"\n >\n <span\n [innerHTML]=\"col.valueGetter(item)\"\n ></span>\n </a>\n </ng-container>\n </td>\n </tr>\n <tr *ngIf=\"!filteredList.length\">\n <td [colSpan]=\"columnsConfiguration.length\">\n <div class=\"w-100 text-center\">Aucun r\u00E9sultat</div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"row d-flex justify-content-between p-1\">\n <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-6\">\n <nav\n class=\"vd-pagination\"\n aria-label=\"Pagination\"\n *ngIf=\"hasPreviousPage()\"\n >\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n >\n <button\n class=\"btn-link vd-pagination__link btn-no-extra vd-pagination__link-reset\"\n (click)=\"previousPage()\"\n >\n <span class=\"vd-pagination__title\">\n <foehn-icon-chevron-left></foehn-icon-chevron-left>\n {{ previousLabel }}\n </span>\n <span class=\"sr-only\">:</span>\n <span class=\"vd-pagination__label\">\n {{ currentPage - 1 }} sur {{ pagesCount() }}\n </span>\n </button>\n </li>\n </ul>\n </nav>\n </div>\n\n <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-6\">\n <nav\n class=\"vd-pagination\"\n aria-label=\"Pagination\"\n *ngIf=\"hasNextPage()\"\n >\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n >\n <button\n class=\"btn-link vd-pagination__link btn-no-extra vd-pagination__link-reset\"\n (click)=\"nextPage()\"\n >\n <span class=\"vd-pagination__title\">\n {{ nextLabel }}\n <foehn-icon-chevron-right></foehn-icon-chevron-right>\n </span>\n <span class=\"sr-only\">:</span>\n <span class=\"vd-pagination__label\">\n {{ currentPage + 1 }} sur {{ pagesCount() }}\n </span>\n </button>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n</div>\n", styles: [".btn-no-extra{padding:0;border:none;font-weight:400;-webkit-text-decoration-line:none;text-decoration-line:none}.vd-pagination__link-reset{background:none;border:none;font-weight:inherit;-webkit-text-decoration-line:none;text-decoration-line:none;text-align:inherit;cursor:pointer}.vd-pagination__link-reset:focus{background-color:#ffbf47}.cell-vertical-align-middle{vertical-align:middle}\n"], components: [{ type: FoehnIconChevronUpComponent, selector: "foehn-icon-chevron-up" }, { type: FoehnIconChevronDownComponent, selector: "foehn-icon-chevron-down" }, { type: FoehnIconChevronLeftComponent, selector: "foehn-icon-chevron-left" }, { type: FoehnIconChevronRightComponent, selector: "foehn-icon-chevron-right" }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1__namespace$1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
9825
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnTableComponent, decorators: [{
9826
+ type: i0.Component,
9827
+ args: [{
9828
+ selector: 'foehn-table',
9829
+ templateUrl: './foehn-table.component.html',
9830
+ styleUrls: ['./foehn-table.component.css']
9831
+ }]
9832
+ }], propDecorators: { itemsPerPage: [{
9833
+ type: i0.Input
9834
+ }], id: [{
9835
+ type: i0.Input
9836
+ }], previousLabel: [{
9837
+ type: i0.Input
9838
+ }], nextLabel: [{
9839
+ type: i0.Input
9840
+ }], totalElements: [{
9841
+ type: i0.Input
9842
+ }], fixedPageCount: [{
9843
+ type: i0.Input
9844
+ }], columnsConfiguration: [{
9845
+ type: i0.Input
9846
+ }], pageChange: [{
9847
+ type: i0.Output
9848
+ }], sort: [{
9849
+ type: i0.Input
9850
+ }], sortChange: [{
9851
+ type: i0.Output
9852
+ }],
9853
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
9854
+ trackByFn: [{
9855
+ type: i0.Input
9856
+ }], list: [{
9857
+ type: i0.Input
9858
+ }] } });
9859
+
9860
+ var FoehnTableModule = /** @class */ (function () {
9861
+ function FoehnTableModule() {
9862
+ }
9863
+ return FoehnTableModule;
9864
+ }());
9865
+ FoehnTableModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnTableModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
9866
+ FoehnTableModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnTableModule, declarations: [FoehnTableComponent], imports: [i3.CommonModule,
9867
+ FoehnIconsModule,
9868
+ SdkDictionaryModule,
9869
+ i1$1.RouterModule], exports: [FoehnTableComponent] });
9870
+ FoehnTableModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnTableModule, imports: [[
9871
+ i3.CommonModule,
9872
+ FoehnIconsModule,
9873
+ SdkDictionaryModule,
9874
+ i1$1.RouterModule
9875
+ ]] });
9876
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnTableModule, decorators: [{
9877
+ type: i0.NgModule,
9878
+ args: [{
9879
+ imports: [
9880
+ i3.CommonModule,
9881
+ FoehnIconsModule,
9882
+ SdkDictionaryModule,
9883
+ i1$1.RouterModule
9884
+ ],
9885
+ declarations: [FoehnTableComponent],
9886
+ exports: [FoehnTableComponent]
9887
+ }]
9888
+ }] });
9889
+
9890
+ var FoehnTableColumnConfiguration = /** @class */ (function () {
9891
+ function FoehnTableColumnConfiguration() {
9892
+ }
9893
+ return FoehnTableColumnConfiguration;
9894
+ }());
9895
+
9896
+ var FoehnTablePageChangeEvent = /** @class */ (function () {
9897
+ function FoehnTablePageChangeEvent() {
9898
+ }
9899
+ return FoehnTablePageChangeEvent;
9900
+ }());
9901
+
9902
+ var TableSort = /** @class */ (function () {
9903
+ function TableSort() {
9904
+ }
9905
+ return TableSort;
9906
+ }());
9907
+
9702
9908
  var RedirectComponent = /** @class */ (function () {
9703
9909
  function RedirectComponent(iamInterceptor) {
9704
9910
  var _this = this;
@@ -10922,6 +11128,206 @@
10922
11128
  return BoDocumentsWithErrors;
10923
11129
  }());
10924
11130
 
11131
+ var blobToFile = function (blobData, fileName) {
11132
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11133
+ var blob = blobData;
11134
+ blob.name = fileName;
11135
+ return blob;
11136
+ };
11137
+ var convertBase64UrlToFile = function (croppedImageasBase64Url, filename) {
11138
+ var arr = croppedImageasBase64Url.split(',');
11139
+ var mime = arr[0].match(/:(.*?);/)[1];
11140
+ var bstr = atob(arr[1]);
11141
+ var n = bstr.length;
11142
+ var u8arr = new Uint8Array(n);
11143
+ while (n--) {
11144
+ u8arr[n] = bstr.charCodeAt(n);
11145
+ }
11146
+ if (!navigator.msSaveBlob) {
11147
+ // detect if not Edge
11148
+ return new File([u8arr], filename, { type: mime });
11149
+ }
11150
+ else {
11151
+ // Edge support the FileAPI but not the File constructor.
11152
+ return blobToFile(new Blob([u8arr], { type: mime }), filename);
11153
+ }
11154
+ };
11155
+ var FoehnPictureUploadComponent = /** @class */ (function (_super) {
11156
+ __extends(FoehnPictureUploadComponent, _super);
11157
+ function FoehnPictureUploadComponent(growlService, uploadService, dictionaryService) {
11158
+ var _this = _super.call(this) || this;
11159
+ _this.growlService = growlService;
11160
+ _this.uploadService = uploadService;
11161
+ _this.dictionaryService = dictionaryService;
11162
+ _this.baseUrl = 'api/document';
11163
+ _this.croppedPictureFilename = 'photo.png';
11164
+ _this.resizeToWidth = 300;
11165
+ _this.resizeToHeight = 0;
11166
+ _this.loading = false;
11167
+ return _this;
11168
+ }
11169
+ FoehnPictureUploadComponent.prototype.ngOnInit = function () {
11170
+ var _this = this;
11171
+ _super.prototype.ngOnInit.call(this);
11172
+ this.currentLanguageSubscription = this.dictionaryService
11173
+ .getCurrentLanguageCode()
11174
+ .pipe(operators.distinctUntilChanged())
11175
+ .subscribe(function (language) {
11176
+ _this.currentLanguage = language;
11177
+ });
11178
+ };
11179
+ FoehnPictureUploadComponent.prototype.onPictureSelection = function (imgEvent) {
11180
+ this.refreshErrors([[], true]);
11181
+ this.pictureToCrop = imgEvent;
11182
+ this.loading = true;
11183
+ };
11184
+ FoehnPictureUploadComponent.prototype.onPictureSelectionFailed = function () {
11185
+ var errors = [
11186
+ {
11187
+ name: this.name,
11188
+ code: 'LoadingFailure',
11189
+ message: this.dictionaryService.getKeySync('foehn-picture-upload.loading-failure-label')
11190
+ }
11191
+ ];
11192
+ this.refreshErrors([errors, true]);
11193
+ this.resetPictureSelection();
11194
+ };
11195
+ FoehnPictureUploadComponent.prototype.onImageCropped = function (croppedEvent) {
11196
+ this.croppedPictureAsBase64Url = croppedEvent.base64;
11197
+ };
11198
+ FoehnPictureUploadComponent.prototype.resetPictureSelection = function () {
11199
+ this.croppedPictureAsBase64Url = null;
11200
+ this.pictureToCrop = null;
11201
+ this.loading = false;
11202
+ };
11203
+ FoehnPictureUploadComponent.prototype.savePicture = function () {
11204
+ var _this = this;
11205
+ this.markAsPristine();
11206
+ var photo = convertBase64UrlToFile(this.croppedPictureAsBase64Url, this.croppedPictureFilename);
11207
+ this.uploadService
11208
+ .uploadDocuments(this.baseUrl, this.name, this.label, [photo], this.key, false, this.currentLanguage)
11209
+ .pipe(operators.filter(function (result) { return !!result; }))
11210
+ .subscribe(function (_a) {
11211
+ var documents = _a.documents, errors = _a.errors;
11212
+ _this.resetPictureSelection();
11213
+ if (!!documents.length) {
11214
+ _this.markAsDirty();
11215
+ _this.model = documents;
11216
+ _this.refreshErrors([[], true]);
11217
+ }
11218
+ else {
11219
+ _this.model = [];
11220
+ _this.refreshErrors([errors, true]);
11221
+ }
11222
+ });
11223
+ };
11224
+ FoehnPictureUploadComponent.prototype.deleteFile = function () {
11225
+ var _this = this;
11226
+ this.uploadService
11227
+ .deleteDocument(this.baseUrl, this.model[0])
11228
+ .subscribe(function () {
11229
+ _this.model = [];
11230
+ _this.resetPictureSelection();
11231
+ });
11232
+ };
11233
+ FoehnPictureUploadComponent.prototype.getDownloadUrl = function () {
11234
+ return this.uploadService.getDownloadUrl(this.baseUrl, this.model[0]);
11235
+ };
11236
+ Object.defineProperty(FoehnPictureUploadComponent.prototype, "hasPicture", {
11237
+ get: function () {
11238
+ return this.model && this.model.length && !!this.model[0].reference;
11239
+ },
11240
+ enumerable: false,
11241
+ configurable: true
11242
+ });
11243
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11244
+ FoehnPictureUploadComponent.prototype.refreshErrors = function (results) {
11245
+ var _this = this;
11246
+ var errors = results[0];
11247
+ var isInSelectionMode = !this.hasPicture && !!this.croppedPictureAsBase64Url;
11248
+ if (isInSelectionMode) {
11249
+ var notNullError = errors.find(function (e) { return e.name === _this.name && e.code === 'NotEmpty'; });
11250
+ if (notNullError) {
11251
+ notNullError.message = this.dictionaryService.getKeySync('foehn-picture-upload.selection-not-validated-label');
11252
+ }
11253
+ }
11254
+ _super.prototype.refreshErrors.call(this, results);
11255
+ };
11256
+ return FoehnPictureUploadComponent;
11257
+ }(FoehnInputComponent));
11258
+ FoehnPictureUploadComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadComponent, deps: [{ token: GrowlBrokerService }, { token: MultiUploadService }, { token: SdkDictionaryService }], target: i0__namespace.ɵɵFactoryTarget.Component });
11259
+ FoehnPictureUploadComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnPictureUploadComponent, selector: "foehn-picture-upload", inputs: { name: "name", key: "key", label: "label", baseUrl: "baseUrl", croppedPictureFilename: "croppedPictureFilename", resizeToWidth: "resizeToWidth", resizeToHeight: "resizeToHeight" }, providers: [
11260
+ {
11261
+ provide: FoehnInputComponent,
11262
+ useExisting: i0.forwardRef(function () { return FoehnPictureUploadComponent; }),
11263
+ multi: true
11264
+ }
11265
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<div\n [attr.id]=\"buildId('Container')\"\n [class.has-danger]=\"hasErrors()\"\n [class.vd-form-group-danger]=\"hasErrors()\"\n class=\"form-group clearable-input-form-group\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <input type=\"hidden\" [name]=\"name || label\" [ngModel]=\"model\" />\n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <img\n [id]=\"buildChildId('Picture')\"\n [attr.alt]=\"label\"\n [src]=\"getDownloadUrl()\"\n />\n </div>\n <div class=\"col-md-4\">\n <button\n type=\"button\"\n class=\"btn btn-danger w-100\"\n [attr.id]=\"buildChildId('DeleteButton')\"\n (click)=\"deleteFile()\"\n >\n {{\n 'foehn-picture-upload.delete-picture-label' | fromDictionary\n }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"!hasPicture && !croppedPictureAsBase64Url\">\n <input\n #inputFile\n type=\"file\"\n class=\"form-control-file d-none\"\n [attr.id]=\"name\"\n [attr.accept]=\"'.jpeg,.jpg,.png'\"\n [multiple]=\"false\"\n [name]=\"name\"\n (change)=\"onPictureSelection($event)\"\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary my-2\"\n [attr.id]=\"buildChildId('ChooseButton')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n [disabled]=\"loading\"\n >\n {{ 'foehn-picture-upload.choose-button-label' | fromDictionary }}\n </button>\n </div>\n\n <div *ngIf=\"loading\">\n {{ 'foehn-picture-upload.loading-label' | fromDictionary }}\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <image-cropper\n [id]=\"buildChildId('Cropper')\"\n (cropperReady)=\"loading = false\"\n (imageCropped)=\"onImageCropped($event)\"\n (loadImageFailed)=\"onPictureSelectionFailed()\"\n [aspectRatio]=\"3 / 4\"\n [imageChangedEvent]=\"pictureToCrop\"\n [maintainAspectRatio]=\"true\"\n [resizeToWidth]=\"resizeToWidth\"\n [resizeToHeight]=\"resizeToHeight\"\n [onlyScaleDown]=\"true\"\n format=\"png\"\n ></image-cropper>\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"col-md-4\">\n <div class=\"row mb-3\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [attr.id]=\"buildChildId('SaveButton')\"\n (click)=\"savePicture()\"\n >\n {{\n 'foehn-picture-upload.validate-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n <div class=\"row\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-secondary w-100\"\n [attr.id]=\"buildChildId('CancelButton')\"\n (click)=\"resetPictureSelection()\"\n >\n {{\n 'foehn-picture-upload.cancel-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: i5__namespace.ImageCropperComponent, selector: "image-cropper", inputs: ["format", "transform", "maintainAspectRatio", "aspectRatio", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "cropper", "alignImage", "disabled", "imageChangedEvent", "imageURL", "imageBase64", "imageFile"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
11266
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadComponent, decorators: [{
11267
+ type: i0.Component,
11268
+ args: [{
11269
+ selector: 'foehn-picture-upload',
11270
+ templateUrl: './foehn-picture-upload.component.html',
11271
+ providers: [
11272
+ {
11273
+ provide: FoehnInputComponent,
11274
+ useExisting: i0.forwardRef(function () { return FoehnPictureUploadComponent; }),
11275
+ multi: true
11276
+ }
11277
+ ]
11278
+ }]
11279
+ }], ctorParameters: function () { return [{ type: GrowlBrokerService }, { type: MultiUploadService }, { type: SdkDictionaryService }]; }, propDecorators: { name: [{
11280
+ type: i0.Input
11281
+ }], key: [{
11282
+ type: i0.Input
11283
+ }], label: [{
11284
+ type: i0.Input
11285
+ }], baseUrl: [{
11286
+ type: i0.Input
11287
+ }], croppedPictureFilename: [{
11288
+ type: i0.Input
11289
+ }], resizeToWidth: [{
11290
+ type: i0.Input
11291
+ }], resizeToHeight: [{
11292
+ type: i0.Input
11293
+ }] } });
11294
+
11295
+ var FoehnPictureUploadModule = /** @class */ (function () {
11296
+ function FoehnPictureUploadModule() {
11297
+ }
11298
+ return FoehnPictureUploadModule;
11299
+ }());
11300
+ FoehnPictureUploadModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
11301
+ FoehnPictureUploadModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadModule, declarations: [FoehnPictureUploadComponent], imports: [i3.CommonModule,
11302
+ FoehnIconsModule,
11303
+ FoehnValidationAlertsModule,
11304
+ SdkDictionaryModule,
11305
+ i4.FormsModule,
11306
+ i5.ImageCropperModule], exports: [FoehnPictureUploadComponent] });
11307
+ FoehnPictureUploadModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadModule, imports: [[
11308
+ i3.CommonModule,
11309
+ FoehnIconsModule,
11310
+ FoehnValidationAlertsModule,
11311
+ SdkDictionaryModule,
11312
+ i4.FormsModule,
11313
+ i5.ImageCropperModule
11314
+ ]] });
11315
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0__namespace, type: FoehnPictureUploadModule, decorators: [{
11316
+ type: i0.NgModule,
11317
+ args: [{
11318
+ imports: [
11319
+ i3.CommonModule,
11320
+ FoehnIconsModule,
11321
+ FoehnValidationAlertsModule,
11322
+ SdkDictionaryModule,
11323
+ i4.FormsModule,
11324
+ i5.ImageCropperModule
11325
+ ],
11326
+ declarations: [FoehnPictureUploadComponent],
11327
+ exports: [FoehnPictureUploadComponent]
11328
+ }]
11329
+ }] });
11330
+
10925
11331
  var EPaymentRequest = /** @class */ (function () {
10926
11332
  function EPaymentRequest() {
10927
11333
  }
@@ -12893,6 +13299,8 @@
12893
13299
  exports.FoehnPageModalComponent = FoehnPageModalComponent;
12894
13300
  exports.FoehnPageModule = FoehnPageModule;
12895
13301
  exports.FoehnPageService = FoehnPageService;
13302
+ exports.FoehnPictureUploadComponent = FoehnPictureUploadComponent;
13303
+ exports.FoehnPictureUploadModule = FoehnPictureUploadModule;
12896
13304
  exports.FoehnRadioComponent = FoehnRadioComponent;
12897
13305
  exports.FoehnRecapSectionComponent = FoehnRecapSectionComponent;
12898
13306
  exports.FoehnRecapSectionModule = FoehnRecapSectionModule;
@@ -12900,6 +13308,10 @@
12900
13308
  exports.FoehnRemainingAlertsSummaryModule = FoehnRemainingAlertsSummaryModule;
12901
13309
  exports.FoehnSelectComponent = FoehnSelectComponent;
12902
13310
  exports.FoehnSkipLinkComponent = FoehnSkipLinkComponent;
13311
+ exports.FoehnTableColumnConfiguration = FoehnTableColumnConfiguration;
13312
+ exports.FoehnTableComponent = FoehnTableComponent;
13313
+ exports.FoehnTableModule = FoehnTableModule;
13314
+ exports.FoehnTablePageChangeEvent = FoehnTablePageChangeEvent;
12903
13315
  exports.FoehnTimeComponent = FoehnTimeComponent;
12904
13316
  exports.FoehnUserConnectedAsComponent = FoehnUserConnectedAsComponent;
12905
13317
  exports.FoehnUserConnectedAsModule = FoehnUserConnectedAsModule;
@@ -12964,6 +13376,7 @@
12964
13376
  exports.Street = Street;
12965
13377
  exports.StreetNumber = StreetNumber;
12966
13378
  exports.THOUSANDS_SEPARATOR = THOUSANDS_SEPARATOR;
13379
+ exports.TableSort = TableSort;
12967
13380
  exports.UploaderHelper = UploaderHelper;
12968
13381
  exports.ValidationHandlerService = ValidationHandlerService;
12969
13382