@wavemaker/app-ng-runtime 12.0.0-next.45191 → 12.0.0-next.45196

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 (97) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +7 -7
  2. app-ng-runtime/build-task/esm2022/containers/accordion/accordion-pane/accordion-pane.build.mjs +2 -2
  3. app-ng-runtime/build-task/esm2022/containers/accordion/accordion.build.mjs +3 -3
  4. app-ng-runtime/build-task/esm2022/containers/wizard/wizard.build.mjs +2 -2
  5. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -3
  6. app-ng-runtime/build-task/esm2022/input/chips/chips.build.mjs +2 -2
  7. app-ng-runtime/build-task/esm2022/input/file-upload/file-upload.build.mjs +2 -2
  8. app-ng-runtime/build-task/fesm2022/index.mjs +7 -7
  9. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  10. app-ng-runtime/components/base/bundles/index.umd.js +0 -5
  11. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +1 -6
  12. app-ng-runtime/components/base/fesm2022/index.mjs +0 -5
  13. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  14. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -0
  15. app-ng-runtime/components/basic/default/bundles/index.umd.js +18 -7
  16. app-ng-runtime/components/basic/default/esm2022/audio/audio.component.mjs +13 -5
  17. app-ng-runtime/components/basic/default/esm2022/video/video.component.mjs +7 -4
  18. app-ng-runtime/components/basic/default/fesm2022/index.mjs +18 -7
  19. app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
  20. app-ng-runtime/components/basic/default/video/video.component.d.ts +1 -0
  21. app-ng-runtime/components/basic/progress/bundles/index.umd.js +7 -3
  22. app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +8 -4
  23. app-ng-runtime/components/basic/progress/fesm2022/index.mjs +7 -3
  24. app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
  25. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +1 -0
  26. app-ng-runtime/components/basic/search/bundles/index.umd.js +7 -2
  27. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +8 -3
  28. app-ng-runtime/components/basic/search/fesm2022/index.mjs +7 -2
  29. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  30. app-ng-runtime/components/basic/search/search.component.d.ts +3 -2
  31. app-ng-runtime/components/chart/bundles/index.umd.js +2 -1
  32. app-ng-runtime/components/chart/esm2022/chart.utils.mjs +3 -2
  33. app-ng-runtime/components/chart/fesm2022/index.mjs +2 -1
  34. app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
  35. app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +1 -0
  36. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +15 -9
  37. app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +13 -10
  38. app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +4 -1
  39. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +15 -9
  40. app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  41. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +6 -6
  42. app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +7 -7
  43. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +6 -6
  44. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  45. app-ng-runtime/components/data/list/bundles/index.umd.js +20 -12
  46. app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +10 -1
  47. app-ng-runtime/components/data/list/esm2022/list.component.mjs +13 -13
  48. app-ng-runtime/components/data/list/fesm2022/index.mjs +21 -13
  49. app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
  50. app-ng-runtime/components/input/chips/bundles/index.umd.js +24 -7
  51. app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +25 -8
  52. app-ng-runtime/components/input/chips/fesm2022/index.mjs +24 -7
  53. app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
  54. app-ng-runtime/components/input/default/bundles/index.umd.js +21 -5
  55. app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +3 -3
  56. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +20 -4
  57. app-ng-runtime/components/input/default/fesm2022/index.mjs +21 -5
  58. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  59. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +3 -1
  60. app-ng-runtime/components/input/epoch/bundles/index.umd.js +22 -14
  61. app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +13 -6
  62. app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +4 -4
  63. app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
  64. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -4
  65. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +19 -11
  66. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  67. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +80 -64
  68. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +80 -65
  69. app-ng-runtime/components/input/file-upload/esm2022/file-upload.props.mjs +3 -2
  70. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +81 -65
  71. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  72. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +7 -2
  73. app-ng-runtime/components/input/rating/bundles/index.umd.js +2 -2
  74. app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +3 -3
  75. app-ng-runtime/components/input/rating/fesm2022/index.mjs +2 -2
  76. app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
  77. app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +6 -6
  78. app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +7 -7
  79. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +6 -6
  80. app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  81. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +10 -3
  82. app-ng-runtime/components/page/left-panel/esm2022/left-panel.directive.mjs +11 -4
  83. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +10 -3
  84. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  85. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +2 -2
  86. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +2 -2
  87. app-ng-runtime/components/page/right-panel/esm2022/right-panel.directive.mjs +3 -3
  88. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +2 -2
  89. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  90. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +1 -1
  91. app-ng-runtime/package.json +1 -1
  92. app-ng-runtime/scripts/datatable/datatable.js +9 -5
  93. app-ng-runtime/variables/bundles/index.umd.js +34 -16
  94. app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +35 -17
  95. app-ng-runtime/variables/fesm2022/index.mjs +34 -16
  96. app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
  97. app-ng-runtime/variables/manager/variable/web-socket-variable.manager.d.ts +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/file-upload/src/file-upload.props.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.html","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.module.ts","../../../../../projects/components/widgets/input/file-upload/src/index.ts"],"sourcesContent":["import {PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const registerProps = () => {\n register(\n 'wm-fileupload',\n new Map(\n [\n ['caption', PROP_STRING],\n ['name', PROP_STRING],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['tabindex', PROP_NUMBER],\n ['multiple', PROP_BOOLEAN],\n ['fileuploadmessage' , PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['disabled', PROP_BOOLEAN],\n ['contenttype', PROP_STRING],\n ['maxfilesize', PROP_NUMBER],\n ['iconclass', {value: 'wm-sl-l sl-cloud-upload', ...PROP_STRING}],\n ['cleariconclass', {value: '', ...PROP_STRING}],\n ['cleariconhint', {value: 'Clear', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['uploadpath', {...PROP_STRING}],\n ['datasource', PROP_STRING],\n ['selectedFiles', PROP_STRING],\n ['destination', PROP_STRING],\n ['filelistheight', PROP_NUMBER],\n ['width', {value: 'auto', ...PROP_STRING}],\n ['showprogressbar', PROP_BOOLEAN],\n ['showprogressbarpercentage', PROP_BOOLEAN]\n ]\n )\n );\n registerFormWidget(\n FormWidgetType.UPLOAD,\n new Map([\n ['disabled', PROP_BOOLEAN],\n ['extensions', PROP_STRING],\n ['filetype', PROP_STRING],\n ['multiple', PROP_BOOLEAN],\n ['readonly', PROP_BOOLEAN],\n ['required', PROP_BOOLEAN]\n ])\n );\n};\n","<div class=\"app-fileupload\" init-widget>\n <!-- drag and drop files UI in web -->\n <div class=\"app-multi-file-upload\" *ngIf=\"!_isMobileType && multiple\">\n <div id=\"dropzone\" class=\"drop-box\" (click)=\"triggerFileSelect()\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\" (dragover)=\"dragOverHandler($event);\" (drop)=\"onFileDrop($event);\">\n <i class=\"{{iconclass}}\"></i>\n <div class=\"message\">\n <label [innerHtml]=\"caption\" class=\"upload-label\"></label>\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple >\n <a class=\"app-anchor upload-label\" href=\"javascript:void(0);\">{{ fileUploadMessage }}</a>\n </form>\n <label *ngIf=\"chooseFilter\" [innerHtml]=\"chooseFilter + ' only '\" class=\"upload-extensions\"></label>\n <span *ngIf=\"chooseFilter && maxfilesize\" class=\"upload-extensions\"> . </span>\n <label *ngIf=\"maxfilesize\" [innerHtml]=\"maxfilesize + 'MB max'\" class=\"upload-extensions\"></label>\n </div>\n </div>\n </div>\n <!-- single file upload in web and single , multiple file upload UI in mobile runmode -->\n <div class=\"app-single-file-upload\" *ngIf=\"!_isCordova && (!multiple || _isMobileType)\">\n <div class=\"app-button-wrapper\">\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <!-- support for file upload in Mobileapp in its runmode (Web) -->\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\" *ngIf=\"multiple\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n multiple name=\"files\" type=\"file\">\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\" *ngIf=\"!multiple\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n name=\"files\" type=\"file\">\n <button id=\"dropzone\" focus-target class=\"app-button btn btn-default\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\">\n <i class=\"{{iconclass}}\" aria-hidden=\"true\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n </form>\n </div>\n <div class=\"app-files-upload-status single\"></div>\n </div>\n <!-- support for file upload in Mobile Application (device) -->\n <button *ngIf=\"_isCordova\" focus-target class=\"app-button btn btn-default\" (click)=\"openFileSelector()\" [disabled]=\"disabled\">\n <i class=\"{{iconclass}}\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n <!-- list of selectedfiles UI -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" *ngIf=\"uploadedFiles.length > 0\" >\n <div *ngFor=\"let ft of uploadedFiles\">\n <li class=\"list-group-item file-upload-status\" *ngIf=\"ft.status !== 'abort'\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon {{getFileExtension(ft.name) | fileIconClass}}\" title=\"{{getFileExtension(ft.name)}}\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails col-md-3\">\n <span class=\"upload-title\">{{ ft.storageName || ft.name }}</span>\n <span *ngIf=\"ft.status === 'success'\"\n class=\"status-icon {{ft.status | stateClass }}\"></span>\n <br/>\n <span class=\"filesize\" *ngIf=\"ft.fileLength !== 0\">{{ft.size | filesize:0}}</span>\n <span *ngIf=\"ft.status === 'error'\"\n class=\"status-icon {{ft.status | stateClass }}\"\n title=\"{{ft.errMsg || this.appLocale.MESSAGE_FILE_UPLOAD_FAILED}}\"></span>\n <span *ngIf=\"ft.status === 'error'\" class=\"error-message\">Upload Failed</span>\n </p>\n <div *ngIf=\"ft.status === 'onProgress' || showprogressbar\"\n class=\"progress col-md-7 upload-progress\">\n <div [ngClass]=\"ft.status === 'error' ? 'progress-bar-danger' : 'progress-bar-info'\"\n [ngStyle]=\"{width: (ft.progress +'%')}\"\n class=\"progress-bar progress-bar-striped\"></div>\n </div>\n <div *ngIf=\"(ft.status === 'onProgress' || showprogressbar && showprogressbarpercentage) && ft.progress \"\n class=\"col-md-1 upload-progress-percentage\">{{ ft.progress + '%' }}\n </div>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'onProgress' || ft.status === 'queued'\">\n <a class=\"btn btn-transparent file-upload-stop\" type=\"button\" (click)=\"abortFileUpload(ft)\">\n <i class=\"wi wi-close\"></i>\n </a>\n </div>\n <div class=\"media-right media-middle\">\n <a (click)=\"clear(ft)\" *ngIf=\"cleariconclass !== '' && ft.status !== 'onProgress'\"\n class=\"btn btn-transparent btn-default status-icon\" title=\"{{cleariconhint}}\" type=\"button\">\n <i class=\"{{cleariconclass}}\"></i>\n </a>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'success'\">\n <a (click)=\"onFileDelete($event, ft)\" class=\"btn btn-transparent btn-default status-icon\" title=\"delete\" type=\"button\">\n <i class=\"wi wi-delete\"></i>\n </a>\n </div>\n </div>\n </li>\n </div>\n </ul>\n <!-- list of selectedfolders UI to show the error in title -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" title=\"{{this.appLocale.MESSAGE_FOLDER_UPLOADS_NOT_ALLOWED}}\" *ngIf=\"selectedFolders.length > 0\" >\n <li *ngFor=\"let ft of selectedFolders\" class=\"list-group-item file-upload-status\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon fa fa-folder-o\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails\">\n <label class=\"upload-title\">{{ft.name}}</label><br/>\n </p>\n </div>\n <div class=\"media-right media-middle\" >\n <span class=\"status-icon wi wi-cancel text-danger\"></span>\n </div>\n </div>\n </li>\n </ul>\n</div>\n","import {AfterViewInit, Attribute, Component, Inject, Injector, OnDestroy, OnInit, Optional} from '@angular/core';\n\nimport {Subject} from 'rxjs';\n\nimport {App, DataSource, getWmProjectProperties, isAudioFile, isImageFile, isVideoFile, AbstractDialogService} from '@wm/core';\nimport {provideAsWidgetRef, StylableComponent, styler} from '@wm/components/base';\n\nimport {registerProps} from './file-upload.props';\nimport {forEach, includes, isEmpty, toLower} from \"lodash-es\";\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-fileupload';\nconst WIDGET_CONFIG = {\n widgetType: 'wm-fileupload',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: '[wmFileUpload]',\n templateUrl: './file-upload.component.html',\n providers: [\n provideAsWidgetRef(FileUploadComponent)\n ]\n})\n\nexport class FileUploadComponent extends StylableComponent implements OnInit, AfterViewInit, OnDestroy {\n static initializeProps = registerProps();\n selectedFiles: any = [];\n uploadedFiles: any = [];\n selectedFolders: any = [];\n progressObservable;\n deleteFileObservable;\n name;\n hint;\n arialabel;\n multiple;\n fileTransfers = {};\n caption = 'Upload';\n formName = '';\n maxfilesize;\n cleariconclass;\n cleariconhint;\n selectedUploadTypePath;\n DEFAULT_CAPTIONS = {\n MULTIPLE_SELECT: 'Drop your files here.',\n SELECT: 'Select'\n };\n DEVICE_CONTENTTYPES = {\n IMAGE: 'image',\n VIDEO: 'video',\n AUDIO: 'audio',\n FILES: 'files'\n };\n FILESIZE_MB = 1048576;\n widgetProps;\n _isMobileType;\n _isCordova;\n // parentPrefabScope = element.closest('.app-prefab').isolateScope(),\n CONSTANT_FILE_SERVICE = 'FileService';\n uploadData = {\n file: undefined,\n uploadPath: undefined\n };\n allowedFileUploadExtensions = getWmProjectProperties().allowedFileUploadExtensions;\n defaultAllowedExtensions = this.allowedFileUploadExtensions.split(',').map(item => item.trim()).map(item => item.endsWith('/*') ? item : `.${item}`);\n chooseFilter = this.defaultAllowedExtensions.includes('*/*') ? '' : this.defaultAllowedExtensions;\n datasource;\n deletedatasource;\n fileUploadMessage = 'Drop your files here or click here to browse';\n highlightDropArea;\n showprogressbar;\n showprogressbarpercentage;\n /*_hasOnSuccessEvt = WM.isDefined(attrs.onSuccess);\n _hasOnErrorEvt = WM.isDefined(attrs.onError);*/\n\n // Checking if the selected file is valid for the choosen filter type\n isValidFile(filename, contenttype, extensionName, isMobileType) {\n let isValid, contentTypes;\n\n if (!contenttype) {\n return true;\n }\n contentTypes = toLower(contenttype).split(',');\n\n if (includes(contentTypes, 'image/*') || (includes(contentTypes, 'image') && isMobileType)) {\n isValid = isImageFile(filename);\n // If one of the content type chosen is image and user uploads image it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'audio/*') || (includes(contentTypes, 'audio') && isMobileType)) {\n isValid = isAudioFile(filename);\n // If one of the content type chosen is audio/* and user uploads audio it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'video/*') || (includes(contentTypes, 'video') && isMobileType)) {\n isValid = isVideoFile(filename);\n // If one of the content type chosen is video/* and user uploads video it is valid file\n if (isValid) {\n return isValid;\n }\n }\n /*content type and the uploaded file extension should be same*/\n if (includes(contentTypes, '.' + toLower(extensionName))) {\n isValid = true;\n }\n return isValid;\n }\n\n /* this return the array of files which are having the file size not more than maxfilesize and filters based on contenttype */\n getValidFiles($files) {\n const validFiles = [];\n const errorFiles = [];\n const MAXFILEUPLOAD_SIZE = parseFloat(this.maxfilesize) * this.FILESIZE_MB || this.FILESIZE_MB;\n const MAX_FILE_UPLOAD_FORMATTED_SIZE = (this.maxfilesize || '1') + 'MB';\n\n // if contenttype is files for mobile projects.\n if (this.chooseFilter === this.DEVICE_CONTENTTYPES.FILES) {\n this.chooseFilter = '';\n }\n\n forEach($files, (file) => {\n /* check for the file content type before uploading */\n if (!this.isValidFile(file.name, this.chooseFilter, this.getFileExtension(file.name), this._isMobileType)) {\n const msg = `${this.appLocale.LABEL_FILE_EXTENTION_VALIDATION_MESSAGE} ${this.chooseFilter}`;\n this.handleErrorFiles('INVALID_FILE_EXTENSION', msg, file, errorFiles);\n return;\n }\n if (file.size > MAXFILEUPLOAD_SIZE) {\n const msg = `${this.appLocale.LABEL_FILE_EXCEED_VALIDATION_MESSAGE} ${MAX_FILE_UPLOAD_FORMATTED_SIZE}`;\n this.handleErrorFiles('INVALID_FILE_SIZE', msg, file, errorFiles);\n return;\n }\n validFiles.push(file);\n });\n return {\n validFiles: validFiles,\n errorFiles: errorFiles\n };\n }\n\n handleErrorFiles(key, msg, file, errorFiles) {\n // Check whether the error callback exist or not. If it exists then dont show taoster message\n if (!this.hasEventCallback('error')) {\n this.app.notifyApp(msg, 'Error');\n }\n const error = {\n key: key,\n message: msg\n };\n file.error = error;\n errorFiles.push(file);\n }\n\n /*Overwrite the caption only if they are default*/\n getCaption(caption, isMultiple, isMobileType) {\n if (includes(this.DEFAULT_CAPTIONS, caption)) {\n return isMultiple && !isMobileType ? this.DEFAULT_CAPTIONS.MULTIPLE_SELECT : this.DEFAULT_CAPTIONS.SELECT;\n }\n return caption;\n }\n\n uploadUrl = 'services';\n\n /* change server path based on user option */\n changeServerUploadPath(path) {\n this.selectedUploadTypePath = path;\n }\n\n /* this function returns the fileextension */\n getFileExtension(fileName) {\n if (fileName && includes(fileName, '.')) {\n return fileName.substring(fileName.lastIndexOf('.') + 1);\n }\n return 'file';\n }\n\n /**\n * Calls select Event\n * @param $event\n * @param $files\n */\n onSelectEventCall($event, $files) {\n this.selectedFiles = $files;\n this.uploadedFiles = this.multiple ? [...this.uploadedFiles, ...$files] : $files;\n setTimeout(() => {\n this.invokeEventCallback('select', {\n $event: $.extend($event.$files || {}, $files),\n selectedFiles: $files\n });\n });\n }\n\n onFileElemClick($event) {\n this.highlightDropArea = true;\n\n //The file upload widget value should be set to null to reupload the same file.\n this.$element.find('.file-input')[0].value = null;\n $event.stopPropagation();\n\n // when the filepicker is not there on the window, remove the dropzone highlight\n window.addEventListener('focus', this.disableDropZone.bind(this));\n }\n\n disableDropZone() {\n this.highlightDropArea = false;\n window.removeEventListener('focus', this.disableDropZone);\n }\n\n /*this function to clear the specified file. if argument is not provided, it clears the complete list */\n clear(fileObj) {\n this.selectedFiles = (fileObj) ? this.clearFile(this.selectedFiles, fileObj) : [];\n this.uploadedFiles = (fileObj) ? this.clearFile(this.uploadedFiles, fileObj) : [];\n }\n\n private clearFile(files, fileObj) {\n return files.filter((file) => file?._response?.fileName !== fileObj?._response?.fileName || file?.name !== fileObj?.name || file !== fileObj);\n }\n\n /*this function to set the class names for clear icon */\n setClearIconClass(classValue) {\n this.cleariconclass = classValue;\n }\n /*this function to set the hint for clear icon */\n setClearIconHint(hint) {\n this.cleariconhint = hint;\n }\n\n\n /*this function to append upload status dom elements to widget */\n onFileSelect($event, $files) {\n let beforeSelectVal;\n const files = this.getValidFiles($files);\n $files = files.validFiles;\n\n // If the user has previously tried uploading folders using drop, and then uploading using click method we clear the folders dom\n if ($event.type === \"change\") {\n this.selectedFolders = [];\n }\n\n // Trigger error callback event if any invalid file found.\n if (!isEmpty(files.errorFiles)) {\n this.invokeEventCallback('error', {\n $event,\n files: files.errorFiles\n });\n }\n\n // Make call if there are valid files else no call is made\n if ($files.length) {\n this.progressObservable = new Subject();\n // EVENT: ON_BEFORE_SELECT\n beforeSelectVal = this.invokeEventCallback('beforeselect', {\n $event: $.extend($event.$files || {}, $files),\n files: $files\n });\n if (this.datasource) {\n this.datasource._progressObservable = this.progressObservable;\n this.datasource._progressObservable.asObservable().subscribe((progressObj) => {\n forEach(this.selectedFiles, (file) => {\n if (file.name === progressObj.fileName) {\n file.progress = progressObj.progress;\n if (file.progress === 100) {\n file.status = 'success';\n } else {\n file.status = progressObj.status;\n if (progressObj.errMsg) {\n file.errMsg = progressObj.errMsg;\n this.invokeEventCallback('error', {\n $event,\n files: file\n });\n }\n }\n }\n });\n });\n } else {\n this.selectedFiles = $files;\n }\n if (beforeSelectVal !== false) {\n // EVENT: ON_SELECT\n this.onSelectEventCall($event, $files);\n }\n }\n }\n\n onFileDelete($event, file) {\n if(!file) {\n return;\n }\n\n const beforeDeleteVal = this.invokeEventCallback('beforedelete', { $event: file });\n\n if (beforeDeleteVal !== false) {\n this.dialogService.showAppConfirmDialog({\n title: \"Delete file\",\n message: \"Are you sure you want to delete this file?\",\n oktext: \"Ok\",\n canceltext: \"Cancel\",\n onOk: () => {\n if (this.deletedatasource) {\n this.deletedatasource.setInput('file', file._response.fileName || file.name);\n this.deleteFileObservable = new Subject();\n this.deletedatasource._deleteFileObservable = this.deleteFileObservable;\n this.deletedatasource._deleteFileObservable.asObservable().subscribe((response) => {\n if(response.status === \"success\") {\n this.selectedFiles = this.selectedFiles.filter((fileObj) => file !== fileObj) || [];\n this.uploadedFiles = this.uploadedFiles.filter((fileObj) => file !== fileObj) || [];\n this.deletedatasource._deleteFileObservable.unsubscribe();\n }\n }, (error) => {\n this.deletedatasource._deleteFileObservable.unsubscribe();\n });\n }\n this.invokeEventCallback('delete', { $event: file });\n this.dialogService.closeAppConfirmDialog();\n },\n onCancel: () => {\n this.dialogService.closeAppConfirmDialog();\n },\n onOpen: () => {\n $('.cancel-action').focus();\n }\n });\n }\n }\n\n // Prevent default behavior (Prevent file from being opened)\n dragOverHandler($event) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n // Get the file data if it exists and call the onFileSelect function\n onFileDrop($event) {\n $event.preventDefault();\n let listOfFiles = [];\n this.selectedFolders = [];\n const filesData = $event.dataTransfer.items;\n if (filesData.length > 0) {\n // Use DataTransferItemList interface to access the file(s)\n for (var i = 0; i < filesData.length; i++) {\n // Get all the files and push them into an array\n if (filesData[i].webkitGetAsEntry().isFile) {\n listOfFiles.push(filesData[i].getAsFile());\n }\n // If a selected item is directory push the folder element into an array and display error message by adding to dom\n else if(filesData[i].webkitGetAsEntry().isDirectory) {\n this.selectedFolders.push(filesData[i].getAsFile());\n }\n }\n this.onFileSelect($event, listOfFiles);\n }\n }\n\n dragOverCb(e) {\n e.preventDefault();\n $(this.nativeElement).find('#dropzone').addClass('highlight-drop-box');\n }\n\n dropCb() {\n $(this.nativeElement).find('#dropzone').removeClass('highlight-drop-box');\n }\n\n // this function triggers file select window, when clicked anywhere on the file upload widget in case of multi select\n triggerFileSelect() {\n this.$element.find('.file-input').trigger('click');\n }\n\n /**\n * Aborts a file upload request\n * @param $file, the file for which the request is to be aborted\n */\n abortFileUpload($file) {\n this.datasource.execute(DataSource.Operation.CANCEL, $file);\n }\n\n isMimeType(file: string) {\n return (this.defaultAllowedExtensions.includes('image/*') && isImageFile(file))\n || (this.defaultAllowedExtensions.includes('audio/*') && isAudioFile(file))\n || (this.defaultAllowedExtensions.includes('video/*') && isVideoFile(file));\n }\n\n /* Define the property change handler. This function will be triggered when there is a change in the widget property */\n onPropertyChange(key, nv, ov) {\n /*Monitoring changes for styles or properties and accordingly handling respective changes.*/\n switch (key) {\n case 'uploadpath':\n // TODO Srinivas: why do we need uploadpath\n this.changeServerUploadPath(nv);\n break;\n case 'contenttype':\n if (this.defaultAllowedExtensions.includes('*/*')) {\n this.chooseFilter = nv.split(' ').join(',')\n } else {\n this.chooseFilter = nv.split(' ').filter(item => this.defaultAllowedExtensions.includes(item) || this.isMimeType(item)).join(',');\n if (isEmpty(this.chooseFilter)) {\n this.chooseFilter = this.defaultAllowedExtensions;\n }\n }\n\n break;\n case 'multiple':\n this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');\n this.caption = this.getCaption(this.caption, this.multiple, this._isMobileType);\n break;\n case 'fileuploadmessage':\n this.fileUploadMessage = nv;\n }\n\n super.onPropertyChange(key, nv, ov);\n }\n\n constructor(inj: Injector, private app: App, @Attribute('select.event') public onSelectEvt, private dialogService: AbstractDialogService, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n // styler(this.nativeElement, this);\n }\n\n ngOnInit() {\n super.ngOnInit();\n // adding, dragover and drop on the document as when file is dragged on to the page highlight the dropzones and remove highlight on file drop\n document.addEventListener('dragover', this.dragOverCb.bind(this));\n document.addEventListener('drop', this.dropCb.bind(this));\n\n // adding mouseleave evnt to remove highlight when file is dropped outside the window\n document.addEventListener('mouseleave', this.dropCb.bind(this));\n }\n\n ngAfterViewInit() {\n styler( this.nativeElement.querySelector('.app-button, .drop-box'), this);\n }\n\n ngOnDestroy() {\n document.removeEventListener('dragover', this.dragOverCb);\n document.removeEventListener('drop', this.dropCb);\n document.removeEventListener('mouseleave', this.dropCb);\n super.ngOnDestroy();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\n\nimport { FileUploadComponent } from './file-upload.component';\n\nconst components = [\n FileUploadComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class FileUploadModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/file-upload/src/file-upload.props.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.html","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.module.ts","../../../../../projects/components/widgets/input/file-upload/src/index.ts"],"sourcesContent":["import {PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const registerProps = () => {\n register(\n 'wm-fileupload',\n new Map(\n [\n ['caption', PROP_STRING],\n ['name', PROP_STRING],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['tabindex', PROP_NUMBER],\n ['multiple', PROP_BOOLEAN],\n ['fileuploadmessage' , PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['disabled', PROP_BOOLEAN],\n ['contenttype', PROP_STRING],\n ['maxfilesize', PROP_NUMBER],\n ['iconclass', {value: 'wm-sl-l sl-cloud-upload', ...PROP_STRING}],\n ['cleariconclass', {value: '', ...PROP_STRING}],\n ['cleariconhint', {value: 'Clear', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['uploadpath', {...PROP_STRING}],\n ['datasource', PROP_STRING],\n ['selectedFiles', PROP_STRING],\n ['destination', PROP_STRING],\n ['filelistheight', PROP_NUMBER],\n ['width', {value: 'auto', ...PROP_STRING}],\n ['showprogressbar', PROP_BOOLEAN],\n ['showprogressbarpercentage', PROP_BOOLEAN],\n ['deleteiconhint', {value: 'Delete', ...PROP_STRING}]\n ]\n )\n );\n registerFormWidget(\n FormWidgetType.UPLOAD,\n new Map([\n ['disabled', PROP_BOOLEAN],\n ['extensions', PROP_STRING],\n ['filetype', PROP_STRING],\n ['multiple', PROP_BOOLEAN],\n ['readonly', PROP_BOOLEAN],\n ['required', PROP_BOOLEAN]\n ])\n );\n};\n","<div class=\"app-fileupload\" init-widget>\n <!-- drag and drop files UI in web -->\n <div class=\"app-multi-file-upload\" *ngIf=\"!_isMobileType && multiple\">\n <div id=\"dropzone\" class=\"drop-box\" (click)=\"triggerFileSelect()\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\" (dragover)=\"dragOverHandler($event);\" (drop)=\"onFileDrop($event);\">\n <i class=\"{{iconclass}}\"></i>\n <div class=\"message\">\n <label [innerHtml]=\"caption\" class=\"upload-label\"></label>\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" *ngIf=\"multiple\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple >\n <a class=\"app-anchor upload-label\" href=\"javascript:void(0);\">{{ fileUploadMessage }}</a>\n </form>\n <label *ngIf=\"chooseFilter\" [innerHtml]=\"chooseFilter + ' only '\" class=\"upload-extensions\"></label>\n <span *ngIf=\"chooseFilter && maxfilesize\" class=\"upload-extensions\"> . </span>\n <label *ngIf=\"maxfilesize\" [innerHtml]=\"maxfilesize + 'MB max'\" class=\"upload-extensions\"></label>\n </div>\n </div>\n </div>\n <!-- single file upload in web and single , multiple file upload UI in mobile runmode -->\n <div class=\"app-single-file-upload\" *ngIf=\"!_isCordova && (!multiple || _isMobileType)\">\n <div class=\"app-button-wrapper\">\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n <!-- support for file upload in Mobileapp in its runmode (Web) -->\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\" *ngIf=\"multiple\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n multiple name=\"files\" type=\"file\">\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\" *ngIf=\"!multiple\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n name=\"files\" type=\"file\">\n <button id=\"dropzone\" focus-target class=\"app-button btn btn-default\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\">\n <i class=\"{{iconclass}}\" aria-hidden=\"true\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n </form>\n </div>\n <div class=\"app-files-upload-status single\"></div>\n </div>\n <!-- support for file upload in Mobile Application (device) -->\n <button *ngIf=\"_isCordova\" focus-target class=\"app-button btn btn-default\" (click)=\"openFileSelector()\" [disabled]=\"disabled\">\n <i class=\"{{iconclass}}\"></i>\n <span class=\"caption\" [innerHTML]=\"caption\"></span>\n </button>\n <!-- list of selectedfiles UI -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\"\n *ngIf=\"uploadedFiles.length > 0\" tabindex=\"0\">\n <ng-container *ngFor=\"let ft of uploadedFiles\">\n <li class=\"list-group-item file-upload-status\" *ngIf=\"ft.status !== 'abort'\" tabindex=\"0\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon {{getFileExtension(ft.name) | fileIconClass}}\" title=\"{{getFileExtension(ft.name)}}\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails col-md-3\">\n <span class=\"upload-title\">{{ ft.storageName || ft.name }}</span>\n <span *ngIf=\"ft.status === 'success' && (!datasource || (datasource && ft._response?.success))\"\n class=\"status-icon {{ft.status | stateClass }}\"></span>\n <br/>\n <span class=\"filesize\" *ngIf=\"ft.fileLength !== 0\">{{ft.size | filesize:0}}</span>\n <span *ngIf=\"ft.status === 'error'\"\n class=\"status-icon {{ft.status | stateClass }}\"\n title=\"{{ft.errMsg || this.appLocale.MESSAGE_FILE_UPLOAD_FAILED}}\"></span>\n <span *ngIf=\"ft.status === 'error'\" class=\"error-message\">Upload Failed</span>\n </p>\n <div *ngIf=\"ft.status === 'onProgress' || showprogressbar\"\n class=\"progress col-md-7 upload-progress\">\n <div [ngClass]=\"ft.status === 'error' ? 'progress-bar-danger' : 'progress-bar-info'\"\n [ngStyle]=\"{width: (ft.progress +'%')}\"\n class=\"progress-bar progress-bar-striped\"></div>\n </div>\n <div *ngIf=\"(ft.status === 'onProgress' || showprogressbar && showprogressbarpercentage) && ft.progress \"\n class=\"col-md-1 upload-progress-percentage\">{{ ft.progress + '%' }}\n </div>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'onProgress' || ft.status === 'queued'\">\n <a href=\"javascript:void(0)\" class=\"btn btn-transparent file-upload-stop\" type=\"button\"\n (click)=\"abortFileUpload(ft)\">\n <i class=\"wi wi-close\"></i>\n </a>\n </div>\n <div class=\"media-right media-middle\">\n <a href=\"javascript:void(0)\" (click)=\"clear(ft)\"\n *ngIf=\"cleariconclass !== '' && ft.status !== 'onProgress'\"\n class=\"btn btn-transparent btn-default status-icon\" title=\"{{cleariconhint}}\" type=\"button\">\n <i class=\"{{cleariconclass}}\"></i>\n </a>\n </div>\n <div class=\"media-right media-middle\" *ngIf=\"ft.status === 'success' && (!datasource || (datasource && ft._response?.success))\">\n <a href=\"javascript:void(0)\" (click)=\"onFileDelete($event, ft)\"\n class=\"btn btn-transparent btn-default status-icon\" title=\"{{deleteiconhint}}\" type=\"button\">\n <i class=\"wi wi-delete\"></i>\n </a>\n </div>\n </div>\n </li>\n </ng-container>\n </ul>\n <!-- list of selectedfolders UI to show the error in title -->\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" title=\"{{this.appLocale.MESSAGE_FOLDER_UPLOADS_NOT_ALLOWED}}\" *ngIf=\"selectedFolders.length > 0\" >\n <li *ngFor=\"let ft of selectedFolders\" class=\"list-group-item file-upload-status\">\n <div class=\"media upload-file-list\">\n <div class=\"media-left media-middle file-icon fa fa-folder-o\"></div>\n <div class=\"media-body media-middle file-details\">\n <p class=\"uploaddetails\">\n <label class=\"upload-title\">{{ft.name}}</label><br/>\n </p>\n </div>\n <div class=\"media-right media-middle\" >\n <span class=\"status-icon wi wi-cancel text-danger\"></span>\n </div>\n </div>\n </li>\n </ul>\n</div>\n","import {AfterViewInit, Attribute, Component, Inject, Injector, OnDestroy, OnInit, Optional} from '@angular/core';\n\nimport { Subject, Subscription } from 'rxjs';\n\nimport { App, DataSource, getWmProjectProperties, isAudioFile, isImageFile, isVideoFile, AbstractDialogService, IDGenerator } from '@wm/core';\nimport {provideAsWidgetRef, StylableComponent, styler} from '@wm/components/base';\n\nimport {registerProps} from './file-upload.props';\nimport {forEach, includes, isEmpty, toLower} from \"lodash-es\";\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-fileupload';\nconst WIDGET_CONFIG = {\n widgetType: 'wm-fileupload',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: '[wmFileUpload]',\n templateUrl: './file-upload.component.html',\n providers: [\n provideAsWidgetRef(FileUploadComponent)\n ]\n})\n\nexport class FileUploadComponent extends StylableComponent implements OnInit, AfterViewInit, OnDestroy {\n static initializeProps = registerProps();\n selectedFiles: any = [];\n uploadedFiles: any = [];\n selectedFolders: any = [];\n progressObservable: Subject<any>;\n deleteFileObservable: Subject<any>;\n name;\n hint;\n arialabel;\n multiple;\n fileTransfers = {};\n caption = 'Upload';\n formName = '';\n maxfilesize;\n cleariconclass;\n cleariconhint;\n selectedUploadTypePath;\n DEFAULT_CAPTIONS = {\n MULTIPLE_SELECT: 'Drop your files here.',\n SELECT: 'Select'\n };\n DEVICE_CONTENTTYPES = {\n IMAGE: 'image',\n VIDEO: 'video',\n AUDIO: 'audio',\n FILES: 'files'\n };\n FILESIZE_MB = 1048576;\n widgetProps;\n _isMobileType;\n _isCordova;\n // parentPrefabScope = element.closest('.app-prefab').isolateScope(),\n CONSTANT_FILE_SERVICE = 'FileService';\n uploadData = {\n file: undefined,\n uploadPath: undefined\n };\n allowedFileUploadExtensions = getWmProjectProperties().allowedFileUploadExtensions;\n defaultAllowedExtensions = this.allowedFileUploadExtensions.split(',').map(item => item.trim()).map(item => item.endsWith('/*') ? item : `.${item}`);\n chooseFilter = this.defaultAllowedExtensions.includes('*/*') ? '' : this.defaultAllowedExtensions;\n datasource;\n deletedatasource;\n fileUploadMessage = 'Drop your files here or click here to browse';\n highlightDropArea;\n showprogressbar;\n showprogressbarpercentage;\n deleteiconhint;\n private uploadProgressSubscription: Subscription;\n private deleteProgressSubscription: Subscription;\n private idGenerator = new IDGenerator('file-');\n /*_hasOnSuccessEvt = WM.isDefined(attrs.onSuccess);\n _hasOnErrorEvt = WM.isDefined(attrs.onError);*/\n\n // Checking if the selected file is valid for the choosen filter type\n isValidFile(filename, contenttype, extensionName, isMobileType) {\n let isValid, contentTypes;\n\n if (!contenttype) {\n return true;\n }\n contentTypes = toLower(contenttype).split(',');\n\n if (includes(contentTypes, 'image/*') || (includes(contentTypes, 'image') && isMobileType)) {\n isValid = isImageFile(filename);\n // If one of the content type chosen is image and user uploads image it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'audio/*') || (includes(contentTypes, 'audio') && isMobileType)) {\n isValid = isAudioFile(filename);\n // If one of the content type chosen is audio/* and user uploads audio it is valid file\n if (isValid) {\n return isValid;\n }\n }\n if (includes(contentTypes, 'video/*') || (includes(contentTypes, 'video') && isMobileType)) {\n isValid = isVideoFile(filename);\n // If one of the content type chosen is video/* and user uploads video it is valid file\n if (isValid) {\n return isValid;\n }\n }\n /*content type and the uploaded file extension should be same*/\n if (includes(contentTypes, '.' + toLower(extensionName))) {\n isValid = true;\n }\n return isValid;\n }\n\n /* this return the array of files which are having the file size not more than maxfilesize and filters based on contenttype */\n getValidFiles($files) {\n const validFiles = [];\n const errorFiles = [];\n const MAXFILEUPLOAD_SIZE = parseFloat(this.maxfilesize) * this.FILESIZE_MB || this.FILESIZE_MB;\n const MAX_FILE_UPLOAD_FORMATTED_SIZE = (this.maxfilesize || '1') + 'MB';\n\n // if contenttype is files for mobile projects.\n if (this.chooseFilter === this.DEVICE_CONTENTTYPES.FILES) {\n this.chooseFilter = '';\n }\n\n forEach($files, (file) => {\n /* check for the file content type before uploading */\n if (!this.isValidFile(file.name, this.chooseFilter, this.getFileExtension(file.name), this._isMobileType)) {\n const msg = `${this.appLocale.LABEL_FILE_EXTENTION_VALIDATION_MESSAGE} ${this.chooseFilter}`;\n this.handleErrorFiles('INVALID_FILE_EXTENSION', msg, file, errorFiles);\n return;\n }\n if (file.size > MAXFILEUPLOAD_SIZE) {\n const msg = `${this.appLocale.LABEL_FILE_EXCEED_VALIDATION_MESSAGE} ${MAX_FILE_UPLOAD_FORMATTED_SIZE}`;\n this.handleErrorFiles('INVALID_FILE_SIZE', msg, file, errorFiles);\n return;\n }\n validFiles.push(file);\n });\n return {\n validFiles: validFiles,\n errorFiles: errorFiles\n };\n }\n\n handleErrorFiles(key, msg, file, errorFiles) {\n // Check whether the error callback exist or not. If it exists then dont show taoster message\n if (!this.hasEventCallback('error')) {\n this.app.notifyApp(msg, 'Error');\n }\n const error = {\n key: key,\n message: msg\n };\n file.error = error;\n errorFiles.push(file);\n }\n\n /*Overwrite the caption only if they are default*/\n getCaption(caption, isMultiple, isMobileType) {\n if (includes(this.DEFAULT_CAPTIONS, caption)) {\n return isMultiple && !isMobileType ? this.DEFAULT_CAPTIONS.MULTIPLE_SELECT : this.DEFAULT_CAPTIONS.SELECT;\n }\n return caption;\n }\n\n uploadUrl = 'services';\n\n /* change server path based on user option */\n changeServerUploadPath(path) {\n this.selectedUploadTypePath = path;\n }\n\n /* this function returns the fileextension */\n getFileExtension(fileName) {\n if (fileName && includes(fileName, '.')) {\n return fileName.substring(fileName.lastIndexOf('.') + 1);\n }\n return 'file';\n }\n\n /**\n * Calls select Event\n * @param $event\n * @param $files\n */\n onSelectEventCall($event, $files) {\n $files.forEach(file => {\n file.uniqueId = this.idGenerator.nextUid();\n })\n this.selectedFiles = $files;\n this.uploadedFiles = this.multiple ? [...this.uploadedFiles, ...$files] : $files;\n setTimeout(() => {\n this.invokeEventCallback('select', {\n $event: $.extend($event.$files || {}, $files),\n selectedFiles: $files\n });\n });\n }\n\n onFileElemClick($event) {\n this.highlightDropArea = true;\n\n //The file upload widget value should be set to null to reupload the same file.\n this.$element.find('.file-input')[0].value = null;\n $event.stopPropagation();\n\n // when the filepicker is not there on the window, remove the dropzone highlight\n window.addEventListener('focus', this.disableDropZone.bind(this));\n }\n\n disableDropZone() {\n this.highlightDropArea = false;\n window.removeEventListener('focus', this.disableDropZone);\n }\n\n /*this function to clear the specified file. if argument is not provided, it clears the complete list */\n clear(fileObj) {\n this.selectedFiles = (fileObj) ? this.clearFile(this.selectedFiles, fileObj) : [];\n this.uploadedFiles = (fileObj) ? this.clearFile(this.uploadedFiles, fileObj) : [];\n }\n\n private clearFile(files, fileObj) {\n return files.filter((file) => file?._response?.fileName !== fileObj?._response?.fileName || file?.name !== fileObj?.name || file !== fileObj);\n }\n\n /*this function to set the class names for clear icon */\n setClearIconClass(classValue) {\n this.cleariconclass = classValue;\n }\n /*this function to set the hint for clear icon */\n setClearIconHint(hint) {\n this.cleariconhint = hint;\n }\n\n\n /*this function to append upload status dom elements to widget */\n onFileSelect($event, $files) {\n let beforeSelectVal;\n const files = this.getValidFiles($files);\n $files = files.validFiles;\n\n // If the user has previously tried uploading folders using drop, and then uploading using click method we clear the folders dom\n if ($event.type === \"change\") {\n this.selectedFolders = [];\n }\n\n // Trigger error callback event if any invalid file found.\n if (!isEmpty(files.errorFiles)) {\n this.invokeEventCallback('error', {\n $event,\n files: files.errorFiles\n });\n }\n\n // Make call if there are valid files else no call is made\n if ($files.length) {\n // EVENT: ON_BEFORE_SELECT\n beforeSelectVal = this.invokeEventCallback('beforeselect', {\n $event: $.extend($event.$files || {}, $files),\n files: $files\n });\n if (this.datasource) {\n if(!this.uploadProgressSubscription) {\n this.progressObservable = new Subject();\n this.datasource._progressObservable = this.progressObservable;\n this.uploadProgressSubscription = this.datasource._progressObservable.asObservable().subscribe((progressObj) => {\n forEach(this.uploadedFiles, (file) => {\n if (file.name === progressObj.fileName && file.uniqueId === progressObj.uniqueId) {\n file.progress = progressObj.progress;\n if (file.progress === 100) {\n file.status = 'success';\n } else {\n file.status = progressObj.status;\n if (progressObj.errMsg) {\n file.errMsg = progressObj.errMsg;\n this.invokeEventCallback('error', {\n $event,\n files: file\n });\n }\n }\n }\n });\n });\n }\n } else {\n this.selectedFiles = $files;\n }\n if (beforeSelectVal !== false) {\n // EVENT: ON_SELECT\n this.onSelectEventCall($event, $files);\n }\n }\n }\n\n onFileDelete($event, file) {\n if(!file) {\n return;\n }\n\n const beforeDeleteVal = this.invokeEventCallback('beforedelete', { $event: file });\n\n if (beforeDeleteVal !== false) {\n this.dialogService.showAppConfirmDialog({\n title: \"Delete file\",\n message: \"Are you sure you want to delete this file?\",\n oktext: \"Ok\",\n canceltext: \"Cancel\",\n onOk: () => {\n if (this.deletedatasource) {\n this.deletedatasource.setInput('file', file._response.fileName || file.name);\n\n if(!this.deleteProgressSubscription) {\n this.deleteFileObservable = new Subject();\n this.deletedatasource._deleteFileObservable = this.deleteFileObservable;\n this.deletedatasource._deleteFileObservable.asObservable().subscribe((response) => {\n if(response.status === \"success\") {\n this.selectedFiles = this.selectedFiles.filter((fileObj) => file !== fileObj) || [];\n this.uploadedFiles = this.uploadedFiles.filter((fileObj) => file !== fileObj) || [];\n }\n });\n }\n }\n this.invokeEventCallback('delete', { $event: file });\n this.dialogService.closeAppConfirmDialog();\n },\n onCancel: () => {\n this.dialogService.closeAppConfirmDialog();\n },\n onOpen: () => {\n $('.cancel-action').focus();\n }\n });\n }\n }\n\n // Prevent default behavior (Prevent file from being opened)\n dragOverHandler($event) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n // Get the file data if it exists and call the onFileSelect function\n onFileDrop($event) {\n $event.preventDefault();\n let listOfFiles = [];\n this.selectedFolders = [];\n const filesData = $event.dataTransfer.items;\n if (filesData.length > 0) {\n // Use DataTransferItemList interface to access the file(s)\n for (var i = 0; i < filesData.length; i++) {\n // Get all the files and push them into an array\n if (filesData[i].webkitGetAsEntry().isFile) {\n listOfFiles.push(filesData[i].getAsFile());\n }\n // If a selected item is directory push the folder element into an array and display error message by adding to dom\n else if(filesData[i].webkitGetAsEntry().isDirectory) {\n this.selectedFolders.push(filesData[i].getAsFile());\n }\n }\n this.onFileSelect($event, listOfFiles);\n }\n }\n\n dragOverCb(e) {\n e.preventDefault();\n $(this.nativeElement).find('#dropzone').addClass('highlight-drop-box');\n }\n\n dropCb() {\n $(this.nativeElement).find('#dropzone').removeClass('highlight-drop-box');\n }\n\n // this function triggers file select window, when clicked anywhere on the file upload widget in case of multi select\n triggerFileSelect() {\n this.$element.find('.file-input').trigger('click');\n }\n\n /**\n * Aborts a file upload request\n * @param $file, the file for which the request is to be aborted\n */\n abortFileUpload($file) {\n this.datasource.execute(DataSource.Operation.CANCEL, $file);\n }\n\n isMimeType(file: string) {\n return (this.defaultAllowedExtensions.includes('image/*') && isImageFile(file))\n || (this.defaultAllowedExtensions.includes('audio/*') && isAudioFile(file))\n || (this.defaultAllowedExtensions.includes('video/*') && isVideoFile(file));\n }\n\n /* Define the property change handler. This function will be triggered when there is a change in the widget property */\n onPropertyChange(key, nv, ov) {\n /*Monitoring changes for styles or properties and accordingly handling respective changes.*/\n switch (key) {\n case 'uploadpath':\n // TODO Srinivas: why do we need uploadpath\n this.changeServerUploadPath(nv);\n break;\n case 'contenttype':\n if (this.defaultAllowedExtensions.includes('*/*')) {\n this.chooseFilter = nv.split(' ').join(',')\n } else {\n this.chooseFilter = nv.split(' ').filter(item => this.defaultAllowedExtensions.includes(item) || this.isMimeType(item)).join(',');\n if (isEmpty(this.chooseFilter)) {\n this.chooseFilter = this.defaultAllowedExtensions;\n }\n }\n\n break;\n case 'multiple':\n this.formName = this.name + (this.multiple ? '-multiple-fileupload' : '-single-fileupload');\n this.caption = this.getCaption(this.caption, this.multiple, this._isMobileType);\n break;\n case 'fileuploadmessage':\n this.fileUploadMessage = nv;\n }\n\n super.onPropertyChange(key, nv, ov);\n }\n\n constructor(inj: Injector, private app: App, @Attribute('select.event') public onSelectEvt, private dialogService: AbstractDialogService, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n // styler(this.nativeElement, this);\n }\n\n ngOnInit() {\n super.ngOnInit();\n // adding, dragover and drop on the document as when file is dragged on to the page highlight the dropzones and remove highlight on file drop\n document.addEventListener('dragover', this.dragOverCb.bind(this));\n document.addEventListener('drop', this.dropCb.bind(this));\n\n // adding mouseleave evnt to remove highlight when file is dropped outside the window\n document.addEventListener('mouseleave', this.dropCb.bind(this));\n }\n\n ngAfterViewInit() {\n styler( this.nativeElement.querySelector('.app-button, .drop-box'), this);\n }\n\n ngOnDestroy() {\n document.removeEventListener('dragover', this.dragOverCb);\n document.removeEventListener('drop', this.dropCb);\n document.removeEventListener('mouseleave', this.dropCb);\n super.ngOnDestroy();\n\n const subscriptions = [this.uploadProgressSubscription, this.deleteProgressSubscription];\n subscriptions.forEach(subscription => {\n if (subscription) {\n subscription.unsubscribe();\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\n\nimport { FileUploadComponent } from './file-upload.component';\n\nconst components = [\n FileUploadComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class FileUploadModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { AfterViewInit, Injector, OnDestroy, OnInit } from '@angular/core';
2
+ import { Subject } from 'rxjs';
2
3
  import { App, AbstractDialogService } from '@wm/core';
3
4
  import { StylableComponent } from '@wm/components/base';
4
5
  import * as i0 from "@angular/core";
@@ -10,8 +11,8 @@ export declare class FileUploadComponent extends StylableComponent implements On
10
11
  selectedFiles: any;
11
12
  uploadedFiles: any;
12
13
  selectedFolders: any;
13
- progressObservable: any;
14
- deleteFileObservable: any;
14
+ progressObservable: Subject<any>;
15
+ deleteFileObservable: Subject<any>;
15
16
  name: any;
16
17
  hint: any;
17
18
  arialabel: any;
@@ -51,6 +52,10 @@ export declare class FileUploadComponent extends StylableComponent implements On
51
52
  highlightDropArea: any;
52
53
  showprogressbar: any;
53
54
  showprogressbarpercentage: any;
55
+ deleteiconhint: any;
56
+ private uploadProgressSubscription;
57
+ private deleteProgressSubscription;
58
+ private idGenerator;
54
59
  isValidFile(filename: any, contenttype: any, extensionName: any, isMobileType: any): any;
55
60
  getValidFiles($files: any): {
56
61
  validFiles: any[];
@@ -265,7 +265,7 @@
265
265
  } }, features: [i0__namespace.ɵɵProvidersFeature([
266
266
  i3.provideAs(RatingComponent, i2.NG_VALUE_ACCESSOR, true),
267
267
  i3.provideAsWidgetRef(RatingComponent)
268
- ]), i0__namespace.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 4, vars: 7, consts: [["ratingInput", ""], ["aria-multiselectable", "true", "ngDefaultControl", "", 1, "ratings-wrapper", 3, "focus", "ngModelChange", "ngModel", "ngModelOptions"], [1, "rating-style"], [3, "ngClass", "ngStyle", "title", "for", "touchstart", "mouseleave", "mouseover", 4, "ngFor", "ngForOf"], ["class", "caption", 3, "textContent", 4, "ngIf"], [3, "touchstart", "mouseleave", "mouseover", "ngClass", "ngStyle", "title", "for"], ["aria-hidden", "true"], ["type", "radio", "role", "radio", "name", "ratings-id", 3, "click", "id", "value"], [1, "caption", 3, "textContent"]], template: function RatingComponent_Template(rf, ctx) { if (rf & 1) {
268
+ ]), i0__namespace.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 4, vars: 7, consts: [["ratingInput", ""], ["ngDefaultControl", "", 1, "ratings-wrapper", 3, "focus", "ngModelChange", "ngModel", "ngModelOptions"], [1, "rating-style"], [3, "ngClass", "ngStyle", "title", "for", "touchstart", "mouseleave", "mouseover", 4, "ngFor", "ngForOf"], ["class", "caption", 3, "textContent", 4, "ngIf"], [3, "touchstart", "mouseleave", "mouseover", "ngClass", "ngStyle", "title", "for"], ["aria-hidden", "true"], ["type", "radio", "role", "radio", "name", "ratings-id", 3, "click", "id", "value"], [1, "caption", 3, "textContent"]], template: function RatingComponent_Template(rf, ctx) { if (rf & 1) {
269
269
  i0__namespace.ɵɵelementStart(0, "div", 1);
270
270
  i0__namespace.ɵɵlistener("focus", function RatingComponent_Template_div_focus_0_listener($event) { return ctx.onFocus($event); });
271
271
  i0__namespace.ɵɵtwoWayListener("ngModelChange", function RatingComponent_Template_div_ngModelChange_0_listener($event) { i0__namespace.ɵɵtwoWayBindingSet(ctx.modelByKey, $event) || (ctx.modelByKey = $event); return $event; });
@@ -290,7 +290,7 @@
290
290
  args: [{ selector: '[wmRating]', providers: [
291
291
  i3.provideAs(RatingComponent, i2.NG_VALUE_ACCESSOR, true),
292
292
  i3.provideAsWidgetRef(RatingComponent)
293
- ], template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\" aria-multiselectable=\"true\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.disabled]=\"readonly\" class=\"rating-style\">\n <label *ngFor=\"let rate of ratingItems;\"\n [ngClass]=\"{active : rate.index <= selectedRatingValue}\"\n [ngStyle]=\"{'font-size' :iconsize, color: rate.index <= selectedRatingValue && iconcolor}\"\n [title]=\"rate.label || rate.index\"\n (touchstart)=\"onTouchStart($event)\"\n (mouseleave)=\"onMouseleave($event, rate)\"\n (mouseover)=\"onMouseOver($event, rate)\"\n [for]=\"_id + '-' + rate.index\">\n <i class=\"app-icon {{rate.index <= selectedRatingValue ? activeiconclass : inactiveiconclass}}\" aria-hidden=\"true\"></i>\n <input #ratingInput type=\"radio\" role=\"radio\" [attr.aria-label]=\"(rate.label || rate.index) + ' out of ' + ratingItems.length + ' ratings'\" [attr.aria-checked]=\"rate.label === datavalue ? 'true' : 'false'\"\n [id]=\"_id + '-' + rate.index\" (click)=\"onRatingClick($event, rate)\" name=\"ratings-id\" [value]=\"rate.key || rate.index\"/>\n </label>\n </div>\n <label *ngIf=\"showcaptions\" class=\"caption\" [textContent]=\"caption\"></label>\n</div>\n" }]
293
+ ], template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.disabled]=\"readonly\" class=\"rating-style\">\n <label *ngFor=\"let rate of ratingItems;\"\n [ngClass]=\"{active : rate.index <= selectedRatingValue}\"\n [ngStyle]=\"{'font-size' :iconsize, color: rate.index <= selectedRatingValue && iconcolor}\"\n [title]=\"rate.label || rate.index\"\n (touchstart)=\"onTouchStart($event)\"\n (mouseleave)=\"onMouseleave($event, rate)\"\n (mouseover)=\"onMouseOver($event, rate)\"\n [for]=\"_id + '-' + rate.index\">\n <i class=\"app-icon {{rate.index <= selectedRatingValue ? activeiconclass : inactiveiconclass}}\" aria-hidden=\"true\"></i>\n <input #ratingInput type=\"radio\" role=\"radio\" [attr.aria-label]=\"(rate.label || rate.index) + ' out of ' + ratingItems.length + ' ratings'\" [attr.aria-checked]=\"rate.label === datavalue ? 'true' : 'false'\"\n [id]=\"_id + '-' + rate.index\" (click)=\"onRatingClick($event, rate)\" name=\"ratings-id\" [value]=\"rate.key || rate.index\"/>\n </label>\n </div>\n <label *ngIf=\"showcaptions\" class=\"caption\" [textContent]=\"caption\"></label>\n</div>\n" }]
294
294
  }], () => [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
295
295
  type: i0.Inject,
296
296
  args: ['EXPLICIT_CONTEXT']
@@ -221,7 +221,7 @@ export class RatingComponent extends DatasetAwareFormComponent {
221
221
  } }, features: [i0.ɵɵProvidersFeature([
222
222
  provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),
223
223
  provideAsWidgetRef(RatingComponent)
224
- ]), i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 4, vars: 7, consts: [["ratingInput", ""], ["aria-multiselectable", "true", "ngDefaultControl", "", 1, "ratings-wrapper", 3, "focus", "ngModelChange", "ngModel", "ngModelOptions"], [1, "rating-style"], [3, "ngClass", "ngStyle", "title", "for", "touchstart", "mouseleave", "mouseover", 4, "ngFor", "ngForOf"], ["class", "caption", 3, "textContent", 4, "ngIf"], [3, "touchstart", "mouseleave", "mouseover", "ngClass", "ngStyle", "title", "for"], ["aria-hidden", "true"], ["type", "radio", "role", "radio", "name", "ratings-id", 3, "click", "id", "value"], [1, "caption", 3, "textContent"]], template: function RatingComponent_Template(rf, ctx) { if (rf & 1) {
224
+ ]), i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 4, vars: 7, consts: [["ratingInput", ""], ["ngDefaultControl", "", 1, "ratings-wrapper", 3, "focus", "ngModelChange", "ngModel", "ngModelOptions"], [1, "rating-style"], [3, "ngClass", "ngStyle", "title", "for", "touchstart", "mouseleave", "mouseover", 4, "ngFor", "ngForOf"], ["class", "caption", 3, "textContent", 4, "ngIf"], [3, "touchstart", "mouseleave", "mouseover", "ngClass", "ngStyle", "title", "for"], ["aria-hidden", "true"], ["type", "radio", "role", "radio", "name", "ratings-id", 3, "click", "id", "value"], [1, "caption", 3, "textContent"]], template: function RatingComponent_Template(rf, ctx) { if (rf & 1) {
225
225
  i0.ɵɵelementStart(0, "div", 1);
226
226
  i0.ɵɵlistener("focus", function RatingComponent_Template_div_focus_0_listener($event) { return ctx.onFocus($event); });
227
227
  i0.ɵɵtwoWayListener("ngModelChange", function RatingComponent_Template_div_ngModelChange_0_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.modelByKey, $event) || (ctx.modelByKey = $event); return $event; });
