ng-tailwind 6.3.0 → 6.4.1

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 (107) hide show
  1. package/components/ngt-multi-select/ngt-multi-select.component.d.ts +2 -1
  2. package/fesm2022/ng-tailwind.mjs +361 -346
  3. package/fesm2022/ng-tailwind.mjs.map +1 -1
  4. package/package.json +1 -3
  5. package/esm2022/animations/ngt-angular-animations.mjs +0 -34
  6. package/esm2022/base/ngt-base-ng-model.mjs +0 -90
  7. package/esm2022/components/ngt-action/ngt-action.component.mjs +0 -96
  8. package/esm2022/components/ngt-action/ngt-action.module.mjs +0 -28
  9. package/esm2022/components/ngt-button/ngt-button.component.mjs +0 -142
  10. package/esm2022/components/ngt-button/ngt-button.module.mjs +0 -28
  11. package/esm2022/components/ngt-checkbox/ngt-checkbox.component.mjs +0 -192
  12. package/esm2022/components/ngt-checkbox/ngt-checkbox.module.mjs +0 -28
  13. package/esm2022/components/ngt-content/ngt-content.component.mjs +0 -32
  14. package/esm2022/components/ngt-content/ngt-content.module.mjs +0 -20
  15. package/esm2022/components/ngt-context-menu/ngt-context-menu.component.mjs +0 -25
  16. package/esm2022/components/ngt-context-menu/ngt-context-menu.directive.mjs +0 -89
  17. package/esm2022/components/ngt-context-menu/ngt-context-menu.module.mjs +0 -33
  18. package/esm2022/components/ngt-datatable/ngt-datatable.component.mjs +0 -472
  19. package/esm2022/components/ngt-datatable/ngt-datatable.module.mjs +0 -99
  20. package/esm2022/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +0 -57
  21. package/esm2022/components/ngt-datatable/ngt-td/ngt-td.component.mjs +0 -62
  22. package/esm2022/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +0 -113
  23. package/esm2022/components/ngt-datatable/ngt-th/ngt-th.component.mjs +0 -228
  24. package/esm2022/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +0 -127
  25. package/esm2022/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +0 -55
  26. package/esm2022/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +0 -86
  27. package/esm2022/components/ngt-date/ngt-date.component.mjs +0 -435
  28. package/esm2022/components/ngt-date/ngt-date.module.mjs +0 -40
  29. package/esm2022/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +0 -19
  30. package/esm2022/components/ngt-dropdown/ngt-dropdown.component.mjs +0 -205
  31. package/esm2022/components/ngt-dropdown/ngt-dropdown.module.mjs +0 -21
  32. package/esm2022/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +0 -54
  33. package/esm2022/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +0 -66
  34. package/esm2022/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +0 -94
  35. package/esm2022/components/ngt-dropzone/ngt-dropzone.component.mjs +0 -496
  36. package/esm2022/components/ngt-dropzone/ngt-dropzone.meta.mjs +0 -24
  37. package/esm2022/components/ngt-dropzone/ngt-dropzone.module.mjs +0 -55
  38. package/esm2022/components/ngt-floating-button/ngt-floating-button.component.mjs +0 -119
  39. package/esm2022/components/ngt-floating-button/ngt-floating-button.module.mjs +0 -28
  40. package/esm2022/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +0 -22
  41. package/esm2022/components/ngt-form/ngt-form.component.mjs +0 -207
  42. package/esm2022/components/ngt-form/ngt-form.module.mjs +0 -29
  43. package/esm2022/components/ngt-header-nav/ngt-header-nav.component.mjs +0 -39
  44. package/esm2022/components/ngt-header-nav/ngt-header-nav.module.mjs +0 -20
  45. package/esm2022/components/ngt-helper/ngt-helper.component.mjs +0 -69
  46. package/esm2022/components/ngt-helper/ngt-helper.module.mjs +0 -28
  47. package/esm2022/components/ngt-input/ngt-input.component.mjs +0 -844
  48. package/esm2022/components/ngt-input/ngt-input.module.mjs +0 -47
  49. package/esm2022/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +0 -46
  50. package/esm2022/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +0 -33
  51. package/esm2022/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +0 -40
  52. package/esm2022/components/ngt-modal/ngt-modal.component.mjs +0 -122
  53. package/esm2022/components/ngt-modal/ngt-modal.module.mjs +0 -39
  54. package/esm2022/components/ngt-multi-select/ngt-multi-select.component.mjs +0 -503
  55. package/esm2022/components/ngt-multi-select/ngt-multi-select.module.mjs +0 -52
  56. package/esm2022/components/ngt-pagination/ngt-pagination.component.mjs +0 -162
  57. package/esm2022/components/ngt-pagination/ngt-pagination.module.mjs +0 -36
  58. package/esm2022/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +0 -59
  59. package/esm2022/components/ngt-popover/ngt-popover.component.mjs +0 -85
  60. package/esm2022/components/ngt-popover/ngt-popover.directive.mjs +0 -130
  61. package/esm2022/components/ngt-popover/ngt-popover.module.mjs +0 -36
  62. package/esm2022/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +0 -34
  63. package/esm2022/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +0 -35
  64. package/esm2022/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +0 -57
  65. package/esm2022/components/ngt-portlet/ngt-portlet.component.mjs +0 -74
  66. package/esm2022/components/ngt-portlet/ngt-portlet.module.mjs +0 -47
  67. package/esm2022/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +0 -19
  68. package/esm2022/components/ngt-radio-button/ngt-radio-button.component.mjs +0 -153
  69. package/esm2022/components/ngt-radio-button/ngt-radio-button.module.mjs +0 -29
  70. package/esm2022/components/ngt-section/ngt-section.component.mjs +0 -151
  71. package/esm2022/components/ngt-section/ngt-section.module.mjs +0 -32
  72. package/esm2022/components/ngt-select/ngt-select.component.mjs +0 -670
  73. package/esm2022/components/ngt-select/ngt-select.directive.mjs +0 -36
  74. package/esm2022/components/ngt-select/ngt-select.module.mjs +0 -65
  75. package/esm2022/components/ngt-shining/ngt-shining.component.mjs +0 -40
  76. package/esm2022/components/ngt-shining/ngt-shining.module.mjs +0 -20
  77. package/esm2022/components/ngt-sidenav/ngt-sidenav.component.mjs +0 -132
  78. package/esm2022/components/ngt-sidenav/ngt-sidenav.module.mjs +0 -20
  79. package/esm2022/components/ngt-slider/ngt-slider.component.mjs +0 -100
  80. package/esm2022/components/ngt-slider/ngt-slider.module.mjs +0 -24
  81. package/esm2022/components/ngt-svg/ngt-svg.component.mjs +0 -53
  82. package/esm2022/components/ngt-svg/ngt-svg.module.mjs +0 -24
  83. package/esm2022/components/ngt-tag/ngt-tag.component.mjs +0 -37
  84. package/esm2022/components/ngt-tag/ngt-tag.module.mjs +0 -24
  85. package/esm2022/components/ngt-textarea/ngt-textarea.component.mjs +0 -238
  86. package/esm2022/components/ngt-textarea/ngt-textarea.module.mjs +0 -43
  87. package/esm2022/components/ngt-validation/ngt-validation.component.mjs +0 -26
  88. package/esm2022/components/ngt-validation/ngt-validation.module.mjs +0 -20
  89. package/esm2022/directives/ngt-stylizable/ngt-stylizable.directive.mjs +0 -299
  90. package/esm2022/directives/ngt-stylizable/ngt-stylizable.module.mjs +0 -20
  91. package/esm2022/enums/size.enum.mjs +0 -11
  92. package/esm2022/helpers/enum/enum.mjs +0 -7
  93. package/esm2022/helpers/form/form.mjs +0 -14
  94. package/esm2022/helpers/input-mask/input-mask.helper.mjs +0 -26
  95. package/esm2022/helpers/promise/promise-helper.mjs +0 -4
  96. package/esm2022/helpers/routing/route.mjs +0 -11
  97. package/esm2022/helpers/uuid.mjs +0 -10
  98. package/esm2022/ng-tailwind.mjs +0 -5
  99. package/esm2022/public-api.mjs +0 -127
  100. package/esm2022/services/http/ngt-attachment-http.service.mjs +0 -3
  101. package/esm2022/services/http/ngt-http-form.service.mjs +0 -3
  102. package/esm2022/services/http/ngt-http-resource.service.mjs +0 -3
  103. package/esm2022/services/http/ngt-http-validation.service.mjs +0 -3
  104. package/esm2022/services/http/ngt-http.service.mjs +0 -3
  105. package/esm2022/services/http/ngt-translate.service.mjs +0 -3
  106. package/esm2022/services/ngt-stylizable/ngt-stylizable.service.mjs +0 -279
  107. package/esm2022/services/validation/ngt-ability-validation.service.mjs +0 -3
