@wavemaker-ai/app-ng-runtime 1.0.0-rc.324 → 1.0.0-rc.326
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.
- package/components/base/bundles/index.umd.js +24 -9
- package/components/base/fesm2022/index.mjs +24 -9
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/index.d.ts +4 -1
- package/components/basic/anchor/bundles/index.umd.js +1 -1
- package/components/basic/anchor/fesm2022/index.mjs +1 -1
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/icon/bundles/index.umd.js +1 -1
- package/components/basic/icon/fesm2022/index.mjs +1 -1
- package/components/basic/icon/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/bundles/index.umd.js +1 -1
- package/components/basic/search/fesm2022/index.mjs +1 -1
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/bundles/index.umd.js +1 -1
- package/components/basic/spinner/fesm2022/index.mjs +1 -1
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/chart/bundles/index.umd.js +1 -1
- package/components/chart/fesm2022/index.mjs +1 -1
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/bundles/index.umd.js +1 -1
- package/components/containers/accordion/fesm2022/index.mjs +1 -1
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/bundles/index.umd.js +1 -1
- package/components/containers/panel/fesm2022/index.mjs +1 -1
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/bundles/index.umd.js +1 -1
- package/components/containers/tabs/fesm2022/index.mjs +1 -1
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/bundles/index.umd.js +1 -1
- package/components/containers/wizard/fesm2022/index.mjs +1 -1
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/data/card/bundles/index.umd.js +1 -1
- package/components/data/card/fesm2022/index.mjs +1 -1
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +1 -1
- package/components/data/form/fesm2022/index.mjs +1 -1
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/list/bundles/index.umd.js +1 -1
- package/components/data/list/fesm2022/index.mjs +1 -1
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +9 -2
- package/components/data/table/fesm2022/index.mjs +9 -2
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/bundles/index.umd.js +1 -1
- package/components/dialogs/default/fesm2022/index.mjs +1 -1
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/input/button/bundles/index.umd.js +1 -1
- package/components/input/button/fesm2022/index.mjs +1 -1
- package/components/input/button/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +1 -1
- package/components/input/checkbox/fesm2022/index.mjs +1 -1
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +1 -1
- package/components/input/file-upload/fesm2022/index.mjs +1 -1
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/bundles/index.umd.js +1 -1
- package/components/input/rating/fesm2022/index.mjs +1 -1
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/bundles/index.umd.js +1 -1
- package/components/input/slider/fesm2022/index.mjs +1 -1
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/bundles/index.umd.js +1 -1
- package/components/input/switch/fesm2022/index.mjs +1 -1
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/text/bundles/index.umd.js +1 -1
- package/components/input/text/fesm2022/index.mjs +1 -1
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/navigation/breadcrumb/bundles/index.umd.js +3 -3
- package/components/navigation/breadcrumb/fesm2022/index.mjs +4 -4
- package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/bundles/index.umd.js +1 -1
- package/components/navigation/menu/fesm2022/index.mjs +1 -1
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/bundles/index.umd.js +1 -1
- package/components/navigation/navbar/fesm2022/index.mjs +1 -1
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/page/default/bundles/index.umd.js +1 -0
- package/components/page/default/fesm2022/index.mjs +1 -0
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/datatable/datatable.js +3 -3
|
@@ -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.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.html","../../../../../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: 'wi wi-file-upload', ...PROP_STRING}],\n ['iconurl', PROP_STRING],\n ['cleariconclass', {value: '', ...PROP_STRING}],\n ['cleariconurl', 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","import { CommonModule } from '@angular/common';\nimport {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 {FileIconClassPipe, FileSizePipe, provideAsWidgetRef, StateClassPipe, StylableComponent, styler, WmAppIconComponent } 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 standalone: true,\n imports: [CommonModule, FileIconClassPipe, StateClassPipe, FileSizePipe, WmAppIconComponent],\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 iconclass;\n iconurl: string;\n cleariconclass;\n cleariconurl: string;\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 // 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 // MEMORY LEAK FIX: Store bound functions for proper cleanup\n private boundDragOverCb: (e: Event) => void;\n private boundDropCb: () => void;\n private boundDisableDropZone: () => void;\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 // MEMORY LEAK FIX: Use stored bound function reference\n // when the filepicker is not there on the window, remove the dropzone highlight\n window.addEventListener('focus', this.boundDisableDropZone);\n }\n\n disableDropZone() {\n this.highlightDropArea = false;\n // MEMORY LEAK FIX: Remove using stored bound function reference\n window.removeEventListener('focus', this.boundDisableDropZone);\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 \n // MEMORY LEAK FIX: Store bound function references for proper removal\n this.boundDragOverCb = this.dragOverCb.bind(this);\n this.boundDropCb = this.dropCb.bind(this);\n this.boundDisableDropZone = this.disableDropZone.bind(this);\n \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.boundDragOverCb);\n document.addEventListener('drop', this.boundDropCb);\n\n // adding mouseleave evnt to remove highlight when file is dropped outside the window\n document.addEventListener('mouseleave', this.boundDropCb);\n }\n\n ngAfterViewInit() {\n styler( this.nativeElement.querySelector('.app-button, .drop-box'), this);\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Remove using stored bound function references\n if (this.boundDragOverCb) {\n document.removeEventListener('dragover', this.boundDragOverCb);\n this.boundDragOverCb = null;\n }\n if (this.boundDropCb) {\n document.removeEventListener('drop', this.boundDropCb);\n document.removeEventListener('mouseleave', this.boundDropCb);\n this.boundDropCb = null;\n }\n if (this.boundDisableDropZone) {\n window.removeEventListener('focus', this.boundDisableDropZone);\n this.boundDisableDropZone = null;\n }\n \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","<div class=\"app-fileupload\" init-widget>\n <!-- drag and drop files UI in web -->\n @if (!_isMobileType && multiple) {\n <div class=\"app-multi-file-upload\">\n <div id=\"dropzone\" class=\"drop-box\" (click)=\"triggerFileSelect()\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\" (dragover)=\"dragOverHandler($event);\" (drop)=\"onFileDrop($event);\">\n <wm-app-icon [iconclass]=\"iconclass\" [iconurl]=\"iconurl\" alt=\"Upload\"></wm-app-icon>\n <div class=\"message\">\n <label [innerHtml]=\"caption\" class=\"upload-label\"></label>\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n @if (multiple) {\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple >\n }\n <a class=\"app-anchor upload-label\" href=\"javascript:void(0);\">{{ fileUploadMessage }}</a>\n </form>\n @if (chooseFilter) {\n <label [innerHtml]=\"chooseFilter + ' only '\" class=\"upload-extensions\"></label>\n }\n @if (chooseFilter && maxfilesize) {\n <span class=\"upload-extensions\"> . </span>\n }\n @if (maxfilesize) {\n <label [innerHtml]=\"maxfilesize + 'MB max'\" class=\"upload-extensions\"></label>\n }\n </div>\n </div>\n </div>\n }\n <!-- single file upload in web and single , multiple file upload UI in mobile runmode -->\n @if ((!multiple || _isMobileType)) {\n <div class=\"app-single-file-upload\">\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 @if (multiple) {\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n multiple name=\"files\" type=\"file\">\n }\n @if (!multiple) {\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n name=\"files\" type=\"file\">\n }\n <button id=\"dropzone\" focus-target class=\"app-button btn btn-default\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\">\n <wm-app-icon [iconclass]=\"iconclass\" [iconurl]=\"iconurl\" alt=\"Upload\"></wm-app-icon>\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 }\n <!-- list of selectedfiles UI -->\n @if (uploadedFiles.length > 0) {\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\"\n tabindex=\"0\">\n @for (ft of uploadedFiles; track ft) {\n @if (ft.status !== 'abort') {\n <li class=\"list-group-item file-upload-status\" 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 @if (ft.status === 'success' && (!datasource || (datasource && ft._response?.success))) {\n <span\n class=\"status-icon {{ft.status | stateClass }}\"></span>\n }\n <br/>\n @if (ft.fileLength !== 0) {\n <span class=\"filesize\">{{ft.size | filesize:0}}</span>\n }\n @if (ft.status === 'error') {\n <span\n class=\"status-icon {{ft.status | stateClass }}\"\n title=\"{{ft.errMsg || appLocale.MESSAGE_FILE_UPLOAD_FAILED}}\"></span>\n }\n @if (ft.status === 'error') {\n <span class=\"error-message\">Upload Failed</span>\n }\n </p>\n @if (ft.status === 'onProgress' || showprogressbar) {\n <div\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 }\n @if ((ft.status === 'onProgress' || showprogressbar && showprogressbarpercentage) && ft.progress ) {\n <div\n class=\"col-md-1 upload-progress-percentage\">{{ ft.progress + '%' }}\n </div>\n }\n </div>\n @if (ft.status === 'onProgress' || ft.status === 'queued') {\n <div class=\"media-right media-middle\">\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 }\n <div class=\"media-right media-middle\">\n @if ((cleariconclass !== '' || cleariconurl) && ft.status !== 'onProgress') {\n <a href=\"javascript:void(0)\" (click)=\"clear(ft)\"\n class=\"btn btn-transparent btn-default status-icon\" title=\"{{cleariconhint}}\" type=\"button\">\n <wm-app-icon [iconclass]=\"cleariconclass\" [iconurl]=\"cleariconurl\" alt=\"Clear\"></wm-app-icon>\n </a>\n }\n </div>\n @if (ft.status === 'success' && (!datasource || (datasource && ft._response?.success))) {\n <div class=\"media-right media-middle\">\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 }\n </div>\n </li>\n }\n }\n </ul>\n }\n <!-- list of selectedfolders UI to show the error in title -->\n @if (selectedFolders.length > 0) {\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" title=\"{{appLocale.MESSAGE_FOLDER_UPLOADS_NOT_ALLOWED}}\" >\n @for (ft of selectedFolders; track ft) {\n <li 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 }\n </ul>\n }\n</div>\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.ts","../../../../../projects/components/widgets/input/file-upload/src/file-upload.component.html","../../../../../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: 'wi wi-file-upload', ...PROP_STRING}],\n ['iconurl', PROP_STRING],\n ['cleariconclass', {value: '', ...PROP_STRING}],\n ['cleariconurl', 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","import { CommonModule } from '@angular/common';\nimport {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 {FileIconClassPipe, FileSizePipe, provideAsWidgetRef, StateClassPipe, StylableComponent, styler, WmAppIconComponent } 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 standalone: true,\n imports: [CommonModule, FileIconClassPipe, StateClassPipe, FileSizePipe, WmAppIconComponent],\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 iconclass;\n iconurl: string;\n cleariconclass;\n cleariconurl: string;\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 // 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 // MEMORY LEAK FIX: Store bound functions for proper cleanup\n private boundDragOverCb: (e: Event) => void;\n private boundDropCb: () => void;\n private boundDisableDropZone: () => void;\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 // MEMORY LEAK FIX: Use stored bound function reference\n // when the filepicker is not there on the window, remove the dropzone highlight\n window.addEventListener('focus', this.boundDisableDropZone);\n }\n\n disableDropZone() {\n this.highlightDropArea = false;\n // MEMORY LEAK FIX: Remove using stored bound function reference\n window.removeEventListener('focus', this.boundDisableDropZone);\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 \n // MEMORY LEAK FIX: Store bound function references for proper removal\n this.boundDragOverCb = this.dragOverCb.bind(this);\n this.boundDropCb = this.dropCb.bind(this);\n this.boundDisableDropZone = this.disableDropZone.bind(this);\n \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.boundDragOverCb);\n document.addEventListener('drop', this.boundDropCb);\n\n // adding mouseleave evnt to remove highlight when file is dropped outside the window\n document.addEventListener('mouseleave', this.boundDropCb);\n }\n\n ngAfterViewInit() {\n styler( this.nativeElement.querySelector('.app-button, .drop-box'), this);\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Remove using stored bound function references\n if (this.boundDragOverCb) {\n document.removeEventListener('dragover', this.boundDragOverCb);\n this.boundDragOverCb = null;\n }\n if (this.boundDropCb) {\n document.removeEventListener('drop', this.boundDropCb);\n document.removeEventListener('mouseleave', this.boundDropCb);\n this.boundDropCb = null;\n }\n if (this.boundDisableDropZone) {\n window.removeEventListener('focus', this.boundDisableDropZone);\n this.boundDisableDropZone = null;\n }\n \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","<div class=\"app-fileupload\" init-widget>\n <!-- drag and drop files UI in web -->\n @if (!_isMobileType && multiple) {\n <div class=\"app-multi-file-upload\">\n <div id=\"dropzone\" class=\"drop-box\" (click)=\"triggerFileSelect()\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\" (dragover)=\"dragOverHandler($event);\" (drop)=\"onFileDrop($event);\">\n <wm-app-icon [iconclass]=\"iconclass\" [iconurl]=\"iconurl\" alt=\"Upload\"></wm-app-icon>\n <div class=\"message\">\n <label [innerHtml]=\"caption\" class=\"upload-label\"></label>\n <form class=\"form-horizontal\" name=\"{{formName}}\">\n @if (multiple) {\n <input class=\"file-input\" [attr.aria-label]=\"hint || 'File selection field'\" type=\"file\" name=\"files\" [disabled]=\"disabled\" [accept]=\"chooseFilter\" (click)=\"onFileElemClick($event)\" (change)=\"onFileSelect($event, $event.target.files)\" multiple >\n }\n <a class=\"app-anchor upload-label\" href=\"javascript:void(0);\">{{ fileUploadMessage }}</a>\n </form>\n @if (chooseFilter) {\n <label [innerHtml]=\"chooseFilter + ' only '\" class=\"upload-extensions\"></label>\n }\n @if (chooseFilter && maxfilesize) {\n <span class=\"upload-extensions\"> . </span>\n }\n @if (maxfilesize) {\n <label [innerHtml]=\"maxfilesize + 'MB max'\" class=\"upload-extensions\"></label>\n }\n </div>\n </div>\n </div>\n }\n <!-- single file upload in web and single , multiple file upload UI in mobile runmode -->\n @if ((!multiple || _isMobileType)) {\n <div class=\"app-single-file-upload\">\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 @if (multiple) {\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n multiple name=\"files\" type=\"file\">\n }\n @if (!multiple) {\n <input (change)=\"onFileSelect($event, $event.target.files)\" (click)=\"onFileElemClick($event)\"\n [accept]=\"chooseFilter\" [attr.aria-label]=\"arialabel || 'File selection field'\" [disabled]=\"disabled\" class=\"file-input\"\n name=\"files\" type=\"file\">\n }\n <button id=\"dropzone\" focus-target class=\"app-button btn btn-default\" [ngClass]=\"{'highlight-drop-box' : highlightDropArea}\">\n <wm-app-icon [iconclass]=\"iconclass\" [iconurl]=\"iconurl\" alt=\"Upload\"></wm-app-icon>\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 }\n <!-- list of selectedfiles UI -->\n @if (uploadedFiles.length > 0) {\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\"\n tabindex=\"0\">\n @for (ft of uploadedFiles; track ft) {\n @if (ft.status !== 'abort') {\n <li class=\"list-group-item file-upload-status\" 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 @if (ft.status === 'success' && (!datasource || (datasource && ft._response?.success))) {\n <span\n class=\"status-icon {{ft.status | stateClass }}\"></span>\n }\n <br/>\n @if (ft.fileLength !== 0) {\n <span class=\"filesize\">{{ft.size | filesize:0}}</span>\n }\n @if (ft.status === 'error') {\n <span\n class=\"status-icon {{ft.status | stateClass }}\"\n title=\"{{ft.errMsg || appLocale.MESSAGE_FILE_UPLOAD_FAILED}}\"></span>\n }\n @if (ft.status === 'error') {\n <span class=\"error-message\">Upload Failed</span>\n }\n </p>\n @if (ft.status === 'onProgress' || showprogressbar) {\n <div\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 }\n @if ((ft.status === 'onProgress' || showprogressbar && showprogressbarpercentage) && ft.progress ) {\n <div\n class=\"col-md-1 upload-progress-percentage\">{{ ft.progress + '%' }}\n </div>\n }\n </div>\n @if (ft.status === 'onProgress' || ft.status === 'queued') {\n <div class=\"media-right media-middle\">\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 }\n <div class=\"media-right media-middle\">\n @if ((cleariconclass !== '' || cleariconurl) && ft.status !== 'onProgress') {\n <a href=\"javascript:void(0)\" (click)=\"clear(ft)\"\n class=\"btn btn-transparent btn-default status-icon\" title=\"{{cleariconhint}}\" type=\"button\">\n <wm-app-icon [iconclass]=\"cleariconclass\" [iconurl]=\"cleariconurl\" alt=\"Clear\"></wm-app-icon>\n </a>\n }\n </div>\n @if (ft.status === 'success' && (!datasource || (datasource && ft._response?.success))) {\n <div class=\"media-right media-middle\">\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 }\n </div>\n </li>\n }\n }\n </ul>\n }\n <!-- list of selectedfolders UI to show the error in title -->\n @if (selectedFolders.length > 0) {\n <ul class=\"list-group file-upload\" [ngStyle]=\"{height: filelistheight, overflow: overflow}\" title=\"{{appLocale.MESSAGE_FOLDER_UPLOADS_NOT_ALLOWED}}\" >\n @for (ft of selectedFolders; track ft) {\n <li 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 }\n </ul>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
static { this.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: RatingComponent, isStandalone: true, selector: "[wmRating]", providers: [
|
|
254
254
|
base.provideAs(RatingComponent, i2.NG_VALUE_ACCESSOR, true),
|
|
255
255
|
base.provideAsWidgetRef(RatingComponent)
|
|
256
|
-
], viewQueries: [{ propertyName: "ratingEl", first: true, predicate: ["ratingInput"], descendants: true, read: i0.ElementRef }], usesInheritance: true, ngImport: i0__namespace, template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.hidden]=\"readonly && isDecimal\" [class.disabled]=\"readonly\" class=\"rating-style\">\n @for (rate of ratingItems; track rate) {\n <label\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 @if (rate.index <= selectedRatingValue) {\n <wm-app-icon [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n } @else {\n <wm-app-icon [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n }\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 }\n </div>\n <div class=\"ratings-container readonly\" [class.hidden]=\"!isDecimal\" [ngStyle]=\"{ 'font-size': iconsize }\">\n <div class=\"ratings-base\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n <div class=\"ratings active\" [ngStyle]=\"{ width: ratingsWidth, color: iconcolor }\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n </div>\n @if (showcaptions) {\n <label class=\"caption\" [textContent]=\"caption\"></label>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.CommonModule }, { kind: "directive", type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1__namespace.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: i2.FormsModule }, { kind: "directive", type: i2__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: base.WmAppIconComponent, selector: "wm-app-icon", inputs: ["iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
256
|
+
], viewQueries: [{ propertyName: "ratingEl", first: true, predicate: ["ratingInput"], descendants: true, read: i0.ElementRef }], usesInheritance: true, ngImport: i0__namespace, template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.hidden]=\"readonly && isDecimal\" [class.disabled]=\"readonly\" class=\"rating-style\">\n @for (rate of ratingItems; track rate) {\n <label\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 @if (rate.index <= selectedRatingValue) {\n <wm-app-icon [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n } @else {\n <wm-app-icon [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n }\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 }\n </div>\n <div class=\"ratings-container readonly\" [class.hidden]=\"!isDecimal\" [ngStyle]=\"{ 'font-size': iconsize }\">\n <div class=\"ratings-base\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n <div class=\"ratings active\" [ngStyle]=\"{ width: ratingsWidth, color: iconcolor }\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n </div>\n @if (showcaptions) {\n <label class=\"caption\" [textContent]=\"caption\"></label>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.CommonModule }, { kind: "directive", type: i1__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1__namespace.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: i2.FormsModule }, { kind: "directive", type: i2__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: base.WmAppIconComponent, selector: "wm-app-icon", inputs: ["icon", "iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
257
257
|
}
|
|
258
258
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0__namespace, type: RatingComponent, decorators: [{
|
|
259
259
|
type: i0.Component,
|
|
@@ -237,7 +237,7 @@ class RatingComponent extends DatasetAwareFormComponent {
|
|
|
237
237
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: RatingComponent, isStandalone: true, selector: "[wmRating]", providers: [
|
|
238
238
|
provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),
|
|
239
239
|
provideAsWidgetRef(RatingComponent)
|
|
240
|
-
], viewQueries: [{ propertyName: "ratingEl", first: true, predicate: ["ratingInput"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.hidden]=\"readonly && isDecimal\" [class.disabled]=\"readonly\" class=\"rating-style\">\n @for (rate of ratingItems; track rate) {\n <label\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 @if (rate.index <= selectedRatingValue) {\n <wm-app-icon [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n } @else {\n <wm-app-icon [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n }\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 }\n </div>\n <div class=\"ratings-container readonly\" [class.hidden]=\"!isDecimal\" [ngStyle]=\"{ 'font-size': iconsize }\">\n <div class=\"ratings-base\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n <div class=\"ratings active\" [ngStyle]=\"{ width: ratingsWidth, color: iconcolor }\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n </div>\n @if (showcaptions) {\n <label class=\"caption\" [textContent]=\"caption\"></label>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: WmAppIconComponent, selector: "wm-app-icon", inputs: ["iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
240
|
+
], viewQueries: [{ propertyName: "ratingEl", first: true, predicate: ["ratingInput"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.hidden]=\"readonly && isDecimal\" [class.disabled]=\"readonly\" class=\"rating-style\">\n @for (rate of ratingItems; track rate) {\n <label\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 @if (rate.index <= selectedRatingValue) {\n <wm-app-icon [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n } @else {\n <wm-app-icon [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n }\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 }\n </div>\n <div class=\"ratings-container readonly\" [class.hidden]=\"!isDecimal\" [ngStyle]=\"{ 'font-size': iconsize }\">\n <div class=\"ratings-base\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n <div class=\"ratings active\" [ngStyle]=\"{ width: ratingsWidth, color: iconcolor }\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n </div>\n @if (showcaptions) {\n <label class=\"caption\" [textContent]=\"caption\"></label>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: WmAppIconComponent, selector: "wm-app-icon", inputs: ["icon", "iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
241
241
|
}
|
|
242
242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: RatingComponent, decorators: [{
|
|
243
243
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/rating/src/rating.props.ts","../../../../../projects/components/widgets/input/rating/src/rating.component.ts","../../../../../projects/components/widgets/input/rating/src/rating.component.html","../../../../../projects/components/widgets/input/rating/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget } from '@wm/components/base';\nimport { FormWidgetType } from '@wm/core';\n\nexport const ratingProps = new Map(\n [\n ['caption', PROP_STRING],\n ['class', PROP_STRING],\n ['datafield', PROP_STRING],\n ['dataset', PROP_ANY],\n ['datavaluesource', PROP_ANY],\n ['datavalue', PROP_STRING],\n ['displayexpression', PROP_STRING],\n ['displayfield', PROP_STRING],\n ['iconcolor', PROP_STRING],\n ['activeiconclass', {value: 'wi wi-star', ...PROP_STRING}],\n ['inactiveiconclass', {value: 'wi wi-star-border', ...PROP_STRING}],\n ['activeiconurl', PROP_STRING],\n ['inactiveiconurl', PROP_STRING],\n ['iconsize', PROP_STRING],\n ['maxvalue', {value: 5, ...PROP_NUMBER}],\n ['name', PROP_STRING],\n ['orderby', PROP_STRING],\n ['readonly', PROP_BOOLEAN],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['showcaptions', {value: true, ...PROP_BOOLEAN}],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['usekeys', PROP_BOOLEAN]\n ]\n);\n\nexport const registerProps = () => {\n register(\n 'wm-rating',\n ratingProps\n );\n registerFormWidget(\n FormWidgetType.RATING,\n new Map(ratingProps)\n );\n};\n","import { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {Component, ElementRef, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {generateGUId, noop} from '@wm/core';\nimport { getOrderedDataset, provideAs, provideAsWidgetRef, styler, WmAppIconComponent } from '@wm/components/base';\nimport { DatasetAwareFormComponent } from '@wm/components/input/dataset-aware-form';\n\nimport { registerProps } from './rating.props';\nimport {find, isEmpty, isUndefined, slice, toString} from \"lodash-es\";\n\nconst DEFAULT_CLS = 'app-ratings';\nconst WIDGET_CONFIG = {widgetType: 'wm-rating', hostClass: DEFAULT_CLS};\n\nconst MAX_RATING = 10;\nconst DEFAULT_RATING = 5;\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormsModule, WmAppIconComponent],\n selector: '[wmRating]',\n templateUrl: './rating.component.html',\n providers: [\n provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),\n provideAsWidgetRef(RatingComponent)\n ]\n})\nexport class RatingComponent extends DatasetAwareFormComponent implements OnDestroy {\n static initializeProps = registerProps();\n\n public caption: string;\n public showcaptions: boolean;\n public maxvalue;\n\n private _selectedRatingValue;\n public ratingsWidth;\n public ratingItems;\n private _id;\n public starsArray;\n public isDecimal=false;\n\n public iconsize: string;\n public iconcolor: string;\n public onFocus: any;\n private touchEnabled:boolean;\n public activeiconclass: string = '';\n public inactiveiconclass: string = '';\n public activeiconurl: string;\n public inactiveiconurl: string;\n @ViewChild('ratingInput', /* TODO: add static flag */ { read: ElementRef }) ratingEl: ElementRef;\n\n public static readonly DEFAULT_ACTIVE_ICON_CLASS = 'wi wi-star';\n public static readonly DEFAULT_INACTIVE_ICON_CLASS = 'wi wi-star-border';\n public readonly defaultActiveIconClass = RatingComponent.DEFAULT_ACTIVE_ICON_CLASS;\n public readonly defaultInactiveIconClass = RatingComponent.DEFAULT_INACTIVE_ICON_CLASS;\n\n get selectedRatingValue() {\n return this._selectedRatingValue;\n }\n\n set selectedRatingValue(val) {\n this._selectedRatingValue = val;\n this.calculateRatingsWidth();\n }\n\n constructor(inj: Injector, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n this._id = generateGUId();\n styler(this.nativeElement, this);\n\n // prepare the rating options on dataset ready.\n const datasetSubscription = this.dataset$.subscribe(() => {\n this.prepareRatingDataset();\n });\n this.registerDestroyListener(() => datasetSubscription.unsubscribe());\n\n // listen to changes in datavalue.\n const datavalueSubscription = this.datavalue$.subscribe(() => this.onDatavalueChange(this.datavalue));\n this.registerDestroyListener(() => datavalueSubscription.unsubscribe());\n }\n\n // Change event is registered from the template, Prevent the framework from registering one more event\n protected handleEvent(node: HTMLElement, eventName: string, eventCallback: Function, locals: any) {\n if (eventName !== 'change' && eventName !== 'blur') {\n super.handleEvent(this.ratingEl.nativeElement, eventName, eventCallback, locals);\n }\n }\n\n // This function returns the rating widget dataset containing the index, value and label\n private prepareRatingDataset() {\n if (!this.datasetItems.length) {\n this.ratingItems = [];\n this.caption = '';\n }\n\n let ratingItems = [];\n let data = this.datasetItems;\n const maxvalue = parseInt(this.maxvalue || this.datasetItems.length, 10);\n const maxValue = (maxvalue > MAX_RATING ? MAX_RATING : maxvalue) || DEFAULT_RATING;\n\n /**\n * 1. If datasetItems.length is more than maxValue (i.e. 10 ratings) then just extract maxValue of items from datasetItems.\n * 2. If datasetItems are not available then prepare ratings value depending on maxvalue. eg: 1,2,3 .. upto maxvalue\n * 3. If maxvalue / i value is more than datasetItems length, prepare default rating items for i values more than datasetItems.length\n */\n if (data.length && data.length > maxValue) {\n data = slice(data, 0, maxValue);\n }\n\n for (let i = maxValue; i > 0; i--) {\n if (!data.length) {\n ratingItems.push({key: i, value: i, index: i, label: i});\n } else {\n if (i > data.length) {\n ratingItems.push({key: i, value: i, index: i, label: i});\n } else {\n data = getOrderedDataset(data, 'index:desc');\n ratingItems = ratingItems.concat(data);\n break;\n }\n }\n }\n\n this.ratingItems = ratingItems;\n if (!data.length) { // constructs default datasetItems when there is no dataset binding.\n this.datasetItems = ratingItems;\n }\n this.onDatavalueChange(this.datavalue);\n }\n\n onRatingClick($event, rate) {\n this.modelByKey = rate.key;\n this.selectedRatingValue = rate.index;\n\n // support if the caption is binded in the old projects for backward compatibility\n if (!this.showcaptions) {\n this.caption = rate.label;\n }\n\n this.invokeOnTouched();\n // invoke on datavalue change.\n this.invokeOnChange(this.datavalue, $event || {}, true);\n }\n\n // Update the selected flag on datasetItems and assign the ratingValue.\n /**\n * On datavalue change, update the caption, selectedRatingValue.\n * 1. if datasetItems contain the selected item (check the selected flag on item), find the index of selected item.\n * 2. if not, just check if the datavalue is provided as the index on the item.\n *\n * @param dataVal datavalue\n */\n onDatavalueChange(dataVal) {\n if (!isEmpty(this.datasetItems)) {\n let selectedItem = find(this.datasetItems, {'selected': true});\n\n if (!selectedItem && !isUndefined(dataVal)) {\n selectedItem = find(this.datasetItems, function (item) {\n return toString(item.index) === dataVal;\n });\n if (selectedItem) {\n selectedItem.selected = true;\n }\n }\n\n if (!selectedItem) {\n // reset the model if there is no item found.\n this.modelByKey = undefined;\n this.caption = '';\n }\n\n this.selectedRatingValue = selectedItem ? selectedItem.index : 0;\n if (selectedItem) {\n this.caption = selectedItem.label;\n }\n } else {\n this.selectedRatingValue = 0;\n }\n if (this.readonly) {\n // when dataset is not given but datavalue is provided which is integer\n if (!this.selectedRatingValue && !isNaN(dataVal)) {\n this.selectedRatingValue = (parseFloat(dataVal) <= this.maxvalue) ? dataVal : this.maxvalue;\n }\n this.ratingsWidth = this.calculateRatingsWidth(dataVal);\n }\n if(this.readonly && !isNaN(dataVal) && !Number.isInteger(parseFloat(dataVal))) {\n this._modelByKey = dataVal;\n this._modelByValue=dataVal\n this.isDecimal=true;\n this.ratingsWidth = this.calculateRatingsWidth(this.getPrevDataValue());\n this.caption = this.selectedRatingValue\n }\n }\n\n calculateRatingsWidth(dataVal?: any) {\n const selectedRating = parseFloat(this.selectedRatingValue),\n maxValue = parseInt(this.maxvalue || this.datasetItems.length, 10) || DEFAULT_RATING;\n\n dataVal = dataVal || this.datavalue;\n if ((dataVal === undefined || dataVal === '' || dataVal === null)||selectedRating <= 0) {\n this.caption = '';\n return '0%';\n }\n const safeRating = Math.min(selectedRating, maxValue);\n return ( (safeRating / maxValue) * 100)+'%';\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'readonly') {\n this.isDecimal=false;\n if (nv) {\n this.ratingsWidth = this.calculateRatingsWidth();\n this.onDatavalueChange(this.getPrevDataValue())\n }\n } else if (key === 'maxvalue') {\n /** Storing the datavalue in temp variable and assiging back to datavalue\n * after default datalist is prepared to trigger Dataset Aware class select cycle\n * as the datavalue property change is triggering first rather than maxvalue\n * in the rating widget is used inside a datatable\n */\n this.starsArray = Array(this.maxvalue);\n let tempDataValue = this.datavalue;\n this.prepareRatingDataset();\n // reset all the items.\n this.resetDatasetItems();\n if (!isUndefined(tempDataValue)) {\n this.datavalue = tempDataValue;\n }\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n /* Detect touch enabled devices & update hover styles*/\n onTouchStart($event) {\n this.touchEnabled = true;\n this.onTouchStart = noop;\n }\n onMouseleave() {\n this.caption = this.displayValue as string;\n }\n\n onMouseOver($event, rate) {\n this.caption = rate.label;\n !this.touchEnabled && !$event.target.classList.contains('rating-label-hover') && $event.target.classList.add('rating-label-hover');\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Clear ViewChild reference\n this.ratingEl = null;\n\n // MEMORY LEAK FIX: Clear rating items array\n if (this.ratingItems) {\n this.ratingItems = [];\n }\n\n // Call parent ngOnDestroy (DatasetAwareFormComponent has cleanup)\n super.ngOnDestroy();\n }\n}\n","<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.hidden]=\"readonly && isDecimal\" [class.disabled]=\"readonly\" class=\"rating-style\">\n @for (rate of ratingItems; track rate) {\n <label\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 @if (rate.index <= selectedRatingValue) {\n <wm-app-icon [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n } @else {\n <wm-app-icon [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n }\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 }\n </div>\n <div class=\"ratings-container readonly\" [class.hidden]=\"!isDecimal\" [ngStyle]=\"{ 'font-size': iconsize }\">\n <div class=\"ratings-base\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n <div class=\"ratings active\" [ngStyle]=\"{ width: ratingsWidth, color: iconcolor }\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n </div>\n @if (showcaptions) {\n <label class=\"caption\" [textContent]=\"caption\"></label>\n }\n</div>\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/rating/src/rating.props.ts","../../../../../projects/components/widgets/input/rating/src/rating.component.ts","../../../../../projects/components/widgets/input/rating/src/rating.component.html","../../../../../projects/components/widgets/input/rating/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget } from '@wm/components/base';\nimport { FormWidgetType } from '@wm/core';\n\nexport const ratingProps = new Map(\n [\n ['caption', PROP_STRING],\n ['class', PROP_STRING],\n ['datafield', PROP_STRING],\n ['dataset', PROP_ANY],\n ['datavaluesource', PROP_ANY],\n ['datavalue', PROP_STRING],\n ['displayexpression', PROP_STRING],\n ['displayfield', PROP_STRING],\n ['iconcolor', PROP_STRING],\n ['activeiconclass', {value: 'wi wi-star', ...PROP_STRING}],\n ['inactiveiconclass', {value: 'wi wi-star-border', ...PROP_STRING}],\n ['activeiconurl', PROP_STRING],\n ['inactiveiconurl', PROP_STRING],\n ['iconsize', PROP_STRING],\n ['maxvalue', {value: 5, ...PROP_NUMBER}],\n ['name', PROP_STRING],\n ['orderby', PROP_STRING],\n ['readonly', PROP_BOOLEAN],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['showcaptions', {value: true, ...PROP_BOOLEAN}],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['usekeys', PROP_BOOLEAN]\n ]\n);\n\nexport const registerProps = () => {\n register(\n 'wm-rating',\n ratingProps\n );\n registerFormWidget(\n FormWidgetType.RATING,\n new Map(ratingProps)\n );\n};\n","import { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {Component, ElementRef, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {generateGUId, noop} from '@wm/core';\nimport { getOrderedDataset, provideAs, provideAsWidgetRef, styler, WmAppIconComponent } from '@wm/components/base';\nimport { DatasetAwareFormComponent } from '@wm/components/input/dataset-aware-form';\n\nimport { registerProps } from './rating.props';\nimport {find, isEmpty, isUndefined, slice, toString} from \"lodash-es\";\n\nconst DEFAULT_CLS = 'app-ratings';\nconst WIDGET_CONFIG = {widgetType: 'wm-rating', hostClass: DEFAULT_CLS};\n\nconst MAX_RATING = 10;\nconst DEFAULT_RATING = 5;\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormsModule, WmAppIconComponent],\n selector: '[wmRating]',\n templateUrl: './rating.component.html',\n providers: [\n provideAs(RatingComponent, NG_VALUE_ACCESSOR, true),\n provideAsWidgetRef(RatingComponent)\n ]\n})\nexport class RatingComponent extends DatasetAwareFormComponent implements OnDestroy {\n static initializeProps = registerProps();\n\n public caption: string;\n public showcaptions: boolean;\n public maxvalue;\n\n private _selectedRatingValue;\n public ratingsWidth;\n public ratingItems;\n private _id;\n public starsArray;\n public isDecimal=false;\n\n public iconsize: string;\n public iconcolor: string;\n public onFocus: any;\n private touchEnabled:boolean;\n public activeiconclass: string = '';\n public inactiveiconclass: string = '';\n public activeiconurl: string;\n public inactiveiconurl: string;\n @ViewChild('ratingInput', /* TODO: add static flag */ { read: ElementRef }) ratingEl: ElementRef;\n\n public static readonly DEFAULT_ACTIVE_ICON_CLASS = 'wi wi-star';\n public static readonly DEFAULT_INACTIVE_ICON_CLASS = 'wi wi-star-border';\n public readonly defaultActiveIconClass = RatingComponent.DEFAULT_ACTIVE_ICON_CLASS;\n public readonly defaultInactiveIconClass = RatingComponent.DEFAULT_INACTIVE_ICON_CLASS;\n\n get selectedRatingValue() {\n return this._selectedRatingValue;\n }\n\n set selectedRatingValue(val) {\n this._selectedRatingValue = val;\n this.calculateRatingsWidth();\n }\n\n constructor(inj: Injector, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n this._id = generateGUId();\n styler(this.nativeElement, this);\n\n // prepare the rating options on dataset ready.\n const datasetSubscription = this.dataset$.subscribe(() => {\n this.prepareRatingDataset();\n });\n this.registerDestroyListener(() => datasetSubscription.unsubscribe());\n\n // listen to changes in datavalue.\n const datavalueSubscription = this.datavalue$.subscribe(() => this.onDatavalueChange(this.datavalue));\n this.registerDestroyListener(() => datavalueSubscription.unsubscribe());\n }\n\n // Change event is registered from the template, Prevent the framework from registering one more event\n protected handleEvent(node: HTMLElement, eventName: string, eventCallback: Function, locals: any) {\n if (eventName !== 'change' && eventName !== 'blur') {\n super.handleEvent(this.ratingEl.nativeElement, eventName, eventCallback, locals);\n }\n }\n\n // This function returns the rating widget dataset containing the index, value and label\n private prepareRatingDataset() {\n if (!this.datasetItems.length) {\n this.ratingItems = [];\n this.caption = '';\n }\n\n let ratingItems = [];\n let data = this.datasetItems;\n const maxvalue = parseInt(this.maxvalue || this.datasetItems.length, 10);\n const maxValue = (maxvalue > MAX_RATING ? MAX_RATING : maxvalue) || DEFAULT_RATING;\n\n /**\n * 1. If datasetItems.length is more than maxValue (i.e. 10 ratings) then just extract maxValue of items from datasetItems.\n * 2. If datasetItems are not available then prepare ratings value depending on maxvalue. eg: 1,2,3 .. upto maxvalue\n * 3. If maxvalue / i value is more than datasetItems length, prepare default rating items for i values more than datasetItems.length\n */\n if (data.length && data.length > maxValue) {\n data = slice(data, 0, maxValue);\n }\n\n for (let i = maxValue; i > 0; i--) {\n if (!data.length) {\n ratingItems.push({key: i, value: i, index: i, label: i});\n } else {\n if (i > data.length) {\n ratingItems.push({key: i, value: i, index: i, label: i});\n } else {\n data = getOrderedDataset(data, 'index:desc');\n ratingItems = ratingItems.concat(data);\n break;\n }\n }\n }\n\n this.ratingItems = ratingItems;\n if (!data.length) { // constructs default datasetItems when there is no dataset binding.\n this.datasetItems = ratingItems;\n }\n this.onDatavalueChange(this.datavalue);\n }\n\n onRatingClick($event, rate) {\n this.modelByKey = rate.key;\n this.selectedRatingValue = rate.index;\n\n // support if the caption is binded in the old projects for backward compatibility\n if (!this.showcaptions) {\n this.caption = rate.label;\n }\n\n this.invokeOnTouched();\n // invoke on datavalue change.\n this.invokeOnChange(this.datavalue, $event || {}, true);\n }\n\n // Update the selected flag on datasetItems and assign the ratingValue.\n /**\n * On datavalue change, update the caption, selectedRatingValue.\n * 1. if datasetItems contain the selected item (check the selected flag on item), find the index of selected item.\n * 2. if not, just check if the datavalue is provided as the index on the item.\n *\n * @param dataVal datavalue\n */\n onDatavalueChange(dataVal) {\n if (!isEmpty(this.datasetItems)) {\n let selectedItem = find(this.datasetItems, {'selected': true});\n\n if (!selectedItem && !isUndefined(dataVal)) {\n selectedItem = find(this.datasetItems, function (item) {\n return toString(item.index) === dataVal;\n });\n if (selectedItem) {\n selectedItem.selected = true;\n }\n }\n\n if (!selectedItem) {\n // reset the model if there is no item found.\n this.modelByKey = undefined;\n this.caption = '';\n }\n\n this.selectedRatingValue = selectedItem ? selectedItem.index : 0;\n if (selectedItem) {\n this.caption = selectedItem.label;\n }\n } else {\n this.selectedRatingValue = 0;\n }\n if (this.readonly) {\n // when dataset is not given but datavalue is provided which is integer\n if (!this.selectedRatingValue && !isNaN(dataVal)) {\n this.selectedRatingValue = (parseFloat(dataVal) <= this.maxvalue) ? dataVal : this.maxvalue;\n }\n this.ratingsWidth = this.calculateRatingsWidth(dataVal);\n }\n if(this.readonly && !isNaN(dataVal) && !Number.isInteger(parseFloat(dataVal))) {\n this._modelByKey = dataVal;\n this._modelByValue=dataVal\n this.isDecimal=true;\n this.ratingsWidth = this.calculateRatingsWidth(this.getPrevDataValue());\n this.caption = this.selectedRatingValue\n }\n }\n\n calculateRatingsWidth(dataVal?: any) {\n const selectedRating = parseFloat(this.selectedRatingValue),\n maxValue = parseInt(this.maxvalue || this.datasetItems.length, 10) || DEFAULT_RATING;\n\n dataVal = dataVal || this.datavalue;\n if ((dataVal === undefined || dataVal === '' || dataVal === null)||selectedRating <= 0) {\n this.caption = '';\n return '0%';\n }\n const safeRating = Math.min(selectedRating, maxValue);\n return ( (safeRating / maxValue) * 100)+'%';\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'readonly') {\n this.isDecimal=false;\n if (nv) {\n this.ratingsWidth = this.calculateRatingsWidth();\n this.onDatavalueChange(this.getPrevDataValue())\n }\n } else if (key === 'maxvalue') {\n /** Storing the datavalue in temp variable and assiging back to datavalue\n * after default datalist is prepared to trigger Dataset Aware class select cycle\n * as the datavalue property change is triggering first rather than maxvalue\n * in the rating widget is used inside a datatable\n */\n this.starsArray = Array(this.maxvalue);\n let tempDataValue = this.datavalue;\n this.prepareRatingDataset();\n // reset all the items.\n this.resetDatasetItems();\n if (!isUndefined(tempDataValue)) {\n this.datavalue = tempDataValue;\n }\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n /* Detect touch enabled devices & update hover styles*/\n onTouchStart($event) {\n this.touchEnabled = true;\n this.onTouchStart = noop;\n }\n onMouseleave() {\n this.caption = this.displayValue as string;\n }\n\n onMouseOver($event, rate) {\n this.caption = rate.label;\n !this.touchEnabled && !$event.target.classList.contains('rating-label-hover') && $event.target.classList.add('rating-label-hover');\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Clear ViewChild reference\n this.ratingEl = null;\n\n // MEMORY LEAK FIX: Clear rating items array\n if (this.ratingItems) {\n this.ratingItems = [];\n }\n\n // Call parent ngOnDestroy (DatasetAwareFormComponent has cleanup)\n super.ngOnDestroy();\n }\n}\n","<div (focus)=\"onFocus($event)\" [(ngModel)]=\"modelByKey\" [ngModelOptions]=\"{standalone: true}\"\n class=\"ratings-wrapper\" ngDefaultControl>\n <div [class.hidden]=\"readonly && isDecimal\" [class.disabled]=\"readonly\" class=\"rating-style\">\n @for (rate of ratingItems; track rate) {\n <label\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 @if (rate.index <= selectedRatingValue) {\n <wm-app-icon [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n } @else {\n <wm-app-icon [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n }\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 }\n </div>\n <div class=\"ratings-container readonly\" [class.hidden]=\"!isDecimal\" [ngStyle]=\"{ 'font-size': iconsize }\">\n <div class=\"ratings-base\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"inactiveiconclass\"\n [iconurl]=\"inactiveiconurl\"\n [defaultIconClass]=\"defaultInactiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n <div class=\"ratings active\" [ngStyle]=\"{ width: ratingsWidth, color: iconcolor }\">\n <wm-app-icon *ngFor=\"let s of starsArray\"\n [iconclass]=\"activeiconclass\"\n [iconurl]=\"activeiconurl\"\n [defaultIconClass]=\"defaultActiveIconClass\"\n alt=\"Rating\"></wm-app-icon>\n </div>\n </div>\n @if (showcaptions) {\n <label class=\"caption\" [textContent]=\"caption\"></label>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
static { this.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SliderComponent, isStandalone: true, selector: "[wmSlider]", providers: [
|
|
183
183
|
base.provideAs(SliderComponent, i2.NG_VALUE_ACCESSOR, true),
|
|
184
184
|
base.provideAsWidgetRef(SliderComponent)
|
|
185
|
-
], viewQueries: [{ propertyName: "ngModel", first: true, predicate: i2.NgModel, descendants: true }], usesInheritance: true, ngImport: i0__namespace, template: "@if (isPrism) {\n<div class=\"slider-container\">\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"decrementButton\" (click)=\"decrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"starticon\" [iconurl]=\"starticonurl\"></wm-app-icon> \n </button>\n }\n <div class=\"slider-control\">\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n }\n <input class=\"range-input\" type=\"range\" aria-orientation=\"horizontal\" focus-target [title]=\"datavalue\"\n [attr.min]=\"minvalue\" [attr.max]=\"maxvalue\" [attr.step]=\"step\" [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"disabled||readonly\" [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\" (blur)=\"invokeOnTouched($event)\" (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\" [tabindex]=\"tabindex\" />\n <p class=\"active-slider\"></p>\n </div>\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"incrementButton\" (click)=\"incrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"endicon\" [iconurl]=\"endiconurl\"></wm-app-icon> \n </button>\n }\n</div>\n\n} @else {\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n}\n<input class=\"range-input\" aria-orientation=\"horizontal\"\n focus-target\n type=\"range\" [title]=\"datavalue\"\n [attr.min]=\"minvalue\"\n [attr.max]=\"maxvalue\"\n [attr.step]=\"step\"\n [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled||readonly\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n (blur)=\"invokeOnTouched($event)\"\n (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\"\n [tabindex]=\"tabindex\"/>\n}\n@if (readonly || disabled) {\n <div aria-readonly=\"true\" class=\"readonly-wrapper\"></div>\n}\n@if(showmarkers){\n <div class=\"marker-container\">\n@for (marker of markerItems; track marker) {\n <div class=\"marker-wrapper\"\n [ngStyle]=\"{ left: marker.left + 'px' }\"\n [attr.title]=\"marker.label\">\n <div class=\"marker-label\" [ngClass]=\"marker.position\" [attr.title]=\"marker.label\">\n {{ marker.label }}\n </div>\n <div class=\"marker-dot\" [attr.title]=\"marker.label\"></div>\n </div>\n }\n </div>\n\n}\n", dependencies: [{ kind: "directive", type: base.TextContentDirective, selector: "[textContent]", inputs: ["textContent"] }, { kind: "ngmodule", type: i2.FormsModule }, { kind: "directive", type: i2__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2__namespace.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: i3.CommonModule }, { kind: "directive", type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3__namespace.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: base.WmAppIconComponent, selector: "wm-app-icon", inputs: ["iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
185
|
+
], viewQueries: [{ propertyName: "ngModel", first: true, predicate: i2.NgModel, descendants: true }], usesInheritance: true, ngImport: i0__namespace, template: "@if (isPrism) {\n<div class=\"slider-container\">\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"decrementButton\" (click)=\"decrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"starticon\" [iconurl]=\"starticonurl\"></wm-app-icon> \n </button>\n }\n <div class=\"slider-control\">\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n }\n <input class=\"range-input\" type=\"range\" aria-orientation=\"horizontal\" focus-target [title]=\"datavalue\"\n [attr.min]=\"minvalue\" [attr.max]=\"maxvalue\" [attr.step]=\"step\" [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"disabled||readonly\" [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\" (blur)=\"invokeOnTouched($event)\" (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\" [tabindex]=\"tabindex\" />\n <p class=\"active-slider\"></p>\n </div>\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"incrementButton\" (click)=\"incrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"endicon\" [iconurl]=\"endiconurl\"></wm-app-icon> \n </button>\n }\n</div>\n\n} @else {\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n}\n<input class=\"range-input\" aria-orientation=\"horizontal\"\n focus-target\n type=\"range\" [title]=\"datavalue\"\n [attr.min]=\"minvalue\"\n [attr.max]=\"maxvalue\"\n [attr.step]=\"step\"\n [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled||readonly\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n (blur)=\"invokeOnTouched($event)\"\n (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\"\n [tabindex]=\"tabindex\"/>\n}\n@if (readonly || disabled) {\n <div aria-readonly=\"true\" class=\"readonly-wrapper\"></div>\n}\n@if(showmarkers){\n <div class=\"marker-container\">\n@for (marker of markerItems; track marker) {\n <div class=\"marker-wrapper\"\n [ngStyle]=\"{ left: marker.left + 'px' }\"\n [attr.title]=\"marker.label\">\n <div class=\"marker-label\" [ngClass]=\"marker.position\" [attr.title]=\"marker.label\">\n {{ marker.label }}\n </div>\n <div class=\"marker-dot\" [attr.title]=\"marker.label\"></div>\n </div>\n }\n </div>\n\n}\n", dependencies: [{ kind: "directive", type: base.TextContentDirective, selector: "[textContent]", inputs: ["textContent"] }, { kind: "ngmodule", type: i2.FormsModule }, { kind: "directive", type: i2__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2__namespace.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: i3.CommonModule }, { kind: "directive", type: i3__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3__namespace.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: base.WmAppIconComponent, selector: "wm-app-icon", inputs: ["icon", "iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
186
186
|
}
|
|
187
187
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0__namespace, type: SliderComponent, decorators: [{
|
|
188
188
|
type: i0.Component,
|
|
@@ -165,7 +165,7 @@ class SliderComponent extends BaseFormCustomComponent {
|
|
|
165
165
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SliderComponent, isStandalone: true, selector: "[wmSlider]", providers: [
|
|
166
166
|
provideAs(SliderComponent, NG_VALUE_ACCESSOR, true),
|
|
167
167
|
provideAsWidgetRef(SliderComponent)
|
|
168
|
-
], viewQueries: [{ propertyName: "ngModel", first: true, predicate: NgModel, descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (isPrism) {\n<div class=\"slider-container\">\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"decrementButton\" (click)=\"decrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"starticon\" [iconurl]=\"starticonurl\"></wm-app-icon> \n </button>\n }\n <div class=\"slider-control\">\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n }\n <input class=\"range-input\" type=\"range\" aria-orientation=\"horizontal\" focus-target [title]=\"datavalue\"\n [attr.min]=\"minvalue\" [attr.max]=\"maxvalue\" [attr.step]=\"step\" [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"disabled||readonly\" [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\" (blur)=\"invokeOnTouched($event)\" (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\" [tabindex]=\"tabindex\" />\n <p class=\"active-slider\"></p>\n </div>\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"incrementButton\" (click)=\"incrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"endicon\" [iconurl]=\"endiconurl\"></wm-app-icon> \n </button>\n }\n</div>\n\n} @else {\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n}\n<input class=\"range-input\" aria-orientation=\"horizontal\"\n focus-target\n type=\"range\" [title]=\"datavalue\"\n [attr.min]=\"minvalue\"\n [attr.max]=\"maxvalue\"\n [attr.step]=\"step\"\n [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled||readonly\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n (blur)=\"invokeOnTouched($event)\"\n (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\"\n [tabindex]=\"tabindex\"/>\n}\n@if (readonly || disabled) {\n <div aria-readonly=\"true\" class=\"readonly-wrapper\"></div>\n}\n@if(showmarkers){\n <div class=\"marker-container\">\n@for (marker of markerItems; track marker) {\n <div class=\"marker-wrapper\"\n [ngStyle]=\"{ left: marker.left + 'px' }\"\n [attr.title]=\"marker.label\">\n <div class=\"marker-label\" [ngClass]=\"marker.position\" [attr.title]=\"marker.label\">\n {{ marker.label }}\n </div>\n <div class=\"marker-dot\" [attr.title]=\"marker.label\"></div>\n </div>\n }\n </div>\n\n}\n", dependencies: [{ kind: "directive", type: TextContentDirective, selector: "[textContent]", inputs: ["textContent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: WmAppIconComponent, selector: "wm-app-icon", inputs: ["iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
168
|
+
], viewQueries: [{ propertyName: "ngModel", first: true, predicate: NgModel, descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (isPrism) {\n<div class=\"slider-container\">\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"decrementButton\" (click)=\"decrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"starticon\" [iconurl]=\"starticonurl\"></wm-app-icon> \n </button>\n }\n <div class=\"slider-control\">\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n }\n <input class=\"range-input\" type=\"range\" aria-orientation=\"horizontal\" focus-target [title]=\"datavalue\"\n [attr.min]=\"minvalue\" [attr.max]=\"maxvalue\" [attr.step]=\"step\" [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"disabled||readonly\" [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\" (blur)=\"invokeOnTouched($event)\" (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\" [tabindex]=\"tabindex\" />\n <p class=\"active-slider\"></p>\n </div>\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"incrementButton\" (click)=\"incrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"endicon\" [iconurl]=\"endiconurl\"></wm-app-icon> \n </button>\n }\n</div>\n\n} @else {\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n}\n<input class=\"range-input\" aria-orientation=\"horizontal\"\n focus-target\n type=\"range\" [title]=\"datavalue\"\n [attr.min]=\"minvalue\"\n [attr.max]=\"maxvalue\"\n [attr.step]=\"step\"\n [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled||readonly\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n (blur)=\"invokeOnTouched($event)\"\n (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\"\n [tabindex]=\"tabindex\"/>\n}\n@if (readonly || disabled) {\n <div aria-readonly=\"true\" class=\"readonly-wrapper\"></div>\n}\n@if(showmarkers){\n <div class=\"marker-container\">\n@for (marker of markerItems; track marker) {\n <div class=\"marker-wrapper\"\n [ngStyle]=\"{ left: marker.left + 'px' }\"\n [attr.title]=\"marker.label\">\n <div class=\"marker-label\" [ngClass]=\"marker.position\" [attr.title]=\"marker.label\">\n {{ marker.label }}\n </div>\n <div class=\"marker-dot\" [attr.title]=\"marker.label\"></div>\n </div>\n }\n </div>\n\n}\n", dependencies: [{ kind: "directive", type: TextContentDirective, selector: "[textContent]", inputs: ["textContent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: WmAppIconComponent, selector: "wm-app-icon", inputs: ["icon", "iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }] }); }
|
|
169
169
|
}
|
|
170
170
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SliderComponent, decorators: [{
|
|
171
171
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/slider/src/slider.props.ts","../../../../../projects/components/widgets/input/slider/src/slider.component.ts","../../../../../projects/components/widgets/input/slider/src/slider.component.html","../../../../../projects/components/widgets/input/slider/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const sliderProps = new Map(\n [\n ['class', PROP_STRING],\n ['datavalue', PROP_STRING],\n ['disabled', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['maxvalue', PROP_NUMBER],\n ['minvalue', PROP_NUMBER],\n ['name', PROP_STRING],\n ['readonly', PROP_BOOLEAN],\n ['shortcutkey', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['step', PROP_NUMBER],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['showmarkers',{value: false, ...PROP_BOOLEAN}],\n ['markerlabeltext',PROP_ANY],\n ['showicons', PROP_BOOLEAN],\n ['starticon',{value : 'wi wi-minus', ...PROP_STRING}],\n ['endicon',{value : 'wi wi-plus', ...PROP_STRING}],\n ['starticonurl', PROP_STRING],\n ['endiconurl', PROP_STRING],\n ['rangelabelposition',{value : 'bottom', ...PROP_STRING}],\n ]\n);\n\nexport const registerProps = () => {\n register(\n 'wm-slider',\n sliderProps\n );\n registerFormWidget(\n FormWidgetType.SLIDER,\n new Map(sliderProps)\n );\n};\n","import {\n convertDataToObject,\n IWidgetConfig,\n provideAs,\n provideAsWidgetRef,\n styler,\n TextContentDirective,\n WmAppIconComponent\n} from \"@wm/components/base\";\nimport {FormsModule, NG_VALUE_ACCESSOR, NgModel} from '@angular/forms';\nimport {Component, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport {BaseFormCustomComponent} from '@wm/components/input/base-form-custom';\n\nimport {registerProps} from './slider.props';\nimport {App, isDefined, switchClass} from \"@wm/core\";\nimport { CommonModule } from \"@angular/common\";\n\n\nconst DEFAULT_CLS = 'app-slider slider';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-slider',\n hostClass: DEFAULT_CLS\n};\nconst RANGE_LABEL_POSITION: {[key: string]: string} = {\n top: 'range-label-top',\n side: 'range-label-side',\n bottom: 'range-label-bottom',\n};\n@Component({\n standalone: true,\n imports: [TextContentDirective, FormsModule, CommonModule, WmAppIconComponent],\n selector: '[wmSlider]',\n templateUrl: './slider.component.html',\n providers: [\n provideAs(SliderComponent, NG_VALUE_ACCESSOR, true),\n provideAsWidgetRef(SliderComponent)\n ]\n})\nexport class SliderComponent extends BaseFormCustomComponent implements OnDestroy {\n static initializeProps = registerProps();\n\n public minvalue: number;\n public maxvalue: number;\n public disabled: boolean;\n public step: number;\n public shortcutkey: string;\n public tabindex: any;\n public name: string;\n public readonly: boolean;\n public hint: string;\n public arialabel: string;\n public markerlabeltext: string\n public showmarkers: boolean;\n public showicons: boolean;\n public starticon: string;\n public endicon:string;\n public starticonurl:string;\n public endiconurl: string;\n public isPrism: boolean = false;\n\n @ViewChild(NgModel) ngModel: NgModel;\n public markerItems: any[];\n\n constructor(inj: Injector, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any, public app?: App) {\n super(inj, WIDGET_CONFIG, explicitContext);\n styler(this.nativeElement, this);\n this.isPrism = this.app.isPrism;\n }\n\n // change and blur events are added from the template\n protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any) {\n if (eventName !== 'change' && eventName !== 'blur') {\n super.handleEvent(node, eventName, callback, locals);\n }\n }\n\n public handleChange(newVal?: boolean) {\n this.updateSliderValue();\n this.invokeOnChange(this.datavalue, {type: 'change'}, this.ngModel.valid);\n }\n\n updateSliderValue() {\n const sliderValue = 100 - ((((Number(this.datavalue) || 0) - (this.minvalue || 0)) / ((this.maxvalue || 100) - (this.minvalue || 0))) * 100);\n const slider = this.nativeElement.querySelector('.slider-control') as HTMLElement;\n if (slider) {\n const safePercent = Math.min(100, Math.max(0, sliderValue));\n slider.style.setProperty('--end', `${safePercent}%`);\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'tabindex') {\n return;\n }\n else if(key === 'showmarkers'||key === 'markerlabeltext' || key === 'minvalue'||key === 'maxvalue'||key === 'step') {\n if(this.showmarkers) {\n this.renderMarkers();\n }\n } else if(key === 'rangelabelposition'){\n switchClass(this.nativeElement, RANGE_LABEL_POSITION[nv], RANGE_LABEL_POSITION[ov]);\n }else if(key === 'datavalue'){\n this.datavalue = (nv === \"\" || nv === null) ? (this.datavalue ?? 50) : nv\n this.updateSliderValue()\n }\n super.onPropertyChange(key, nv, ov);\n }\n private renderMarkers() {\n const sliderTrack = this.nativeElement.querySelector('.range-input') as HTMLElement;\n const trackWidth = sliderTrack?.offsetWidth-9|| 0;\n const tickCount = this.step > 0 ? Math.floor((this.maxvalue||100 - this.minvalue||0) / this.step) + 1 : 0;\n const labels = convertDataToObject(this.markerlabeltext);\n this.markerItems = [];\n for (let i = 0; i < tickCount; i++) {\n const left = ((trackWidth / (tickCount - 1)) * i);\n const label = labels?.[i]?.dataValue ?? (Array.isArray(labels) ? (typeof labels[i] === 'object' && labels[i]?.title ? labels[i].title : labels[i]) : `${i}`);\n const position = Array.isArray(labels) && typeof labels[i] === 'object' && labels[i]?.position ? labels[i].position : 'up';\n this.markerItems.push({ label, position, left });\n }\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n if(this.showmarkers) {\n setTimeout(() => {this.renderMarkers();}, 40);\n }\n if(this.datavalue){\n setTimeout(() => {this.updateSliderValue();});\n }\n }\n\n decrementButtonClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled) {\n return;\n }\n\n const step = Number(this.step) || 1;\n const min = Number(this.minvalue) || 0;\n\n let value = Number(this.datavalue ?? 50);\n value = value - step;\n if (value <= min) {\n return;\n }\n if (!isNaN(min)) {\n value = Math.max(value, min);\n }\n\n this.datavalue = value;\n this.handleChange()\n }\n\n\n incrementButtonClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled) {\n return;\n }\n\n const step = Number(this.step) || 1;\n const max = Number(this.maxvalue) || 100;\n\n let value = Number(this.datavalue ?? 50);\n value = value + step;\n if (value >= max) return;\n\n if (!isNaN(max)) {\n value = Math.min(value, max);\n }\n\n this.datavalue = value;\n this.handleChange()\n }\n\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Clear ViewChild reference\n this.ngModel = null;\n\n // MEMORY LEAK FIX: Clear marker items array\n if (this.markerItems) {\n this.markerItems = [];\n }\n\n // Call parent ngOnDestroy\n super.ngOnDestroy();\n }\n}\n","@if (isPrism) {\n<div class=\"slider-container\">\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"decrementButton\" (click)=\"decrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"starticon\" [iconurl]=\"starticonurl\"></wm-app-icon> \n </button>\n }\n <div class=\"slider-control\">\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n }\n <input class=\"range-input\" type=\"range\" aria-orientation=\"horizontal\" focus-target [title]=\"datavalue\"\n [attr.min]=\"minvalue\" [attr.max]=\"maxvalue\" [attr.step]=\"step\" [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"disabled||readonly\" [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\" (blur)=\"invokeOnTouched($event)\" (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\" [tabindex]=\"tabindex\" />\n <p class=\"active-slider\"></p>\n </div>\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"incrementButton\" (click)=\"incrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"endicon\" [iconurl]=\"endiconurl\"></wm-app-icon> \n </button>\n }\n</div>\n\n} @else {\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n}\n<input class=\"range-input\" aria-orientation=\"horizontal\"\n focus-target\n type=\"range\" [title]=\"datavalue\"\n [attr.min]=\"minvalue\"\n [attr.max]=\"maxvalue\"\n [attr.step]=\"step\"\n [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled||readonly\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n (blur)=\"invokeOnTouched($event)\"\n (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\"\n [tabindex]=\"tabindex\"/>\n}\n@if (readonly || disabled) {\n <div aria-readonly=\"true\" class=\"readonly-wrapper\"></div>\n}\n@if(showmarkers){\n <div class=\"marker-container\">\n@for (marker of markerItems; track marker) {\n <div class=\"marker-wrapper\"\n [ngStyle]=\"{ left: marker.left + 'px' }\"\n [attr.title]=\"marker.label\">\n <div class=\"marker-label\" [ngClass]=\"marker.position\" [attr.title]=\"marker.label\">\n {{ marker.label }}\n </div>\n <div class=\"marker-dot\" [attr.title]=\"marker.label\"></div>\n </div>\n }\n </div>\n\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/slider/src/slider.props.ts","../../../../../projects/components/widgets/input/slider/src/slider.component.ts","../../../../../projects/components/widgets/input/slider/src/slider.component.html","../../../../../projects/components/widgets/input/slider/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const sliderProps = new Map(\n [\n ['class', PROP_STRING],\n ['datavalue', PROP_STRING],\n ['disabled', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['maxvalue', PROP_NUMBER],\n ['minvalue', PROP_NUMBER],\n ['name', PROP_STRING],\n ['readonly', PROP_BOOLEAN],\n ['shortcutkey', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['step', PROP_NUMBER],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['showmarkers',{value: false, ...PROP_BOOLEAN}],\n ['markerlabeltext',PROP_ANY],\n ['showicons', PROP_BOOLEAN],\n ['starticon',{value : 'wi wi-minus', ...PROP_STRING}],\n ['endicon',{value : 'wi wi-plus', ...PROP_STRING}],\n ['starticonurl', PROP_STRING],\n ['endiconurl', PROP_STRING],\n ['rangelabelposition',{value : 'bottom', ...PROP_STRING}],\n ]\n);\n\nexport const registerProps = () => {\n register(\n 'wm-slider',\n sliderProps\n );\n registerFormWidget(\n FormWidgetType.SLIDER,\n new Map(sliderProps)\n );\n};\n","import {\n convertDataToObject,\n IWidgetConfig,\n provideAs,\n provideAsWidgetRef,\n styler,\n TextContentDirective,\n WmAppIconComponent\n} from \"@wm/components/base\";\nimport {FormsModule, NG_VALUE_ACCESSOR, NgModel} from '@angular/forms';\nimport {Component, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport {BaseFormCustomComponent} from '@wm/components/input/base-form-custom';\n\nimport {registerProps} from './slider.props';\nimport {App, isDefined, switchClass} from \"@wm/core\";\nimport { CommonModule } from \"@angular/common\";\n\n\nconst DEFAULT_CLS = 'app-slider slider';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-slider',\n hostClass: DEFAULT_CLS\n};\nconst RANGE_LABEL_POSITION: {[key: string]: string} = {\n top: 'range-label-top',\n side: 'range-label-side',\n bottom: 'range-label-bottom',\n};\n@Component({\n standalone: true,\n imports: [TextContentDirective, FormsModule, CommonModule, WmAppIconComponent],\n selector: '[wmSlider]',\n templateUrl: './slider.component.html',\n providers: [\n provideAs(SliderComponent, NG_VALUE_ACCESSOR, true),\n provideAsWidgetRef(SliderComponent)\n ]\n})\nexport class SliderComponent extends BaseFormCustomComponent implements OnDestroy {\n static initializeProps = registerProps();\n\n public minvalue: number;\n public maxvalue: number;\n public disabled: boolean;\n public step: number;\n public shortcutkey: string;\n public tabindex: any;\n public name: string;\n public readonly: boolean;\n public hint: string;\n public arialabel: string;\n public markerlabeltext: string\n public showmarkers: boolean;\n public showicons: boolean;\n public starticon: string;\n public endicon:string;\n public starticonurl:string;\n public endiconurl: string;\n public isPrism: boolean = false;\n\n @ViewChild(NgModel) ngModel: NgModel;\n public markerItems: any[];\n\n constructor(inj: Injector, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any, public app?: App) {\n super(inj, WIDGET_CONFIG, explicitContext);\n styler(this.nativeElement, this);\n this.isPrism = this.app.isPrism;\n }\n\n // change and blur events are added from the template\n protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any) {\n if (eventName !== 'change' && eventName !== 'blur') {\n super.handleEvent(node, eventName, callback, locals);\n }\n }\n\n public handleChange(newVal?: boolean) {\n this.updateSliderValue();\n this.invokeOnChange(this.datavalue, {type: 'change'}, this.ngModel.valid);\n }\n\n updateSliderValue() {\n const sliderValue = 100 - ((((Number(this.datavalue) || 0) - (this.minvalue || 0)) / ((this.maxvalue || 100) - (this.minvalue || 0))) * 100);\n const slider = this.nativeElement.querySelector('.slider-control') as HTMLElement;\n if (slider) {\n const safePercent = Math.min(100, Math.max(0, sliderValue));\n slider.style.setProperty('--end', `${safePercent}%`);\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'tabindex') {\n return;\n }\n else if(key === 'showmarkers'||key === 'markerlabeltext' || key === 'minvalue'||key === 'maxvalue'||key === 'step') {\n if(this.showmarkers) {\n this.renderMarkers();\n }\n } else if(key === 'rangelabelposition'){\n switchClass(this.nativeElement, RANGE_LABEL_POSITION[nv], RANGE_LABEL_POSITION[ov]);\n }else if(key === 'datavalue'){\n this.datavalue = (nv === \"\" || nv === null) ? (this.datavalue ?? 50) : nv\n this.updateSliderValue()\n }\n super.onPropertyChange(key, nv, ov);\n }\n private renderMarkers() {\n const sliderTrack = this.nativeElement.querySelector('.range-input') as HTMLElement;\n const trackWidth = sliderTrack?.offsetWidth-9|| 0;\n const tickCount = this.step > 0 ? Math.floor((this.maxvalue||100 - this.minvalue||0) / this.step) + 1 : 0;\n const labels = convertDataToObject(this.markerlabeltext);\n this.markerItems = [];\n for (let i = 0; i < tickCount; i++) {\n const left = ((trackWidth / (tickCount - 1)) * i);\n const label = labels?.[i]?.dataValue ?? (Array.isArray(labels) ? (typeof labels[i] === 'object' && labels[i]?.title ? labels[i].title : labels[i]) : `${i}`);\n const position = Array.isArray(labels) && typeof labels[i] === 'object' && labels[i]?.position ? labels[i].position : 'up';\n this.markerItems.push({ label, position, left });\n }\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n if(this.showmarkers) {\n setTimeout(() => {this.renderMarkers();}, 40);\n }\n if(this.datavalue){\n setTimeout(() => {this.updateSliderValue();});\n }\n }\n\n decrementButtonClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled) {\n return;\n }\n\n const step = Number(this.step) || 1;\n const min = Number(this.minvalue) || 0;\n\n let value = Number(this.datavalue ?? 50);\n value = value - step;\n if (value <= min) {\n return;\n }\n if (!isNaN(min)) {\n value = Math.max(value, min);\n }\n\n this.datavalue = value;\n this.handleChange()\n }\n\n\n incrementButtonClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled) {\n return;\n }\n\n const step = Number(this.step) || 1;\n const max = Number(this.maxvalue) || 100;\n\n let value = Number(this.datavalue ?? 50);\n value = value + step;\n if (value >= max) return;\n\n if (!isNaN(max)) {\n value = Math.min(value, max);\n }\n\n this.datavalue = value;\n this.handleChange()\n }\n\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Clear ViewChild reference\n this.ngModel = null;\n\n // MEMORY LEAK FIX: Clear marker items array\n if (this.markerItems) {\n this.markerItems = [];\n }\n\n // Call parent ngOnDestroy\n super.ngOnDestroy();\n }\n}\n","@if (isPrism) {\n<div class=\"slider-container\">\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"decrementButton\" (click)=\"decrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"starticon\" [iconurl]=\"starticonurl\"></wm-app-icon> \n </button>\n }\n <div class=\"slider-control\">\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n }\n <input class=\"range-input\" type=\"range\" aria-orientation=\"horizontal\" focus-target [title]=\"datavalue\"\n [attr.min]=\"minvalue\" [attr.max]=\"maxvalue\" [attr.step]=\"step\" [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"disabled||readonly\" [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\" (blur)=\"invokeOnTouched($event)\" (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\" [tabindex]=\"tabindex\" />\n <p class=\"active-slider\"></p>\n </div>\n @if (showicons) {\n <button class=\"btn-icon\" type=\"button\" name=\"incrementButton\" (click)=\"incrementButtonClick($event)\">\n <wm-app-icon [iconclass]=\"endicon\" [iconurl]=\"endiconurl\"></wm-app-icon> \n </button>\n }\n</div>\n\n} @else {\n @if(!showmarkers){\n <span [textContent]=\"minvalue||0\" class=\"app-slider-value pull-left\"></span>\n <span [textContent]=\"maxvalue||100\" class=\"app-slider-value pull-right\"></span>\n}\n<input class=\"range-input\" aria-orientation=\"horizontal\"\n focus-target\n type=\"range\" [title]=\"datavalue\"\n [attr.min]=\"minvalue\"\n [attr.max]=\"maxvalue\"\n [attr.step]=\"step\"\n [(ngModel)]=\"datavalue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled||readonly\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"arialabel\"\n (blur)=\"invokeOnTouched($event)\"\n (ngModelChange)=\"handleChange($event)\"\n [attr.name]=\"name\"\n [tabindex]=\"tabindex\"/>\n}\n@if (readonly || disabled) {\n <div aria-readonly=\"true\" class=\"readonly-wrapper\"></div>\n}\n@if(showmarkers){\n <div class=\"marker-container\">\n@for (marker of markerItems; track marker) {\n <div class=\"marker-wrapper\"\n [ngStyle]=\"{ left: marker.left + 'px' }\"\n [attr.title]=\"marker.label\">\n <div class=\"marker-label\" [ngClass]=\"marker.position\" [attr.title]=\"marker.label\">\n {{ marker.label }}\n </div>\n <div class=\"marker-dot\" [attr.title]=\"marker.label\"></div>\n </div>\n }\n </div>\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|