@@ -246,7 +246,7 @@ export class RatingComponent extends DatasetAwareFormComponent {
246
246
  args: [{ selector: '[wmRating]', providers: [
247
247
  provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),
248
248
  provideAsWidgetRef(RatingComponent)
249
- ], template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\" aria-multiselectable=\"true\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.disabled]=\"readonly\" class=\"rating-style\">\n <label *ngFor=\"let rate of ratingItems;\"\n [ngClass]=\"{active : rate.index <= selectedRatingValue}\"\n [ngStyle]=\"{'font-size' :iconsize, color: rate.index <= selectedRatingValue && iconcolor}\"\n [title]=\"rate.label || rate.index\"\n (touchstart)=\"onTouchStart($event)\"\n (mouseleave)=\"onMouseleave($event, rate)\"\n (mouseover)=\"onMouseOver($event, rate)\"\n [for]=\"_id + '-' + rate.index\">\n <i class=\"app-icon {{rate.index <= selectedRatingValue ? activeiconclass : inactiveiconclass}}\" aria-hidden=\"true\"></i>\n <input #ratingInput type=\"radio\" role=\"radio\" [attr.aria-label]=\"(rate.label || rate.index) + ' out of ' + ratingItems.length + ' ratings'\" [attr.aria-checked]=\"rate.label === datavalue ? 'true' : 'false'\"\n [id]=\"_id + '-' + rate.index\" (click)=\"onRatingClick($event, rate)\" name=\"ratings-id\" [value]=\"rate.key || rate.index\"/>\n </label>\n </div>\n <label *ngIf=\"showcaptions\" class=\"caption\" [textContent]=\"caption\"></label>\n</div>\n" }]
249
+ ], template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.disabled]=\"readonly\" class=\"rating-style\">\n <label *ngFor=\"let rate of ratingItems;\"\n [ngClass]=\"{active : rate.index <= selectedRatingValue}\"\n [ngStyle]=\"{'font-size' :iconsize, color: rate.index <= selectedRatingValue && iconcolor}\"\n [title]=\"rate.label || rate.index\"\n (touchstart)=\"onTouchStart($event)\"\n (mouseleave)=\"onMouseleave($event, rate)\"\n (mouseover)=\"onMouseOver($event, rate)\"\n [for]=\"_id + '-' + rate.index\">\n <i class=\"app-icon {{rate.index <= selectedRatingValue ? activeiconclass : inactiveiconclass}}\" aria-hidden=\"true\"></i>\n <input #ratingInput type=\"radio\" role=\"radio\" [attr.aria-label]=\"(rate.label || rate.index) + ' out of ' + ratingItems.length + ' ratings'\" [attr.aria-checked]=\"rate.label === datavalue ? 'true' : 'false'\"\n [id]=\"_id + '-' + rate.index\" (click)=\"onRatingClick($event, rate)\" name=\"ratings-id\" [value]=\"rate.key || rate.index\"/>\n </label>\n </div>\n <label *ngIf=\"showcaptions\" class=\"caption\" [textContent]=\"caption\"></label>\n</div>\n" }]
250
250
  }], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
