@sebgroup/green-angular 7.2.0-rc.20260113120917716 → 7.2.0-rc.20260113135658639

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 (87) hide show
  1. package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs +10 -10
  2. package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs.map +1 -1
  3. package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs +7 -7
  4. package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs.map +1 -1
  5. package/fesm2022/sebgroup-green-angular-src-lib-button.mjs +7 -7
  6. package/fesm2022/sebgroup-green-angular-src-lib-button.mjs.map +1 -1
  7. package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs +13 -13
  8. package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs.map +1 -1
  9. package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs +7 -7
  10. package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs.map +1 -1
  11. package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs +7 -7
  12. package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs.map +1 -1
  13. package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs +13 -13
  14. package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs.map +1 -1
  15. package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs +7 -7
  16. package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs.map +1 -1
  17. package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs +22 -22
  18. package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs.map +1 -1
  19. package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs +7 -7
  20. package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs.map +1 -1
  21. package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs +7 -7
  22. package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs.map +1 -1
  23. package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs +7 -7
  24. package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs.map +1 -1
  25. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +34 -34
  26. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
  27. package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs +7 -7
  28. package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs.map +1 -1
  29. package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs +7 -7
  30. package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs.map +1 -1
  31. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs +7 -7
  32. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs.map +1 -1
  33. package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs +7 -7
  34. package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs.map +1 -1
  35. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +8 -8
  36. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
  37. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +7 -7
  38. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -1
  39. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +7 -7
  40. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -1
  41. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs +7 -7
  42. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -1
  43. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +7 -7
  44. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -1
  45. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs +7 -7
  46. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -1
  47. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +3 -3
  48. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -1
  49. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +34 -34
  50. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -1
  51. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs +13 -13
  52. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs.map +1 -1
  53. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +26 -26
  54. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
  55. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs +7 -7
  56. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -1
  57. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +14 -14
  58. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -1
  59. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +7 -7
  60. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -1
  61. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +10 -10
  62. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -1
  63. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +7 -7
  64. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
  65. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +16 -16
  66. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
  67. package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs +7 -7
  68. package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs.map +1 -1
  69. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs +13 -13
  70. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -1
  71. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs +7 -7
  72. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -1
  73. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +22 -22
  74. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -1
  75. package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs +10 -10
  76. package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs.map +1 -1
  77. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +7 -7
  78. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
  79. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs +10 -10
  80. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs.map +1 -1
  81. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +7 -7
  82. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -1
  83. package/fesm2022/sebgroup-green-angular-v-angular.mjs +281 -281
  84. package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
  85. package/fesm2022/sebgroup-green-angular.mjs +166 -166
  86. package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
  87. package/package.json +1 -1
@@ -111,10 +111,10 @@ class ValuePipe {
111
111
  }
112
112
  return this.values;
113
113
  }
114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ValuePipe, deps: [{ token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Pipe }); }
115
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ValuePipe, isStandalone: false, name: "value", pure: false }); }
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: ValuePipe, deps: [{ token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Pipe }); }
115
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.9", ngImport: i0, type: ValuePipe, isStandalone: false, name: "value", pure: false }); }
116
116
  }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ValuePipe, decorators: [{
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: ValuePipe, decorators: [{
118
118
  type: Pipe,
119
119
  args: [{
120
120
  name: 'value', pure: false,
@@ -148,10 +148,10 @@ class ValueImpurePipe {
148
148
  }
149
149
  return this.values;
150
150
  }
151
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ValueImpurePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
152
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ValueImpurePipe, isStandalone: true, name: "valueImpure", pure: false }); }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: ValueImpurePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
152
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.9", ngImport: i0, type: ValueImpurePipe, isStandalone: true, name: "valueImpure", pure: false }); }
153
153
  }
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ValueImpurePipe, decorators: [{
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: ValueImpurePipe, decorators: [{
155
155
  type: Pipe,
156
156
  args: [{
157
157
  name: 'valueImpure',
@@ -595,10 +595,10 @@ class NggvDragDropComponent {
595
595
  this.componentState = 'normal';
596
596
  }, 3000);
597
597
  }
598
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvDragDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
599
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: NggvDragDropComponent, isStandalone: false, selector: "nggv-drag-drop", inputs: { thook: "thook", service: "service", accept: "accept", disableRemove: "disableRemove", fileLimit: "fileLimit", multiple: "multiple", list: "list", throttle: "throttle", retryAttempts: "retryAttempts", selectable: "selectable", stateMap: "stateMap", fetchStatuses: "fetchStatuses", errorCodes: "errorCodes" }, outputs: { stateChange: "stateChange", detailsClick: "detailsClick" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" }, properties: { "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "deleteModalRef", first: true, predicate: ["deleteModalRef"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em;overflow-wrap:anywhere}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"], dependencies: [{ kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.NggvDialogComponent, selector: "nggv-dialog", inputs: ["thook", "shown", "initiallyShown", "heading", "title", "content", "autoClose", "payload", "dialogTitleId", "dialogBodyId", "closeModalOnEscape", "closeButtonAriaLabel", "buttons"], outputs: ["nggvCloseEvent", "nggvPositiveEvent", "nggvNeutralEvent", "nggvNegativeEvent", "nggvDangerEvent"], exportAs: ["dialog"] }, { kind: "directive", type: i3.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: ValuePipe, name: "value" }] }); }
598
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: NggvDragDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
599
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.9", type: NggvDragDropComponent, isStandalone: false, selector: "nggv-drag-drop", inputs: { thook: "thook", service: "service", accept: "accept", disableRemove: "disableRemove", fileLimit: "fileLimit", multiple: "multiple", list: "list", throttle: "throttle", retryAttempts: "retryAttempts", selectable: "selectable", stateMap: "stateMap", fetchStatuses: "fetchStatuses", errorCodes: "errorCodes" }, outputs: { stateChange: "stateChange", detailsClick: "detailsClick" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" }, properties: { "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "deleteModalRef", first: true, predicate: ["deleteModalRef"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em;overflow-wrap:anywhere}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"], dependencies: [{ kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.NggvDialogComponent, selector: "nggv-dialog", inputs: ["thook", "shown", "initiallyShown", "heading", "title", "content", "autoClose", "payload", "dialogTitleId", "dialogBodyId", "closeModalOnEscape", "closeButtonAriaLabel", "buttons"], outputs: ["nggvCloseEvent", "nggvPositiveEvent", "nggvNeutralEvent", "nggvNegativeEvent", "nggvDangerEvent"], exportAs: ["dialog"] }, { kind: "directive", type: i3.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: ValuePipe, name: "value" }] }); }
600
600
  }
601
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvDragDropComponent, decorators: [{
601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: NggvDragDropComponent, decorators: [{
602
602
  type: Component,
603
603
  args: [{ selector: 'nggv-drag-drop', standalone: false, template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em;overflow-wrap:anywhere}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"] }]
604
604
  }], propDecorators: { deleteModalRef: [{
@@ -643,13 +643,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
643
643
  }] } });
644
644
 
645
645
  class NggvDragDropModule {
646
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
647
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: NggvDragDropModule, declarations: [ValuePipe, NggvDragDropComponent], imports: [HttpClientModule,
646
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: NggvDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
647
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.9", ngImport: i0, type: NggvDragDropModule, declarations: [ValuePipe, NggvDragDropComponent], imports: [HttpClientModule,
648
648
  TranslocoModule,
649
649
  NggvModalModule,
650
650
  NggCoreWrapperModule,
651
651
  CommonModule], exports: [NggvDragDropComponent] }); }