@@ -1,94 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
- import { NgtDropzoneFileTypeEnum } from '../ngt-dropzone.meta';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- export class NgtDropzoneViewComponent {
6
- constructor() {
7
- this.onImageClick = new EventEmitter();
8
- this.onFileClick = new EventEmitter();
9
- this.ngtDropzoneViewFileTypeEnum = NgtDropzoneFileTypeEnum;
10
- }
11
- ngOnChanges(changes) {
12
- if (changes.resources) {
13
- this.loadFiles();
14
- }
15
- }
16
- loadFiles() {
17
- this.images = this.resources.filter((resource) => this.isImage(resource));
18
- this.audios = this.resources.filter((resource) => this.isAudio(resource));
19
- this.videos = this.resources.filter((resource) => this.isVideo(resource));
20
- this.files = this.resources.filter((resource) => this.isFile(resource));
21
- }
22
- handleImageClick(index) {
23
- const imagesDiv = document.createElement("div");
24
- this.images.forEach((image) => {
25
- let imageElement = document.createElement("img");
26
- imageElement.src = image.previewUrl;
27
- imagesDiv.appendChild(imageElement);
28
- });
29
- this.onImageClick.emit({ div: imagesDiv, index });
30
- }
31
- handleFileClick(previewUrl, name, fileSize) {
32
- this.onFileClick.emit({ previewUrl, name, fileSize });
33
- }
34
- getFileType(resource) {
35
- if (resource.mimeType.includes('.sheet')) {
36
- return NgtDropzoneFileTypeEnum.XLS;
37
- }
38
- if (resource.mimeType.includes('pdf')) {
39
- return NgtDropzoneFileTypeEnum.PDF;
40
- }
41
- if (resource.mimeType.includes('.document')) {
42
- return NgtDropzoneFileTypeEnum.DOC;
43
- }
44
- return NgtDropzoneFileTypeEnum.OTHER;
45
- }
46
- getFormattedFileSize(resource) {
47
- if (resource) {
48
- let size = resource.size || resource.fileSize;
49
- if (!size) {
50
- if (resource.file && resource.file.size) {
51
- size = resource.file.size;
52
- }
53
- else {
54
- size = 0;
55
- }
56
- }
57
- if (parseFloat(size) > 1000000) {
58
- return (parseFloat(size) / 1000000).toFixed(2) + ' Mb';
59
- }
60
- return Math.round(parseFloat(size) / 1000) + ' Kb';
61
- }
62
- }
63
- isImage(resource) {
64
- return resource.mimeType.includes('image');
65
- }
66
- isAudio(resource) {
67
- return resource.mimeType.includes('audio');
68
- }
69
- isVideo(resource) {
70
- return resource.mimeType.includes('video');
71
- }
72
- isFile(resource) {
73
- return !this.isImage(resource) && !this.isAudio(resource) && !this.isVideo(resource);
74
- }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtDropzoneViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
76
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NgtDropzoneViewComponent, selector: "ngt-dropzone-view", inputs: { resources: "resources", dropzoneHeight: "dropzoneHeight", loading: "loading", placeholder: "placeholder" }, outputs: { onImageClick: "onImageClick", onFileClick: "onFileClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"border-2 border-dotted border-gray-400 rounded p-2 flex items-center overflow-x-auto overflow-y-hidden\"\n [ngStyle]=\"{ 'height': dropzoneHeight }\">\n <div *ngIf=\"loading\" class=\"flex absolute justify-center items-center w-full h-full cursor-wait z-10\">\n <div class=\"div-loader\"></div>\n </div>\n\n <div [class]=\"loading ? 'hidden' : 'flex items-center'\">\n <ng-container *ngIf=\"images?.length\">\n <div class=\"flex py-5\">\n <div *ngFor=\"let image of images; let index = index\" class=\"w-48 mr-8\">\n <div class=\"flex flex-col w-48 mx-4 cursor-pointer\"\n title=\"{{ image.name || '' }} ({{ getFormattedFileSize(image) }})\"\n (click)=\"handleImageClick(index)\">\n <img [src]=\"image.thumbnailUrl\" [alt]=\"image.name\" class=\"w-full h-32\">\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ image.name || '' }}\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"audios?.length\">\n <ng-container *ngFor=\"let audio of audios\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <audio controls>\n <source [src]=\"audio.previewUrl\">\n </audio>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ audio.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"videos?.length\">\n <ng-container *ngFor=\"let video of videos\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <video width=\"240\" controls>\n <source [src]=\"video.previewUrl\">\n </video>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ video.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"files?.length\">\n <ng-container *ngFor=\"let file of files\">\n <div class=\"flex flex-col w-48 mr-6 cursor-pointer\"\n (click)=\"handleFileClick(file.previewUrl, file.name, file.fileSize)\">\n <div class=\"w-full flex justify-center border-2 rounded py-4 text-6xl\">\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.OTHER\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\" fill=\"#4a5568\"\n d=\"M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm9 2.41V7h2.59L15 4.41zM18 9h-3a2 2 0 0 1-2-2V4H6v16h12V9zm-2 7a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm0-4a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm-5-4a1 1 0 0 1-1 1H9a1 1 0 1 1 0-2h1a1 1 0 0 1 1 1z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.DOC\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-0.78 -12l-2.52 10.8 -1.68 0 -2.16 -8.15 -2.16 8.15 -1.68 0 -2.64 -10.8 1.8 0 1.68 8.17 2.16 -8.17 1.56 0 2.16 8.17 1.68 -8.17 1.8 0z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.XLS\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-6.12 -6.6l3.48 5.4 -2.16 0 -2.4 -4.08 -2.4 4.08 -2.16 0 3.48 -5.4 -3.48 -5.4 2.16 0 2.4 4.08 2.4 -4.08 2.16 0 -3.48 5.4z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.PDF\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l7.2 7.2 0 14.4c0,1.32 -1.08,2.4 -2.4,2.4l-14.4 0c-1.32,0 -2.4,-1.08 -2.4,-2.4l0 -19.2c0,-1.32 1.08,-2.4 2.4,-2.4l9.6 0 0 0zm4.8 21.6l0 -13.2 -6 0 0 -6 -8.4 0 0 19.2 14.4 0 0 0zm-8.5 -9.23c-0.28,-0.92 -0.92,-3.87 0.76,-3.92 1.68,-0.05 0.58,3.74 0.58,3.74 0.46,1.79 2.42,3.07 2.42,3.07 0.6,-0.18 4.02,-0.57 3.54,1.21 -0.52,1.77 -4.2,0.1 -4.2,0.1 -2.34,0.17 -4.09,0.8 -4.09,0.8 -1.36,2.53 -2.94,3.63 -3.59,2.56 -0.8,-1.33 2.56,-3.04 2.56,-3.04 1.74,-2.83 2,-4.47 2.02,-4.52l0 0zm0.78 1.01c-0.48,1.56 -1.44,3.23 -1.44,3.23 1.02,-0.41 3.26,-0.88 3.26,-0.88 -1.37,-1.2 -1.79,-2.34 -1.82,-2.35l0 0zm3.77 2.6c0,0 2.1,0.79 2.15,0.47 0.08,-0.32 -1.6,-0.61 -2.15,-0.47l0 0zm-6.79 1.79c-0.93,0.36 -1.81,1.9 -1.6,1.9 0.22,0.01 1.1,-0.72 1.6,-1.9l0 0zm3.02 -6.66c0,-0.06 0.52,-2.01 0,-2.07 -0.36,-0.04 -0.01,2.02 0,2.07z\" />\n </svg>\n </div>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ file.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"!loading && !resources?.length\" class=\"px-2 text-center w-full\">\n {{ placeholder }}\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtDropzoneViewComponent, decorators: [{
79
- type: Component,
80
- args: [{ selector: 'ngt-dropzone-view', encapsulation: ViewEncapsulation.None, template: "<div class=\"border-2 border-dotted border-gray-400 rounded p-2 flex items-center overflow-x-auto overflow-y-hidden\"\n [ngStyle]=\"{ 'height': dropzoneHeight }\">\n <div *ngIf=\"loading\" class=\"flex absolute justify-center items-center w-full h-full cursor-wait z-10\">\n <div class=\"div-loader\"></div>\n </div>\n\n <div [class]=\"loading ? 'hidden' : 'flex items-center'\">\n <ng-container *ngIf=\"images?.length\">\n <div class=\"flex py-5\">\n <div *ngFor=\"let image of images; let index = index\" class=\"w-48 mr-8\">\n <div class=\"flex flex-col w-48 mx-4 cursor-pointer\"\n title=\"{{ image.name || '' }} ({{ getFormattedFileSize(image) }})\"\n (click)=\"handleImageClick(index)\">\n <img [src]=\"image.thumbnailUrl\" [alt]=\"image.name\" class=\"w-full h-32\">\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ image.name || '' }}\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"audios?.length\">\n <ng-container *ngFor=\"let audio of audios\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <audio controls>\n <source [src]=\"audio.previewUrl\">\n </audio>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ audio.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"videos?.length\">\n <ng-container *ngFor=\"let video of videos\">\n <div class=\"flex flex-col w-48 mx-4 py-5\">\n <video width=\"240\" controls>\n <source [src]=\"video.previewUrl\">\n </video>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ video.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"files?.length\">\n <ng-container *ngFor=\"let file of files\">\n <div class=\"flex flex-col w-48 mr-6 cursor-pointer\"\n (click)=\"handleFileClick(file.previewUrl, file.name, file.fileSize)\">\n <div class=\"w-full flex justify-center border-2 rounded py-4 text-6xl\">\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.OTHER\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\" fill=\"#4a5568\"\n d=\"M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm9 2.41V7h2.59L15 4.41zM18 9h-3a2 2 0 0 1-2-2V4H6v16h12V9zm-2 7a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm0-4a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm-5-4a1 1 0 0 1-1 1H9a1 1 0 1 1 0-2h1a1 1 0 0 1 1 1z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.DOC\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-0.78 -12l-2.52 10.8 -1.68 0 -2.16 -8.15 -2.16 8.15 -1.68 0 -2.64 -10.8 1.8 0 1.68 8.17 2.16 -8.17 1.56 0 2.16 8.17 1.68 -8.17 1.8 0z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.XLS\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l-9.6 0c-1.33,0 -2.4,1.08 -2.4,2.4l0 19.2c0,1.33 1.07,2.4 2.4,2.4l14.4 0c1.33,0 2.4,-1.07 2.4,-2.4l0 -14.4 -7.2 -7.2 0 0zm4.8 21.6l-14.4 0 0 -19.2 8.4 0 0 6 6 0 0 13.2 0 0zm-6.12 -6.6l3.48 5.4 -2.16 0 -2.4 -4.08 -2.4 4.08 -2.16 0 3.48 -5.4 -3.48 -5.4 2.16 0 2.4 4.08 2.4 -4.08 2.16 0 -3.48 5.4z\" />\n </svg>\n\n <svg *ngIf=\"getFileType(file) == ngtDropzoneViewFileTypeEnum.PDF\" fill=\"#4a5568\"\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M14.4 0l7.2 7.2 0 14.4c0,1.32 -1.08,2.4 -2.4,2.4l-14.4 0c-1.32,0 -2.4,-1.08 -2.4,-2.4l0 -19.2c0,-1.32 1.08,-2.4 2.4,-2.4l9.6 0 0 0zm4.8 21.6l0 -13.2 -6 0 0 -6 -8.4 0 0 19.2 14.4 0 0 0zm-8.5 -9.23c-0.28,-0.92 -0.92,-3.87 0.76,-3.92 1.68,-0.05 0.58,3.74 0.58,3.74 0.46,1.79 2.42,3.07 2.42,3.07 0.6,-0.18 4.02,-0.57 3.54,1.21 -0.52,1.77 -4.2,0.1 -4.2,0.1 -2.34,0.17 -4.09,0.8 -4.09,0.8 -1.36,2.53 -2.94,3.63 -3.59,2.56 -0.8,-1.33 2.56,-3.04 2.56,-3.04 1.74,-2.83 2,-4.47 2.02,-4.52l0 0zm0.78 1.01c-0.48,1.56 -1.44,3.23 -1.44,3.23 1.02,-0.41 3.26,-0.88 3.26,-0.88 -1.37,-1.2 -1.79,-2.34 -1.82,-2.35l0 0zm3.77 2.6c0,0 2.1,0.79 2.15,0.47 0.08,-0.32 -1.6,-0.61 -2.15,-0.47l0 0zm-6.79 1.79c-0.93,0.36 -1.81,1.9 -1.6,1.9 0.22,0.01 1.1,-0.72 1.6,-1.9l0 0zm3.02 -6.66c0,-0.06 0.52,-2.01 0,-2.07 -0.36,-0.04 -0.01,2.02 0,2.07z\" />\n </svg>\n </div>\n\n <p class=\"w-full truncate text-gray-500 text-center text-sm font-mono\">\n {{ file.name || '' }}\n </p>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"!loading && !resources?.length\" class=\"px-2 text-center w-full\">\n {{ placeholder }}\n </div>\n</div>" }]
81
- }], propDecorators: { resources: [{
82
- type: Input
83
- }], dropzoneHeight: [{
84
- type: Input
85
- }], loading: [{
86
- type: Input
87
- }], placeholder: [{
88
- type: Input
89
- }], onImageClick: [{
90
- type: Output
91
- }], onFileClick: [{
92
- type: Output
93
- }] } });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWRyb3B6b25lLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWRyb3B6b25lL25ndC1kcm9wem9uZS12aWV3L25ndC1kcm9wem9uZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1kcm9wem9uZS9uZ3QtZHJvcHpvbmUtdmlldy9uZ3QtZHJvcHpvbmUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQU9oRixNQUFNLE9BQU8sd0JBQXdCO0lBTHJDO1FBV3FCLGlCQUFZLEdBQXlELElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEYsZ0JBQVcsR0FBeUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU9qSCxnQ0FBMkIsR0FBRyx1QkFBdUIsQ0FBQztLQW9GaEU7SUFsRlUsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0wsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWE7UUFDakMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQXNCLEVBQUUsRUFBRTtZQUMzQyxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpELFlBQVksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUVwQyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVNLGVBQWUsQ0FBQyxVQUFrQixFQUFFLElBQVksRUFBRSxRQUFnQjtRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQXlCO1FBQ3hDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLHVCQUF1QixDQUFDLEdBQUcsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sdUJBQXVCLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUM7UUFDdkMsQ0FBQztRQUVELE9BQU8sdUJBQXVCLENBQUMsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxRQUFhO1FBQ3JDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFFOUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNSLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN0QyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMzRCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFFTyxPQUFPLENBQUMsUUFBeUI7UUFDckMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sT0FBTyxDQUFDLFFBQXlCO1FBQ3JDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLE9BQU8sQ0FBQyxRQUF5QjtRQUNyQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxNQUFNLENBQUMsUUFBeUI7UUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RixDQUFDOytHQWpHUSx3QkFBd0I7bUdBQXhCLHdCQUF3QiwyUUNUckMsKzhMQTRGTTs7NEZEbkZPLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDSSxtQkFBbUIsaUJBRWQsaUJBQWlCLENBQUMsSUFBSTs4QkFHckIsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFFVyxZQUFZO3NCQUE1QixNQUFNO2dCQUNVLFdBQVc7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd0RHJvcHpvbmVGaWxlLCBOZ3REcm9wem9uZUZpbGVUeXBlRW51bSB9IGZyb20gJy4uL25ndC1kcm9wem9uZS5tZXRhJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtZHJvcHpvbmUtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1kcm9wem9uZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE5ndERyb3B6b25lVmlld0NvbXBvbmVudCB7XG4gICAgQElucHV0KCkgcHVibGljIHJlc291cmNlczogQXJyYXk8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcHpvbmVIZWlnaHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25JbWFnZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkaXY6IEhUTUxEaXZFbGVtZW50OyBpbmRleDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25GaWxlQ2xpY2s6IEV2ZW50RW1pdHRlcjx7IHByZXZpZXdVcmw6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBmaWxlU2l6ZTogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGltYWdlczogQXJyYXk8Tmd0RHJvcHpvbmVGaWxlPjtcbiAgICBwdWJsaWMgYXVkaW9zOiBBcnJheTxOZ3REcm9wem9uZUZpbGU+O1xuICAgIHB1YmxpYyB2aWRlb3M6IEFycmF5PE5ndERyb3B6b25lRmlsZT47XG4gICAgcHVibGljIGZpbGVzOiBBcnJheTxOZ3REcm9wem9uZUZpbGU+O1xuXG4gICAgcHVibGljIG5ndERyb3B6b25lVmlld0ZpbGVUeXBlRW51bSA9IE5ndERyb3B6b25lRmlsZVR5cGVFbnVtO1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMucmVzb3VyY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGaWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRGaWxlcygpIHtcbiAgICAgICAgdGhpcy5pbWFnZXMgPSB0aGlzLnJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PiB0aGlzLmlzSW1hZ2UocmVzb3VyY2UpKTtcbiAgICAgICAgdGhpcy5hdWRpb3MgPSB0aGlzLnJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PiB0aGlzLmlzQXVkaW8ocmVzb3VyY2UpKTtcbiAgICAgICAgdGhpcy52aWRlb3MgPSB0aGlzLnJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PiB0aGlzLmlzVmlkZW8ocmVzb3VyY2UpKTtcbiAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMucmVzb3VyY2VzLmZpbHRlcigocmVzb3VyY2UpID0+IHRoaXMuaXNGaWxlKHJlc291cmNlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUltYWdlQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbWFnZXNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VzLmZvckVhY2goKGltYWdlOiBOZ3REcm9wem9uZUZpbGUpID0+IHtcbiAgICAgICAgICAgIGxldCBpbWFnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuXG4gICAgICAgICAgICBpbWFnZUVsZW1lbnQuc3JjID0gaW1hZ2UucHJldmlld1VybDtcblxuICAgICAgICAgICAgaW1hZ2VzRGl2LmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25JbWFnZUNsaWNrLmVtaXQoeyBkaXY6IGltYWdlc0RpdiwgaW5kZXggfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbGVDbGljayhwcmV2aWV3VXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZmlsZVNpemU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRmlsZUNsaWNrLmVtaXQoeyBwcmV2aWV3VXJsLCBuYW1lLCBmaWxlU2l6ZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsZVR5cGUocmVzb3VyY2U6IE5ndERyb3B6b25lRmlsZSk6IE5ndERyb3B6b25lRmlsZVR5cGVFbnVtIHtcbiAgICAgICAgaWYgKHJlc291cmNlLm1pbWVUeXBlLmluY2x1ZGVzKCcuc2hlZXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5ndERyb3B6b25lRmlsZVR5cGVFbnVtLlhMUztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZS5taW1lVHlwZS5pbmNsdWRlcygncGRmJykpIHtcbiAgICAgICAgICAgIHJldHVybiBOZ3REcm9wem9uZUZpbGVUeXBlRW51bS5QREY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2UubWltZVR5cGUuaW5jbHVkZXMoJy5kb2N1bWVudCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmd0RHJvcHpvbmVGaWxlVHlwZUVudW0uRE9DO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE5ndERyb3B6b25lRmlsZVR5cGVFbnVtLk9USEVSO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtYXR0ZWRGaWxlU2l6ZShyZXNvdXJjZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICBsZXQgc2l6ZSA9IHJlc291cmNlLnNpemUgfHwgcmVzb3VyY2UuZmlsZVNpemU7XG5cbiAgICAgICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5maWxlICYmIHJlc291cmNlLmZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBzaXplID0gcmVzb3VyY2UuZmlsZS5zaXplO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQoc2l6ZSkgPiAxMDAwMDAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUZsb2F0KHNpemUpIC8gMTAwMDAwMCkudG9GaXhlZCgyKSArICcgTWInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHNpemUpIC8gMTAwMCkgKyAnIEtiJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNJbWFnZShyZXNvdXJjZTogTmd0RHJvcHpvbmVGaWxlKSB7XG4gICAgICAgIHJldHVybiByZXNvdXJjZS5taW1lVHlwZS5pbmNsdWRlcygnaW1hZ2UnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXVkaW8ocmVzb3VyY2U6IE5ndERyb3B6b25lRmlsZSkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2UubWltZVR5cGUuaW5jbHVkZXMoJ2F1ZGlvJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZpZGVvKHJlc291cmNlOiBOZ3REcm9wem9uZUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc291cmNlLm1pbWVUeXBlLmluY2x1ZGVzKCd2aWRlbycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWxlKHJlc291cmNlOiBOZ3REcm9wem9uZUZpbGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzSW1hZ2UocmVzb3VyY2UpICYmICF0aGlzLmlzQXVkaW8ocmVzb3VyY2UpICYmICF0aGlzLmlzVmlkZW8ocmVzb3VyY2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJib3JkZXItMiBib3JkZXItZG90dGVkIGJvcmRlci1ncmF5LTQwMCByb3VuZGVkIHAtMiBmbGV4IGl0ZW1zLWNlbnRlciBvdmVyZmxvdy14LWF1dG8gb3ZlcmZsb3cteS1oaWRkZW5cIlxuICAgIFtuZ1N0eWxlXT1cInsgJ2hlaWdodCc6IGRyb3B6b25lSGVpZ2h0IH1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwiZmxleCBhYnNvbHV0ZSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy1mdWxsIGgtZnVsbCBjdXJzb3Itd2FpdCB6LTEwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtbG9hZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IFtjbGFzc109XCJsb2FkaW5nID8gJ2hpZGRlbicgOiAnZmxleCBpdGVtcy1jZW50ZXInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggcHktNVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGltYWdlIG9mIGltYWdlczsgbGV0IGluZGV4ID0gaW5kZXhcIiBjbGFzcz1cInctNDggbXItOFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LTQ4IG14LTQgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBpbWFnZS5uYW1lIHx8ICcnIH19ICh7eyBnZXRGb3JtYXR0ZWRGaWxlU2l6ZShpbWFnZSkgfX0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVJbWFnZUNsaWNrKGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlLnRodW1ibmFpbFVybFwiIFthbHRdPVwiaW1hZ2UubmFtZVwiIGNsYXNzPVwidy1mdWxsIGgtMzJcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3LWZ1bGwgdHJ1bmNhdGUgdGV4dC1ncmF5LTUwMCB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGltYWdlLm5hbWUgfHwgJycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF1ZGlvcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhdWRpbyBvZiBhdWRpb3NcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LTQ4IG14LTQgcHktNVwiPlxuICAgICAgICAgICAgICAgICAgICA8YXVkaW8gY29udHJvbHM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIFtzcmNdPVwiYXVkaW8ucHJldmlld1VybFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2F1ZGlvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidy1mdWxsIHRydW5jYXRlIHRleHQtZ3JheS01MDAgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGF1ZGlvLm5hbWUgfHwgJycgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWRlb3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmlkZW8gb2YgdmlkZW9zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy00OCBteC00IHB5LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZpZGVvIHdpZHRoPVwiMjQwXCIgY29udHJvbHM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIFtzcmNdPVwidmlkZW8ucHJldmlld1VybFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidy1mdWxsIHRydW5jYXRlIHRleHQtZ3JheS01MDAgdGV4dC1jZW50ZXIgdGV4dC1zbSBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpZGVvLm5hbWUgfHwgJycgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy00OCBtci02IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZpbGVDbGljayhmaWxlLnByZXZpZXdVcmwsIGZpbGUubmFtZSwgZmlsZS5maWxlU2l6ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGJvcmRlci0yIHJvdW5kZWQgcHktNCB0ZXh0LTZ4bFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImdldEZpbGVUeXBlKGZpbGUpID09IG5ndERyb3B6b25lVmlld0ZpbGVUeXBlRW51bS5PVEhFUlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImhlcm9pY29uLXVpXCIgZmlsbD1cIiM0YTU1NjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYgMmg5YTEgMSAwIDAgMSAuNy4zbDQgNGExIDEgMCAwIDEgLjMuN3YxM2EyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY0YzAtMS4xLjktMiAyLTJ6bTkgMi40MVY3aDIuNTlMMTUgNC40MXpNMTggOWgtM2EyIDIgMCAwIDEtMi0yVjRINnYxNmgxMlY5em0tMiA3YTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEgMC0yaDZhMSAxIDAgMCAxIDEgMXptMC00YTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEgMC0yaDZhMSAxIDAgMCAxIDEgMXptLTUtNGExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMSAxIDAtMmgxYTEgMSAwIDAgMSAxIDF6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZ2V0RmlsZVR5cGUoZmlsZSkgPT0gbmd0RHJvcHpvbmVWaWV3RmlsZVR5cGVFbnVtLkRPQ1wiIGZpbGw9XCIjNGE1NTY4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNCAwbC05LjYgMGMtMS4zMywwIC0yLjQsMS4wOCAtMi40LDIuNGwwIDE5LjJjMCwxLjMzIDEuMDcsMi40IDIuNCwyLjRsMTQuNCAwYzEuMzMsMCAyLjQsLTEuMDcgMi40LC0yLjRsMCAtMTQuNCAtNy4yIC03LjIgMCAwem00LjggMjEuNmwtMTQuNCAwIDAgLTE5LjIgOC40IDAgMCA2IDYgMCAwIDEzLjIgMCAwem0tMC43OCAtMTJsLTIuNTIgMTAuOCAtMS42OCAwIC0yLjE2IC04LjE1IC0yLjE2IDguMTUgLTEuNjggMCAtMi42NCAtMTAuOCAxLjggMCAxLjY4IDguMTcgMi4xNiAtOC4xNyAxLjU2IDAgMi4xNiA4LjE3IDEuNjggLTguMTcgMS44IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZ2V0RmlsZVR5cGUoZmlsZSkgPT0gbmd0RHJvcHpvbmVWaWV3RmlsZVR5cGVFbnVtLlhMU1wiIGZpbGw9XCIjNGE1NTY4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNCAwbC05LjYgMGMtMS4zMywwIC0yLjQsMS4wOCAtMi40LDIuNGwwIDE5LjJjMCwxLjMzIDEuMDcsMi40IDIuNCwyLjRsMTQuNCAwYzEuMzMsMCAyLjQsLTEuMDcgMi40LC0yLjRsMCAtMTQuNCAtNy4yIC03LjIgMCAwem00LjggMjEuNmwtMTQuNCAwIDAgLTE5LjIgOC40IDAgMCA2IDYgMCAwIDEzLjIgMCAwem0tNi4xMiAtNi42bDMuNDggNS40IC0yLjE2IDAgLTIuNCAtNC4wOCAtMi40IDQuMDggLTIuMTYgMCAzLjQ4IC01LjQgLTMuNDggLTUuNCAyLjE2IDAgMi40IDQuMDggMi40IC00LjA4IDIuMTYgMCAtMy40OCA1LjR6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZ2V0RmlsZVR5cGUoZmlsZSkgPT0gbmd0RHJvcHpvbmVWaWV3RmlsZVR5cGVFbnVtLlBERlwiIGZpbGw9XCIjNGE1NTY4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNCAwbDcuMiA3LjIgMCAxNC40YzAsMS4zMiAtMS4wOCwyLjQgLTIuNCwyLjRsLTE0LjQgMGMtMS4zMiwwIC0yLjQsLTEuMDggLTIuNCwtMi40bDAgLTE5LjJjMCwtMS4zMiAxLjA4LC0yLjQgMi40LC0yLjRsOS42IDAgMCAwem00LjggMjEuNmwwIC0xMy4yIC02IDAgMCAtNiAtOC40IDAgMCAxOS4yIDE0LjQgMCAwIDB6bS04LjUgLTkuMjNjLTAuMjgsLTAuOTIgLTAuOTIsLTMuODcgMC43NiwtMy45MiAxLjY4LC0wLjA1IDAuNTgsMy43NCAwLjU4LDMuNzQgMC40NiwxLjc5IDIuNDIsMy4wNyAyLjQyLDMuMDcgMC42LC0wLjE4IDQuMDIsLTAuNTcgMy41NCwxLjIxIC0wLjUyLDEuNzcgLTQuMiwwLjEgLTQuMiwwLjEgLTIuMzQsMC4xNyAtNC4wOSwwLjggLTQuMDksMC44IC0xLjM2LDIuNTMgLTIuOTQsMy42MyAtMy41OSwyLjU2IC0wLjgsLTEuMzMgMi41NiwtMy4wNCAyLjU2LC0zLjA0IDEuNzQsLTIuODMgMiwtNC40NyAyLjAyLC00LjUybDAgMHptMC43OCAxLjAxYy0wLjQ4LDEuNTYgLTEuNDQsMy4yMyAtMS40NCwzLjIzIDEuMDIsLTAuNDEgMy4yNiwtMC44OCAzLjI2LC0wLjg4IC0xLjM3LC0xLjIgLTEuNzksLTIuMzQgLTEuODIsLTIuMzVsMCAwem0zLjc3IDIuNmMwLDAgMi4xLDAuNzkgMi4xNSwwLjQ3IDAuMDgsLTAuMzIgLTEuNiwtMC42MSAtMi4xNSwtMC40N2wwIDB6bS02Ljc5IDEuNzljLTAuOTMsMC4zNiAtMS44MSwxLjkgLTEuNiwxLjkgMC4yMiwwLjAxIDEuMSwtMC43MiAxLjYsLTEuOWwwIDB6bTMuMDIgLTYuNjZjMCwtMC4wNiAwLjUyLC0yLjAxIDAsLTIuMDcgLTAuMzYsLTAuMDQgLTAuMDEsMi4wMiAwLDIuMDd6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInctZnVsbCB0cnVuY2F0ZSB0ZXh0LWdyYXktNTAwIHRleHQtY2VudGVyIHRleHQtc20gZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWxlLm5hbWUgfHwgJycgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFyZXNvdXJjZXM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiB0ZXh0LWNlbnRlciB3LWZ1bGxcIj5cbiAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==