251
251
  type: Inject,
252
252
  args: ['EXPLICIT_CONTEXT']
@@ -257,4 +257,4 @@ export class RatingComponent extends DatasetAwareFormComponent {
257
257
  args: ['ratingInput', /* TODO: add static flag */ { read: ElementRef }]
258
258
  }] }); })();
259
259
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RatingComponent, { className: "RatingComponent", filePath: "rating.component.ts", lineNumber: 25 }); })();
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9yYXRpbmcvc3JjL3JhdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvcmF0aW5nL3NyYy9yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxZQUFZLEVBQVUsSUFBSSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7SUNMOUQsZ0NBT3NDO0lBRC9CLEFBREEsQUFEQSw0TEFBYywyQkFBb0IsS0FBQyx5TUFDckIsb0NBQTBCLEtBQUMsdU1BQzVCLG1DQUF5QixLQUFDO0lBRTFDLHVCQUF1SDtJQUN2SCxtQ0FDK0g7SUFBMUYsNE1BQVMscUNBQTJCLEtBQUM7SUFDOUUsQUFGSSxpQkFDK0gsRUFDM0g7Ozs7SUFKRCxBQUpBLEFBREEsQUFEQSxrR0FBd0QsMEhBQ2tDLHlD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QixFQUFFLElBQUksQ0FBQztvQkFDbkQsa0JBQWtCLGlCQUFpQjtpQkFDdEM7O3NCQStCMkIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBWFksUUFBUTtrQkFBbkYsU0FBUzttQkFBQyxhQUFhLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOztrRkFsQmpFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RvciwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtnZW5lcmF0ZUdVSWQsIHNldENTUywgbm9vcH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgZ2V0T3JkZXJlZERhdGFzZXQsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3JhdGluZy5wcm9wcyc7XG5pbXBvcnQge2ZpbmQsIGlzRW1wdHksIGlzVW5kZWZpbmVkLCBzbGljZSwgdG9TdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLXJhdGluZ3MnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tcmF0aW5nJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbmNvbnN0IE1BWF9SQVRJTkcgPSAxMDtcbmNvbnN0IERFRkFVTFRfUkFUSU5HID0gNTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21SYXRpbmddJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmF0aW5nLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFJhdGluZ0NvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUmF0aW5nQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUmF0aW5nQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHNob3djYXB0aW9uczogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF4dmFsdWU7XG5cbiAgICBwcml2YXRlIF9zZWxlY3RlZFJhdGluZ1ZhbHVlO1xuICAgIHB1YmxpYyByYXRpbmdzV2lkdGg7XG4gICAgcHVibGljIHJhdGluZ0l0ZW1zO1xuICAgIHByaXZhdGUgX2lkO1xuXG4gICAgcHVibGljIGljb25zaXplOiBzdHJpbmc7XG4gICAgcHVibGljIGljb25jb2xvcjogc3RyaW5nO1xuICAgIHB1YmxpYyBvbkZvY3VzOiBhbnk7XG4gICAgcHJpdmF0ZSB0b3VjaEVuYWJsZWQ6Ym9vbGVhbjtcbiAgICBwdWJsaWMgYWN0aXZlaWNvbmNsYXNzOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgaW5hY3RpdmVpY29uY2xhc3M6IHN0cmluZyA9ICcnO1xuICAgIEBWaWV3Q2hpbGQoJ3JhdGluZ0lucHV0JywgLyogVE9ETzogYWRkIHN0YXRpYyBmbGFnICovIHsgcmVhZDogRWxlbWVudFJlZiB9KSByYXRpbmdFbDogRWxlbWVudFJlZjtcblxuICAgIGdldCBzZWxlY3RlZFJhdGluZ1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSYXRpbmdWYWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRSYXRpbmdWYWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IHZhbDtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSYXRpbmdzV2lkdGgoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLl9pZCA9IGdlbmVyYXRlR1VJZCgpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICAvLyBwcmVwYXJlIHRoZSByYXRpbmcgb3B0aW9ucyBvbiBkYXRhc2V0IHJlYWR5LlxuICAgICAgICBjb25zdCBkYXRhc2V0U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhc2V0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmF0aW5nRGF0YXNldCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIC8vIGxpc3RlbiB0byBjaGFuZ2VzIGluIGRhdGF2YWx1ZS5cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGF0YXZhbHVlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIC8vIENoYW5nZSBldmVudCBpcyByZWdpc3RlcmVkIGZyb20gdGhlIHRlbXBsYXRlLCBQcmV2ZW50IHRoZSBmcmFtZXdvcmsgZnJvbSByZWdpc3RlcmluZyBvbmUgbW9yZSBldmVudFxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnY2hhbmdlJyAmJiBldmVudE5hbWUgIT09ICdibHVyJykge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQodGhpcy5yYXRpbmdFbC5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJhdGluZyB3aWRnZXQgZGF0YXNldCBjb250YWluaW5nIHRoZSBpbmRleCwgdmFsdWUgYW5kIGxhYmVsXG4gICAgcHJpdmF0ZSBwcmVwYXJlUmF0aW5nRGF0YXNldCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmF0aW5nSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2FwdGlvbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJhdGluZ0l0ZW1zID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhc2V0SXRlbXM7XG4gICAgICAgIGNvbnN0IG1heHZhbHVlID0gcGFyc2VJbnQodGhpcy5tYXh2YWx1ZSB8fCB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGgsIDEwKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSAobWF4dmFsdWUgPiBNQVhfUkFUSU5HID8gTUFYX1JBVElORyA6IG1heHZhbHVlKSB8fCBERUZBVUxUX1JBVElORztcblxuICAgICAgICAvKipcbiAgICAgICAgICogMS4gSWYgZGF0YXNldEl0ZW1zLmxlbmd0aCBpcyBtb3JlIHRoYW4gbWF4VmFsdWUgKGkuZS4gMTAgcmF0aW5ncykgdGhlbiBqdXN0IGV4dHJhY3QgbWF4VmFsdWUgb2YgaXRlbXMgZnJvbSBkYXRhc2V0SXRlbXMuXG4gICAgICAgICAqIDIuIElmIGRhdGFzZXRJdGVtcyBhcmUgbm90IGF2YWlsYWJsZSB0aGVuIHByZXBhcmUgcmF0aW5ncyB2YWx1ZSBkZXBlbmRpbmcgb24gbWF4dmFsdWUuIGVnOiAxLDIsMyAuLiB1cHRvIG1heHZhbHVlXG4gICAgICAgICAqIDMuIElmIG1heHZhbHVlIC8gaSB2YWx1ZSBpcyBtb3JlIHRoYW4gZGF0YXNldEl0ZW1zIGxlbmd0aCwgcHJlcGFyZSBkZWZhdWx0IHJhdGluZyBpdGVtcyBmb3IgaSB2YWx1ZXMgbW9yZSB0aGFuIGRhdGFzZXRJdGVtcy5sZW5ndGhcbiAgICAgICAgICovXG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCAmJiBkYXRhLmxlbmd0aCA+IG1heFZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhID0gc2xpY2UoZGF0YSwgMCwgbWF4VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IG1heFZhbHVlOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmF0aW5nSXRlbXMucHVzaCh7a2V5OiBpLCB2YWx1ZTogaSwgaW5kZXg6IGksIGxhYmVsOiBpfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpID4gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmF0aW5nSXRlbXMucHVzaCh7a2V5OiBpLCB2YWx1ZTogaSwgaW5kZXg6IGksIGxhYmVsOiBpfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldE9yZGVyZWREYXRhc2V0KGRhdGEsICdpbmRleDpkZXNjJyk7XG4gICAgICAgICAgICAgICAgICAgIHJhdGluZ0l0ZW1zID0gcmF0aW5nSXRlbXMuY29uY2F0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJhdGluZ0l0ZW1zID0gcmF0aW5nSXRlbXM7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHsgLy8gY29uc3RydWN0cyBkZWZhdWx0IGRhdGFzZXRJdGVtcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGFzZXQgYmluZGluZy5cbiAgICAgICAgICAgIHRoaXMuZGF0YXNldEl0ZW1zID0gcmF0aW5nSXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRhdGF2YWx1ZUNoYW5nZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25SYXRpbmdDbGljaygkZXZlbnQsIHJhdGUpIHtcbiAgICAgICAgdGhpcy5tb2RlbEJ5S2V5ID0gcmF0ZS5rZXk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IHJhdGUuaW5kZXg7XG5cbiAgICAgICAgLy8gc3VwcG9ydCBpZiB0aGUgY2FwdGlvbiBpcyBiaW5kZWQgaW4gdGhlIG9sZCBwcm9qZWN0cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBpZiAoIXRoaXMuc2hvd2NhcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHRpb24gPSByYXRlLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgLy8gaW52b2tlIG9uIGRhdGF2YWx1ZSBjaGFuZ2UuXG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsICRldmVudCB8fCB7fSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBmbGFnIG9uIGRhdGFzZXRJdGVtcyBhbmQgYXNzaWduIHRoZSByYXRpbmdWYWx1ZS5cbiAgICAvKipcbiAgICAgKiBPbiBkYXRhdmFsdWUgY2hhbmdlLCB1cGRhdGUgdGhlIGNhcHRpb24sIHNlbGVjdGVkUmF0aW5nVmFsdWUuXG4gICAgICogMS4gaWYgZGF0YXNldEl0ZW1zIGNvbnRhaW4gdGhlIHNlbGVjdGVkIGl0ZW0gKGNoZWNrIHRoZSBzZWxlY3RlZCBmbGFnIG9uIGl0ZW0pLCBmaW5kIHRoZSBpbmRleCBvZiBzZWxlY3RlZCBpdGVtLlxuICAgICAqIDIuIGlmIG5vdCwganVzdCBjaGVjayBpZiB0aGUgZGF0YXZhbHVlIGlzIHByb3ZpZGVkIGFzIHRoZSBpbmRleCBvbiB0aGUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVmFsIGRhdGF2YWx1ZVxuICAgICAqL1xuICAgIG9uRGF0YXZhbHVlQ2hhbmdlKGRhdGFWYWwpIHtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuZGF0YXNldEl0ZW1zKSkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkSXRlbSA9IGZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIHsnc2VsZWN0ZWQnOiB0cnVlfSk7XG5cbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRJdGVtICYmICFpc1VuZGVmaW5lZChkYXRhVmFsKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IGZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZyhpdGVtLmluZGV4KSA9PT0gZGF0YVZhbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSAgbW9kZWwgaWYgdGhlcmUgaXMgbm8gaXRlbSBmb3VuZC5cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQnlLZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IHNlbGVjdGVkSXRlbSA/IHNlbGVjdGVkSXRlbS5pbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uID0gc2VsZWN0ZWRJdGVtLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhdGluZ1ZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgLy8gd2hlbiBkYXRhc2V0IGlzIG5vdCBnaXZlbiBidXQgZGF0YXZhbHVlIGlzIHByb3ZpZGVkIHdoaWNoIGlzIGludGVnZXJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJhdGluZ1ZhbHVlICYmICFpc05hTihkYXRhVmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IChwYXJzZUZsb2F0KGRhdGFWYWwpIDw9IHRoaXMubWF4dmFsdWUpID8gZGF0YVZhbCA6IHRoaXMubWF4dmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhdGluZ3NXaWR0aCA9IHRoaXMuY2FsY3VsYXRlUmF0aW5nc1dpZHRoKGRhdGFWYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUmF0aW5nc1dpZHRoKGRhdGFWYWw/OiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYXRpbmcgPSBwYXJzZUZsb2F0KHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSksXG4gICAgICAgICAgICBzdGFyV2lkdGggPSAwLjkyNSxcbiAgICAgICAgICAgIG1heFZhbHVlID0gcGFyc2VJbnQodGhpcy5tYXh2YWx1ZSB8fCB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGgsIDEwKSB8fCBERUZBVUxUX1JBVElORztcblxuICAgICAgICBkYXRhVmFsID0gZGF0YVZhbCB8fCB0aGlzLmRhdGF2YWx1ZTtcbiAgICAgICAgaWYgKGRhdGFWYWwgPT09IHVuZGVmaW5lZCB8fCBkYXRhVmFsID09PSAnJyB8fCBkYXRhVmFsID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHRpb24gPSAnJztcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJhdGluZyA8PSBtYXhWYWx1ZSAmJiBzZWxlY3RlZFJhdGluZyA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRSYXRpbmcgKiBzdGFyV2lkdGggKyAnZW0nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJhdGluZyA+IG1heFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF4VmFsdWUgKiBzdGFyV2lkdGggKyAnZW0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlYWRvbmx5Jykge1xuICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXRpbmdzV2lkdGggPSB0aGlzLmNhbGN1bGF0ZVJhdGluZ3NXaWR0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heHZhbHVlJykge1xuICAgICAgICAgICAgLyoqIFN0b3JpbmcgdGhlIGRhdGF2YWx1ZSBpbiB0ZW1wIHZhcmlhYmxlIGFuZCBhc3NpZ2luZyBiYWNrIHRvIGRhdGF2YWx1ZVxuICAgICAgICAgICAgICogYWZ0ZXIgZGVmYXVsdCBkYXRhbGlzdCBpcyBwcmVwYXJlZCB0byB0cmlnZ2VyIERhdGFzZXQgQXdhcmUgY2xhc3Mgc2VsZWN0IGN5Y2xlXG4gICAgICAgICAgICAgKiBhcyB0aGUgZGF0YXZhbHVlIHByb3BlcnR5IGNoYW5nZSBpcyB0cmlnZ2VyaW5nIGZpcnN0IHJhdGhlciB0aGFuIG1heHZhbHVlXG4gICAgICAgICAgICAgKiBpbiB0aGUgcmF0aW5nIHdpZGdldCBpcyB1c2VkIGluc2lkZSBhIGRhdGF0YWJsZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgdGVtcERhdGFWYWx1ZSA9IHRoaXMuZGF0YXZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmF0aW5nRGF0YXNldCgpO1xuICAgICAgICAgICAgLy8gcmVzZXQgYWxsIHRoZSBpdGVtcy5cbiAgICAgICAgICAgIHRoaXMucmVzZXREYXRhc2V0SXRlbXMoKTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodGVtcERhdGFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHRlbXBEYXRhVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qIERldGVjdCB0b3VjaCBlbmFibGVkIGRldmljZXMgJiB1cGRhdGUgaG92ZXIgc3R5bGVzKi9cbiAgICBvblRvdWNoU3RhcnQoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMudG91Y2hFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQgPSBub29wO1xuICAgIH1cbiAgICBvbk1vdXNlbGVhdmUoKSB7XG4gICAgICAgIHRoaXMuY2FwdGlvbiA9IHRoaXMuZGlzcGxheVZhbHVlIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBvbk1vdXNlT3ZlcigkZXZlbnQsIHJhdGUpIHtcbiAgICAgICAgdGhpcy5jYXB0aW9uID0gcmF0ZS5sYWJlbDtcbiAgICAgICAgIXRoaXMudG91Y2hFbmFibGVkICYmICEkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncmF0aW5nLWxhYmVsLWhvdmVyJykgJiYgJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdyYXRpbmctbGFiZWwtaG92ZXInKTtcbiAgICB9XG59XG4iLCI8ZGl2IChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsQnlLZXlcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9XCJ0cnVlXCJcbiAgICAgY2xhc3M9XCJyYXRpbmdzLXdyYXBwZXJcIiBuZ0RlZmF1bHRDb250cm9sPlxuICAgIDxkaXYgW2NsYXNzLmRpc2FibGVkXT1cInJlYWRvbmx5XCIgY2xhc3M9XCJyYXRpbmctc3R5bGVcIj5cbiAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCByYXRlIG9mIHJhdGluZ0l0ZW1zO1wiXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7YWN0aXZlIDogcmF0ZS5pbmRleCA8PSBzZWxlY3RlZFJhdGluZ1ZhbHVlfVwiXG4gICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2ZvbnQtc2l6ZScgOmljb25zaXplLCBjb2xvcjogcmF0ZS5pbmRleCA8PSBzZWxlY3RlZFJhdGluZ1ZhbHVlICYmIGljb25jb2xvcn1cIlxuICAgICAgICAgICAgICAgW3RpdGxlXT1cInJhdGUubGFiZWwgfHwgcmF0ZS5pbmRleFwiXG4gICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblRvdWNoU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlbGVhdmUoJGV2ZW50LCByYXRlKVwiXG4gICAgICAgICAgICAgICAobW91c2VvdmVyKT1cIm9uTW91c2VPdmVyKCRldmVudCwgcmF0ZSlcIlxuICAgICAgICAgICAgICAgW2Zvcl09XCJfaWQgKyAnLScgKyByYXRlLmluZGV4XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHt7cmF0ZS5pbmRleCA8PSBzZWxlY3RlZFJhdGluZ1ZhbHVlID8gYWN0aXZlaWNvbmNsYXNzIDogaW5hY3RpdmVpY29uY2xhc3N9fVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpbnB1dCAjcmF0aW5nSW5wdXQgdHlwZT1cInJhZGlvXCIgcm9sZT1cInJhZGlvXCIgW2F0dHIuYXJpYS1sYWJlbF09XCIocmF0ZS5sYWJlbCB8fCByYXRlLmluZGV4KSArICcgb3V0IG9mICcgKyByYXRpbmdJdGVtcy5sZW5ndGggKyAnIHJhdGluZ3MnXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cInJhdGUubGFiZWwgPT09IGRhdGF2YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgICAgICAgIFtpZF09XCJfaWQgKyAnLScgKyByYXRlLmluZGV4XCIgKGNsaWNrKT1cIm9uUmF0aW5nQ2xpY2soJGV2ZW50LCByYXRlKVwiIG5hbWU9XCJyYXRpbmdzLWlkXCIgW3ZhbHVlXT1cInJhdGUua2V5IHx8IHJhdGUuaW5kZXhcIi8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGxhYmVsICpuZ0lmPVwic2hvd2NhcHRpb25zXCIgY2xhc3M9XCJjYXB0aW9uXCIgW3RleHRDb250ZW50XT1cImNhcHRpb25cIj48L2xhYmVsPlxuPC9kaXY+XG4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9yYXRpbmcvc3JjL3JhdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvcmF0aW5nL3NyYy9yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxZQUFZLEVBQVUsSUFBSSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7SUNMOUQsZ0NBT3NDO0lBRC9CLEFBREEsQUFEQSw0TEFBYywyQkFBb0IsS0FBQyx5TUFDckIsb0NBQTBCLEtBQUMsdU1BQzVCLG1DQUF5QixLQUFDO0lBRTFDLHVCQUF1SDtJQUN2SCxtQ0FDK0g7SUFBMUYsNE1BQVMscUNBQTJCLEtBQUM7SUFDOUUsQUFGSSxpQkFDK0gsRUFDM0g7Ozs7SUFKRCxBQUpBLEFBREEsQUFEQSxrR0FBd0QsMEhBQ2tDLHlD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QixFQUFFLElBQUksQ0FBQztvQkFDbkQsa0JBQWtCLGlCQUFpQjtpQkFDdEM7O3NCQStCMkIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBWFksUUFBUTtrQkFBbkYsU0FBUzttQkFBQyxhQUFhLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOztrRkFsQmpFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RvciwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtnZW5lcmF0ZUdVSWQsIHNldENTUywgbm9vcH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgZ2V0T3JkZXJlZERhdGFzZXQsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3JhdGluZy5wcm9wcyc7XG5pbXBvcnQge2ZpbmQsIGlzRW1wdHksIGlzVW5kZWZpbmVkLCBzbGljZSwgdG9TdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLXJhdGluZ3MnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tcmF0aW5nJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbmNvbnN0IE1BWF9SQVRJTkcgPSAxMDtcbmNvbnN0IERFRkFVTFRfUkFUSU5HID0gNTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21SYXRpbmddJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmF0aW5nLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFJhdGluZ0NvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUmF0aW5nQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUmF0aW5nQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHNob3djYXB0aW9uczogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF4dmFsdWU7XG5cbiAgICBwcml2YXRlIF9zZWxlY3RlZFJhdGluZ1ZhbHVlO1xuICAgIHB1YmxpYyByYXRpbmdzV2lkdGg7XG4gICAgcHVibGljIHJhdGluZ0l0ZW1zO1xuICAgIHByaXZhdGUgX2lkO1xuXG4gICAgcHVibGljIGljb25zaXplOiBzdHJpbmc7XG4gICAgcHVibGljIGljb25jb2xvcjogc3RyaW5nO1xuICAgIHB1YmxpYyBvbkZvY3VzOiBhbnk7XG4gICAgcHJpdmF0ZSB0b3VjaEVuYWJsZWQ6Ym9vbGVhbjtcbiAgICBwdWJsaWMgYWN0aXZlaWNvbmNsYXNzOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgaW5hY3RpdmVpY29uY2xhc3M6IHN0cmluZyA9ICcnO1xuICAgIEBWaWV3Q2hpbGQoJ3JhdGluZ0lucHV0JywgLyogVE9ETzogYWRkIHN0YXRpYyBmbGFnICovIHsgcmVhZDogRWxlbWVudFJlZiB9KSByYXRpbmdFbDogRWxlbWVudFJlZjtcblxuICAgIGdldCBzZWxlY3RlZFJhdGluZ1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSYXRpbmdWYWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRSYXRpbmdWYWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IHZhbDtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSYXRpbmdzV2lkdGgoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLl9pZCA9IGdlbmVyYXRlR1VJZCgpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICAvLyBwcmVwYXJlIHRoZSByYXRpbmcgb3B0aW9ucyBvbiBkYXRhc2V0IHJlYWR5LlxuICAgICAgICBjb25zdCBkYXRhc2V0U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhc2V0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmF0aW5nRGF0YXNldCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIC8vIGxpc3RlbiB0byBjaGFuZ2VzIGluIGRhdGF2YWx1ZS5cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGF0YXZhbHVlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIC8vIENoYW5nZSBldmVudCBpcyByZWdpc3RlcmVkIGZyb20gdGhlIHRlbXBsYXRlLCBQcmV2ZW50IHRoZSBmcmFtZXdvcmsgZnJvbSByZWdpc3RlcmluZyBvbmUgbW9yZSBldmVudFxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnY2hhbmdlJyAmJiBldmVudE5hbWUgIT09ICdibHVyJykge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQodGhpcy5yYXRpbmdFbC5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJhdGluZyB3aWRnZXQgZGF0YXNldCBjb250YWluaW5nIHRoZSBpbmRleCwgdmFsdWUgYW5kIGxhYmVsXG4gICAgcHJpdmF0ZSBwcmVwYXJlUmF0aW5nRGF0YXNldCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmF0aW5nSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2FwdGlvbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJhdGluZ0l0ZW1zID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhc2V0SXRlbXM7XG4gICAgICAgIGNvbnN0IG1heHZhbHVlID0gcGFyc2VJbnQodGhpcy5tYXh2YWx1ZSB8fCB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGgsIDEwKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSAobWF4dmFsdWUgPiBNQVhfUkFUSU5HID8gTUFYX1JBVElORyA6IG1heHZhbHVlKSB8fCBERUZBVUxUX1JBVElORztcblxuICAgICAgICAvKipcbiAgICAgICAgICogMS4gSWYgZGF0YXNldEl0ZW1zLmxlbmd0aCBpcyBtb3JlIHRoYW4gbWF4VmFsdWUgKGkuZS4gMTAgcmF0aW5ncykgdGhlbiBqdXN0IGV4dHJhY3QgbWF4VmFsdWUgb2YgaXRlbXMgZnJvbSBkYXRhc2V0SXRlbXMuXG4gICAgICAgICAqIDIuIElmIGRhdGFzZXRJdGVtcyBhcmUgbm90IGF2YWlsYWJsZSB0aGVuIHByZXBhcmUgcmF0aW5ncyB2YWx1ZSBkZXBlbmRpbmcgb24gbWF4dmFsdWUuIGVnOiAxLDIsMyAuLiB1cHRvIG1heHZhbHVlXG4gICAgICAgICAqIDMuIElmIG1heHZhbHVlIC8gaSB2YWx1ZSBpcyBtb3JlIHRoYW4gZGF0YXNldEl0ZW1zIGxlbmd0aCwgcHJlcGFyZSBkZWZhdWx0IHJhdGluZyBpdGVtcyBmb3IgaSB2YWx1ZXMgbW9yZSB0aGFuIGRhdGFzZXRJdGVtcy5sZW5ndGhcbiAgICAgICAgICovXG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCAmJiBkYXRhLmxlbmd0aCA+IG1heFZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhID0gc2xpY2UoZGF0YSwgMCwgbWF4VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IG1heFZhbHVlOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmF0aW5nSXRlbXMucHVzaCh7a2V5OiBpLCB2YWx1ZTogaSwgaW5kZXg6IGksIGxhYmVsOiBpfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpID4gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmF0aW5nSXRlbXMucHVzaCh7a2V5OiBpLCB2YWx1ZTogaSwgaW5kZXg6IGksIGxhYmVsOiBpfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldE9yZGVyZWREYXRhc2V0KGRhdGEsICdpbmRleDpkZXNjJyk7XG4gICAgICAgICAgICAgICAgICAgIHJhdGluZ0l0ZW1zID0gcmF0aW5nSXRlbXMuY29uY2F0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJhdGluZ0l0ZW1zID0gcmF0aW5nSXRlbXM7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHsgLy8gY29uc3RydWN0cyBkZWZhdWx0IGRhdGFzZXRJdGVtcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGFzZXQgYmluZGluZy5cbiAgICAgICAgICAgIHRoaXMuZGF0YXNldEl0ZW1zID0gcmF0aW5nSXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRhdGF2YWx1ZUNoYW5nZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25SYXRpbmdDbGljaygkZXZlbnQsIHJhdGUpIHtcbiAgICAgICAgdGhpcy5tb2RlbEJ5S2V5ID0gcmF0ZS5rZXk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IHJhdGUuaW5kZXg7XG5cbiAgICAgICAgLy8gc3VwcG9ydCBpZiB0aGUgY2FwdGlvbiBpcyBiaW5kZWQgaW4gdGhlIG9sZCBwcm9qZWN0cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBpZiAoIXRoaXMuc2hvd2NhcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHRpb24gPSByYXRlLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgLy8gaW52b2tlIG9uIGRhdGF2YWx1ZSBjaGFuZ2UuXG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsICRldmVudCB8fCB7fSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCBmbGFnIG9uIGRhdGFzZXRJdGVtcyBhbmQgYXNzaWduIHRoZSByYXRpbmdWYWx1ZS5cbiAgICAvKipcbiAgICAgKiBPbiBkYXRhdmFsdWUgY2hhbmdlLCB1cGRhdGUgdGhlIGNhcHRpb24sIHNlbGVjdGVkUmF0aW5nVmFsdWUuXG4gICAgICogMS4gaWYgZGF0YXNldEl0ZW1zIGNvbnRhaW4gdGhlIHNlbGVjdGVkIGl0ZW0gKGNoZWNrIHRoZSBzZWxlY3RlZCBmbGFnIG9uIGl0ZW0pLCBmaW5kIHRoZSBpbmRleCBvZiBzZWxlY3RlZCBpdGVtLlxuICAgICAqIDIuIGlmIG5vdCwganVzdCBjaGVjayBpZiB0aGUgZGF0YXZhbHVlIGlzIHByb3ZpZGVkIGFzIHRoZSBpbmRleCBvbiB0aGUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhVmFsIGRhdGF2YWx1ZVxuICAgICAqL1xuICAgIG9uRGF0YXZhbHVlQ2hhbmdlKGRhdGFWYWwpIHtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuZGF0YXNldEl0ZW1zKSkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkSXRlbSA9IGZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIHsnc2VsZWN0ZWQnOiB0cnVlfSk7XG5cbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRJdGVtICYmICFpc1VuZGVmaW5lZChkYXRhVmFsKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IGZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZyhpdGVtLmluZGV4KSA9PT0gZGF0YVZhbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSAgbW9kZWwgaWYgdGhlcmUgaXMgbm8gaXRlbSBmb3VuZC5cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQnlLZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IHNlbGVjdGVkSXRlbSA/IHNlbGVjdGVkSXRlbS5pbmRleCA6IDA7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uID0gc2VsZWN0ZWRJdGVtLmxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhdGluZ1ZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgLy8gd2hlbiBkYXRhc2V0IGlzIG5vdCBnaXZlbiBidXQgZGF0YXZhbHVlIGlzIHByb3ZpZGVkIHdoaWNoIGlzIGludGVnZXJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJhdGluZ1ZhbHVlICYmICFpc05hTihkYXRhVmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSA9IChwYXJzZUZsb2F0KGRhdGFWYWwpIDw9IHRoaXMubWF4dmFsdWUpID8gZGF0YVZhbCA6IHRoaXMubWF4dmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhdGluZ3NXaWR0aCA9IHRoaXMuY2FsY3VsYXRlUmF0aW5nc1dpZHRoKGRhdGFWYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUmF0aW5nc1dpZHRoKGRhdGFWYWw/OiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYXRpbmcgPSBwYXJzZUZsb2F0KHRoaXMuc2VsZWN0ZWRSYXRpbmdWYWx1ZSksXG4gICAgICAgICAgICBzdGFyV2lkdGggPSAwLjkyNSxcbiAgICAgICAgICAgIG1heFZhbHVlID0gcGFyc2VJbnQodGhpcy5tYXh2YWx1ZSB8fCB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGgsIDEwKSB8fCBERUZBVUxUX1JBVElORztcblxuICAgICAgICBkYXRhVmFsID0gZGF0YVZhbCB8fCB0aGlzLmRhdGF2YWx1ZTtcbiAgICAgICAgaWYgKGRhdGFWYWwgPT09IHVuZGVmaW5lZCB8fCBkYXRhVmFsID09PSAnJyB8fCBkYXRhVmFsID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHRpb24gPSAnJztcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJhdGluZyA8PSBtYXhWYWx1ZSAmJiBzZWxlY3RlZFJhdGluZyA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRSYXRpbmcgKiBzdGFyV2lkdGggKyAnZW0nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJhdGluZyA+IG1heFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF4VmFsdWUgKiBzdGFyV2lkdGggKyAnZW0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlYWRvbmx5Jykge1xuICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXRpbmdzV2lkdGggPSB0aGlzLmNhbGN1bGF0ZVJhdGluZ3NXaWR0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heHZhbHVlJykge1xuICAgICAgICAgICAgLyoqIFN0b3JpbmcgdGhlIGRhdGF2YWx1ZSBpbiB0ZW1wIHZhcmlhYmxlIGFuZCBhc3NpZ2luZyBiYWNrIHRvIGRhdGF2YWx1ZVxuICAgICAgICAgICAgICogYWZ0ZXIgZGVmYXVsdCBkYXRhbGlzdCBpcyBwcmVwYXJlZCB0byB0cmlnZ2VyIERhdGFzZXQgQXdhcmUgY2xhc3Mgc2VsZWN0IGN5Y2xlXG4gICAgICAgICAgICAgKiBhcyB0aGUgZGF0YXZhbHVlIHByb3BlcnR5IGNoYW5nZSBpcyB0cmlnZ2VyaW5nIGZpcnN0IHJhdGhlciB0aGFuIG1heHZhbHVlXG4gICAgICAgICAgICAgKiBpbiB0aGUgcmF0aW5nIHdpZGdldCBpcyB1c2VkIGluc2lkZSBhIGRhdGF0YWJsZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgdGVtcERhdGFWYWx1ZSA9IHRoaXMuZGF0YXZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmF0aW5nRGF0YXNldCgpO1xuICAgICAgICAgICAgLy8gcmVzZXQgYWxsIHRoZSBpdGVtcy5cbiAgICAgICAgICAgIHRoaXMucmVzZXREYXRhc2V0SXRlbXMoKTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodGVtcERhdGFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHRlbXBEYXRhVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qIERldGVjdCB0b3VjaCBlbmFibGVkIGRldmljZXMgJiB1cGRhdGUgaG92ZXIgc3R5bGVzKi9cbiAgICBvblRvdWNoU3RhcnQoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMudG91Y2hFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQgPSBub29wO1xuICAgIH1cbiAgICBvbk1vdXNlbGVhdmUoKSB7XG4gICAgICAgIHRoaXMuY2FwdGlvbiA9IHRoaXMuZGlzcGxheVZhbHVlIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBvbk1vdXNlT3ZlcigkZXZlbnQsIHJhdGUpIHtcbiAgICAgICAgdGhpcy5jYXB0aW9uID0gcmF0ZS5sYWJlbDtcbiAgICAgICAgIXRoaXMudG91Y2hFbmFibGVkICYmICEkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncmF0aW5nLWxhYmVsLWhvdmVyJykgJiYgJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuYWRkKCdyYXRpbmctbGFiZWwtaG92ZXInKTtcbiAgICB9XG59XG4iLCI8ZGl2IChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsQnlLZXlcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgY2xhc3M9XCJyYXRpbmdzLXdyYXBwZXJcIiBuZ0RlZmF1bHRDb250cm9sPlxuICAgIDxkaXYgW2NsYXNzLmRpc2FibGVkXT1cInJlYWRvbmx5XCIgY2xhc3M9XCJyYXRpbmctc3R5bGVcIj5cbiAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCByYXRlIG9mIHJhdGluZ0l0ZW1zO1wiXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7YWN0aXZlIDogcmF0ZS5pbmRleCA8PSBzZWxlY3RlZFJhdGluZ1ZhbHVlfVwiXG4gICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2ZvbnQtc2l6ZScgOmljb25zaXplLCBjb2xvcjogcmF0ZS5pbmRleCA8PSBzZWxlY3RlZFJhdGluZ1ZhbHVlICYmIGljb25jb2xvcn1cIlxuICAgICAgICAgICAgICAgW3RpdGxlXT1cInJhdGUubGFiZWwgfHwgcmF0ZS5pbmRleFwiXG4gICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblRvdWNoU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlbGVhdmUoJGV2ZW50LCByYXRlKVwiXG4gICAgICAgICAgICAgICAobW91c2VvdmVyKT1cIm9uTW91c2VPdmVyKCRldmVudCwgcmF0ZSlcIlxuICAgICAgICAgICAgICAgW2Zvcl09XCJfaWQgKyAnLScgKyByYXRlLmluZGV4XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHt7cmF0ZS5pbmRleCA8PSBzZWxlY3RlZFJhdGluZ1ZhbHVlID8gYWN0aXZlaWNvbmNsYXNzIDogaW5hY3RpdmVpY29uY2xhc3N9fVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpbnB1dCAjcmF0aW5nSW5wdXQgdHlwZT1cInJhZGlvXCIgcm9sZT1cInJhZGlvXCIgW2F0dHIuYXJpYS1sYWJlbF09XCIocmF0ZS5sYWJlbCB8fCByYXRlLmluZGV4KSArICcgb3V0IG9mICcgKyByYXRpbmdJdGVtcy5sZW5ndGggKyAnIHJhdGluZ3MnXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cInJhdGUubGFiZWwgPT09IGRhdGF2YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgICAgICAgIFtpZF09XCJfaWQgKyAnLScgKyByYXRlLmluZGV4XCIgKGNsaWNrKT1cIm9uUmF0aW5nQ2xpY2soJGV2ZW50LCByYXRlKVwiIG5hbWU9XCJyYXRpbmdzLWlkXCIgW3ZhbHVlXT1cInJhdGUua2V5IHx8IHJhdGUuaW5kZXhcIi8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGxhYmVsICpuZ0lmPVwic2hvd2NhcHRpb25zXCIgY2xhc3M9XCJjYXB0aW9uXCIgW3RleHRDb250ZW50XT1cImNhcHRpb25cIj48L2xhYmVsPlxuPC9kaXY+XG4iXX0=
@@ -249,7 +249,7 @@ class RatingComponent extends DatasetAwareFormComponent {
249
249
  } }, features: [i0.ɵɵProvidersFeature([
250
250
  provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),
251
251
  provideAsWidgetRef(RatingComponent)
252
- ]), i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 4, vars: 7, consts: [["ratingInput", ""], ["aria-multiselectable", "true", "ngDefaultControl", "", 1, "ratings-wrapper", 3, "focus", "ngModelChange", "ngModel", "ngModelOptions"], [1, "rating-style"], [3, "ngClass", "ngStyle", "title", "for", "touchstart", "mouseleave", "mouseover", 4, "ngFor", "ngForOf"], ["class", "caption", 3, "textContent", 4, "ngIf"], [3, "touchstart", "mouseleave", "mouseover", "ngClass", "ngStyle", "title", "for"], ["aria-hidden", "true"], ["type", "radio", "role", "radio", "name", "ratings-id", 3, "click", "id", "value"], [1, "caption", 3, "textContent"]], template: function RatingComponent_Template(rf, ctx) { if (rf & 1) {
252
+ ]), i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 4, vars: 7, consts: [["ratingInput", ""], ["ngDefaultControl", "", 1, "ratings-wrapper", 3, "focus", "ngModelChange", "ngModel", "ngModelOptions"], [1, "rating-style"], [3, "ngClass", "ngStyle", "title", "for", "touchstart", "mouseleave", "mouseover", 4, "ngFor", "ngForOf"], ["class", "caption", 3, "textContent", 4, "ngIf"], [3, "touchstart", "mouseleave", "mouseover", "ngClass", "ngStyle", "title", "for"], ["aria-hidden", "true"], ["type", "radio", "role", "radio", "name", "ratings-id", 3, "click", "id", "value"], [1, "caption", 3, "textContent"]], template: function RatingComponent_Template(rf, ctx) { if (rf & 1) {
253
253
  i0.ɵɵelementStart(0, "div", 1);
254
254
  i0.ɵɵlistener("focus", function RatingComponent_Template_div_focus_0_listener($event) { return ctx.onFocus($event); });
255
255
  i0.ɵɵtwoWayListener("ngModelChange", function RatingComponent_Template_div_ngModelChange_0_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.modelByKey, $event) || (ctx.modelByKey = $event); return $event; });