652
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvDragDropModule, providers: [
652
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: NggvDragDropModule, providers: [
653
653
  {
654
654
  provide: TRANSLOCO_SCOPE,
655
655
  useValue: 'dragDrop',
@@ -660,7 +660,7 @@ class NggvDragDropModule {
660
660
  NggCoreWrapperModule,
661
661
  CommonModule] }); }
662
662
  }
663
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvDragDropModule, decorators: [{
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: NggvDragDropModule, decorators: [{
664
664
  type: NgModule,
665
665
  args: [{
666
666
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"sebgroup-green-angular-src-v-angular-drag-drop.mjs","sources":["../../../../libs/angular/src/v-angular/drag-drop/drag-drop.utils.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.pipes.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.html","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.module.ts","../../../../libs/angular/src/v-angular/drag-drop/sebgroup-green-angular-src-v-angular-drag-drop.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Observable, throwError, timer } from 'rxjs'\nimport { finalize, mergeMap } from 'rxjs/operators'\n\nimport { APIFile, LocalFile } from './drag-drop.models'\n\n/**\n * Helper to extend the base file with {@link APIFile} defaults\n * @param file file base that will be extended with {@link APIFile} defaults\n * @param data extra data to override defaults\n */\nexport const extendFile = (\n file: File | undefined,\n ...data: Array<Partial<Omit<LocalFile, 'raw'> & APIFile>>\n): LocalFile & APIFile => {\n return Object.assign(\n {\n id: file ? btoa(file.name) : '',\n fileName: file ? file.name : 'na',\n status: '',\n statusReasonInformation: null,\n principal: '',\n uploadDate: (file\n ? new Date(file.lastModified)\n : new Date()\n ).toISOString(),\n registrarId: '',\n registrarName: '',\n progress: 0,\n uploadState: 'local',\n uploadRequests: undefined,\n raw: file,\n } as LocalFile & APIFile,\n ...data,\n )\n}\n\n/**\n * Checks if file matches allowed mime types\n * @param type file mime type\n * @param accept allowed mime types\n */\nexport const verifyAccept = (type: string, accept?: string) => {\n if (!accept) return true\n const regex = new RegExp(accept.replace(/\\*/g, '.*').replace(/\\s*,\\s*/g, '|'))\n return regex.test(type)\n}\n\n/**\n * Determines if browser supports drag and drop\n */\nexport const isDragDropAvailable = () => {\n const div = document.createElement('div')\n return (\n ('draggable' in div || ('ondragstart' in div && 'ondrop' in div)) &&\n 'FormData' in window &&\n 'FileReader' in window\n )\n}\n\n/**\n * Pick only specified keys from a given object\n * @param keys keys to pick from a given object\n * @param object to extract keys from\n */\nexport const pick = <T, K extends keyof T>(\n object: T,\n ...keys: K[]\n): Pick<T, K> => {\n const copy: any = {}\n keys.forEach((key) => {\n copy[key] = object[key]\n })\n return copy\n}\n\n/**\n * Will retry running the observable when an error occurs to a maximum limit, increasing delay between executions.\n * @param options specifies number of retries, scaling duration and statuses to exclude\n */\nexport const retryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 1000,\n excludedStatusCodes = [],\n }: {\n maxRetryAttempts?: number\n scalingDuration?: number\n excludedStatusCodes?: number[]\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1\n // if maximum number of retries have been met\n // or response is a status code we don't wish to retry, throw error\n if (\n retryAttempt > maxRetryAttempts ||\n excludedStatusCodes.find((e) => e === error.status)\n ) {\n return throwError(() => error)\n }\n console.warn(\n `Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`,\n )\n return timer(retryAttempt * scalingDuration)\n }),\n finalize(() =>\n console.warn(\n `Failed after ${maxRetryAttempts} retry attempts, standing down.`,\n ),\n ),\n )\n }\n","import {\n inject,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n Pipe,\n PipeTransform,\n} from '@angular/core'\n\n@Pipe({\n name: 'value', pure: false,\n standalone: false\n})\nexport class ValuePipe implements PipeTransform {\n constructor(private readonly differs: KeyValueDiffers) {}\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem((r: KeyValueChangeRecord<K, V>) => {\n this.values.push(r.currentValue)\n })\n }\n return this.values\n }\n}\n\n/**\n * Stand-alone version of existing value pipe.\n *\n * Impure flag needed due to keep track of changes in complex values (such as objects or arrays).\n */\n@Pipe({\n name: 'valueImpure',\n pure: false,\n standalone: true,\n})\nexport class ValueImpurePipe implements PipeTransform {\n private readonly differs = inject(KeyValueDiffers)\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem(\n ({ currentValue }: KeyValueChangeRecord<K, V>) => {\n this.values.push(currentValue)\n },\n )\n }\n return this.values\n }\n}\n","/* eslint-disable no-console */\nimport { HttpEventType } from '@angular/common/http'\nimport {\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { timer } from 'rxjs'\nimport { filter, retryWhen, switchMap, take, tap } from 'rxjs/operators'\n\nimport {\n DialogEvent,\n NggvDialogComponent,\n} from '@sebgroup/green-angular/src/v-angular/modal'\nimport {\n extendFile,\n isDragDropAvailable,\n pick,\n retryStrategy,\n verifyAccept,\n} from './drag-drop.utils'\n\nimport type {\n APIFile,\n EventStateChange,\n FileService,\n LocalFile,\n StateMap,\n UploadState,\n} from './drag-drop.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cloud-upload.js'\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\nimport '@sebgroup/green-core/components/icon/icons/checkmark.js'\n\nexport type DragDropState = 'normal' | 'over' | 'uploading' | 'done'\n\n@Component({\n selector: 'nggv-drag-drop',\n templateUrl: './drag-drop.component.html',\n styleUrls: ['./drag-drop.component.scss'],\n standalone: false\n})\nexport class NggvDragDropComponent implements OnInit, OnDestroy {\n /** @internal */\n @ViewChild('deleteModalRef') deleteModalRef!: NggvDialogComponent\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'drag-drop'\n\n /** Allowing selecting or dropping multiple files. */\n @Input() service: FileService | undefined\n\n /** Mime types allowed. */\n @Input() accept?: string\n\n /** Disables deletion or cancellation during defined states [local | uploading | aborted | uploaded | validating | error | deleted | done]. */\n @Input() disableRemove: UploadState[] = []\n\n /** File size limit in mega bytes. */\n @Input() fileLimit: number = 250 * 1024 * 1024\n\n /** Allowing selecting or dropping multiple files. */\n @Input() multiple = true\n\n /** Determines if list should be shown under upload, disabling list disables multiple upload. */\n @Input() list = true\n\n /** Frequency of requests which to send to the API requesting status updates. */\n @Input() throttle = 5000\n\n /** Maximum number of attempts to request a status update from the API if service is unreachable. */\n @Input() retryAttempts = 5\n\n /** If selection of multiple file should be possible with a checkbox.\n * @experimental work in progress and should not yet be used.\n * @internal\n */\n @Input() selectable = false\n\n /** Allows multiple values from `apiFile.status` to be mapped to a single file upload state. */\n @Input() stateMap: StateMap = {\n local: 'local',\n uploading: 'uploading',\n aborted: 'aborted',\n uploaded: 'uploaded',\n validating: 'validating',\n error: 'error',\n deleted: 'deleted',\n done: 'done',\n }\n\n /** Statuses allowed to be fetch during the initial load. Used to hide \"done\" states from list. */\n @Input() fetchStatuses: string[] = []\n\n /** Statuses allowed be shown when status is \"rejected\". Will fallback to generic message. `null` allows all. */\n @Input() errorCodes: string[] | null = null\n\n /** Event triggered on initialization and every time the \"uploadState\" for a file changes. */\n @Output() stateChange = new EventEmitter<EventStateChange>()\n\n /** Event triggered when view details is clicked. */\n @Output() detailsClick = new EventEmitter<LocalFile & APIFile>()\n\n /** @internal */\n isDragDropAvailable = isDragDropAvailable()\n /** @internal */\n componentState: DragDropState = 'normal'\n /** @internal */\n files: Map<string, LocalFile & APIFile> = new Map()\n /** @internal */\n lastFile: (LocalFile & APIFile) | undefined\n /** @internal */\n selected: string[] = []\n /** @internal */\n loading = false\n /** @internal */\n markedForDeletion: APIFile | undefined\n\n /**\n * Initialize the component and warn if service is not defined. Will also fetch files for the list if enabled.\n */\n ngOnInit() {\n if (!this.service) {\n return console.error(\n 'Drag and drop component will not work without the [service] property defined!',\n )\n }\n\n if (this.list) {\n this.service.fetchFiles(this.fetchStatuses).subscribe((apiFiles) => {\n for (const apiFile of apiFiles) {\n const extendedFile = extendFile(undefined, apiFile, {\n progress: 100,\n uploadState: this.determineUploadState(apiFile.status),\n internalStatusReasonCode: this.fallbackError(\n apiFile.internalStatusReasonCode,\n ),\n })\n this.files.set(extendedFile.id, extendedFile)\n this.stateChange.emit(\n pick(\n extendedFile,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n extendedFile.uploadState === 'uploaded' ||\n extendedFile.uploadState === 'validating'\n ) {\n this.checkValidity(extendedFile, this.throttle)\n }\n }\n })\n }\n }\n\n /** Destroy all event listeners and polling running */\n ngOnDestroy() {\n this.files.forEach((file) => {\n file.uploadRequests?.unsubscribe()\n if (file.uploadState === 'uploading') {\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n }\n })\n }\n\n /** @internal Warn user trying to leave page before all uploads are done. Custom message only works in older browsers. */\n @HostListener('window:beforeunload', ['$event'])\n onBeforeUnload(event: Event) {\n if (!this.allUploadingDone(this.files)) {\n const confirmationMessage = `You still have files uploading, are you sure you want to leave this page?`\n ;((event as any) || (window.event as any)).returnValue =\n confirmationMessage\n return confirmationMessage\n }\n return\n }\n\n /* Drag & Drop Events */\n\n /** @internal Event handler for when a file is held over the drop area */\n onDragEnter(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n // Update the visual state\n this.componentState = 'over'\n }\n\n /** @internal Event handler for when a file leaves the drop area */\n onDragLeave(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n }\n\n /** @internal Event handler for when a file is dropped on the drop area or when `input` files are selected */\n onDrop(event: DragEvent | Event): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n\n let files: FileList | undefined\n\n // Determine if files are from the drop event or input element\n if (event instanceof DragEvent && event.dataTransfer) {\n files = event.dataTransfer.files\n } else if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n files = event.target.files\n }\n\n if (files) {\n const extendedFiles = Array.from(files, (file) => {\n let abort = false\n let statusCode: string | null = null\n // Check if file size is larger than limit\n if (file.size > this.fileLimit) {\n abort = true\n statusCode = 'MFEFHM003'\n }\n // Check if file type is not acceptable\n if (!verifyAccept(file.type, this.accept)) {\n abort = true\n statusCode = 'MFEFHM002'\n }\n // Add default values expected by the API\n const extendedFile = extendFile(file, {\n internalStatusReasonCode: statusCode,\n uploadState: (abort ? 'aborted' : 'local') as UploadState,\n })\n\n // Emit initial local upload event\n this.stateChange.emit({\n uploadState: 'local',\n fileName: extendedFile.fileName,\n })\n\n if (abort) {\n // Emit aborted upload event\n this.stateChange.emit({\n uploadState: 'aborted',\n fileName: extendedFile.fileName,\n status: 'aborted',\n internalStatusReasonCode: statusCode,\n })\n }\n\n return extendedFile\n })\n\n // Append to previous files\n let i = 0\n for (const file of extendedFiles) {\n // If multiple or list is false append only file then break loop\n if ((!this.multiple || !this.list) && i >= 1) break\n this.lastFile = file\n this.files.set(file.id, file)\n i++\n }\n\n // Clear file input so that same file can be uploaded\n if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n event.target.value = ''\n }\n\n this.onSubmit()\n }\n }\n\n /** @internal Event trigger for when delete button is pressed */\n onRemove(id: string, state: UploadState): void {\n // Only allow removal in certain states\n if (!this.service || this.disableRemove.includes(state)) return\n const file = this.files.get(id)\n if (!file) return\n // Skip confirmation for aborted and deleted files\n if (\n file.uploadState === 'error' ||\n file.uploadState === 'aborted' ||\n file.uploadState === 'deleted'\n ) {\n this.onConfirmRemove({ original: undefined, payload: file })\n } else {\n this.markedForDeletion = file\n this.deleteModalRef.open()\n }\n }\n\n /** @internal */\n onConfirmRemove(event: DialogEvent<LocalFile & APIFile>) {\n const { payload: file } = event\n if (!file || !this.service) return\n\n // Abort upload and set local state to aborted to inform user\n switch (file.uploadState) {\n case 'local':\n case 'uploading':\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n break\n\n // Remove file from service then set local state to aborted to inform user\n case 'uploaded':\n case 'validating':\n this.service\n .removeFile(file.id)\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Abort regardless of response from server\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM005'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n })\n break\n\n // Remove file from service then locally for \"completed\" states\n case 'error':\n case 'done':\n ;(this.service.removeFileFor\n ? this.service.removeFileFor(file)\n : this.service.removeFile(file.id)\n )\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Remove regardless of response from server\n this.files.delete(file.id)\n const event = pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n )\n event.uploadState = 'deleted'\n this.stateChange.emit(event)\n })\n break\n\n // Just remove the file locally to clean up\n case 'aborted':\n case 'deleted':\n default:\n this.files.delete(file.id)\n this.stateChange.emit({\n ...pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n uploadState: 'deleted',\n })\n break\n }\n }\n\n /** @internal Event handler for when the files should be uploaded */\n onSubmit() {\n if (!this.files || !this.service) return\n // If list is not enabled update the component state to show progress\n if (!this.list) this.componentState = 'uploading'\n this.loading = true\n this.files.forEach((file) => {\n // Filter out all files that aren't currently considered local\n if (!file.raw || file.uploadState !== 'local') return\n file.uploadRequests = this.service!.uploadFile(file.raw!).subscribe({\n next: (event) => {\n switch (event.type) {\n case HttpEventType.UploadProgress:\n // Update upload progress\n if (file.uploadState !== 'uploading') {\n file.uploadState = 'uploading'\n this.stateChange.emit(pick(file, 'uploadState', 'fileName'))\n }\n file.progress = Math.round(\n (100 * event.loaded) / (event.total || 100),\n )\n file.uploadState = 'uploading'\n break\n\n case HttpEventType.Response:\n if (event.body?.id) {\n // Remove old file id\n this.files.delete(file.id)\n // Update file with information from the API\n Object.assign(file, event.body)\n file.progress = 100\n file.uploadState = this.determineUploadState(file.status)\n // Update with new file id\n this.files.set(file.id, file)\n }\n\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n file.uploadState === 'uploaded' ||\n file.uploadState === 'validating'\n ) {\n this.checkValidity(file, this.throttle)\n } else this.setComponentStateDone()\n this.loading = false\n break\n }\n },\n error: (error) => {\n console.warn(error)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n // todo: wrong\n file.statusReasonInformation = [\n { originatorId: 'local', reason: 'dragDrop.error.MFEFHM001' },\n ]\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n this.loading = false\n },\n })\n })\n }\n\n /**\n * @internal\n * Using the state map convert `apiFile.state` to one of {@link UploadState}\n * @param apiState the state given by the file to be used for mapping\n */\n determineUploadState(apiState: string): UploadState {\n // Reverse so that later states override earlier\n const stateEntries = Object.entries(this.stateMap).reverse()\n for (const [uploadState, apiStates] of stateEntries) {\n if (this.uploadStateIsArray(apiStates)) {\n if (apiStates.includes(apiState)) return uploadState as any\n } else {\n if (apiStates === apiState) return uploadState as any\n }\n }\n return 'error'\n }\n\n /** @internal */\n uploadStateIsArray(state: string | string[]): state is string[] {\n return Array.isArray(state)\n }\n\n /** @internal used for translation templating parameters */\n translateParams(file: LocalFile & APIFile) {\n return { ...file, fileLimit: (this.fileLimit / 1024 / 1024).toFixed(3) }\n }\n\n /**\n * Poll the status endpoint to determine when file is valid\n * @param file file used to check state and update\n * @param delay how long each interval should wait before sending a request\n */\n private checkValidity(file: LocalFile & APIFile, delay: number) {\n if (!this.service) return\n file.uploadRequests = timer(0, delay)\n .pipe(\n switchMap(() => {\n const asyncFetchStatus =\n this.service && this.service.fetchStatusFor\n ? this.service.fetchStatusFor(file)\n : this.service!.fetchStatus(file.id)\n return asyncFetchStatus\n }),\n retryWhen(\n retryStrategy({\n maxRetryAttempts: this.retryAttempts,\n }),\n ),\n tap((fileStatus) => {\n // Continuously update file state to show step progress\n if (fileStatus) {\n // Emit event when status changes\n if (file.status !== fileStatus.status) {\n file.status = fileStatus.status\n file.internalStatusReasonCode = this.fallbackError(\n fileStatus.internalStatusReasonCode,\n )\n file.statusReasonInformation = fileStatus.statusReasonInformation\n file.uploadState = this.determineUploadState(fileStatus.status)\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n }\n }\n }),\n // Remove validation state\n filter(\n (apiFile) =>\n !!apiFile &&\n this.determineUploadState(apiFile.status) !== 'uploaded' &&\n this.determineUploadState(apiFile.status) !== 'validating',\n ),\n // Take first state after validation\n take(1),\n )\n .subscribe({\n next: () => {\n if (this.allValidationDone(this.files)) {\n this.setComponentStateDone()\n }\n },\n error: (err) => {\n console.warn(err)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM001'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n this.setComponentStateDone()\n },\n })\n }\n\n private fallbackError(code: string | null | undefined): string | null {\n if (this.errorCodes == null || (code && this.errorCodes.includes(code))) {\n return code ?? null\n } else {\n return 'MFEFHM001'\n }\n }\n\n /**\n * Check so that no files are still validating\n */\n private allValidationDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'validating',\n )\n }\n\n /**\n * Check so that no files are still uploading\n */\n private allUploadingDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'uploading',\n )\n }\n\n /**\n * Helper to update the component state to done and then back to normal\n */\n private setComponentStateDone() {\n if (!this.list) this.componentState = 'done'\n setTimeout(() => {\n if (this.componentState === 'done') this.componentState = 'normal'\n }, 3000)\n }\n}\n","<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { HttpClientModule } from '@angular/common/http'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvModalModule } from '@sebgroup/green-angular/src/v-angular/modal'\nimport { NggvDragDropComponent } from './drag-drop.component'\nimport { ValuePipe } from './drag-drop.pipes'\n\n@NgModule({\n imports: [\n HttpClientModule,\n TranslocoModule,\n NggvModalModule,\n NggCoreWrapperModule,\n CommonModule,\n ],\n declarations: [ValuePipe, NggvDragDropComponent],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: 'dragDrop',\n },\n ],\n exports: [NggvDragDropComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDragDropModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i5.ValuePipe"],"mappings":"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"}
1
+ {"version":3,"file":"sebgroup-green-angular-src-v-angular-drag-drop.mjs","sources":["../../../../libs/angular/src/v-angular/drag-drop/drag-drop.utils.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.pipes.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.html","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.module.ts","../../../../libs/angular/src/v-angular/drag-drop/sebgroup-green-angular-src-v-angular-drag-drop.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Observable, throwError, timer } from 'rxjs'\nimport { finalize, mergeMap } from 'rxjs/operators'\n\nimport { APIFile, LocalFile } from './drag-drop.models'\n\n/**\n * Helper to extend the base file with {@link APIFile} defaults\n * @param file file base that will be extended with {@link APIFile} defaults\n * @param data extra data to override defaults\n */\nexport const extendFile = (\n file: File | undefined,\n ...data: Array<Partial<Omit<LocalFile, 'raw'> & APIFile>>\n): LocalFile & APIFile => {\n return Object.assign(\n {\n id: file ? btoa(file.name) : '',\n fileName: file ? file.name : 'na',\n status: '',\n statusReasonInformation: null,\n principal: '',\n uploadDate: (file\n ? new Date(file.lastModified)\n : new Date()\n ).toISOString(),\n registrarId: '',\n registrarName: '',\n progress: 0,\n uploadState: 'local',\n uploadRequests: undefined,\n raw: file,\n } as LocalFile & APIFile,\n ...data,\n )\n}\n\n/**\n * Checks if file matches allowed mime types\n * @param type file mime type\n * @param accept allowed mime types\n */\nexport const verifyAccept = (type: string, accept?: string) => {\n if (!accept) return true\n const regex = new RegExp(accept.replace(/\\*/g, '.*').replace(/\\s*,\\s*/g, '|'))\n return regex.test(type)\n}\n\n/**\n * Determines if browser supports drag and drop\n */\nexport const isDragDropAvailable = () => {\n const div = document.createElement('div')\n return (\n ('draggable' in div || ('ondragstart' in div && 'ondrop' in div)) &&\n 'FormData' in window &&\n 'FileReader' in window\n )\n}\n\n/**\n * Pick only specified keys from a given object\n * @param keys keys to pick from a given object\n * @param object to extract keys from\n */\nexport const pick = <T, K extends keyof T>(\n object: T,\n ...keys: K[]\n): Pick<T, K> => {\n const copy: any = {}\n keys.forEach((key) => {\n copy[key] = object[key]\n })\n return copy\n}\n\n/**\n * Will retry running the observable when an error occurs to a maximum limit, increasing delay between executions.\n * @param options specifies number of retries, scaling duration and statuses to exclude\n */\nexport const retryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 1000,\n excludedStatusCodes = [],\n }: {\n maxRetryAttempts?: number\n scalingDuration?: number\n excludedStatusCodes?: number[]\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1\n // if maximum number of retries have been met\n // or response is a status code we don't wish to retry, throw error\n if (\n retryAttempt > maxRetryAttempts ||\n excludedStatusCodes.find((e) => e === error.status)\n ) {\n return throwError(() => error)\n }\n console.warn(\n `Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`,\n )\n return timer(retryAttempt * scalingDuration)\n }),\n finalize(() =>\n console.warn(\n `Failed after ${maxRetryAttempts} retry attempts, standing down.`,\n ),\n ),\n )\n }\n","import {\n inject,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n Pipe,\n PipeTransform,\n} from '@angular/core'\n\n@Pipe({\n name: 'value', pure: false,\n standalone: false\n})\nexport class ValuePipe implements PipeTransform {\n constructor(private readonly differs: KeyValueDiffers) {}\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem((r: KeyValueChangeRecord<K, V>) => {\n this.values.push(r.currentValue)\n })\n }\n return this.values\n }\n}\n\n/**\n * Stand-alone version of existing value pipe.\n *\n * Impure flag needed due to keep track of changes in complex values (such as objects or arrays).\n */\n@Pipe({\n name: 'valueImpure',\n pure: false,\n standalone: true,\n})\nexport class ValueImpurePipe implements PipeTransform {\n private readonly differs = inject(KeyValueDiffers)\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem(\n ({ currentValue }: KeyValueChangeRecord<K, V>) => {\n this.values.push(currentValue)\n },\n )\n }\n return this.values\n }\n}\n","/* eslint-disable no-console */\nimport { HttpEventType } from '@angular/common/http'\nimport {\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { timer } from 'rxjs'\nimport { filter, retryWhen, switchMap, take, tap } from 'rxjs/operators'\n\nimport {\n DialogEvent,\n NggvDialogComponent,\n} from '@sebgroup/green-angular/src/v-angular/modal'\nimport {\n extendFile,\n isDragDropAvailable,\n pick,\n retryStrategy,\n verifyAccept,\n} from './drag-drop.utils'\n\nimport type {\n APIFile,\n EventStateChange,\n FileService,\n LocalFile,\n StateMap,\n UploadState,\n} from './drag-drop.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cloud-upload.js'\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\nimport '@sebgroup/green-core/components/icon/icons/checkmark.js'\n\nexport type DragDropState = 'normal' | 'over' | 'uploading' | 'done'\n\n@Component({\n selector: 'nggv-drag-drop',\n templateUrl: './drag-drop.component.html',\n styleUrls: ['./drag-drop.component.scss'],\n standalone: false\n})\nexport class NggvDragDropComponent implements OnInit, OnDestroy {\n /** @internal */\n @ViewChild('deleteModalRef') deleteModalRef!: NggvDialogComponent\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'drag-drop'\n\n /** Allowing selecting or dropping multiple files. */\n @Input() service: FileService | undefined\n\n /** Mime types allowed. */\n @Input() accept?: string\n\n /** Disables deletion or cancellation during defined states [local | uploading | aborted | uploaded | validating | error | deleted | done]. */\n @Input() disableRemove: UploadState[] = []\n\n /** File size limit in mega bytes. */\n @Input() fileLimit: number = 250 * 1024 * 1024\n\n /** Allowing selecting or dropping multiple files. */\n @Input() multiple = true\n\n /** Determines if list should be shown under upload, disabling list disables multiple upload. */\n @Input() list = true\n\n /** Frequency of requests which to send to the API requesting status updates. */\n @Input() throttle = 5000\n\n /** Maximum number of attempts to request a status update from the API if service is unreachable. */\n @Input() retryAttempts = 5\n\n /** If selection of multiple file should be possible with a checkbox.\n * @experimental work in progress and should not yet be used.\n * @internal\n */\n @Input() selectable = false\n\n /** Allows multiple values from `apiFile.status` to be mapped to a single file upload state. */\n @Input() stateMap: StateMap = {\n local: 'local',\n uploading: 'uploading',\n aborted: 'aborted',\n uploaded: 'uploaded',\n validating: 'validating',\n error: 'error',\n deleted: 'deleted',\n done: 'done',\n }\n\n /** Statuses allowed to be fetch during the initial load. Used to hide \"done\" states from list. */\n @Input() fetchStatuses: string[] = []\n\n /** Statuses allowed be shown when status is \"rejected\". Will fallback to generic message. `null` allows all. */\n @Input() errorCodes: string[] | null = null\n\n /** Event triggered on initialization and every time the \"uploadState\" for a file changes. */\n @Output() stateChange = new EventEmitter<EventStateChange>()\n\n /** Event triggered when view details is clicked. */\n @Output() detailsClick = new EventEmitter<LocalFile & APIFile>()\n\n /** @internal */\n isDragDropAvailable = isDragDropAvailable()\n /** @internal */\n componentState: DragDropState = 'normal'\n /** @internal */\n files: Map<string, LocalFile & APIFile> = new Map()\n /** @internal */\n lastFile: (LocalFile & APIFile) | undefined\n /** @internal */\n selected: string[] = []\n /** @internal */\n loading = false\n /** @internal */\n markedForDeletion: APIFile | undefined\n\n /**\n * Initialize the component and warn if service is not defined. Will also fetch files for the list if enabled.\n */\n ngOnInit() {\n if (!this.service) {\n return console.error(\n 'Drag and drop component will not work without the [service] property defined!',\n )\n }\n\n if (this.list) {\n this.service.fetchFiles(this.fetchStatuses).subscribe((apiFiles) => {\n for (const apiFile of apiFiles) {\n const extendedFile = extendFile(undefined, apiFile, {\n progress: 100,\n uploadState: this.determineUploadState(apiFile.status),\n internalStatusReasonCode: this.fallbackError(\n apiFile.internalStatusReasonCode,\n ),\n })\n this.files.set(extendedFile.id, extendedFile)\n this.stateChange.emit(\n pick(\n extendedFile,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n extendedFile.uploadState === 'uploaded' ||\n extendedFile.uploadState === 'validating'\n ) {\n this.checkValidity(extendedFile, this.throttle)\n }\n }\n })\n }\n }\n\n /** Destroy all event listeners and polling running */\n ngOnDestroy() {\n this.files.forEach((file) => {\n file.uploadRequests?.unsubscribe()\n if (file.uploadState === 'uploading') {\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n }\n })\n }\n\n /** @internal Warn user trying to leave page before all uploads are done. Custom message only works in older browsers. */\n @HostListener('window:beforeunload', ['$event'])\n onBeforeUnload(event: Event) {\n if (!this.allUploadingDone(this.files)) {\n const confirmationMessage = `You still have files uploading, are you sure you want to leave this page?`\n ;((event as any) || (window.event as any)).returnValue =\n confirmationMessage\n return confirmationMessage\n }\n return\n }\n\n /* Drag & Drop Events */\n\n /** @internal Event handler for when a file is held over the drop area */\n onDragEnter(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n // Update the visual state\n this.componentState = 'over'\n }\n\n /** @internal Event handler for when a file leaves the drop area */\n onDragLeave(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n }\n\n /** @internal Event handler for when a file is dropped on the drop area or when `input` files are selected */\n onDrop(event: DragEvent | Event): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n\n let files: FileList | undefined\n\n // Determine if files are from the drop event or input element\n if (event instanceof DragEvent && event.dataTransfer) {\n files = event.dataTransfer.files\n } else if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n files = event.target.files\n }\n\n if (files) {\n const extendedFiles = Array.from(files, (file) => {\n let abort = false\n let statusCode: string | null = null\n // Check if file size is larger than limit\n if (file.size > this.fileLimit) {\n abort = true\n statusCode = 'MFEFHM003'\n }\n // Check if file type is not acceptable\n if (!verifyAccept(file.type, this.accept)) {\n abort = true\n statusCode = 'MFEFHM002'\n }\n // Add default values expected by the API\n const extendedFile = extendFile(file, {\n internalStatusReasonCode: statusCode,\n uploadState: (abort ? 'aborted' : 'local') as UploadState,\n })\n\n // Emit initial local upload event\n this.stateChange.emit({\n uploadState: 'local',\n fileName: extendedFile.fileName,\n })\n\n if (abort) {\n // Emit aborted upload event\n this.stateChange.emit({\n uploadState: 'aborted',\n fileName: extendedFile.fileName,\n status: 'aborted',\n internalStatusReasonCode: statusCode,\n })\n }\n\n return extendedFile\n })\n\n // Append to previous files\n let i = 0\n for (const file of extendedFiles) {\n // If multiple or list is false append only file then break loop\n if ((!this.multiple || !this.list) && i >= 1) break\n this.lastFile = file\n this.files.set(file.id, file)\n i++\n }\n\n // Clear file input so that same file can be uploaded\n if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n event.target.value = ''\n }\n\n this.onSubmit()\n }\n }\n\n /** @internal Event trigger for when delete button is pressed */\n onRemove(id: string, state: UploadState): void {\n // Only allow removal in certain states\n if (!this.service || this.disableRemove.includes(state)) return\n const file = this.files.get(id)\n if (!file) return\n // Skip confirmation for aborted and deleted files\n if (\n file.uploadState === 'error' ||\n file.uploadState === 'aborted' ||\n file.uploadState === 'deleted'\n ) {\n this.onConfirmRemove({ original: undefined, payload: file })\n } else {\n this.markedForDeletion = file\n this.deleteModalRef.open()\n }\n }\n\n /** @internal */\n onConfirmRemove(event: DialogEvent<LocalFile & APIFile>) {\n const { payload: file } = event\n if (!file || !this.service) return\n\n // Abort upload and set local state to aborted to inform user\n switch (file.uploadState) {\n case 'local':\n case 'uploading':\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n break\n\n // Remove file from service then set local state to aborted to inform user\n case 'uploaded':\n case 'validating':\n this.service\n .removeFile(file.id)\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Abort regardless of response from server\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM005'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n })\n break\n\n // Remove file from service then locally for \"completed\" states\n case 'error':\n case 'done':\n ;(this.service.removeFileFor\n ? this.service.removeFileFor(file)\n : this.service.removeFile(file.id)\n )\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Remove regardless of response from server\n this.files.delete(file.id)\n const event = pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n )\n event.uploadState = 'deleted'\n this.stateChange.emit(event)\n })\n break\n\n // Just remove the file locally to clean up\n case 'aborted':\n case 'deleted':\n default:\n this.files.delete(file.id)\n this.stateChange.emit({\n ...pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n uploadState: 'deleted',\n })\n break\n }\n }\n\n /** @internal Event handler for when the files should be uploaded */\n onSubmit() {\n if (!this.files || !this.service) return\n // If list is not enabled update the component state to show progress\n if (!this.list) this.componentState = 'uploading'\n this.loading = true\n this.files.forEach((file) => {\n // Filter out all files that aren't currently considered local\n if (!file.raw || file.uploadState !== 'local') return\n file.uploadRequests = this.service!.uploadFile(file.raw!).subscribe({\n next: (event) => {\n switch (event.type) {\n case HttpEventType.UploadProgress:\n // Update upload progress\n if (file.uploadState !== 'uploading') {\n file.uploadState = 'uploading'\n this.stateChange.emit(pick(file, 'uploadState', 'fileName'))\n }\n file.progress = Math.round(\n (100 * event.loaded) / (event.total || 100),\n )\n file.uploadState = 'uploading'\n break\n\n case HttpEventType.Response:\n if (event.body?.id) {\n // Remove old file id\n this.files.delete(file.id)\n // Update file with information from the API\n Object.assign(file, event.body)\n file.progress = 100\n file.uploadState = this.determineUploadState(file.status)\n // Update with new file id\n this.files.set(file.id, file)\n }\n\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n file.uploadState === 'uploaded' ||\n file.uploadState === 'validating'\n ) {\n this.checkValidity(file, this.throttle)\n } else this.setComponentStateDone()\n this.loading = false\n break\n }\n },\n error: (error) => {\n console.warn(error)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n // todo: wrong\n file.statusReasonInformation = [\n { originatorId: 'local', reason: 'dragDrop.error.MFEFHM001' },\n ]\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n this.loading = false\n },\n })\n })\n }\n\n /**\n * @internal\n * Using the state map convert `apiFile.state` to one of {@link UploadState}\n * @param apiState the state given by the file to be used for mapping\n */\n determineUploadState(apiState: string): UploadState {\n // Reverse so that later states override earlier\n const stateEntries = Object.entries(this.stateMap).reverse()\n for (const [uploadState, apiStates] of stateEntries) {\n if (this.uploadStateIsArray(apiStates)) {\n if (apiStates.includes(apiState)) return uploadState as any\n } else {\n if (apiStates === apiState) return uploadState as any\n }\n }\n return 'error'\n }\n\n /** @internal */\n uploadStateIsArray(state: string | string[]): state is string[] {\n return Array.isArray(state)\n }\n\n /** @internal used for translation templating parameters */\n translateParams(file: LocalFile & APIFile) {\n return { ...file, fileLimit: (this.fileLimit / 1024 / 1024).toFixed(3) }\n }\n\n /**\n * Poll the status endpoint to determine when file is valid\n * @param file file used to check state and update\n * @param delay how long each interval should wait before sending a request\n */\n private checkValidity(file: LocalFile & APIFile, delay: number) {\n if (!this.service) return\n file.uploadRequests = timer(0, delay)\n .pipe(\n switchMap(() => {\n const asyncFetchStatus =\n this.service && this.service.fetchStatusFor\n ? this.service.fetchStatusFor(file)\n : this.service!.fetchStatus(file.id)\n return asyncFetchStatus\n }),\n retryWhen(\n retryStrategy({\n maxRetryAttempts: this.retryAttempts,\n }),\n ),\n tap((fileStatus) => {\n // Continuously update file state to show step progress\n if (fileStatus) {\n // Emit event when status changes\n if (file.status !== fileStatus.status) {\n file.status = fileStatus.status\n file.internalStatusReasonCode = this.fallbackError(\n fileStatus.internalStatusReasonCode,\n )\n file.statusReasonInformation = fileStatus.statusReasonInformation\n file.uploadState = this.determineUploadState(fileStatus.status)\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n }\n }\n }),\n // Remove validation state\n filter(\n (apiFile) =>\n !!apiFile &&\n this.determineUploadState(apiFile.status) !== 'uploaded' &&\n this.determineUploadState(apiFile.status) !== 'validating',\n ),\n // Take first state after validation\n take(1),\n )\n .subscribe({\n next: () => {\n if (this.allValidationDone(this.files)) {\n this.setComponentStateDone()\n }\n },\n error: (err) => {\n console.warn(err)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM001'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n this.setComponentStateDone()\n },\n })\n }\n\n private fallbackError(code: string | null | undefined): string | null {\n if (this.errorCodes == null || (code && this.errorCodes.includes(code))) {\n return code ?? null\n } else {\n return 'MFEFHM001'\n }\n }\n\n /**\n * Check so that no files are still validating\n */\n private allValidationDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'validating',\n )\n }\n\n /**\n * Check so that no files are still uploading\n */\n private allUploadingDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'uploading',\n )\n }\n\n /**\n * Helper to update the component state to done and then back to normal\n */\n private setComponentStateDone() {\n if (!this.list) this.componentState = 'done'\n setTimeout(() => {\n if (this.componentState === 'done') this.componentState = 'normal'\n }, 3000)\n }\n}\n","<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { HttpClientModule } from '@angular/common/http'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvModalModule } from '@sebgroup/green-angular/src/v-angular/modal'\nimport { NggvDragDropComponent } from './drag-drop.component'\nimport { ValuePipe } from './drag-drop.pipes'\n\n@NgModule({\n imports: [\n HttpClientModule,\n TranslocoModule,\n NggvModalModule,\n NggCoreWrapperModule,\n CommonModule,\n ],\n declarations: [ValuePipe, NggvDragDropComponent],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: 'dragDrop',\n },\n ],\n exports: [NggvDragDropComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDragDropModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i5.ValuePipe"],"mappings":"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"}