@@ -274,7 +274,7 @@ class RatingComponent extends DatasetAwareFormComponent {
274
274
  args: [{ selector: '[wmRating]', providers: [
275
275
  provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),
276
276
  provideAsWidgetRef(RatingComponent)
277
- ], template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\" aria-multiselectable=\"true\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.disabled]=\"readonly\" class=\"rating-style\">\n <label *ngFor=\"let rate of ratingItems;\"\n [ngClass]=\"{active : rate.index <= selectedRatingValue}\"\n [ngStyle]=\"{'font-size' :iconsize, color: rate.index <= selectedRatingValue && iconcolor}\"\n [title]=\"rate.label || rate.index\"\n (touchstart)=\"onTouchStart($event)\"\n (mouseleave)=\"onMouseleave($event, rate)\"\n (mouseover)=\"onMouseOver($event, rate)\"\n [for]=\"_id + '-' + rate.index\">\n <i class=\"app-icon {{rate.index <= selectedRatingValue ? activeiconclass : inactiveiconclass}}\" aria-hidden=\"true\"></i>\n <input #ratingInput type=\"radio\" role=\"radio\" [attr.aria-label]=\"(rate.label || rate.index) + ' out of ' + ratingItems.length + ' ratings'\" [attr.aria-checked]=\"rate.label === datavalue ? 'true' : 'false'\"\n [id]=\"_id + '-' + rate.index\" (click)=\"onRatingClick($event, rate)\" name=\"ratings-id\" [value]=\"rate.key || rate.index\"/>\n </label>\n </div>\n <label *ngIf=\"showcaptions\" class=\"caption\" [textContent]=\"caption\"></label>\n</div>\n" }]
277
+ ], template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.disabled]=\"readonly\" class=\"rating-style\">\n <label *ngFor=\"let rate of ratingItems;\"\n [ngClass]=\"{active : rate.index <= selectedRatingValue}\"\n [ngStyle]=\"{'font-size' :iconsize, color: rate.index <= selectedRatingValue && iconcolor}\"\n [title]=\"rate.label || rate.index\"\n (touchstart)=\"onTouchStart($event)\"\n (mouseleave)=\"onMouseleave($event, rate)\"\n (mouseover)=\"onMouseOver($event, rate)\"\n [for]=\"_id + '-' + rate.index\">\n <i class=\"app-icon {{rate.index <= selectedRatingValue ? activeiconclass : inactiveiconclass}}\" aria-hidden=\"true\"></i>\n <input #ratingInput type=\"radio\" role=\"radio\" [attr.aria-label]=\"(rate.label || rate.index) + ' out of ' + ratingItems.length + ' ratings'\" [attr.aria-checked]=\"rate.label === datavalue ? 'true' : 'false'\"\n [id]=\"_id + '-' + rate.index\" (click)=\"onRatingClick($event, rate)\" name=\"ratings-id\" [value]=\"rate.key || rate.index\"/>\n </label>\n </div>\n <label *ngIf=\"showcaptions\" class=\"caption\" [textContent]=\"caption\"></label>\n</div>\n" }]
278
278
  }], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
279
279
  type: Inject,
280
280
  args: ['EXPLICIT_CONTEXT']