@ieeesa-npm/presentation 0.33.17 → 0.33.18
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/esm2022/lib/components/autocomplete/autocomplete.component.mjs +104 -6
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +91 -7
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +6 -3
- package/esm2022/lib/components/select/select.component.mjs +125 -7
- package/esm2022/lib/components/stepper/stepper.component.mjs +5 -3
- package/esm2022/lib/components/tabs/tabs.component.mjs +3 -3
- package/esm2022/lib/components/time-picker/time-picker.component.mjs +65 -6
- package/fesm2022/ieeesa-npm-presentation.mjs +391 -30
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
- package/lib/components/autocomplete/autocomplete.component.d.ts +13 -1
- package/lib/components/date-picker/date-picker.component.d.ts +12 -3
- package/lib/components/select/select.component.d.ts +16 -3
- package/lib/components/time-picker/time-picker.component.d.ts +12 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ieeesa-npm-presentation.mjs","sources":["../../../projects/presentation/src/lib/components/form-error/form-error.component.ts","../../../projects/presentation/src/lib/components/form-error/form-error.component.html","../../../projects/presentation/src/lib/models/form-control-types.model.ts","../../../projects/presentation/src/lib/pipes/safe.pipe.ts","../../../projects/presentation/src/lib/components/form-support-text/form-support-text.component.ts","../../../projects/presentation/src/lib/components/form-support-text/form-support-text.component.html","../../../projects/presentation/src/lib/services/form-utility.service.ts","../../../projects/presentation/src/lib/components/autocomplete/autocomplete.component.ts","../../../projects/presentation/src/lib/components/autocomplete/autocomplete.component.html","../../../projects/presentation/src/lib/components/icon-button/icon-button.component.ts","../../../projects/presentation/src/lib/components/icon-button/icon-button.component.html","../../../projects/presentation/src/lib/components/checkbox/checkbox.component.ts","../../../projects/presentation/src/lib/components/checkbox/checkbox.component.html","../../../projects/presentation/src/lib/date-formats.ts","../../../projects/presentation/src/lib/services/datepicker.service.ts","../../../projects/presentation/src/lib/components/date-picker-header/date-picker-header.component.ts","../../../projects/presentation/src/lib/components/date-picker-header/date-picker-header.component.html","../../../projects/presentation/src/lib/models/calendar.model.ts","../../../projects/presentation/src/lib/components/date-picker/date-picker.component.ts","../../../projects/presentation/src/lib/components/date-picker/date-picker.component.html","../../../projects/presentation/src/lib/models/input-field-type.model.ts","../../../projects/presentation/src/lib/components/input/input.component.ts","../../../projects/presentation/src/lib/components/input/input.component.html","../../../projects/presentation/src/lib/components/radio/radio.component.ts","../../../projects/presentation/src/lib/components/radio/radio.component.html","../../../projects/presentation/src/lib/validation-patterns.ts","../../../projects/presentation/src/lib/models/search.model.ts","../../../projects/presentation/src/lib/components/search/search.component.ts","../../../projects/presentation/src/lib/components/search/search.component.html","../../../projects/presentation/src/lib/components/select/select.component.ts","../../../projects/presentation/src/lib/components/select/select.component.html","../../../projects/presentation/src/lib/components/text-area/text-area.component.ts","../../../projects/presentation/src/lib/components/text-area/text-area.component.html","../../../projects/presentation/src/lib/components/add-form-group/add-form-group.component.ts","../../../projects/presentation/src/lib/components/add-form-group/add-form-group.component.html","../../../projects/presentation/src/lib/components/time-picker/time-picker.component.ts","../../../projects/presentation/src/lib/components/time-picker/time-picker.component.html","../../../projects/presentation/src/lib/components/slide-toggle/slide-toggle.component.ts","../../../projects/presentation/src/lib/components/slide-toggle/slide-toggle.component.html","../../../projects/presentation/src/lib/directives/file-upload/file-upload.directive.ts","../../../projects/presentation/src/lib/models/align-browsed-files.model.ts","../../../projects/presentation/src/lib/services/file-upload.service.ts","../../../projects/presentation/src/lib/components/file-download/file-download.component.ts","../../../projects/presentation/src/lib/components/file-download/file-download.component.html","../../../projects/presentation/src/lib/components/file-upload/file-upload.component.ts","../../../projects/presentation/src/lib/components/file-upload/file-upload.component.html","../../../projects/presentation/src/lib/models/color-format.model.ts","../../../projects/presentation/src/lib/components/color-picker/color-picker.component.ts","../../../projects/presentation/src/lib/components/color-picker/color-picker.component.html","../../../projects/presentation/src/lib/directives/text-truncated/text-truncated.directive.ts","../../../projects/presentation/src/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.ts","../../../projects/presentation/src/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.html","../../../projects/presentation/src/lib/directives/observe-dom-change/observe-dom-change.directive.ts","../../../projects/presentation/src/lib/components/rich-text-editor/rich-text-editor.component.ts","../../../projects/presentation/src/lib/components/rich-text-editor/rich-text-editor.component.html","../../../projects/presentation/src/lib/directives/dynamic-form-field/dynamic-form-field.directive.ts","../../../projects/presentation/src/lib/directives/focus-invalid-form-field/focus-invalid-form-field.directive.ts","../../../projects/presentation/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/presentation/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/presentation/src/lib/components/footer/footer.component.ts","../../../projects/presentation/src/lib/components/footer/footer.component.html","../../../projects/presentation/src/lib/components/menu/menu.component.ts","../../../projects/presentation/src/lib/components/menu/menu.component.html","../../../projects/presentation/src/lib/models/profile-menu.model.ts","../../../projects/presentation/src/lib/components/image-preview/image-preview.component.ts","../../../projects/presentation/src/lib/components/image-preview/image-preview.component.html","../../../projects/presentation/src/lib/services/break-point-observer.service.ts","../../../projects/presentation/src/lib/components/header/header.component.ts","../../../projects/presentation/src/lib/components/header/header.component.html","../../../projects/presentation/src/lib/directives/set-background/set-background.directive.ts","../../../projects/presentation/src/lib/components/legend/legend.component.ts","../../../projects/presentation/src/lib/components/legend/legend.component.html","../../../projects/presentation/src/lib/components/list/list.component.ts","../../../projects/presentation/src/lib/components/list/list.component.html","../../../projects/presentation/src/lib/components/toggle-button/toggle-button.component.ts","../../../projects/presentation/src/lib/components/toggle-button/toggle-button.component.html","../../../projects/presentation/src/lib/components/modal/modal.component.ts","../../../projects/presentation/src/lib/components/modal/modal.component.html","../../../projects/presentation/src/lib/components/modal-confirmation/modal-confirmation.component.ts","../../../projects/presentation/src/lib/components/modal-confirmation/modal-confirmation.component.html","../../../projects/presentation/src/lib/components/modal-info/modal-info.component.ts","../../../projects/presentation/src/lib/components/modal-info/modal-info.component.html","../../../projects/presentation/src/lib/components/navigation-menu/navigation-menu.component.ts","../../../projects/presentation/src/lib/components/navigation-menu/navigation-menu.component.html","../../../projects/presentation/src/lib/components/notification/notification.component.ts","../../../projects/presentation/src/lib/components/notification/notification.component.html","../../../projects/presentation/src/lib/components/welcome/welcome.component.ts","../../../projects/presentation/src/lib/components/welcome/welcome.component.html","../../../projects/presentation/src/lib/models/chip-option.model.ts","../../../projects/presentation/src/lib/components/chips/chips.component.ts","../../../projects/presentation/src/lib/components/chips/chips.component.html","../../../projects/presentation/src/lib/components/filter/filter.component.ts","../../../projects/presentation/src/lib/components/filter/filter.component.html","../../../projects/presentation/src/lib/components/loader/loader.component.ts","../../../projects/presentation/src/lib/components/loader/loader.component.html","../../../projects/presentation/src/lib/models/table-schema.model.ts","../../../projects/presentation/src/lib/components/data-table/data-table.component.ts","../../../projects/presentation/src/lib/components/data-table/data-table.component.html","../../../projects/presentation/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../projects/presentation/src/lib/components/breadcrumb/breadcrumb.component.html","../../../projects/presentation/src/lib/components/tile/tile.component.ts","../../../projects/presentation/src/lib/components/tile/tile.component.html","../../../projects/presentation/src/lib/models/custom-properties.model.ts","../../../projects/presentation/src/lib/components/tabs/tabs.component.ts","../../../projects/presentation/src/lib/components/tabs/tabs.component.html","../../../projects/presentation/src/lib/models/button-type.model.ts","../../../projects/presentation/src/lib/components/card/card.component.ts","../../../projects/presentation/src/lib/components/card/card.component.html","../../../projects/presentation/src/lib/components/accordion/accordion.component.ts","../../../projects/presentation/src/lib/components/accordion/accordion.component.html","../../../projects/presentation/src/lib/components/inactive-tenant/inactive-tenant.component.ts","../../../projects/presentation/src/lib/components/inactive-tenant/inactive-tenant.component.html","../../../projects/presentation/src/lib/components/export-format-popover/export-format-popover.component.ts","../../../projects/presentation/src/lib/components/export-format-popover/export-format-popover.component.html","../../../projects/presentation/src/lib/components/filter-popover/filter-popover.component.ts","../../../projects/presentation/src/lib/components/filter-popover/filter-popover.component.html","../../../projects/presentation/src/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.ts","../../../projects/presentation/src/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.html","../../../projects/presentation/src/lib/components/export-success-dialog/export-success-dialog.component.ts","../../../projects/presentation/src/lib/components/export-success-dialog/export-success-dialog.component.html","../../../projects/presentation/src/lib/components/home-group-selection/home-group-selection.component.ts","../../../projects/presentation/src/lib/components/home-group-selection/home-group-selection.component.html","../../../projects/presentation/src/lib/models/accordion-info.model.ts","../../../projects/presentation/src/lib/models/allowed-file-types.model.ts","../../../projects/presentation/src/lib/models/link-type.model.ts","../../../projects/presentation/src/lib/models/export-format-popover.model.ts","../../../projects/presentation/src/lib/models/home-group-selection.model.ts","../../../projects/presentation/src/lib/pipes/timezone-format.pipe.ts","../../../projects/presentation/src/lib/presentation.module.ts","../../../projects/presentation/src/lib/components/stepper/stepper.component.ts","../../../projects/presentation/src/lib/components/stepper/stepper.component.html","../../../projects/presentation/src/public-api.ts","../../../projects/presentation/src/ieeesa-npm-presentation.ts"],"sourcesContent":["import { Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\n\r\n/**\r\n * Implements and displays form error messages and form submission error response message on submission of form.\r\n * @export\r\n * @class FormErrorComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-form-error',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './form-error.component.html',\r\n styleUrls: ['./form-error.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FormErrorComponent {\r\n @Input() formGroup!: FormGroup;\r\n @Input() config!: FieldConfig;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() submitResponse!: any;\r\n}\r\n","<ng-container *ngIf=\"formGroup && config?.controlName\">\r\n <div\r\n class=\"ieeesa-body-sm-12 ieeesa-form-error\"\r\n *ngIf=\"\r\n formGroup.controls[config.controlName]?.touched ||\r\n (formGroup.controls[config.controlName]?.dirty &&\r\n formGroup.controls[config.controlName]?.invalid)\r\n \"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n [attr.aria-invalid]=\"formGroup.controls[config.controlName].invalid\"\r\n >\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['validStartDate']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastStartDate']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['validEndDate'] &&\r\n !formGroup.controls[config.controlName].errors?.[\r\n 'checkboxSelectionRequired'\r\n ]\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['validStartTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastStartTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['validEndTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastEndDate']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastEndTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['invalidEndDateTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['required'] ||\r\n formGroup.controls[config.controlName].errors?.[\r\n 'checkboxSelectionRequired'\r\n ]\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.requiredErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['minlength'] ||\r\n (formGroup.controls[config.controlName].errors?.['matDatepickerMin'] &&\r\n !formGroup.controls[config.controlName].errors?.['validEndDate'])\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.minErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['maxlength'] ||\r\n formGroup.controls[config.controlName].errors?.['max']\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.maxErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pattern']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.patternErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['email']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidEmailErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['invalidStartDateRange']\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateRangeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['invalidEndDateRange']\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateRangeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['invalidColor']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidColorErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['maxFileSize']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.maxFileSizeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['invalidFileType']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.allowedFileTypeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.[\r\n 'maxFilesUploadLimitReached'\r\n ]\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.maxFilesUploadLimitErrorMessage }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-form-error\"\r\n *ngIf=\"\r\n (formGroup.controls[config.controlName]?.touched ||\r\n formGroup.controls[config.controlName]?.dirty) &&\r\n submitResponse\r\n \"\r\n >\r\n <p class=\"ieeesa-form-error--text mt-1\">\r\n {{ submitResponse }}\r\n </p>\r\n </div>\r\n</ng-container>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum FormControlType {\r\n INPUT = 'INPUT',\r\n TEXT_AREA = 'TEXT_AREA',\r\n SELECT = 'SELECT',\r\n SEARCH = 'SEARCH',\r\n DATE = 'DATE',\r\n CHECKBOX = 'CHECKBOX',\r\n RADIO = 'RADIO',\r\n AUTO_COMPLETE = 'AUTO_COMPLETE',\r\n MULTI_SELECT_AUTO_COMPLETE = 'MULTI_SELECT_AUTO_COMPLETE',\r\n ADD_FORM_GROUP = 'ADD_FORM_GROUP',\r\n TIME_PICKER = 'TIME_PICKER',\r\n SLIDE_TOGGLE = 'SLIDE_TOGGLE',\r\n COLOR_PICKER = 'COLOR_PICKER',\r\n FILE_UPLOAD = 'FILE_UPLOAD',\r\n RICH_TEXT_EDITOR = 'RICH_TEXT_EDITOR'\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {\r\n DomSanitizer,\r\n SafeHtml,\r\n SafeStyle,\r\n SafeScript,\r\n SafeUrl,\r\n SafeResourceUrl,\r\n} from '@angular/platform-browser';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * SafePipe is using DomSanitizer service which helps to prevent attackers from injecting malicious client-side scripts into web pages, which is often referred to as Cross-site Scripting or XSS.\r\n * @export\r\n * @class SafePipe\r\n * @implements {PipeTransform}\r\n */\r\n@Pipe({\r\n name: 'safe',\r\n standalone: true,\r\n})\r\nexport class SafePipe implements PipeTransform {\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(protected sanitizer: DomSanitizer) {}\r\n transform(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n value: any,\r\n type: string\r\n ): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\r\n switch (type) {\r\n case SafeType.HTML:\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case SafeType.STYLE:\r\n return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case SafeType.SCRIPT:\r\n return this.sanitizer.bypassSecurityTrustScript(value);\r\n case SafeType.URL:\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case SafeType.RESOURCE_URL:\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default:\r\n throw new Error(`Invalid safe type specified: ${type}`);\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\n@Component({\r\n selector: 'ieeesa-form-support-text',\r\n standalone: true,\r\n templateUrl: './form-support-text.component.html',\r\n styleUrls: ['./form-support-text.component.scss'],\r\n imports: [CommonModule, forwardRef(() => SafePipe)],\r\n})\r\nexport class FormSupportTextComponent implements OnDestroy, AfterViewInit {\r\n @Input() formGroup!: FormGroup;\r\n @Input() config!: FieldConfig;\r\n safeType: string = SafeType.HTML;\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public elementRef: ElementRef) {}\r\n /**\r\n * Emits supportTextLinkClick event on click of form support text link\r\n * Passes linkType if available\r\n * @param {Event} event\r\n * @memberof FormSupportTextComponent\r\n */\r\n onAnchorElementClick(event: Event): void {\r\n event.preventDefault();\r\n if (this.config?.linkType)\r\n this.supportTextLinkClick.emit({\r\n event: event,\r\n linkType: this.config?.linkType,\r\n });\r\n else this.supportTextLinkClick.emit({ event: event });\r\n }\r\n /**\r\n * Adds click event to the anchor tags using querySelectorAll\r\n * @memberof FormSupportTextComponent\r\n */\r\n ngAfterViewInit(): void {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.addEventListener('click', this.onAnchorElementClick.bind(this));\r\n });\r\n }\r\n /**\r\n * Removing the event listeners on destroy\r\n * @memberof FormSupportTextComponent\r\n */\r\n ngOnDestroy(): void {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.removeEventListener('click', this.onAnchorElementClick);\r\n });\r\n }\r\n}\r\n","<p\r\n class=\"pt-1 m-0 ieeesa-body-sm-14 ieeesa-form-support-text\"\r\n [id]=\"config?.ariaDescribedById ?? ''\"\r\n *ngIf=\"\r\n config?.supportMessage &&\r\n config?.controlName &&\r\n ((formGroup.controls[config.controlName]?.untouched &&\r\n (formGroup.controls[config.controlName]?.pristine ||\r\n formGroup.controls[config.controlName]?.valid)) ||\r\n (formGroup.controls[config.controlName]?.touched &&\r\n formGroup.controls[config.controlName]?.valid))\r\n \"\r\n [attr.aria-hidden]=\"\r\n formGroup.controls[config.controlName]?.touched &&\r\n formGroup.controls[config.controlName]?.valid\r\n \"\r\n [innerHTML]=\"config?.supportMessage | safe : safeType\"\r\n></p>\r\n","import { Injectable } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../models/field-config.model';\r\nimport { FormControlType } from '../models/form-control-types.model';\r\n\r\n/**\r\n * Creates form fields configuration and form group based on passed parameters.\r\n * @export\r\n * @class FormUtilityService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FormUtilityService {\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private fb: FormBuilder) {}\r\n /**\r\n * Returns form fields configuration based on passed control name and type.\r\n * @param {string} controlName\r\n * @param {string} controlType\r\n * @return {FieldConfig}\r\n * @memberof FormUtilityService\r\n */\r\n getFormFieldConfig(controlName: string, controlType: string): FieldConfig {\r\n return {\r\n controlName: controlName,\r\n type: controlType,\r\n };\r\n }\r\n /**\r\n * Creates and returns form group with passed control name added.\r\n * @param {string} controlName\r\n * @return {FormGroup}\r\n * @memberof FormUtilityService\r\n */\r\n getFormGroup(\r\n controlName: string,\r\n formControlConfig?: FieldConfig\r\n ): FormGroup {\r\n if (formControlConfig?.type === FormControlType.CHECKBOX) {\r\n const group = this.fb.group({});\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const formArray = new FormArray<any>([]);\r\n formControlConfig?.checkboxOptions?.forEach((control) => {\r\n formArray.push(new FormControl(control.checked));\r\n });\r\n group.addControl(controlName, formArray);\r\n return group;\r\n }\r\n return this.fb.group({\r\n [controlName]: [],\r\n });\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { debounceTime, filter, fromEvent, map, Subject, takeUntil } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport {\r\n MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n MatAutocompleteModule,\r\n} from '@angular/material/autocomplete';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { SelectOption } from '@ieeesa-npm/models';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as autocompleteConstInfo from '../../assets/constants.json';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\n\r\n/**\r\n * Provides auto suggestion for the entered input by filtering the options from the given list of options.\r\n * @export\r\n * @class AutocompleteComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-autocomplete',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n MatOptionModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n useValue: { overlayPanelClass: 'ieeesa-autocomplete-overlay-pane' },\r\n },\r\n ],\r\n templateUrl: './autocomplete.component.html',\r\n styleUrls: ['./autocomplete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AutocompleteComponent\r\n implements OnInit, FormField, OnDestroy, AfterViewInit\r\n{\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n value = '';\r\n autoCompleteOptionList!: AutoCompleteOption[];\r\n @Input()\r\n set autoCompleteOptions(value: AutoCompleteOption[]) {\r\n this.autoCompleteOptionList = value;\r\n }\r\n get autoCompleteOptions(): AutoCompleteOption[] {\r\n return this.autoCompleteOptionList;\r\n }\r\n @Input() isSelectedOptionsVisible = true;\r\n @Output() autoCompleteSearchValue = new EventEmitter<string>();\r\n @Output() autoCompleteClearSearchValue = new EventEmitter<string>();\r\n @Output() autoCompleteOptionSelected = new EventEmitter<AutoCompleteOption>();\r\n @ViewChild('autoComplete') autoComplete!: ElementRef;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n autocompleteConstInfo: any = autocompleteConstInfo;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private formUtilityService: FormUtilityService) {}\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize components instance properties.\r\n * @memberof AutocompleteComponent\r\n */\r\n ngOnInit(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'autocomplete',\r\n FormControlType.AUTO_COMPLETE\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup('autocomplete');\r\n this.autoCompleteOptions =\r\n this.config?.autoCompleteOptions ?? this.autoCompleteOptions;\r\n }\r\n\r\n /**\r\n * Initialize the form control change event once the form control is ready on ngAfterViewInit by calling onValueChanges method.\r\n * @memberof AutocompleteComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.onValueChanges();\r\n }\r\n /**\r\n * Emits an autoCompleteSearchValue change event when the value is changed and value is greater than minCharToSearch or equal to zero.\r\n * @memberof AutocompleteComponent\r\n */\r\n onValueChanges(): void {\r\n fromEvent(this.autoComplete?.nativeElement, 'keyup')\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => {\r\n return event?.target?.value;\r\n }),\r\n filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (res: any) =>\r\n res?.length <\r\n this.autocompleteConstInfo.autocomplete.minCharToSearch &&\r\n res?.length !== 0\r\n ),\r\n debounceTime(this.autocompleteConstInfo.autocomplete.debounceTime)\r\n )\r\n .subscribe((text: string) => {\r\n this.autoCompleteClearSearchValue.emit(text);\r\n });\r\n this.group?.controls[this.config?.controlName]?.valueChanges\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (res: any) =>\r\n res?.length >=\r\n this.autocompleteConstInfo.autocomplete.minCharToSearch ||\r\n res?.length === 0\r\n ),\r\n debounceTime(this.autocompleteConstInfo.autocomplete.debounceTime)\r\n )\r\n .subscribe((text: string) => {\r\n this.autoCompleteSearchValue.emit(text);\r\n });\r\n }\r\n /**\r\n * Emits the selected option when the form on change event is triggered and returns option.\r\n * @param {AutoCompleteOption} data // data is an selected option of autoCompleteOptions.\r\n * @return {AutoCompleteOption} // Returns selected option as AutoCompleteOption\r\n * @memberof AutocompleteComponent\r\n */\r\n onChange(data: AutoCompleteOption): AutoCompleteOption {\r\n this.autoCompleteOptionSelected.emit(data);\r\n return data;\r\n }\r\n /**\r\n * Display the selected option name\r\n * @param {AutoCompleteOption} option\r\n * @return {string}\r\n * @memberof AutocompleteComponent\r\n */\r\n displayOptionName(option: AutoCompleteOption): string {\r\n return option?.name ? option.name : '';\r\n }\r\n /**\r\n * Takes the index and the current item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @param {SelectOption} option\r\n * @return {(number | string)}\r\n * @memberof AutocompleteComponent\r\n */\r\n trackByFn(index: number, option: SelectOption): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof AutocompleteComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-autocomplete\"\r\n [formGroup]=\"group\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-autocomplete-field__label-left'\r\n : 'ieeesa-autocomplete-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-autocomplete__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <mat-form-field class=\"ieeesa-autocomplete__mat-form\" appearance=\"outline\">\r\n <input\r\n matInput\r\n class=\"ieeesa-autocomplete__input\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n #autoComplete\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"onChange($event.option.value)\"\r\n [displayWith]=\"displayOptionName\"\r\n class=\"ieeesa-autocomplete__autocomplete-list\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of autoCompleteOptions; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n <span>{{ option.name }}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"autocompleteConstInfo.ariaLabel.clear\"\r\n *ngIf=\"value\"\r\n (click)=\"value = ''\"\r\n >\r\n <i class=\"fa-solid fa-xmark ieeesa-autocomplete__cancel-icon\"></i>\r\n </button>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n/**\r\n * Creates svg icon as button component.\r\n * @export\r\n * @class IconButtonComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-icon-button',\r\n standalone: true,\r\n imports: [CommonModule, MatTooltipModule],\r\n templateUrl: './icon-button.component.html',\r\n styleUrls: ['./icon-button.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class IconButtonComponent {\r\n @Input() iconButton!: IconButton;\r\n @Input() isLabelNeeded = false;\r\n @Output() iconButtonClick = new EventEmitter<IconButton>();\r\n /**\r\n * Emits the clicked icon button information.\r\n * @param {Event} IconButton\r\n * @memberof IconButtonComponent\r\n */\r\n onClick(event: IconButton) {\r\n this.iconButtonClick.emit(event);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n class=\"ieeesa-icon-button border-0 ieeesa-icon-button__{{ iconButton.id }}\"\r\n [attr.aria-label]=\"iconButton.ariaLabel\"\r\n [matTooltip]=\"iconButton.toolTip\"\r\n [disabled]=\"iconButton.disabled\"\r\n (click)=\"onClick(iconButton)\"\r\n>\r\n <svg\r\n class=\"ieeesa-icon-button__svg\"\r\n [ngClass]=\"\r\n iconButton.disabled\r\n ? 'ieeesa-icon-button__disabled'\r\n : 'ieeesa-icon-button__enabled'\r\n \"\r\n *ngIf=\"iconButton?.iconURL\"\r\n >\r\n <use [attr.xlink:href]=\"iconButton.iconURL\"></use>\r\n </svg>\r\n <span class=\"ieeesa-icon-button__label\" *ngIf=\"isLabelNeeded\">{{\r\n iconButton?.label\r\n }}</span>\r\n</button>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { CheckboxOption, IconButton } from '@ieeesa-npm/models';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\n\r\n/**\r\n * Provides implementation of all types of checkboxes.\r\n * @export\r\n * @class CheckboxComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-checkbox',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatListModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n FormErrorComponent,\r\n ReactiveFormsModule,\r\n MatCheckboxModule,\r\n FormSupportTextComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CheckboxComponent implements OnInit, FormField, OnDestroy {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n private _checkboxes!: CheckboxOption[];\r\n @Input() isLabelNeeded = true;\r\n /**\r\n * Input property to get checkbox options.\r\n * @memberof CheckboxComponent\r\n * @usageNotes const checkboxes = [{ id: 1, name:\"Angular\"}]\r\n */\r\n @Input()\r\n set checkboxes(value: CheckboxOption[]) {\r\n this._checkboxes = value;\r\n }\r\n get checkboxes(): CheckboxOption[] {\r\n return this._checkboxes;\r\n }\r\n @Input()\r\n set recreateCheckboxOptionsControl(value: CheckboxOption[]) {\r\n if (this.group && value) {\r\n this._checkboxes = value;\r\n this.recreateFormControl();\r\n }\r\n }\r\n selectedCheckboxesInfo = new SelectionModel<CheckboxOption>(true, []);\r\n @Output() checkboxSelection = new EventEmitter<CheckboxOption>();\r\n @Output() checkboxOptionsAndSelection = new EventEmitter<CheckboxOption[]>();\r\n @Output() selectedCheckboxes = new EventEmitter<CheckboxOption[]>();\r\n @Output() ctaButtonClick = new EventEmitter<IconButton>();\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private formUtilityService: FormUtilityService) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method of component to initialize component instance properties\r\n * and emits whenever the checkboxes selection state changes\r\n * @memberof CheckboxComponent\r\n */\r\n ngOnInit(): void {\r\n this.createFormGroupAndInitializeProperties();\r\n this.selectedCheckboxesInfo.changed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.selectedCheckboxes.emit(result?.source?.selected);\r\n this.checkboxOptionsAndSelection.emit(this.checkboxes);\r\n });\r\n }\r\n /**\r\n * Recreate form controls whenever the new set of checkboxes are loaded when component is already initialized\r\n * @memberof CheckboxComponent\r\n */\r\n recreateFormControl(): void {\r\n this.config = this.formUtilityService.getFormFieldConfig(\r\n 'checkbox',\r\n FormControlType.CHECKBOX\r\n );\r\n this.config.checkboxOptions = this.checkboxes;\r\n this.group = this.formUtilityService.getFormGroup('checkbox', this.config);\r\n }\r\n /**\r\n * Creates form group and initializes components properties from config.\r\n * @memberof CheckboxComponent\r\n */\r\n createFormGroupAndInitializeProperties(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'checkbox',\r\n FormControlType.CHECKBOX\r\n );\r\n this.checkboxes = this.config?.checkboxOptions ?? this.checkboxes;\r\n this.config.checkboxOptions = this.checkboxes;\r\n this.group =\r\n this.group ??\r\n this.formUtilityService.getFormGroup('checkbox', this.config);\r\n }\r\n /**\r\n * Sets checkbox selection and emits selected option on change event.\r\n * @param {CheckboxOption} option\r\n * @param {boolean} checked\r\n * @memberof CheckboxComponent\r\n */\r\n onChange(option: CheckboxOption, checked: boolean): void {\r\n option.checked = !checked;\r\n this.checkboxSelection.emit(option);\r\n }\r\n /**\r\n * Allows Angular to detect the specific checkbox option that needs to change or be added instead of rebuilding the whole checkbox options in DOM by tracking option unique Id.\r\n * @param {number} index\r\n * @return {number}\r\n * @memberof CheckboxComponent\r\n */\r\n trackById(\r\n index: number,\r\n option: CheckboxOption | IconButton\r\n ): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * Emits ctaButtonClick event along with clicked button information.\r\n * @param {IconButton} event\r\n * @memberof CheckboxComponent\r\n */\r\n onCheckboxCTAButtonClick(event: IconButton): void {\r\n this.ctaButtonClick.emit(event);\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CheckboxComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-checkbox-field\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-checkbox-field__label-left'\r\n : 'ieeesa-checkbox-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-checkbox-field__label\">{{\r\n config?.label\r\n }}</mat-label>\r\n <ng-container [formArrayName]=\"config?.controlName ?? 'checkboxes'\">\r\n <mat-list class=\"p-0\" role=\"group\" [attr.aria-label]=\"config?.ariaLabel\">\r\n <ng-container\r\n *ngFor=\"let option of checkboxes; let i = index; trackBy: trackById\"\r\n >\r\n <mat-checkbox\r\n [formControlName]=\"i\"\r\n (change)=\"\r\n onChange(option, option.checked);\r\n selectedCheckboxesInfo.toggle(option)\r\n \"\r\n [disabled]=\"option.disabled\"\r\n [checked]=\"option.checked\"\r\n >\r\n {{ option.name }}\r\n </mat-checkbox>\r\n <ng-container *ngIf=\"option.checked\">\r\n <ng-container\r\n *ngFor=\"\r\n let button of option?.ctaButton;\r\n let i = index;\r\n trackBy: trackById\r\n \"\r\n >\r\n <ieeesa-icon-button\r\n class=\"px-5\"\r\n [iconButton]=\"button\"\r\n [isLabelNeeded]=\"isLabelNeeded\"\r\n (iconButtonClick)=\"onCheckboxCTAButtonClick($event)\"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-list>\r\n </ng-container>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n <ieeesa-form-error\r\n *ngIf=\"config && group\"\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n >\r\n </ieeesa-form-error>\r\n</div>\r\n","export const DateFormats = {\r\n display: {\r\n dateInput: 'DD MMM YYYY',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n daysFormat: 'ddd',\r\n monthFormat: 'YYYY-MM',\r\n fullMonthLabel: 'MMM',\r\n month: 'M',\r\n },\r\n};\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * DatepickerService is used in date-picker and date-picker-header component to get date range, isRangeSelection, and selected date(s).\r\n * @export\r\n * @class DatepickerService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DatepickerService implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n range = new Subject<{ start: Date | string; end: Date | string }>();\r\n range$ = this.range.asObservable();\r\n selectedRange!: { start: Date | string; end: Date | string };\r\n selectedDate!: Date | string;\r\n isRangeSelection = false;\r\n constructor() {\r\n this.range$?.pipe(takeUntil(this.destroy$)).subscribe((range) => {\r\n this.selectedRange = {\r\n start: range.start,\r\n end: range.end,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Returns the calendar type.\r\n * @return {boolean}\r\n * @memberof DatepickerService\r\n */\r\n getCalendarType(): boolean {\r\n return this.isRangeSelection;\r\n }\r\n /**\r\n * Returns selected range\r\n * @return {({ start: Date | string; end: Date | string })}\r\n * @memberof DatepickerService\r\n */\r\n getSelectedRange(): { start: Date | string; end: Date | string } {\r\n return this.selectedRange;\r\n }\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport {\r\n DateAdapter,\r\n MAT_DATE_FORMATS,\r\n MatDateFormats,\r\n MatNativeDateModule,\r\n} from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormGroup } from '@angular/forms';\r\nimport moment_ from 'moment';\r\nimport { DatepickerService } from '../../services/datepicker.service';\r\nimport { DateFormats } from '../../date-formats';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport * as datePickerInfo from '../../assets/constants.json';\r\nconst moment = moment_;\r\n\r\n/**\r\n * Provides implementation of date picker custom header and being used in date-picker component.\r\n * @export\r\n * @class DatePickerHeaderComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-date-picker-header',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatNativeDateModule,\r\n MatIconModule,\r\n ],\r\n templateUrl: './date-picker-header.component.html',\r\n styleUrls: ['./date-picker-header.component.scss'],\r\n})\r\nexport class DatePickerHeaderComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n @Input() group!: FormGroup;\r\n arrowDirection = false;\r\n range!: { start: string; end: string };\r\n isRangeSelection = false;\r\n selectedDate!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n datePickerInfo: any = datePickerInfo;\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public calendar: MatCalendar<Date>,\r\n // eslint-disable-next-line no-unused-vars\r\n public dateAdapter: DateAdapter<Date>,\r\n // eslint-disable-next-line no-unused-vars\r\n @Inject(MAT_DATE_FORMATS) public dateFormats: MatDateFormats,\r\n // eslint-disable-next-line no-unused-vars\r\n private datepickerService: DatepickerService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize components instance properties.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n ngOnInit(): void {\r\n this.isRangeSelection = this.datepickerService.getCalendarType();\r\n const selectedRange = this.datepickerService.getSelectedRange();\r\n if (selectedRange) {\r\n this.setRange(selectedRange);\r\n }\r\n this.datepickerService.range$\r\n ?.pipe(takeUntil(this.destroy$))\r\n .subscribe((range) => {\r\n this.setRange(range);\r\n });\r\n this.selectedDate = this.datepickerService.selectedDate\r\n ? moment(this.datepickerService.selectedDate).format(\r\n DateFormats.display.dateInput\r\n )\r\n : '';\r\n }\r\n\r\n /**\r\n * Sets the min and max date range.\r\n * @param {({ start: Date | string; end: Date | string })} range\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setRange(range: { start: Date | string; end: Date | string }): void {\r\n this.range = {\r\n start:\r\n moment(range.start).date() +\r\n ' ' +\r\n moment(range.start).format(DateFormats.display.fullMonthLabel),\r\n end:\r\n moment(range.end).date() +\r\n ' ' +\r\n moment(range.end).format(DateFormats.display.fullMonthLabel),\r\n };\r\n }\r\n\r\n /**\r\n * Implementation of getMonthLabel method to get the month label.\r\n * @readonly\r\n * @return {string}\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n get getMonthLabel(): string {\r\n if (this.dateAdapter?.format) {\r\n return this.dateAdapter.format(\r\n this.calendar.activeDate,\r\n this.dateFormats.display.monthYearA11yLabel\r\n );\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Sets previous month in a calendar on click of previous month arrow in date picker.\r\n * @param {('month' | 'year')} mode\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setPreviousMonth(mode: 'month' | 'year'): void {\r\n this.calendar.activeDate =\r\n mode === 'month'\r\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, -1)\r\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, -1);\r\n }\r\n\r\n /**\r\n * Sets next month in a calendar on click of previous month arrow in date picker.\r\n * @param {('month' | 'year')} mode\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setNextMonth(mode: 'month' | 'year'): void {\r\n this.calendar.activeDate =\r\n mode === 'month'\r\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, 1)\r\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, 1);\r\n }\r\n\r\n /**\r\n * Sets the calendar current view on the open of year drop down in date picker.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setCalendarView(): void {\r\n this.calendar.currentView =\r\n this.calendar.currentView === 'month' ? 'multi-year' : 'month';\r\n this.arrowDirection = !this.arrowDirection;\r\n }\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-datepicker-header--selected-date-container\">\r\n <p\r\n class=\"ieeesa-label-lg-bold-16 ieeesa-datepicker-header__select-date-label\"\r\n >\r\n {{ datePickerInfo.datePicker.selectDateLabel }}\r\n </p>\r\n <p\r\n class=\"headline-lg-34 ieeesa-datepicker-header__selected-date m-0\"\r\n *ngIf=\"range || isRangeSelection\"\r\n >\r\n {{ range.start }} - {{ range.end }}\r\n </p>\r\n <p\r\n class=\"headline-lg-34 ieeesa-datepicker-header__selected-date m-0\"\r\n *ngIf=\"!isRangeSelection\"\r\n >\r\n {{ selectedDate }}\r\n </p>\r\n</div>\r\n<div class=\"ieeesa-datepicker-header--content m-0\">\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"ieeesa-datepicker-header--content--period-button ieeesa-label-lg-16 text-start\"\r\n (click)=\"setCalendarView()\"\r\n [attr.aria-label]=\"getMonthLabel\"\r\n cdkAriaLive=\"polite\"\r\n >\r\n {{ getMonthLabel }}\r\n <i\r\n *ngIf=\"!arrowDirection\"\r\n class=\"ieeesa-datepicker-header--content--period-button--arrow-icon fa-solid fa-arrow-down\"\r\n ></i>\r\n <i\r\n *ngIf=\"arrowDirection\"\r\n class=\"ieeesa-datepicker-header--content--period-button--arrow-icon fa-solid fa-arrow-up\"\r\n ></i>\r\n </button>\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"ieeesa-label-lg-16 ieeesa-datepicker-header--content--arrow-left-btn\"\r\n [attr.aria-label]=\"datePickerInfo.ariaLabel.previousMonth\"\r\n cdkAriaLive=\"polite\"\r\n (click)=\"setPreviousMonth('month')\"\r\n >\r\n <i class=\"ieeesa-datepicker-header__arrow-left fa-solid fa-arrow-left\"></i>\r\n </button>\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"ieeesa-label-lg-16 ieeesa-datepicker-header--content--arrow-right-btn text-end\"\r\n [attr.aria-label]=\"datePickerInfo.ariaLabel.nextMonth\"\r\n cdkAriaLive=\"polite\"\r\n (click)=\"setNextMonth('month')\"\r\n >\r\n <i\r\n class=\"ieeesa-datepicker-header__arrow-right fa-solid fa-arrow-right\"\r\n ></i>\r\n </button>\r\n</div>\r\n","export enum CalendarType {\r\n // eslint-disable-next-line no-unused-vars\r\n SINGLE_DATE_SELECTION = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n CALENDAR = 2,\r\n // eslint-disable-next-line no-unused-vars\r\n DATE_RANGE_SELECTION = 3,\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n MomentDateAdapter,\r\n MAT_MOMENT_DATE_ADAPTER_OPTIONS,\r\n} from '@angular/material-moment-adapter';\r\nimport {\r\n DateAdapter,\r\n MAT_DATE_FORMATS,\r\n MAT_DATE_LOCALE,\r\n} from '@angular/material/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport moment_ from 'moment';\r\nimport { DatePickerHeaderComponent } from '../../components/date-picker-header/date-picker-header.component';\r\nimport { DateFormats } from '../../date-formats';\r\nimport { FieldConfig } from '../..//models/field-config.model';\r\nimport { CalendarType } from '../../models/calendar.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { DatepickerService } from '../../services/datepicker.service';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport * as buttonActionsInfo from '../../assets/constants.json';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { SelectedDate } from '../../models/selected-date.model';\r\nconst moment = moment_;\r\n\r\n@Injectable()\r\nexport class CustomDateAdapter extends MomentDateAdapter {\r\n /**\r\n * Overrides the getDayOfWeekNames method of MomentDateAdapter to show first letter of day in capital in date picker header.\r\n * @return {string[]}\r\n * @memberof CustomDateAdapter\r\n */\r\n override getDayOfWeekNames(): string[] {\r\n return ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n }\r\n}\r\n\r\n/**\r\n * Date selection of type SINGLE_DATE_SELECTION, DATE_RANGE_SELECTION and CALENDAR and handling of calendar events.\r\n * @export\r\n * @class DatePickerComponent\r\n * @implements {FormField}\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-date-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatExpansionModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n DatePickerHeaderComponent,\r\n MatButtonModule,\r\n FormSupportTextComponent,\r\n ],\r\n providers: [\r\n { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },\r\n {\r\n provide: DateAdapter,\r\n useClass: CustomDateAdapter,\r\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\r\n },\r\n {\r\n provide: MAT_DATE_FORMATS,\r\n useValue: DateFormats,\r\n },\r\n ],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DatePickerComponent implements FormField, OnInit {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n datePickerHeader = DatePickerHeaderComponent;\r\n calendarTypes = CalendarType;\r\n private _selectedDates: string[] = [];\r\n /**\r\n * Gets preselected dates as an input.\r\n * @memberof DatePickerComponent\r\n */\r\n @Input()\r\n set selectedDates(value: string[]) {\r\n this._selectedDates = value;\r\n if (\r\n this.formControlName &&\r\n this.selectedDates?.length === 1 &&\r\n this.selectedDates[0] !== undefined &&\r\n this.calendarType === CalendarType.SINGLE_DATE_SELECTION\r\n ) {\r\n this.datepickerService.selectedDate = value[0];\r\n this.createFormGroup(value[0]);\r\n this.datepickerService.isRangeSelection = false;\r\n }\r\n }\r\n /**\r\n * Returns selected dates\r\n * @readonly\r\n * @type {string[]}\r\n * @memberof DatePickerComponent\r\n */\r\n get selectedDates(): string[] {\r\n return this._selectedDates;\r\n }\r\n private _selectedRange: string[] = [];\r\n /**\r\n * Gets preselected date range as an input.\r\n * @memberof DatePickerComponent\r\n */\r\n @Input()\r\n set selectedRange(value: string[]) {\r\n this._selectedRange = value;\r\n if (\r\n this.selectedRange?.length === 2 &&\r\n this.calendarType === CalendarType.DATE_RANGE_SELECTION\r\n ) {\r\n this.createFormGroupWithRangeControls(value[0], value[1]);\r\n this.setDateRange(value[0], value[1]);\r\n this.datepickerService.isRangeSelection = true;\r\n }\r\n }\r\n /**\r\n * Returns selected date range\r\n * @readonly\r\n * @type {string[]}\r\n * @memberof DatePickerComponent\r\n */\r\n get selectedRange(): string[] {\r\n return this._selectedRange;\r\n }\r\n\r\n @Input() calendarType: CalendarType = CalendarType.SINGLE_DATE_SELECTION;\r\n @Input() formControlName!: string;\r\n @Input() placeholderLabel = '';\r\n @Input() isDisabled = false;\r\n @Input() isLabelAlignedLeft = false;\r\n @Input() datepickerLabel = '';\r\n @Input() dateRange!: { minDate: string; maxDate: string };\r\n @Input() minDate!: Date | moment.Moment;\r\n @Input() maxDate!: Date | moment.Moment;\r\n @Output() selectedDate = new EventEmitter<SelectedDate>();\r\n @Output() selectedDateRange = new EventEmitter<{\r\n startDate: string;\r\n endDate: string;\r\n }>();\r\n calendarSelectedDate!: Date;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n buttonActionsInfo: any = buttonActionsInfo;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private fb: FormBuilder,\r\n // eslint-disable-next-line no-unused-vars\r\n private changeDetectorRef: ChangeDetectorRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private datepickerService: DatepickerService,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function,\r\n ) {}\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to creates config if its undefined and sets components instance variables if config is defined. Sets the form group value if form group is defined.\r\n * @memberof DatePickerComponent\r\n */\r\n ngOnInit(): void {\r\n if (!this.config) {\r\n const controlName = this.formControlName ?? 'datepicker';\r\n this.config = this.formUtilityService.getFormFieldConfig(\r\n controlName,\r\n FormControlType.DATE\r\n );\r\n if (\r\n this.config &&\r\n this.calendarType === CalendarType.DATE_RANGE_SELECTION\r\n ) {\r\n this.config.dateRangeControls = {\r\n startDate: 'startDate',\r\n endDate: 'endDate',\r\n };\r\n }\r\n } else {\r\n this.initializePropertiesFromConfig();\r\n }\r\n if (!this.group) {\r\n if (this.calendarType === CalendarType.SINGLE_DATE_SELECTION) {\r\n this.createFormGroup();\r\n } else if (this.calendarType === CalendarType.DATE_RANGE_SELECTION) {\r\n this.createFormGroupWithRangeControls();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes properties from the config input\r\n * @memberof DatePickerComponent\r\n */\r\n initializePropertiesFromConfig(): void {\r\n this.calendarType =\r\n this.config?.datePicker?.calendarType ??\r\n CalendarType.SINGLE_DATE_SELECTION;\r\n this.placeholderLabel = this.config?.datePicker?.placeholderLabel ?? '';\r\n this.datepickerLabel = this.config?.datePicker?.label ?? '';\r\n this.isLabelAlignedLeft =\r\n this.config?.datePicker?.isLabelAlignedLeft ?? false;\r\n this.dateRange = this.config?.datePicker?.dateRange ?? {\r\n minDate: '',\r\n maxDate: '',\r\n };\r\n this.isDisabled = !!this.config.disabled;\r\n if (\r\n this.config.datePicker?.calendarType === CalendarType.DATE_RANGE_SELECTION\r\n ) {\r\n this.group.addControl('startDate', new FormControl());\r\n this.group.addControl('endDate', new FormControl());\r\n }\r\n }\r\n /**\r\n * Handle date change event and emits the selected date.\r\n * @memberof DatePickerComponent\r\n */\r\n onDateChange(): void {\r\n this.selectedDate.emit({\r\n date: this.group?.get(this.config?.controlName)?.value,\r\n controlName: this.config?.controlName\r\n });\r\n this.datepickerService.selectedDate = this.group?.get(\r\n this.config.controlName\r\n )?.value;\r\n this.datepickerService.isRangeSelection = false;\r\n }\r\n\r\n /**\r\n * Sets and emits selected date range\r\n * @memberof DatePickerComponent\r\n */\r\n onDateRangeChange(): void {\r\n this.datepickerService.isRangeSelection = true;\r\n this.setDateRange(\r\n this.group.value.startDate ?? '',\r\n this.group.value.endDate ?? ''\r\n );\r\n\r\n this.selectedDateRange.emit({\r\n startDate: this.group.value.startDate ?? '',\r\n endDate: this.group.value.endDate ?? '',\r\n });\r\n }\r\n\r\n /**\r\n * Sets the min and max date range.\r\n * @param {(string | Date)} startDate\r\n * @param {(string | Date)} endDate\r\n * @memberof DatePickerComponent\r\n */\r\n setDateRange(startDate: string | Date, endDate: string | Date): void {\r\n this.datepickerService.range.next({\r\n start: startDate,\r\n end: endDate,\r\n });\r\n }\r\n\r\n /**\r\n * Creates form group and initializes form value\r\n * @param {string} [date]\r\n * @memberof DatePickerComponent\r\n */\r\n createFormGroup(date?: string): void {\r\n this.group = this.fb.group({\r\n [this.formControlName ? this.formControlName : 'datepicker']: date\r\n ? [moment(date).utc(true).format()]\r\n : [],\r\n });\r\n }\r\n /**\r\n * Creates form group with range type of controls and sets the min and max range values.\r\n * @param {string} [startDate]\r\n * @param {string} [endDate]\r\n * @memberof DatePickerComponent\r\n */\r\n createFormGroupWithRangeControls(startDate?: string, endDate?: string): void {\r\n this.group = this.fb.group({\r\n startDate: startDate ? [moment(startDate).utc(true).format()] : [],\r\n endDate: endDate ? [moment(endDate).utc(true).format()] : [],\r\n });\r\n }\r\n /**\r\n * Checks if the form control has required validator.\r\n * @return {boolean}\r\n * @memberof DatePickerComponent\r\n */\r\n isRequired(): boolean {\r\n return this.group?.controls[this.config?.controlName]?.hasValidator(\r\n Validators.required\r\n );\r\n }\r\n\r\n /**\r\n * Sets the updated selected date using datepicker service which will be shown in datepicker header\r\n * @param {string} controlName\r\n * @memberof DatePickerComponent\r\n */\r\n onDatePickerOpen(controlName: string) {\r\n this.datepickerService.selectedDate = this.group.get(controlName)?.value;\r\n }\r\n}","<div class=\"ieeesa-datepicker\">\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.SINGLE_DATE_SELECTION\"\r\n class=\"ieeesa-datepicker--single-selection\"\r\n [ngClass]=\"!isRequired() ? 'ieeesa-datepicker__valid-date' : ''\"\r\n [ngClass]=\"{\r\n 'ieeesa-datepicker__valid-date': !isRequired(),\r\n 'ieeesa-datepicker__label-left': isLabelAlignedLeft,\r\n 'ieeesa-datepicker__label-top': !isLabelAlignedLeft\r\n }\"\r\n >\r\n <mat-label\r\n *ngIf=\"datepickerLabel\"\r\n class=\"ieeesa-body-sm-14 ieeesa-datepicker__label\"\r\n >{{ datepickerLabel }}\r\n </mat-label>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n (dateInput)=\"onDateChange()\"\r\n (click)=\"picker.open()\"\r\n [matDatepicker]=\"picker\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [min]=\"config?.datePicker?.minDate ?? minDate\"\r\n [max]=\"config?.datePicker?.maxDate ?? maxDate\"\r\n [formControlName]=\"config.controlName\"\r\n [placeholder]=\"\r\n placeholderLabel ?? buttonActionsInfo?.datePicker?.dateFormatLabel\r\n \"\r\n #calendar\r\n readonly\r\n />\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"picker\"\r\n >\r\n <svg matDatepickerToggleIcon class=\"ieeesa-datepicker__datepicker-icon\">\r\n <use\r\n [attr.xlink:href]=\"buttonActionsInfo?.datePicker?.datePickerIcon\"\r\n ></use>\r\n </svg>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker\r\n #picker\r\n [calendarHeaderComponent]=\"datePickerHeader\"\r\n (opened)=\"onDatePickerOpen(config.controlName)\"\r\n >\r\n </mat-datepicker>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\">\r\n </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n </div>\r\n\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.DATE_RANGE_SELECTION\"\r\n class=\"ieeesa-datepicker--multi-selection\"\r\n [ngClass]=\"\r\n isLabelAlignedLeft\r\n ? 'ieeesa-datepicker__label-left'\r\n : 'ieeesa-datepicker__label-top'\r\n \"\r\n >\r\n <mat-label\r\n *ngIf=\"datepickerLabel\"\r\n class=\"ieeesa-datepicker__label ieeesa-body-sm-14\"\r\n >{{ datepickerLabel }}\r\n </mat-label>\r\n <mat-form-field>\r\n <mat-date-range-input [rangePicker]=\"rangePicker\" [formGroup]=\"group\">\r\n <input\r\n matStartDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.startDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel + ' - '\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n <input\r\n matEndDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.endDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"rangePicker\"\r\n ></mat-datepicker-toggle>\r\n <mat-date-range-picker\r\n #rangePicker\r\n [calendarHeaderComponent]=\"datePickerHeader\"\r\n (dateInput)=\"onDateRangeChange()\"\r\n >\r\n </mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"calendarType === calendarTypes.CALENDAR\"\r\n class=\"ieeesa-datepicker--calendar\"\r\n >\r\n <mat-calendar\r\n [headerComponent]=\"datePickerHeader\"\r\n [(selected)]=\"calendarSelectedDate\"\r\n >\r\n </mat-calendar>\r\n </div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum InputFieldType {\r\n EMAIL = 'EMAIL',\r\n NUMBER = 'NUMBER',\r\n TEXT = 'TEXT',\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { InputFieldType } from '../../models/input-field-type.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as buttonActionsInfo from '../../assets/constants.json';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\n\r\n/**\r\n * Provides implementation of input type number, email and text\r\n * @export\r\n * @class InputComponent\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatInputModule,\r\n MatIconModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class InputComponent implements FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n invalidChars = ['-', '+', 'e'];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n buttonActionsInfo: any = buttonActionsInfo;\r\n @Output() inputValueChange = new EventEmitter<string | number>();\r\n\r\n /**\r\n * Handles keyboard event of type keydown to restrict invalid characters.\r\n * @param {KeyboardEvent} event\r\n * @memberof InputComponent\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (\r\n (this.invalidChars.includes(event.key.toLowerCase()) ||\r\n (this.config.isInteger && event.key.toLowerCase() === '.')) &&\r\n this.config.isNumber\r\n ) {\r\n event.preventDefault();\r\n }\r\n }\r\n /**\r\n * Clears the form group control value of type input\r\n * @memberof InputComponent\r\n */\r\n clear(): void {\r\n this.group.get(this.config.controlName)?.setValue('');\r\n }\r\n\r\n /**\r\n * Handles form control input on change event to set min and max value errors\r\n * @memberof InputComponent\r\n */\r\n onChange(): void {\r\n const inputControl = this.group?.get(this.config?.controlName);\r\n if (\r\n this.config.max &&\r\n this.config.isNumber &&\r\n Number(inputControl?.value) > this.config.max\r\n ) {\r\n inputControl?.setErrors({\r\n maxlength: true,\r\n });\r\n }\r\n if (\r\n this.config.min &&\r\n this.config.isNumber &&\r\n inputControl?.value !== '' &&\r\n Number(inputControl?.value) < this.config.min\r\n ) {\r\n inputControl?.setErrors({\r\n minlength: true,\r\n });\r\n }\r\n this.inputValueChange.emit(inputControl?.value);\r\n }\r\n /**\r\n * Returns input field type\r\n * @memberof InputComponent\r\n */\r\n getInputFieldType(): string {\r\n if (this.config?.isEmail) {\r\n return InputFieldType.EMAIL;\r\n } else if (this.config?.isNumber) {\r\n return InputFieldType.NUMBER;\r\n }\r\n return InputFieldType.TEXT;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-input-field\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-input-field__label-left'\r\n : 'ieeesa-input-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-input-field__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <mat-form-field>\r\n <input\r\n class=\"ieeesa-input-field__content ieeesa-body-lg-16\"\r\n [type]=\"getInputFieldType()\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [min]=\"config.min ?? null\"\r\n [max]=\"config.max ?? null\"\r\n [maxlength]=\"config.maxLength ?? null\"\r\n [minlength]=\"config.minLength ?? null\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onChange()\"\r\n autocomplete=\"off\"\r\n matInput\r\n />\r\n <button\r\n *ngIf=\"\r\n group.get(this.config.controlName)?.value &&\r\n group.get(this.config.controlName)?.valid &&\r\n this.config?.clear\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"buttonActionsInfo.ariaLabel.clear\"\r\n class=\"ieeesa-input-field__btn--clear\"\r\n (click)=\"clear()\"\r\n >\r\n <i class=\"fa-regular fa-circle-xmark ieeesa-input-field__icon--clear\"></i>\r\n </button>\r\n <ng-container\r\n *ngIf=\"\r\n group.get(this.config.controlName)?.invalid &&\r\n (group.get(this.config.controlName)?.dirty ||\r\n group.get(this.config.controlName)?.touched)\r\n \"\r\n matSuffix>\r\n <i\r\n class=\"fa-solid fa-circle-exclamation ieeesa-input-field__icon--warning\"\r\n [attr.aria-label]=\"buttonActionsInfo.ariaLabel.warning\"\r\n role=\"img\"\r\n ></i>\r\n </ng-container>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text [formGroup]=\"group\" [config]=\"config\"></ieeesa-form-support-text>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { RadioOption } from '../../models/radio-option.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\n\r\n/**\r\n * Provides implementation of form field radio type component\r\n * @export\r\n * @class RadioComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-radio',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatRadioModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n ],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class RadioComponent implements OnInit, FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() formControlName = 'radio';\r\n private radioGroups: RadioOption[] = [];\r\n @Input()\r\n set radioGroup(value: RadioOption[]) {\r\n this.radioGroups = value;\r\n }\r\n get radioGroup(): RadioOption[] {\r\n return this.radioGroups;\r\n }\r\n @Input() isDisabled = false;\r\n @Output() selectedRadioOption = new EventEmitter<RadioOption>();\r\n\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private formUtilityService: FormUtilityService) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to create form group and initialize components instance properties\r\n * @memberof RadioComponent\r\n */\r\n ngOnInit(): void {\r\n if (!this.group) {\r\n this.group =\r\n this.group ??\r\n this.formUtilityService.getFormGroup(this.formControlName);\r\n }\r\n this.initializeConfigProperties();\r\n }\r\n\r\n /**\r\n * Initializes the components instance properties from config else it defines config\r\n * @memberof RadioComponent\r\n */\r\n initializeConfigProperties(): void {\r\n if (this.config?.radioOptions) {\r\n this.radioGroup = this.config.radioOptions;\r\n this.isDisabled = this.config?.disabled ?? false;\r\n }\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.RADIO\r\n );\r\n }\r\n\r\n /**\r\n * Handles radio selection event on change of it\r\n * @param {RadioOption} value\r\n * @memberof RadioComponent\r\n */\r\n onChange(value: RadioOption): void {\r\n this.selectedRadioOption.emit(value);\r\n }\r\n /**\r\n * Allows Angular to detect the specific radio option that needs to change or be added instead of rebuilding the whole radio options in DOM by tracking option unique Id.\r\n * @param {number} index\r\n * @return {number}\r\n * @memberof RadioComponent\r\n */\r\n trackById(index: number, radio: RadioOption): number | string {\r\n return radio.id;\r\n }\r\n}\r\n","<div [formGroup]=\"group\" class=\"ieeesa-radio-field\" *ngIf=\"group\">\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-radio-field__label\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-radio-field__label-left'\r\n : 'ieeesa-radio-field__label-top'\r\n \"\r\n >{{ config.label }}</mat-label\r\n >\r\n <mat-radio-group\r\n [formControlName]=\"config.controlName\"\r\n [disabled]=\"isDisabled\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n >\r\n <mat-radio-button\r\n *ngFor=\"let radio of radioGroup; trackBy: trackById\"\r\n [value]=\"radio.label\"\r\n [name]=\"radio.label\"\r\n [aria-label]=\"radio.label\"\r\n [id]=\"'' + radio.id\"\r\n (change)=\"onChange(radio)\"\r\n [checked]=\"radio.checked\"\r\n class=\"ieeesa-radio-field__button\"\r\n >\r\n {{ radio.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n</div>\r\n","export const ValidationPatterns = {\r\n alphanumeric: /^[a-zA-Z0-9 _-]+$/,\r\n mixOfAlphanumeric: /^[0-9]*[a-zA-Z]+[a-zA-Z0-9 _()-]*$/,\r\n numeric: '^0|[1-9][0-9]*$',\r\n email: /^[a-z0-9._%+-]+@[a-z0-9.-]+\\\\.[a-z]{2,4}$/,\r\n};\r\n","export enum SearchType {\r\n // eslint-disable-next-line no-unused-vars\r\n EMAIL = 'EMAIL',\r\n // eslint-disable-next-line no-unused-vars\r\n AUTO = 'AUTO',\r\n // eslint-disable-next-line no-unused-vars\r\n ON_CLICK = 'ON_CLICK',\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n Subject,\r\n debounceTime,\r\n distinctUntilChanged,\r\n filter,\r\n fromEvent,\r\n map,\r\n takeUntil,\r\n} from 'rxjs';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { ValidationPatterns } from '../../validation-patterns';\r\nimport { SearchType } from '../../models/search.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport * as searchInfo from '../../assets/constants.json';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nconst MIN_CHAR = 3;\r\n/**\r\n * Component support search capability and used as a form filed with type search and independently as search component.\r\n * @export\r\n * @class SearchComponent\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n * @implements {OnDestroy}\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-search',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './search.component.html',\r\n styleUrls: ['./search.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SearchComponent\r\n implements OnInit, AfterViewInit, OnDestroy, FormField\r\n{\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() formControlName = 'search';\r\n @Input() placeholderLabel = '';\r\n @Input() searchTerm = '';\r\n @Input() supportMessage!: string;\r\n @Input() searchType: SearchType = SearchType.AUTO;\r\n @Output() searchValue = new EventEmitter();\r\n @ViewChild('searchControl') searchControl!: ElementRef;\r\n @Input() minCharacterToSearch = MIN_CHAR;\r\n searchResponse!: string;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n searchInfo: any = searchInfo;\r\n isSearchValueEmitted = false;\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private cd: ChangeDetectorRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize config and form group if its undefined\r\n * @memberof SearchComponent\r\n */\r\n ngOnInit(): void {\r\n if (this.config?.searchType) this.searchType = this.config?.searchType;\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.SEARCH\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config.supportMessage =\r\n this.config?.supportMessage ?? this.supportMessage;\r\n }\r\n\r\n /**\r\n * Handles form control search keyup event and emits searched value\r\n * @memberof SearchComponent\r\n */\r\n ngAfterViewInit() {\r\n this.group\r\n ?.get(this.config?.controlName)\r\n ?.setValue(this.config?.value ?? this.searchTerm);\r\n if (this.searchType === SearchType.AUTO && this.searchControl) {\r\n fromEvent(this.searchControl?.nativeElement, 'keyup')\r\n .pipe(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => {\r\n return event.target.value;\r\n }),\r\n filter(\r\n (res) => res.length >= this.minCharacterToSearch || res.length === 0\r\n ),\r\n debounceTime(this.searchInfo.autocomplete.debounceTime),\r\n distinctUntilChanged()\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((text: string) => {\r\n this.searchValue.emit(text);\r\n });\r\n } else if (this.searchType === SearchType.ON_CLICK) {\r\n fromEvent<KeyboardEvent>(this.searchControl?.nativeElement, 'keyup')\r\n .pipe(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (e: any) =>\r\n e.key === 'Enter' &&\r\n (e?.target?.value?.length >= this.minCharacterToSearch ||\r\n e?.target?.value?.length === 0)\r\n ),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => {\r\n return event?.target?.value;\r\n }),\r\n debounceTime(this.searchInfo.autocomplete.debounceTime)\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((text: string) => {\r\n if (!this.isSearchValueEmitted) this.searchValue.emit(text);\r\n this.isSearchValueEmitted = false;\r\n });\r\n }\r\n this.cd.detectChanges();\r\n }\r\n\r\n /**\r\n * Stops typing keystrokes from bubbling up to a parent control (such as an\r\n * Angular Material `mat-select`) that would otherwise consume them. This is\r\n * required when the search input is rendered inside a `mat-select` dropdown,\r\n * where the space bar activates the highlighted option instead of typing a\r\n * space, and letter keys trigger the built-in typeahead. Navigation and\r\n * dismissal keys (Arrow keys, Enter, Escape, Tab) are allowed to propagate so\r\n * the parent dropdown keeps its keyboard behaviour.\r\n * @param {KeyboardEvent} event - The keydown event raised by the search input.\r\n * @memberof SearchComponent\r\n */\r\n onSearchKeyDown(event: KeyboardEvent): void {\r\n const propagatableKeys = [\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'Enter',\r\n 'Escape',\r\n 'Tab',\r\n ];\r\n if (!propagatableKeys.includes(event.key)) {\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n /**\r\n * Validates email based on defined validation patterns\r\n * @param {string} email\r\n * @return {boolean}\r\n * @memberof SearchComponent\r\n */\r\n isValidateEmail(email: string): boolean {\r\n const regularExpression = ValidationPatterns.email;\r\n return regularExpression.test(String(email).toLowerCase());\r\n }\r\n\r\n /**\r\n * Clears search response on change of form search control value\r\n * @memberof SearchComponent\r\n */\r\n onChange(): void {\r\n this.searchResponse = '';\r\n }\r\n\r\n /**\r\n * Clears search response and emits searched value on search input change\r\n * @memberof SearchComponent\r\n */\r\n onSearchInputChange(): void {\r\n this.isSearchValueEmitted = false;\r\n if (this.group.get(this.config.controlName)?.value === '') {\r\n this.searchValue.emit(this.group.get(this.config.controlName)?.value);\r\n }\r\n if (this.searchTerm.length === 0) {\r\n this.searchResponse = '';\r\n }\r\n }\r\n\r\n /**\r\n * Emits the searchValue event along with the searched term while clicking on the search icon\r\n * @memberof SearchComponent\r\n */\r\n onSearchClick(): void {\r\n const searchTextValue = this.group.get(this.config.controlName)?.value;\r\n if (\r\n searchTextValue?.length >= this.minCharacterToSearch ||\r\n searchTextValue?.length === 0\r\n ) {\r\n this.isSearchValueEmitted = true;\r\n this.searchValue.emit(searchTextValue);\r\n }\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof SearchComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-search-field\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-search-field__label-left'\r\n : 'ieeesa-search-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-search-field__label\"\r\n >{{ config.label }}</mat-label\r\n >\r\n <mat-form-field appearance=\"outline\">\r\n <span class=\"ieeesa-search-field__content ieeesa-body-md-16\">\r\n <input\r\n matInput\r\n autocomplete=\"off\"\r\n [type]=\"searchType\"\r\n [formControlName]=\"config.controlName\"\r\n [placeholder]=\"placeholderLabel\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n (change)=\"onChange()\"\r\n (input)=\"onSearchInputChange()\"\r\n (keydown)=\"onSearchKeyDown($event)\"\r\n bindon-ngModel=\"searchTerm\"\r\n #searchControl\r\n />\r\n <button\r\n mat-button\r\n (click)=\"onSearchClick()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"searchInfo?.ariaLabel?.search\"\r\n class=\"ieeesa-search-field__button\"\r\n >\r\n <svg\r\n class=\"ieeesa-search-field__search-icon\"\r\n >\r\n <use [attr.xlink:href]=\"searchInfo?.search?.searchIcon\"></use>\r\n </svg>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n AfterViewInit,\r\n ViewChildren,\r\n QueryList,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MAT_SELECT_CONFIG, MatSelectModule } from '@angular/material/select';\r\nimport { SelectOption } from '@ieeesa-npm/models';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { SearchType } from '../../models/search.model';\r\nimport { SearchComponent } from '../../components/search/search.component';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as dropdownInfo from '../../assets/constants.json';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\n\r\n/**\r\n * Component implementation supports select type of form filed and select type is configurable to support single selection or multi-selection with multilevel or single level.\r\n * @export\r\n * @class SelectComponent\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SearchComponent,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n FormSupportTextComponent,\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_SELECT_CONFIG,\r\n useValue: { overlayPanelClass: 'ieeesa-select-overlay-pane' },\r\n },\r\n ],\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SelectComponent implements OnInit, AfterViewInit {\r\n @ViewChildren(SearchComponent)\r\n formFields!: QueryList<SearchComponent>;\r\n group!: FormGroup;\r\n config!: FieldConfig;\r\n arrowDirection = false;\r\n searchType = SearchType.AUTO;\r\n sortedOptions!: SelectOption[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dropdownInfo: any = dropdownInfo;\r\n private _dropdownOptions!: SelectOption[];\r\n private _selectedOptions!: SelectOption | SelectOption[];\r\n private _isSortNeeded = true;\r\n private unsortedDropdownOptions!: SelectOption[];\r\n /**\r\n * Takes isSortNeeded as input to check if the passed options are sorted or not.\r\n * @memberof SelectComponent\r\n */\r\n @Input()\r\n set isSortNeeded(value: boolean) {\r\n this._isSortNeeded = value;\r\n if (!value && this.unsortedDropdownOptions)\r\n this._dropdownOptions = this.unsortedDropdownOptions;\r\n }\r\n get isSortNeeded(): boolean {\r\n return this._isSortNeeded;\r\n }\r\n /**\r\n * Sets the dropdown options for selection.\r\n * @memberof SelectComponent\r\n */\r\n @Input()\r\n set dropdownOptions(value: SelectOption[]) {\r\n if (value) this.unsortedDropdownOptions = [...value];\r\n if (this.isSortNeeded && Array.isArray(value)) {\r\n this._dropdownOptions = this.arraySorting(value);\r\n } else {\r\n this._dropdownOptions = value;\r\n }\r\n }\r\n get dropdownOptions(): SelectOption[] {\r\n return this._dropdownOptions;\r\n }\r\n /**\r\n * Sets the selected option\r\n * @memberof SelectComponent\r\n */\r\n @Input()\r\n set selectedOptions(value: SelectOption | SelectOption[]) {\r\n if (Array.isArray(value)) {\r\n this._selectedOptions = this.arraySorting(value);\r\n } else {\r\n this._selectedOptions = value;\r\n }\r\n\r\n if (this.config?.controlName && this.group) {\r\n this.group.get(this.config.controlName)?.setValue(this._selectedOptions);\r\n }\r\n }\r\n get selectedOptions(): SelectOption | SelectOption[] {\r\n return this._selectedOptions;\r\n }\r\n @Input() formControlName = 'select';\r\n @Input() isMultiLevel = false;\r\n @Input() isLabelAlignedLeft = false;\r\n @Input() selectLabel = '';\r\n @Input() isMultiSelect = false;\r\n @Input() isDisabled = false;\r\n @Input() isSearch = false;\r\n @Input() placeholderText = this.dropdownInfo.dropdown.placeholderText;\r\n @Output() optionSelected = new EventEmitter<SelectOption>();\r\n @Output() optionSearched = new EventEmitter<string>();\r\n @Output() dropdownOpenedChange = new EventEmitter<SelectOpenedState>();\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initializes components instance properties from config if its defined otherwise creates form group and config.\r\n * @memberof SelectComponent\r\n */\r\n ngOnInit(): void {\r\n this.updateArrowDirection(false);\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.SELECT\r\n );\r\n if (this.config) {\r\n this.isMultiSelect = this.config.isMultiSelect ?? false;\r\n this.dropdownOptions =\r\n this.config?.dropdownOptions ?? this.dropdownOptions;\r\n this.selectedOptions = this.selectedOptions ?? this.config?.value;\r\n this.selectLabel = this.config?.label ?? this.selectLabel;\r\n this.placeholderText = this.config?.placeholder ?? this.placeholderText;\r\n this.isMultiSelect = this.config?.isMultiSelect ?? this.isMultiSelect;\r\n this.isDisabled = this.config?.disabled ?? this.isDisabled;\r\n this.searchType = this.config?.searchType ?? this.searchType;\r\n this.isSortNeeded = this.config?.isSortNeeded ?? this.isSortNeeded;\r\n this.isSearch = this.config?.isSearch ?? this.isSearch;\r\n }\r\n this.group.get(this.config.controlName)?.setValue(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * Emits selected option on changes the selected option.\r\n * @param {SelectOption} event\r\n * @memberof SelectComponent\r\n */\r\n onChange(event: SelectOption): void {\r\n this.optionSelected.emit(event);\r\n }\r\n\r\n /**\r\n * Sets the select dropdown arrow direction\r\n * @param {boolean} opened\r\n * @memberof SelectComponent\r\n */\r\n updateArrowDirection(opened: boolean): void {\r\n this.arrowDirection = opened;\r\n this.dropdownOpenedChange.emit({\r\n controlName: this.config?.controlName,\r\n opened: opened,\r\n });\r\n }\r\n\r\n /**\r\n * Takes the index and the current option as arguments and needs to return the unique identifier for this option.\r\n * @param {number} index\r\n * @param {SelectOption} option\r\n * @return {(number | string)}\r\n * @memberof SelectComponent\r\n */\r\n trackByFn(index: number, option: SelectOption): number | string {\r\n return option.id;\r\n }\r\n\r\n /**\r\n * Emits searched options on filtering options in select dropdown\r\n * @param {string} searchText\r\n * @memberof SelectComponent\r\n */\r\n onOptionSearch(searchText: string) {\r\n this.optionSearched.emit(searchText);\r\n }\r\n\r\n /**\r\n * Compares the two passed options\r\n * @param {any} option1\r\n * @param {any} option2\r\n * @return {boolean}\r\n * @memberof SelectComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n comparer(option1: any, option2: any): boolean {\r\n return option1 && option2 ? option1.id === option2.id : option1 === option2;\r\n }\r\n\r\n /**\r\n * Sorts the options\r\n * @memberof SelectComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.isSortNeeded && Array.isArray(this.dropdownOptions)) {\r\n this.dropdownOptions = this.arraySorting(this.dropdownOptions);\r\n }\r\n }\r\n\r\n /**\r\n * Sorts the options by using arraySorting method\r\n * @memberof SelectComponent\r\n */\r\n sortOptions(): void {\r\n if (this.isSortNeeded && Array.isArray(this.dropdownOptions)) {\r\n this.sortedOptions = this.arraySorting(this.dropdownOptions);\r\n } else {\r\n this.sortedOptions = this.dropdownOptions;\r\n }\r\n }\r\n\r\n /**\r\n * Utility method to sort dropdown options in ascending order.\r\n * @param {SelectOption[]} list\r\n * @return {SelectOption[]}\r\n * @memberof SelectComponent\r\n */\r\n arraySorting(list: SelectOption[]): SelectOption[] {\r\n const clonedValue = [...list];\r\n const sort = clonedValue.sort((a, b) => {\r\n if (a.name.toLowerCase() === b.name.toLowerCase()) return 0;\r\n if (a.name.toLowerCase() === 'all') return -1;\r\n if (b.name.toLowerCase() === 'all') return 1;\r\n if (a.name.toLowerCase() < b.name.toLowerCase()) return -1;\r\n if (a.name.toLowerCase() > b.name.toLowerCase()) return 1;\r\n return 0;\r\n });\r\n return sort;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-select-field\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n isLabelAlignedLeft\r\n ? 'ieeesa-select-field__label-left'\r\n : 'ieeesa-select-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-select-field__label\">{{\r\n selectLabel\r\n }}</mat-label>\r\n <mat-form-field\r\n [ngClass]=\"\r\n arrowDirection\r\n ? 'ieeesa-select-field__arrow-up'\r\n : 'ieeesa-select-field__arrow-down'\r\n \"\r\n >\r\n <mat-select\r\n disableOptionCentering\r\n *ngIf=\"isMultiSelect\"\r\n (openedChange)=\"updateArrowDirection($event)\"\r\n (selectionChange)=\"onChange($event.value)\"\r\n [formControlName]=\"config.controlName\"\r\n [multiple]=\"isMultiSelect\"\r\n [disabled]=\"isDisabled\"\r\n [aria-label]=\"config.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"placeholderText\"\r\n [compareWith]=\"comparer\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isSearch && arrowDirection\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"onOptionSearch($event)\"\r\n ></ieeesa-search>\r\n <ng-container\r\n *ngIf=\"!isMultiLevel\"\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: dropdownOptions }\"\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"isMultiLevel\">\r\n <mat-optgroup\r\n *ngFor=\"let option of dropdownOptions; trackBy: trackByFn\"\r\n [label]=\"option.name\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: option.option_groups }\"\r\n >\r\n </ng-container>\r\n </mat-optgroup>\r\n </ng-container>\r\n <ng-template #dropdownOptionsTemplateRef let-options=\"data\">\r\n <mat-option\r\n *ngFor=\"let option of options; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n\r\n <mat-select\r\n disableOptionCentering\r\n [compareWith]=\"comparer\"\r\n *ngIf=\"!isMultiSelect\"\r\n [multiple]=\"isMultiSelect\"\r\n (openedChange)=\"updateArrowDirection($event)\"\r\n (selectionChange)=\"onChange($event.value)\"\r\n [formControlName]=\"config.controlName\"\r\n [disabled]=\"isDisabled\"\r\n [aria-label]=\"config.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"placeholderText\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isSearch && arrowDirection\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"onOptionSearch($event)\"\r\n ></ieeesa-search>\r\n <ng-container\r\n *ngIf=\"!isMultiLevel\"\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: dropdownOptions }\"\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"isMultiLevel\">\r\n <mat-optgroup\r\n *ngFor=\"let option of dropdownOptions; trackBy: trackByFn\"\r\n [label]=\"option.name\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: option.option_groups }\"\r\n >\r\n </ng-container>\r\n </mat-optgroup>\r\n </ng-container>\r\n <ng-template #dropdownOptionsTemplateRef let-options=\"data\">\r\n <mat-option\r\n *ngFor=\"let option of options; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as constantsInfo from '../../assets/constants.json';\r\nimport { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\n\r\n@Component({\r\n selector: 'ieeesa-text-area',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './text-area.component.html',\r\n styleUrls: ['./text-area.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TextAreaComponent implements OnInit, FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() remainingCharsLeftMessage!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constantsInfo;\r\n leftCharCount!: number;\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n @Output() inputValueChange = new EventEmitter<string>();\r\n /**\r\n * Initializes the leftCharCount and remainingCharsLeftMessage\r\n * @memberof TextAreaComponent\r\n */\r\n ngOnInit(): void {\r\n this.remainingCharsLeftMessage =\r\n this.remainingCharsLeftMessage ??\r\n this.config?.remainingCharsLeftMessage ??\r\n this.constants?.textarea?.leftCharacters;\r\n this.leftCharCount =\r\n this.config?.maxCharCount ?? this.config?.maxRangeLimit ?? 0;\r\n if (this.config?.value && this.config?.maxCharCount) {\r\n this.leftCharCount =\r\n this.config?.maxCharCount - this.config?.value?.length;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the remaining characters count on change of form control value and sets the remaining count.\r\n * @memberof TextAreaComponent\r\n */\r\n onChange(event: Event): void {\r\n let count = 0;\r\n if (this.config?.maxCharCount) {\r\n count =\r\n this.config?.maxCharCount -\r\n (event.target as HTMLInputElement)?.value?.length;\r\n } else if (\r\n this.config?.maxRangeLimit &&\r\n (this.group?.get(this.config?.controlName)?.valid ||\r\n (event.target as HTMLInputElement)?.value === '')\r\n ) {\r\n const inputRanges = (event.target as HTMLInputElement)?.value?.split(',');\r\n const validRangesCount: number = inputRanges?.filter(\r\n (input: string) => input !== ''\r\n )?.length;\r\n count = this.config.maxRangeLimit - validRangesCount;\r\n }\r\n this.leftCharCount = count > 0 ? count : 0;\r\n this.inputValueChange.emit((event.target as HTMLInputElement)?.value);\r\n }\r\n /**\r\n * Emits supportTextLinkClick event on click of form support text link\r\n * @param {LinkEventEmitType} event\r\n * @memberof TextAreaComponent\r\n */\r\n onSupportTextLinkClick(event: LinkEventEmitType) {\r\n this.supportTextLinkClick.emit(event);\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-text-area-field\"\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-text-area-field__label-left'\r\n : 'ieeesa-text-area-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-text-area-field__label\">\r\n <span\r\n class=\"d-flex justify-content-between\"\r\n *ngIf=\"config?.maxCharCount || config?.maxRangeLimit\"\r\n >\r\n <span class=\"ieeesa-text-area-field__label-text\">\r\n {{ config.label }}\r\n </span>\r\n <span>\r\n <span class=\"ieeesa-text-area-field__left-char-count\">{{\r\n leftCharCount\r\n }}</span\r\n ><span class=\"ieeesa-text-area-field__left-char-text\">{{\r\n remainingCharsLeftMessage\r\n }}</span>\r\n </span>\r\n </span>\r\n <ng-container *ngIf=\"!config?.maxCharCount && !config?.maxRangeLimit\">\r\n {{ config.label }}\r\n </ng-container>\r\n </mat-label>\r\n <mat-form-field appearance=\"fill\">\r\n <textarea\r\n [name]=\"config.name ?? ''\"\r\n cdkTextareaAutosize\r\n matInput\r\n [attr.aria-label]=\"config.ariaLabel ?? ''\"\r\n [attr.aria-multiline]=\"config?.ariaMultiline ?? true\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [maxlength]=\"config.maxLength ?? constants.textarea.maxLengthDefault\"\r\n [readonly]=\"config.isReadonly\"\r\n (input)=\"onChange($event)\"\r\n class=\"ieeesa-text-area-field__content ieeesa-body-lg-18 {{\r\n config.controlName\r\n }}\"\r\n [ngClass]=\"\r\n config.isResize\r\n ? 'ieeesa-text-area-field__resize'\r\n : 'ieeesa-text-area-field__no-resize'\r\n \"\r\n >\r\n {{ config.value }}</textarea\r\n >\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n (supportTextLinkClick)=\"onSupportTextLinkClick($event)\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport * as buttonActionsInfo from '../../assets/constants.json';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'ieeesa-add-form-group',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, MatInputModule, MatButtonModule],\r\n templateUrl: './add-form-group.component.html',\r\n styleUrls: ['./add-form-group.component.scss'],\r\n})\r\nexport class AddFormGroupComponent implements FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Output() addFormGroup = new EventEmitter<Event>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n buttonActionsInfo: any = buttonActionsInfo;\r\n\r\n /**\r\n * Emits the addFormGroup event on click of add form group button.\r\n * @param {Event} event\r\n * @memberof AddFormGroupComponent\r\n */\r\n onAddFormGroup(event: Event): void {\r\n this.addFormGroup.emit(event);\r\n }\r\n}\r\n","<ng-container class=\"ieeesa-add-form-group\" [formGroup]=\"group\">\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-add-form-group__label\">{{\r\n config?.label\r\n }}</mat-label>\r\n <button\r\n [disabled]=\"config?.disabled\"\r\n type=\"button\"\r\n mat-button\r\n matSuffix\r\n [attr.aria-label]=\"buttonActionsInfo?.ariaLabel?.addFormGroup\"\r\n class=\"mat-tertiary-button ieeesa-add-form-group__action\"\r\n (click)=\"onAddFormGroup($event)\"\r\n >\r\n <i class=\"fa-solid fa-plus\"></i>\r\n {{ buttonActionsInfo?.button?.add }}\r\n </button>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport * as constantsInfo from '../../assets/constants.json';\r\nimport { SelectedTime } from '../../models/selected-time.model';\r\n@Component({\r\n selector: 'ieeesa-time-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n NgxMaterialTimepickerModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n TextFieldModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TimePickerComponent {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Output() formTimeSelected = new EventEmitter<SelectedTime>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constantsInfo;\r\n @ViewChild('picker') picker!: ElementRef;\r\n\r\n /**\r\n * Handles form time selection event\r\n * @type {void}\r\n * @memberof TimePickerComponent\r\n */\r\n onTimeSelection(time: string): void {\r\n this.group.markAsDirty();\r\n this.formTimeSelected.emit({\r\n time: time,\r\n controlName: this.config.controlName,\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-time-picker-field\"\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-time-picker-field__label-left'\r\n : 'ieeesa-time-picker-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-time-picker-field__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <mat-form-field appearance=\"fill\">\r\n <input\r\n matInput\r\n [ngxTimepicker]=\"picker\"\r\n [format]=\"\r\n config?.is24HoursTimeFormat\r\n ? config?.hour24\r\n : constants?.timePicker?.defaultTimeFormat\r\n \"\r\n [attr.aria-label]=\"config.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [readonly]=\"config.isReadonly\"\r\n class=\"ieeesa-time-picker-field__content ieeesa-body-lg-18\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-time-picker-field__toggle-icon\"\r\n (click)=\"picker.open()\"\r\n matSuffix\r\n [attr.aria-label]=\"config.ariaLabel ?? ''\"\r\n >\r\n <svg ngxMaterialTimepickerToggleIcon>\r\n <use [attr.xlink:href]=\"constants?.timePicker?.timePickerIcon\"></use>\r\n </svg>\r\n </button>\r\n <ngx-material-timepicker\r\n #picker\r\n (timeSet)=\"onTimeSelection($event)\"\r\n ></ngx-material-timepicker>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatSlideToggleChange,\r\n MatSlideToggleModule,\r\n} from '@angular/material/slide-toggle';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\n\r\n@Component({\r\n selector: 'ieeesa-slide-toggle',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatSlideToggleModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './slide-toggle.component.html',\r\n styleUrls: ['./slide-toggle.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SlideToggleComponent implements OnInit, AfterViewInit {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() formControlName = 'slideToggle';\r\n slideToggleOption!: SlideToggleOption;\r\n /**\r\n * Input property to get slide toggle options\r\n * @memberof SlideToggleComponent\r\n * @usageNotes const slideToggleOption = [{ id: 1, label: 'Change toggle', checked: true, disabled: false}]\r\n */\r\n @Input()\r\n set slideToggle(value: SlideToggleOption) {\r\n this.slideToggleOption = value;\r\n }\r\n get slideToggle(): SlideToggleOption {\r\n return this.slideToggleOption;\r\n }\r\n @Input() isDisabled = false;\r\n @Input() canShowIcon = false;\r\n @Output() slideToggleChange: EventEmitter<SlideToggleOption> =\r\n new EventEmitter<SlideToggleOption>();\r\n @ViewChild('slideToggle', { read: ElementRef })\r\n matSlideToggleElement!: ElementRef;\r\n crossIconSVG =\r\n 'M10.333 3.205L9.62801 2.5L6.83301 5.295L4.03801 2.5L3.33301 3.205L6.12801 6L3.33301 8.795L4.03801 9.5L6.83301 6.705L9.62801 9.5L10.333 8.795L7.53801 6L10.333 3.205Z';\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n /**\r\n * On slide toggle sets slideToggleOption checked and emit slideToggleChange event emitter.\r\n * @param {MatSlideToggleChange} toggle\r\n * @memberof SlideToggleComponent\r\n */\r\n onSlideToggleChange(toggle: MatSlideToggleChange) {\r\n if (this.slideToggleOption) {\r\n this.slideToggleOption.checked = toggle?.checked;\r\n this.slideToggleChange.emit(this.slideToggleOption);\r\n }\r\n }\r\n\r\n /**\r\n * Initiates component and set slideToggleOption.\r\n * @memberof SlideToggleComponent\r\n */\r\n ngOnInit(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'slideToggle',\r\n FormControlType.SLIDE_TOGGLE\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup('slideToggle');\r\n this.slideToggleOption =\r\n this.config?.slideToggleOption ?? this.slideToggleOption;\r\n this.isDisabled = this.config?.disabled ?? this.isDisabled;\r\n }\r\n /**\r\n * Updates the cross icon path for the off state of the slide toggle button.\r\n * @memberof SlideToggleComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.matSlideToggleElement && this.canShowIcon) {\r\n this.matSlideToggleElement?.nativeElement\r\n ?.querySelector('.mdc-switch__icon--off')\r\n .firstChild.setAttribute('d', this.crossIconSVG);\r\n }\r\n }\r\n}\r\n","<div [formGroup]=\"group\" class=\"ieeesa-slide-toggle-field\" *ngIf=\"group\">\r\n <mat-slide-toggle\r\n [formControlName]=\"config.controlName\"\r\n [aria-label]=\"config.ariaLabel ?? slideToggleOption.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [checked]=\"slideToggleOption.checked\"\r\n [disabled]=\"isDisabled\"\r\n [(ngModel)]=\"slideToggleOption.checked\"\r\n (change)=\"onSlideToggleChange($event)\"\r\n [hideIcon]=\"!canShowIcon\"\r\n #slideToggle\r\n >{{ slideToggleOption?.label }}</mat-slide-toggle\r\n >\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Directive,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Directive, enables to drag and drop files on the predefined area and emits the event with dropped files to upload.\r\n * @export\r\n * @class FileUploadDirective\r\n */\r\n@Directive({\r\n selector: '[ieeesaFileUpload]',\r\n standalone: true,\r\n})\r\nexport class FileUploadDirective {\r\n @Input() allowedFileTypes: string[] = [];\r\n @Input() isMultiFileUpload = false;\r\n @Output() fileDropped = new EventEmitter<File | FileList>();\r\n\r\n /**\r\n * Binds the 'multiple' attribute based on the value of allowMultiple property.\r\n * @readonly\r\n * @type {(string | null)}\r\n * @memberof FileUploadDirective\r\n */\r\n @HostBinding('attr.multiple') get isMultiple(): string | null {\r\n return this.isMultiFileUpload ? 'multiple' : null;\r\n }\r\n /**\r\n * Host listener for 'dragover' event.\r\n * Prevents default behavior and stops event propagation.\r\n * @param {DragEvent} event\r\n * @memberof FileUploadDirective\r\n */\r\n @HostListener('dragover', ['$event']) onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /**\r\n * Host listener for 'dragleave' event.\r\n * Prevents default behavior and stops event propagation.\r\n * @param {DragEvent} event\r\n * @memberof FileUploadDirective\r\n */\r\n @HostListener('dragleave', ['$event']) onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /**\r\n * Host listener for 'drop' event.\r\n * Prevents default behavior, stops event propagation, and emits dropped files.\r\n * @param {DragEvent} event -DragEvent object.\r\n * @memberof FileUploadDirective\r\n */\r\n @HostListener('drop', ['$event']) onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const files = event.dataTransfer?.files;\r\n if (files && files.length > 0) {\r\n this.fileDropped.emit(files);\r\n }\r\n }\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum AlignBrowsedFiles {\r\n DEFAULT = 'default',\r\n BOTTOM = 'bottom',\r\n}\r\n","import {\r\n HttpBackend,\r\n HttpClient,\r\n HttpEvent,\r\n HttpEventType,\r\n HttpHeaders,\r\n} from '@angular/common/http';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport {\r\n AlertsService,\r\n HttpService,\r\n LoaderNotificationService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AlertType } from '@ieeesa-npm/models';\r\nimport {\r\n FileUploadPresignedUrl,\r\n GetFileDownloadPresignedUrlByAttachmentIdPayload,\r\n GetFileDownloadPresignedUrlByAttachmentIdResponse,\r\n GetFileDownloadPresignedUrlPayload,\r\n GetFileUploadPresignedUrlPayload,\r\n} from '../models/file-upload-presigned-url-res.model';\r\nimport {\r\n catchError,\r\n concatMap,\r\n from,\r\n last,\r\n map,\r\n Observable,\r\n Subject,\r\n take,\r\n takeUntil,\r\n tap,\r\n} from 'rxjs';\r\nimport * as constants from '../assets/constants.json';\r\nimport { FileUploadPayload } from '../models/file-upload-payload-model';\r\nimport {\r\n FileAttachmentInfo,\r\n GetFileUploadPresignedUrlsResponse,\r\n} from '../models/file-upload-response.model';\r\nimport { DeleteFileResponse } from '../models/file-info.model';\r\nimport { DownloadAttachment } from '../models/download-file.model';\r\n\r\n/**\r\n * This service interacts with the server to obtain pre-signed URLs for file upload and uploads files to Amazon S3.\r\n * @class FileUploadService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileUploadService implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n constants = constants;\r\n apiBaseUrl!: string;\r\n fileByteArray: Uint8Array | undefined;\r\n httpClient: HttpClient;\r\n isFileUploading = false;\r\n filesNameOfUploadFailed!: string[];\r\n noOfFilesUploadedSuccessfully = 0;\r\n uploadedFileName = '';\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public httpService: HttpService,\r\n handler: HttpBackend,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n public loaderNotificationService: LoaderNotificationService\r\n ) {\r\n this.httpClient = new HttpClient(handler);\r\n }\r\n\r\n /**\r\n * Sets the base URL for API requests.\r\n * @param {string} apiBaseUrl -API base URL.\r\n * @memberof FileUploadService\r\n */\r\n setApiBaseUrl(apiBaseUrl: string) {\r\n this.apiBaseUrl = apiBaseUrl;\r\n }\r\n /**\r\n * Gets API base URL for API requests.\r\n * @return {*} {string}\r\n * @memberof FileUploadService\r\n */\r\n getApiBaseUrl(): string {\r\n return this.apiBaseUrl;\r\n }\r\n /**\r\n * Retrieves presigned URL for uploading files to Amazon S3 bucket.\r\n * @param {(File | FileList)} file\r\n * @return {Observable<FileUploadPresignedUrl>}\r\n * @memberof FileUploadService\r\n */\r\n getFileUploadPresignedUrl(\r\n file: File | FileList,\r\n appId: string\r\n ): Observable<FileUploadPresignedUrl> {\r\n let fileName = '';\r\n if (Object.values(file).length) fileName = Object.values(file)[0].name;\r\n else fileName = (file as File).name;\r\n const fileUploadPresignedUrlPayload: GetFileUploadPresignedUrlPayload = {\r\n payload: {\r\n fileName: fileName,\r\n tenantAppId: appId as string,\r\n },\r\n };\r\n return this.httpService\r\n .postData(\r\n `${this.apiBaseUrl}/configurations/s3/uploadFileUrl`,\r\n fileUploadPresignedUrlPayload\r\n )\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Gets pre-signed URL for the files to be uploaded in S3 bucket\r\n * @param {FileUploadPayload} fileUploadPayload\r\n * @param {string} fileUploadAPIPath\r\n * @return {Observable<GetFileUploadPresignedUrlsResponse>}\r\n * @memberof FileUploadService\r\n */\r\n getPreSignedURL(\r\n fileUploadPayload: FileUploadPayload,\r\n fileUploadAPIPath: string\r\n ): Observable<GetFileUploadPresignedUrlsResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/${fileUploadAPIPath}`, fileUploadPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Uploads file to AWS S3 using a pre-signed URL.\r\n * @param {string} preSignedUrl\r\n * @param files\r\n * @param isMultipleFileUpload\r\n * @return {Observable<any>} -Returns an observable that emits the response after uploading the file to S3.\r\n * @memberof FileUploadService\r\n */\r\n uploadFileToS3(\r\n preSignedUrl: FileAttachmentInfo[] | string,\r\n files: File | FileList,\r\n isMultipleFileUpload = false\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): Observable<any> {\r\n this.loaderNotificationService.show();\r\n const filesArray = [];\r\n this.filesNameOfUploadFailed = [];\r\n this.uploadedFileName = '';\r\n if (isMultipleFileUpload) {\r\n Object.values(files).forEach((file: File) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filesArray.push({\r\n preSignedUrl: (preSignedUrl as FileAttachmentInfo[]).find(\r\n (fileInfo: FileAttachmentInfo) =>\r\n fileInfo.fileName === (file as File).name &&\r\n fileInfo.errorMessage === null\r\n )?.preSignedUrl,\r\n fileObj: file as File,\r\n fileType: (file as File).type,\r\n fileSize: (file as File).size,\r\n });\r\n });\r\n } else {\r\n filesArray.push({\r\n preSignedUrl: preSignedUrl as string,\r\n fileObj: files as File,\r\n fileType: (files as File).type,\r\n fileSize: (files as File).size,\r\n });\r\n }\r\n return from(filesArray).pipe(\r\n concatMap((file) =>\r\n this.httpCallToAWS(\r\n file.preSignedUrl,\r\n file.fileObj,\r\n file.fileType,\r\n file.fileSize\r\n )\r\n ),\r\n take(filesArray.length)\r\n );\r\n }\r\n /**\r\n * Makes http call to AWS to upload file in S3 bucket\r\n * @param {string} preSignedUrl\r\n * @param {File} file\r\n * @param {string} fileType\r\n * @param {number} fileSize\r\n * @return {*} {Observable<any>}\r\n * @memberof FileUploadService\r\n */\r\n httpCallToAWS(\r\n preSignedUrl: string,\r\n file: File,\r\n fileType: string,\r\n fileSize: number\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): Observable<any> {\r\n const headers = new HttpHeaders();\r\n headers.append('Content-Type', fileType?.toString());\r\n headers.append('Content-Length', fileSize?.toString());\r\n return this.httpClient\r\n .put(preSignedUrl, file, {\r\n reportProgress: true,\r\n observe: 'events',\r\n headers: headers,\r\n })\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n map((event) => this.getEventMessage(event, file)),\r\n tap((message) => this.showProgress(message)),\r\n last(),\r\n catchError((errorRes) => {\r\n this.loaderNotificationService.hide();\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Gets file upload progress.\r\n * @param {*} message\r\n * @memberof FileUploadService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars, no-unused-vars, no-empty-function, @typescript-eslint/no-empty-function\r\n showProgress(message: any) {}\r\n\r\n /**\r\n * Return distinct message for sent, upload progress, & response events.\r\n * @param {HttpEvent<any>} event\r\n * @param {(File | FileList)} file\r\n * @return {*}\r\n * @memberof FileUploadService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getEventMessage(event: HttpEvent<any>, file: File) {\r\n let fileName = '';\r\n let fileSize: number | string = 0;\r\n fileName = (file as File).name;\r\n fileSize = (file as File).size;\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n return `Uploading file \"${fileName}\" of size ${fileSize}.`;\r\n case HttpEventType.UploadProgress:\r\n // eslint-disable-next-line no-case-declarations\r\n const percentDone = event?.total\r\n ? Math.round((100 * event.loaded) / event.total)\r\n : 0;\r\n return `File \"${fileName}\" is ${percentDone}% uploaded.`;\r\n case HttpEventType.Response:\r\n this.loaderNotificationService.hide();\r\n if (event.status === 200) {\r\n this.noOfFilesUploadedSuccessfully++;\r\n this.uploadedFileName = fileName;\r\n return true;\r\n }\r\n this.filesNameOfUploadFailed.push(fileName);\r\n return false;\r\n\r\n default:\r\n return `File \"${fileName}\" surprising upload event: ${event.type}.`;\r\n }\r\n }\r\n\r\n /**\r\n * Converts file to byte array.\r\n * @param {File} file\r\n * @memberof FileUploadService\r\n */\r\n convertFileToByteArray(file: File): void {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const arrayBuffer = reader?.result as ArrayBuffer;\r\n this.fileByteArray = new Uint8Array(arrayBuffer);\r\n };\r\n reader.onerror = () => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: this.constants?.fileUpload?.message?.error?.ER1002,\r\n alertType: AlertType?.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n };\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n /**\r\n * Resets file byte array format to undefined.\r\n * @memberof FileUploadService\r\n */\r\n clearFileByteArray(): void {\r\n this.fileByteArray = undefined;\r\n }\r\n\r\n /**\r\n * Sets file upload status.\r\n * @param {boolean} status\r\n * @memberof FileUploadService\r\n */\r\n setFileUploadStatus(status: boolean): void {\r\n this.isFileUploading = status;\r\n }\r\n\r\n /**\r\n * Returns file upload status.\r\n * @return {boolean}\r\n * @memberof FileUploadService\r\n */\r\n getFileUploadStatus(): boolean {\r\n return this.isFileUploading;\r\n }\r\n\r\n /**\r\n * Retrieves presigned URL for downloading files to Amazon S3 bucket.\r\n * @param {(File | FileList)} file\r\n * @return {Observable<string>}\r\n * @memberof FileUploadService\r\n */\r\n getFileDownloadPresignedUrls(\r\n file: File | FileList | string | DownloadAttachment,\r\n isPublicAPI?: boolean,\r\n domainUrl?: string,\r\n presignedApiUrl?: string\r\n ): Observable<string | GetFileDownloadPresignedUrlByAttachmentIdResponse> {\r\n let fileName = '';\r\n if (typeof file === 'string') fileName = file;\r\n else if (Object?.values(file)?.length)\r\n fileName = Object?.values(file)?.[0]?.name;\r\n else fileName = (file as File).name;\r\n let httpRequest!: Observable<\r\n string | GetFileDownloadPresignedUrlByAttachmentIdResponse\r\n >;\r\n if (isPublicAPI) {\r\n const fileDownloadPresignedUrlPayload: GetFileDownloadPresignedUrlPayload =\r\n {\r\n payload: {\r\n fileName: fileName,\r\n domain: domainUrl as string,\r\n },\r\n };\r\n httpRequest = this.httpService.postData(\r\n `${this.apiBaseUrl}/configurations/public/downloadFileUrl`,\r\n fileDownloadPresignedUrlPayload\r\n );\r\n } else if (presignedApiUrl) {\r\n const fileDownloadPresignedUrlByAttachmentIdPayload: GetFileDownloadPresignedUrlByAttachmentIdPayload =\r\n {\r\n payload: {\r\n attachmentId: (file as DownloadAttachment).attachmentId,\r\n preSignedDuration: this.constants?.fileDownload?.preSignedDuration,\r\n },\r\n };\r\n httpRequest = this.httpService.postData(\r\n `${this.apiBaseUrl}${presignedApiUrl}`,\r\n fileDownloadPresignedUrlByAttachmentIdPayload\r\n );\r\n } else {\r\n httpRequest = this.httpService.getData(\r\n `${this.apiBaseUrl}/configurations/s3/downloadFileUrl/${fileName}`\r\n );\r\n }\r\n return httpRequest.pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Downloads file to AWS S3 using a presigned URL.\r\n * @return {Observable<any>}\r\n * @memberof FileUploadService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n downloadFile(fileDownloadPresignedUrl: string): Observable<any> {\r\n return this.httpClient.get(fileDownloadPresignedUrl).pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Validates the total size of the files uploaded.\r\n * @param {(File | FileList)} files -The files to be validated.\r\n * @param {number} maxFileSize\r\n * @param {boolean} isMultiFileUpload\r\n * @return {boolean} -Returns true if the total size of files is within the specified limit, otherwise false.\r\n * @memberof FileUploadService\r\n */\r\n validateFileSize(\r\n files: File | FileList,\r\n maxFileSize: number,\r\n isMultiFileUpload: boolean\r\n ): boolean {\r\n if (isMultiFileUpload) {\r\n let totalSize = 0;\r\n Object.values(files).forEach((file: File) => {\r\n totalSize += file.size;\r\n });\r\n return totalSize / (1024 * 1024) <= maxFileSize;\r\n }\r\n return (files as File).size / (1024 * 1024) <= maxFileSize;\r\n }\r\n\r\n /**\r\n * Validates the file types of the uploaded files.\r\n * @param {(File | FileList)} files\r\n * @param {string[]} allowedFileTypes\r\n * @param {boolean} isMultiFileUpload\r\n * @return {boolean} -Returns true if all files have valid extensions, otherwise false.\r\n * @memberof FileUploadService\r\n */\r\n validateFileTypes(\r\n files: File | FileList,\r\n allowedFileTypes: string[],\r\n isMultiFileUpload: boolean\r\n ): boolean {\r\n const validateSingleFile = (file: File): boolean => {\r\n const fileExtension = this.getFileExtension(file.name);\r\n return allowedFileTypes?.includes(fileExtension);\r\n };\r\n if (isMultiFileUpload) {\r\n let allFilesValid = true;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Object.values(files)?.forEach((fileItem: any) => {\r\n if (!validateSingleFile(fileItem)) {\r\n allFilesValid = false;\r\n }\r\n });\r\n return allFilesValid;\r\n }\r\n return validateSingleFile(files as File);\r\n }\r\n\r\n /**\r\n * Extracts and returns the extension of a file from its name.\r\n * @private\r\n * @param {string} fileName\r\n * @return {string} -The file extension in lowercase.\r\n * @memberof FileUploadService\r\n */\r\n private getFileExtension(fileName: string): string {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n return fileName?.split('.').pop()!.toLowerCase();\r\n }\r\n /**\r\n * Delete the file from AWS S3 based on the given fileId along with deleteFileApiPath.\r\n * @return {Observable<DeleteFileResponse>}\r\n * @memberof FileUploadService\r\n */\r\n deleteFile(deleteFileApiPath: string): Observable<DeleteFileResponse> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/${deleteFileApiPath}`, {})\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof FileUploadService\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FileUploadService } from '../../services/file-upload.service';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\nimport { DownloadAttachment } from '../../models/download-file.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { saveAs } from 'file-saver';\r\nimport { AlertsService } from '@ieeesa-npm/utility';\r\nimport { AlertType, AlignType } from '@ieeesa-npm/models';\r\n\r\n@Component({\r\n selector: 'ieeesa-file-download',\r\n standalone: true,\r\n imports: [CommonModule, MatListModule, MatIconModule, IconButtonComponent],\r\n templateUrl: './file-download.component.html',\r\n styleUrls: ['./file-download.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FileDownloadComponent implements OnInit, OnDestroy {\r\n constants = constants;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n preSignedUrl!: string;\r\n fileName!: string;\r\n alignType = AlignType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() downloadFiles: File | FileList | any | DownloadAttachment[] = [];\r\n @Input() fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input() isPublicAPI?: boolean;\r\n @Input() domainUrl?: string;\r\n @Output() downloadSelectedFile = new EventEmitter<\r\n File | DownloadAttachment\r\n >();\r\n @Output() deleteSelectedFile = new EventEmitter<File | DownloadAttachment>();\r\n fileDeleteBtn = this.constants?.fileDownload?.buttons[0];\r\n @Input() apiBaseUrl!: string;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n private fileUploadService: FileUploadService,\r\n // eslint-disable-next-line no-unused-vars\r\n private alertService: AlertsService\r\n ) {}\r\n\r\n /**\r\n * Sets API base URL to file upload service\r\n * @memberof FileDownloadComponent\r\n */\r\n ngOnInit(): void {\r\n if (this.apiBaseUrl) {\r\n this.fileUploadService.setApiBaseUrl(this.apiBaseUrl);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the download AWS pre-signed URL from API on button click or emit the downloadSelectedFile if canDownloadFileInternally flg is true.\r\n * @param {File } file\r\n * @memberof FileDownloadedComponent\r\n */\r\n onDownloadFile(file: File | DownloadAttachment): void {\r\n if (this.fileDownloadAndDeleteConfig?.canDownloadFileInternally) {\r\n this.getFileDownloadPresignedUrls(file);\r\n } else {\r\n this.downloadSelectedFile.emit(file);\r\n }\r\n }\r\n /**\r\n * Retrieves pre-signed URL for downloading the selected file from Amazon S3 bucket.\r\n * @memberof FileDownloadedComponent\r\n */\r\n getFileDownloadPresignedUrls(file: File | DownloadAttachment): void {\r\n this.fileUploadService\r\n .getFileDownloadPresignedUrls(\r\n file,\r\n this.isPublicAPI,\r\n this.domainUrl,\r\n this.fileDownloadAndDeleteConfig?.downloadFileAPIUrl\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (response: any) => {\r\n if (response.body === 'string') {\r\n this.preSignedUrl = response.body;\r\n this.fileName = (file as File).name;\r\n } else {\r\n this.preSignedUrl = response.body.preSignedUrl;\r\n this.fileName = response.body.fileName;\r\n }\r\n this.downloadFileFromS3(this.preSignedUrl);\r\n },\r\n error: (error: Error) => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: error?.message || this.constants?.fileDownload?.message?.errors?.['ER1002'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Emits deleteSelectedFile event or deletes the selected file by calling deleteFile() if the file can be deleted internally.\r\n * @param {number} index\r\n * @param {File } file\r\n * @memberof FileDownloadedComponent\r\n */\r\n onDeleteFile(file: File | DownloadAttachment, index: number): void {\r\n if (this.fileDownloadAndDeleteConfig?.canDeleteFileInternally) {\r\n this.deleteFile(this.downloadFiles[index]?.attachmentId, index);\r\n } else {\r\n this.deleteSelectedFile.emit(file);\r\n }\r\n }\r\n /**\r\n * Deletes the file by given attachmentId, index.\r\n * @param {string} attachmentId\r\n * @param {number} index\r\n * @memberof UploadAttachmentsComponent\r\n */\r\n deleteFile(attachmentId: string, index: number): void {\r\n this.fileUploadService\r\n .deleteFile(\r\n `${this.fileDownloadAndDeleteConfig.deleteFileAPIUrl}${attachmentId}`\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line no-empty-function, @typescript-eslint/no-empty-function\r\n next: () => {\r\n this.downloadFiles.splice(index, 1);\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: error?.message || this.constants?.fileDownload?.message?.errors?.['ER1002'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n });\r\n }\r\n /**\r\n * Returns unique identifier for the file list.\r\n * @param {number} index\r\n * @return {(number | string)}\r\n * @memberof FileDownloadComponent\r\n */\r\n trackByFn(index: number): number | string {\r\n return index;\r\n }\r\n /**\r\n * Cleans up resources when the component is destroyed.\r\n * @memberof FileDownloadComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * Download the file using generated presigned Url.\r\n * @param {string} fileDownloadPresignedUrl\r\n * @param {string} fileName\r\n * @memberof FileDownloadComponent\r\n */\r\n downloadFileFromS3(fileDownloadPresignedUrl: string): void {\r\n saveAs(fileDownloadPresignedUrl);\r\n }\r\n}\r\n","<div class=\"ieeesa-file-download\">\r\n <mat-list\r\n [ngClass]=\"\r\n fileDownloadAndDeleteConfig?.alignType === alignType.VERTICAL\r\n ? ''\r\n : 'ieeesa-file-download__align-horizontal'\r\n \"\r\n >\r\n <ng-container\r\n *ngFor=\"let item of downloadFiles; let index = index; trackBy: trackByFn\"\r\n >\r\n <mat-list-item\r\n [ngClass]=\"\r\n fileDownloadAndDeleteConfig?.alignType === alignType.VERTICAL\r\n ? ''\r\n : 'ieeesa-list-file-by-horizontal'\r\n \"\r\n >\r\n <button\r\n mat-button\r\n type=\"button\"\r\n [disabled]=\"!fileDownloadAndDeleteConfig?.isDownloadNeeded\"\r\n (click)=\"onDownloadFile(item)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-file-download__file-download-button\"\r\n >\r\n {{ item.fileName }}\r\n </button>\r\n <ieeesa-icon-button\r\n *ngIf=\"fileDownloadAndDeleteConfig?.isDeleteNeeded\"\r\n class=\"ieeesa-file-download--file-delete-button\"\r\n [iconButton]=\"fileDeleteBtn\"\r\n [isLabelNeeded]=\"false\"\r\n (iconButtonClick)=\"onDeleteFile(item, index)\"\r\n >\r\n </ieeesa-icon-button>\r\n </mat-list-item>\r\n </ng-container>\r\n </mat-list>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { FileUploadDirective } from '../../directives/file-upload/file-upload.directive';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { AllowedFileTypes } from '../../models/allowed-file-types.model';\r\nimport { FileUploadService } from '../../services/file-upload.service';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { AlignBrowsedFiles } from '../../models/align-browsed-files.model';\r\nimport { AlignType } from '@ieeesa-npm/models';\r\nimport { FileUploadStatus } from '../../models/file-upload-status.model';\r\nimport { FileDownloadComponent } from '../file-download/file-download.component';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\nimport { DownloadAttachment } from '../../models/download-file.model';\r\n/**\r\n * Provides functionality for uploading files to aws s3 bucket.\r\n * @export\r\n * @class FileUploadComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-file-upload',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n FormSupportTextComponent,\r\n MatProgressBarModule,\r\n FileUploadDirective,\r\n IconButtonComponent,\r\n FileDownloadComponent,\r\n ],\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FileUploadComponent implements OnInit {\r\n @ViewChild('fileField') fileField!: ElementRef;\r\n constants = constants;\r\n fileUploadLabel = this.constants?.fileUpload?.label;\r\n fileUploadAriaLabel = this.constants?.fileUpload?.ariaLabel;\r\n fileUploadIconUrl = this.constants?.fileUpload?.iconUrl;\r\n fileUploadBtn = this.constants?.fileUpload?.buttons[0];\r\n allowedFileTypeErrorMessage =\r\n this.constants?.fileUpload?.message?.error?.invalidFileFormat;\r\n @Input() maxFileSizeErrorMessage =\r\n this.constants?.fileUpload?.message?.error?.invalidFileSize;\r\n allowedFileTypesAndSizeText = '';\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n isValidFileType = false;\r\n isValidFileSize = false;\r\n isValidMaxFileUploadLimit = false;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n selectedFiles: FileList | File | any = [];\r\n selectedFileNames = '';\r\n isFormField = false;\r\n totalSize = 0;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n uploadedFiles: FileList | File | any = [];\r\n @Input() actionButtonAlign!: AlignType;\r\n alignmentType = AlignType;\r\n isUploadButtonDisabled = false;\r\n @Input() formControlName = 'fileUpload';\r\n @Input() isFileSelected = false;\r\n @Input() supportMessage!: string;\r\n @Input() allowedFileTypes: AllowedFileTypes[] = [];\r\n @Input() isMultiFileUpload = false;\r\n @Input() isUploadInProgress = false;\r\n @Input() fileUploadHeading!: string;\r\n @Input() isAllowAnyFileType = false;\r\n @Input() alignBrowsedFiles = AlignBrowsedFiles.DEFAULT;\r\n @Input() isUploadButtonNeeded = false;\r\n // Default maximum allowed upload file size is 2mb.\r\n @Input() maxUploadFileSize = 2;\r\n private uploadedSizeValue = 0;\r\n @Input() alignFileUploadErrorMessageTo = AlignType.BOTTOM;\r\n @Input() maxFilesUploadedOnce: number =\r\n this.constants?.fileUpload?.limit?.maxFilesUploadedOnce;\r\n @Input() maxFilesUploadLimitErrorMessage = '';\r\n private _fileUploadStatus!: FileUploadStatus;\r\n\r\n @Input() get fileUploadStatus(): FileUploadStatus {\r\n return this._fileUploadStatus;\r\n }\r\n set fileUploadStatus(value: FileUploadStatus) {\r\n this._fileUploadStatus = value;\r\n }\r\n\r\n @Input()\r\n get uploadedSize(): number {\r\n return this.uploadedSizeValue;\r\n }\r\n\r\n set uploadedSize(value: number) {\r\n this.uploadedSizeValue = value;\r\n }\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n @Output() uploadSelectedFiles = new EventEmitter<File | FileList>();\r\n @Output() downloadSelectedFile = new EventEmitter<\r\n File | DownloadAttachment\r\n >();\r\n apiBaseUrl!: string;\r\n selectedFileNamesCount = 0;\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n public fileUploadService: FileUploadService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n /**\r\n * Initializes component properties and retrieves configuration.\r\n * @memberof FileUploadComponent\r\n */\r\n ngOnInit(): void {\r\n this.isFormField = !!this.config;\r\n this.apiBaseUrl = this.fileUploadService.getApiBaseUrl();\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'fileUpload',\r\n FormControlType.FILE_UPLOAD\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup('fileUpload');\r\n this.config.supportMessage =\r\n this.config?.supportMessage ?? this.supportMessage;\r\n this.isMultiFileUpload =\r\n this.config?.isMultiFileUpload ?? this.isMultiFileUpload;\r\n this.maxUploadFileSize =\r\n this.config?.maxUploadFileSize ?? this.maxUploadFileSize;\r\n this.allowedFileTypes =\r\n this.config?.allowedFileTypes ?? this.allowedFileTypes;\r\n this.isAllowAnyFileType =\r\n this.config?.isAllowAnyFileType ?? this.isAllowAnyFileType;\r\n this.alignBrowsedFiles =\r\n this.config?.alignBrowsedFiles ?? this.alignBrowsedFiles;\r\n this.isUploadButtonNeeded =\r\n this.config?.isUploadButtonNeeded ?? this.isUploadButtonNeeded;\r\n this.actionButtonAlign =\r\n this.config?.actionButtonAlign ?? this.actionButtonAlign;\r\n this.alignFileUploadErrorMessageTo =\r\n this.config?.alignFileUploadErrorMessageTo ??\r\n this.alignFileUploadErrorMessageTo;\r\n this.getAllowedFileFormatSizeMessage();\r\n this.fileUploadHeading =\r\n this.config?.fileUploadHeading ??\r\n this.fileUploadHeading ??\r\n this.fileUploadLabel.fileUpload;\r\n this.config.allowedFileTypeErrorMessage =\r\n this.config?.allowedFileTypeErrorMessage ??\r\n this.allowedFileTypeErrorMessage;\r\n this.config.maxFileSizeErrorMessage =\r\n this.config?.maxFileSizeErrorMessage ?? this.maxFileSizeErrorMessage;\r\n this.isFileSelected = this.config?.isFileSelected ?? this.isFileSelected;\r\n this.maxFilesUploadedOnce =\r\n this.config?.maxFilesUploadedOnce ?? this.maxFilesUploadedOnce;\r\n this.maxFilesUploadLimitErrorMessage =\r\n this.config?.maxFilesUploadLimitErrorMessage ??\r\n this.maxFilesUploadLimitErrorMessage;\r\n }\r\n /**\r\n * Formats allowed file format and size message in required format.\r\n * @memberof FileUploadComponent\r\n */\r\n getAllowedFileFormatSizeMessage(): void {\r\n const supportedFileFormatText = this.allowedFileTypes.join(', ');\r\n this.allowedFileTypesAndSizeText = `${this.fileUploadLabel?.allowedFileSize1}\r\n ${this.maxUploadFileSize}`;\r\n if (this.isMultiFileUpload) {\r\n this.allowedFileTypesAndSizeText += ` ${this.constants?.fileUpload?.label?.mb}`;\r\n }\r\n if (!this.isAllowAnyFileType) {\r\n this.allowedFileTypesAndSizeText += `${this.fileUploadLabel?.allowedFileSize2} ${this.fileUploadLabel?.allowedFileFormat} ${supportedFileFormatText}.`;\r\n }\r\n }\r\n /**\r\n * Handles the selected file(s) and emits FileUpload event emitter for uploading the file(s).\r\n * @param {(File | FileList)} file\r\n * @memberof FileUploadComponent\r\n */\r\n getFile(file: File | FileList): void {\r\n this.selectedFiles = [];\r\n this.selectedFileNames = '';\r\n this.fileUploadStatus = {\r\n alreadyExistsFiles: [],\r\n filesNameOfUploadFailed: [],\r\n noOfFilesUploadedSuccessfully: 0,\r\n isUploadingStart: false,\r\n uploadedFiles: this.fileUploadStatus?.uploadedFiles ?? [],\r\n };\r\n this.selectedFileNamesCount = 0;\r\n const fileUploadFormControl = this.group?.get(\r\n this.config?.controlName ?? 'fileUpload'\r\n );\r\n if (fileUploadFormControl) {\r\n fileUploadFormControl.markAsDirty();\r\n }\r\n if (this.isMultiFileUpload) {\r\n const isValid = this.validateFile(file);\r\n this.isFileSelected = isValid;\r\n if (isValid) {\r\n if (file) {\r\n Object.values(file).forEach((fileItem: File) => {\r\n this.selectedFiles?.push(fileItem);\r\n this.totalSize += fileItem.size;\r\n });\r\n }\r\n }\r\n\r\n if (this.selectedFiles?.length) {\r\n this.selectedFileNamesCount = this.selectedFiles.length;\r\n const selectedFilesNames: string[] = [];\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n this.selectedFiles?.forEach((file: File, index: number) => {\r\n selectedFilesNames.push(file.name);\r\n });\r\n this.selectedFileNames = selectedFilesNames?.join(', ').toString();\r\n this.group\r\n .get(this.config?.controlName)\r\n ?.setValue(this.selectedFileNames);\r\n this.fileUploadBtn.disabled = false;\r\n if (this.isFormField)\r\n this.uploadSelectedFiles?.emit(this.selectedFiles);\r\n }\r\n } else {\r\n const fileItem = Object.values(file)[0];\r\n const isValid = this.validateFile(fileItem);\r\n if (isValid) {\r\n this.isFileSelected = isValid;\r\n this.selectedFileNames = fileItem.name;\r\n this.totalSize = fileItem.size;\r\n this.fileUploadService?.convertFileToByteArray(fileItem);\r\n this.group\r\n .get(this.config.controlName)\r\n ?.setValue(this.selectedFileNames);\r\n if (this.isFormField) this.uploadSelectedFiles.emit(fileItem);\r\n this.selectedFiles = file;\r\n this.fileUploadBtn.disabled = false;\r\n }\r\n }\r\n }\r\n /**\r\n * Validates the selected file(s) format and size.\r\n * @param {(File | FileList)} file\r\n * @return {boolean}\r\n * @memberof FileUploadComponent\r\n */\r\n validateFile(file: File | FileList): boolean {\r\n this.isValidFileType = !this.isAllowAnyFileType\r\n ? this.fileUploadService.validateFileTypes(\r\n file,\r\n this.allowedFileTypes,\r\n this.isMultiFileUpload\r\n )\r\n : true;\r\n if (this.isMultiFileUpload) {\r\n this.isValidMaxFileUploadLimit =\r\n Object.values(file).length <=\r\n this.constants?.fileUpload?.limit?.maxFilesUploadedOnce;\r\n if (!this.isValidMaxFileUploadLimit) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n maxFilesUploadLimitReached: true,\r\n });\r\n return false;\r\n }\r\n }\r\n if (!this.isValidFileType) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n invalidFileType: true,\r\n });\r\n return false;\r\n }\r\n this.isValidFileSize = this.fileUploadService.validateFileSize(\r\n file,\r\n this.maxUploadFileSize,\r\n this.isMultiFileUpload\r\n );\r\n if (!this.isValidFileSize) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n maxFileSize: true,\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Initiates the file upload process for independent file upload component.\r\n * @memberof FileUploadComponent\r\n */\r\n onUpload(): void {\r\n this.uploadSelectedFiles.emit(this.selectedFiles);\r\n if (this.fileUploadService?.getFileUploadStatus()) {\r\n this.uploadedFiles = this.selectedFiles;\r\n }\r\n }\r\n /**\r\n * Clears the form group control value of type input and resets other file upload properties.\r\n * @memberof FileUploadComponent\r\n */\r\n resetUpload(): void {\r\n this.fileUploadService.clearFileByteArray();\r\n this.uploadedFiles = [];\r\n this.isUploadInProgress = false;\r\n this.selectedFileNames = '';\r\n this.selectedFiles = [];\r\n this.isFileSelected = false;\r\n this.group.get(this.config?.controlName)?.setValue('');\r\n this.fileUploadBtn.disabled = true;\r\n this.selectedFileNamesCount = 0;\r\n }\r\n /**\r\n * Removes the selected file from the uploaded files list.\r\n * @param {number} index\r\n * @memberof FileUploadComponent\r\n */\r\n onDeleteFile(file: File, index: number): void {\r\n this.totalSize = 0;\r\n this.uploadedFiles.splice(index, 1);\r\n }\r\n /**\r\n * For tab key keydown event it passes event and restricts other keys from keyboard.\r\n * @param {KeyboardEvent} event -Keydown event object.\r\n * @memberof FileUploadComponent\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (event.key !== 'Tab') event.preventDefault();\r\n }\r\n /**\r\n * Emits downloadSelectedFile event.\r\n * @memberof FileUploadComponent\r\n */\r\n downloadFile(file: File | DownloadAttachment): void {\r\n this.downloadSelectedFile.emit(file);\r\n }\r\n /**\r\n * Returns unique identifier for the file list.\r\n * @param {number} index\r\n * @return {(number | string)}\r\n * @memberof FileUploadComponent\r\n */\r\n trackByFn(index: number): number | string {\r\n return index;\r\n }\r\n /**\r\n * Triggers and opens the file browse window when the Browse button is clicked.\r\n * @memberof FileUploadComponent\r\n */\r\n fileClick(): void {\r\n this.fileField.nativeElement.click();\r\n }\r\n /**\r\n * Returns the failed file names with comma separation.\r\n * @param {string[]} fileNames\r\n * @return {*} {string}\r\n * @memberof FileUploadComponent\r\n */\r\n displayFileNames(fileNames: string[]): string {\r\n return fileNames.length ? fileNames.join(',') : '';\r\n }\r\n /**\r\n * Removes the unselected file from the browsed or selected files and emits uploadSelectedFiles event with the selected files.\r\n * @param {number} index\r\n * @memberof FileUploadComponent\r\n */\r\n removeFile(index: number): void {\r\n this.selectedFiles.splice(index, 1);\r\n const fileNames: string[] = this.selectedFileNames.split(',');\r\n fileNames.splice(index, 1);\r\n this.selectedFileNames = fileNames.join(',');\r\n this.uploadSelectedFiles.emit(this.selectedFiles);\r\n this.selectedFileNamesCount--;\r\n if (this.selectedFiles.length === 0) {\r\n this.resetUpload();\r\n this.fileUploadStatus.noOfFilesUploadedSuccessfully = 0;\r\n this.fileUploadStatus.filesNameOfUploadFailed = [];\r\n this.fileUploadStatus.alreadyExistsFiles = [];\r\n }\r\n }\r\n /**\r\n * Enables or disables the file upload button.\r\n * @param {boolean} enable\r\n * @memberof FileUploadComponent\r\n */\r\n canEnableUploadButton(enable: boolean): void {\r\n this.isUploadButtonDisabled = enable;\r\n }\r\n /**\r\n * Based on isMultiFileUpload flag return files to download.\r\n * @memberof FileUploadComponent\r\n */\r\n getFilesToDownload(): DownloadAttachment[] {\r\n if (this.isMultiFileUpload) {\r\n return this.fileUploadStatus.uploadedFiles;\r\n }\r\n return this.uploadedFiles;\r\n }\r\n /**\r\n * TrackByFunction is called for each file in the collection and return a unique identifier for that file.\r\n * @param {number} index\r\n * @param {File} file\r\n * @return {File}\r\n * @memberof FileUploadComponent\r\n */\r\n trackByFunc(index: number, file: File): File {\r\n return file;\r\n }\r\n /**\r\n * Sets empty value to file form control once it is clicked.\r\n * @param {Event} event\r\n * @memberof FileUploadComponent\r\n */\r\n setEmptyValue(event: Event) {\r\n (event.target as HTMLInputElement).value = '';\r\n }\r\n /**\r\n * Removes the file from selectedFiles once the file uploaded successfully to AWS S3.\r\n * @param {File} file\r\n * @memberof FileUploadComponent\r\n */\r\n removeSelectedFileInUploadedFiles(fileName: string): void {\r\n const index = this.selectedFiles.findIndex(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (selectedFile: any) => selectedFile.name === fileName\r\n );\r\n this.selectedFiles.splice(index, 1);\r\n }\r\n /**\r\n * Returns the count of files selected for the upload.\r\n * @return {number}\r\n * @memberof FileUploadComponent\r\n */\r\n getSelectedFileCount(): number {\r\n return this.selectedFileNamesCount;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-file-upload\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-file-upload__label-left'\r\n : 'ieeesa-file-upload__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-file-upload__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <ieeesa-file-download\r\n [fileDownloadAndDeleteConfig]=\"fileDownloadAndDeleteConfig\"\r\n [apiBaseUrl]=\"apiBaseUrl\"\r\n [downloadFiles]=\"getFilesToDownload()\"\r\n (downloadSelectedFile)=\"downloadFile($event)\"\r\n ></ieeesa-file-download>\r\n <div\r\n class=\"ieeesa-file-upload__upload p-4\"\r\n ieeesaFileUpload\r\n (fileDropped)=\"getFile($event)\"\r\n >\r\n <p class=\"ieeesa-file-upload__upload__heading m-0 ieeesa-label-lg-bold-16\">\r\n {{ fileUploadHeading }}\r\n </p>\r\n <div class=\"ieeesa-file-upload__upload__browse-files\">\r\n <button\r\n mat-button\r\n (click)=\"fileClick()\"\r\n class=\"ieeesa-file-upload__browse-btn mat-tertiary-button\"\r\n [attr.aria-label]=\"fileUploadAriaLabel.browseFiles\"\r\n type=\"button\"\r\n [disabled]=\"fileUploadStatus?.isUploadingStart\"\r\n >\r\n {{ fileUploadLabel.browseFiles }}\r\n </button>\r\n <ng-container *ngIf=\"isMultiFileUpload\">\r\n <input\r\n type=\"file\"\r\n #fileField\r\n (change)=\"getFile($any($event).target.files)\"\r\n hidden\r\n [accept]=\"allowedFileTypes\"\r\n [multiple]=\"true\"\r\n [disabled]=\"fileUploadStatus?.isUploadingStart\"\r\n (click)=\"setEmptyValue($event)\"\r\n [ngClass]=\"'ieeesa-file-input'\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isMultiFileUpload\">\r\n <input\r\n type=\"file\"\r\n #fileField\r\n (change)=\"getFile($any($event).target.files)\"\r\n hidden\r\n [accept]=\"allowedFileTypes\"\r\n [disabled]=\"fileUploadStatus?.isUploadingStart\"\r\n (click)=\"setEmptyValue($event)\"\r\n [ngClass]=\"'ieeesa-file-input'\"\r\n />\r\n </ng-container>\r\n\r\n <p\r\n class=\"ieeesa-file-upload__allowed-file-text m-0 ieeesa-label-md-14\"\r\n [attr.aria-label]=\"allowedFileTypesAndSizeText\"\r\n >\r\n {{ allowedFileTypesAndSizeText }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-file-upload__upload-wrapper d-flex\"\r\n *ngIf=\"isFileSelected\"\r\n >\r\n <ng-container [ngSwitch]=\"alignBrowsedFiles\">\r\n <ng-container *ngSwitchCase=\"'default'\">\r\n <mat-form-field>\r\n <input\r\n class=\"ieeesa-file-upload__upload-wrapper__input-field ieeesa-body-lg-16\"\r\n type=\"text\"\r\n value=\"selectedFileNames\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n [attr.aria-label]=\"\r\n config.ariaLabel ?? fileUploadAriaLabel.fileUploadInput\r\n \"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n autocomplete=\"off\"\r\n (keydown)=\"onKeyDown($event)\"\r\n matInput\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-file-upload__upload-wrapper--clear-icon-btn\"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"fileUploadAriaLabel.removeFileIcon\"\r\n (click)=\"resetUpload()\"\r\n >\r\n <i\r\n class=\"fa-regular fa-circle-xmark ieeesa-input-field-upload__icon--clear\"\r\n ></i>\r\n </button>\r\n </mat-form-field>\r\n <ieeesa-icon-button\r\n class=\"ieeesa-file-upload__upload-wrapper--upload-btn d-flex align-items-center\"\r\n [iconButton]=\"fileUploadBtn\"\r\n [isLabelNeeded]=\"false\"\r\n (iconButtonClick)=\"onUpload()\"\r\n *ngIf=\"!isFormField\"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'bottom'\">\r\n <div class=\"ieeesa-display-browsed-files-bottom\">\r\n <p class=\"ieeesa-file-upload__progress__text\">\r\n {{\r\n fileUploadStatus.noOfFilesUploadedSuccessfully +\r\n \" \" +\r\n fileUploadLabel?.of +\r\n \" \" +\r\n getSelectedFileCount() +\r\n \" \" +\r\n fileUploadLabel?.filesUploaded\r\n }}\r\n </p>\r\n <ng-container>\r\n <p\r\n class=\"d-flex pt-1 m-0 ieeesa-label-md-14 align-items-center ieeesa-display-selected-files\"\r\n *ngFor=\"\r\n let file of selectedFiles;\r\n let i = index;\r\n trackBy: trackByFunc\r\n \"\r\n >\r\n {{ file?.name }}\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-file-upload__upload-wrapper--clear-icon-btn\"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"fileUploadAriaLabel.removeFileIcon\"\r\n (click)=\"removeFile(i)\"\r\n >\r\n <i\r\n class=\"fa-regular fa-circle-xmark ieeesa-input-field-upload__icon--clear\"\r\n ></i>\r\n </button>\r\n </p>\r\n </ng-container>\r\n <p\r\n *ngIf=\"fileUploadStatus?.filesNameOfUploadFailed?.length\"\r\n class=\"ieeesa-file-upload__error__text\"\r\n >\r\n {{\r\n fileUploadLabel?.uploadFor +\r\n \" \" +\r\n displayFileNames(fileUploadStatus.filesNameOfUploadFailed) +\r\n \" \" +\r\n fileUploadLabel?.uploadErrorMsg\r\n }}\r\n </p>\r\n <p\r\n *ngIf=\"fileUploadStatus?.alreadyExistsFiles?.length\"\r\n class=\"ieeesa-file-upload__error__text\"\r\n >\r\n {{\r\n displayFileNames(fileUploadStatus.alreadyExistsFiles) +\r\n \" \" +\r\n fileUploadLabel?.fileAlreadyExists\r\n }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"!isFormField\">\r\n <div class=\"ieeesa-file-upload__progress\" *ngIf=\"isUploadInProgress\">\r\n <p class=\"ieeesa-file-upload__progress__text\">\r\n {{ fileUploadLabel?.uploadProgress }}\r\n </p>\r\n <mat-progress-bar\r\n class=\"ieeesa-file-upload__progress--bar\"\r\n mode=\"determinate\"\r\n [value]=\"uploadedSize\"\r\n ></mat-progress-bar>\r\n </div>\r\n </ng-container>\r\n <ieeesa-form-error\r\n *ngIf=\"alignFileUploadErrorMessageTo === alignmentType.MIDDLE\"\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-error>\r\n <div\r\n *ngIf=\"isUploadButtonNeeded && isFileSelected\"\r\n [ngClass]=\"{\r\n 'justify-content-end': actionButtonAlign === alignmentType.LEFT,\r\n 'justify-content-center': actionButtonAlign === alignmentType.MIDDLE,\r\n 'justify-content-start': actionButtonAlign === alignmentType.RIGHT,\r\n }\"\r\n >\r\n <button\r\n type=\"submit\"\r\n mat-button\r\n class=\"mat-primary-button ieeesa-dynamic-form__actions--right-btn\"\r\n [disabled]=\"\r\n !isFileSelected ||\r\n fileUploadStatus.isUploadingStart ||\r\n fileUploadStatus.noOfFilesUploadedSuccessfully > 0\r\n \"\r\n >\r\n {{ fileUploadLabel?.upload }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<ieeesa-form-error\r\n *ngIf=\"alignFileUploadErrorMessageTo === alignmentType.BOTTOM\"\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n></ieeesa-form-error>\r\n<ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n></ieeesa-form-support-text>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum ColorFormat {\r\n hex = 'hex',\r\n rgba = 'rgba',\r\n hsla = 'hsla'\r\n}\r\nexport enum ColorsAnimation {\r\n popup = 'popup',\r\n slidein = 'slide-in'\r\n}\r\nexport interface PaletteColor {\r\n name: string;\r\n hexCode: string;\r\n}","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxColorsModule, NgxColorsTriggerDirective } from 'ngx-colors';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport {\r\n ColorFormat,\r\n ColorsAnimation,\r\n PaletteColor,\r\n} from '../../models/color-format.model';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport * as constants from '../../assets/constants.json';\r\n@Component({\r\n selector: 'ieeesa-color-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n NgxColorsModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ColorPickerComponent implements OnInit, OnDestroy {\r\n @ViewChild(NgxColorsTriggerDirective, { static: true })\r\n colorPickerDirective!: NgxColorsTriggerDirective;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n colorPickerTexts: any = constants?.colorPicker;\r\n paletteColors: PaletteColor[] = this.colorPickerTexts?.paletteColors;\r\n paletteContainer!: HTMLElement;\r\n group!: FormGroup;\r\n config!: FieldConfig;\r\n @Output() colorPickerChange = new EventEmitter<string>();\r\n @Output() colorPickerSliderChange = new EventEmitter<string>();\r\n @Input() defaultColor!: string;\r\n canShowPalette = false;\r\n @Input() palette: string[] = this.paletteColors?.map(\r\n (color: PaletteColor) => color.hexCode\r\n );\r\n @Input() overlayClassName = 'ieeesa-color-picker__overlay';\r\n @Input() colorFormat = ColorFormat.hex;\r\n @Input() colorAnimation = ColorsAnimation.popup;\r\n @Input() formControlName = 'colorPicker';\r\n @Input() paletteSelectLabel = this.colorPickerTexts?.label?.select;\r\n @Input() paletteCancelLabel = this.colorPickerTexts?.label?.cancel;\r\n @Input() colorPickerLabel!: string;\r\n @Input() isColorCodeLabelNeeded = true;\r\n @Input() isArrowIconNeeded = true;\r\n @Input() canHideTextInput = false;\r\n @Input() canHideColorPicker = false;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private elementRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n ngOnInit() {\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.COLOR_PICKER\r\n );\r\n if (this.config) {\r\n this.colorPickerLabel = this.config?.label ?? this.colorPickerLabel;\r\n this.palette = this.config?.palette ?? this.palette;\r\n this.defaultColor = this.config?.defaultColor ?? this.defaultColor;\r\n this.colorFormat = this.config?.colorFormat ?? this.colorFormat;\r\n this.overlayClassName =\r\n this.config?.overlayClassName ?? this.overlayClassName;\r\n this.isColorCodeLabelNeeded =\r\n this.config?.isColorCodeLabelNeeded ?? this.isColorCodeLabelNeeded;\r\n this.isArrowIconNeeded =\r\n this.config?.isArrowIconNeeded ?? this.isArrowIconNeeded;\r\n this.canHideTextInput =\r\n this.config?.canHideTextInput ?? this.canHideTextInput;\r\n this.canHideColorPicker =\r\n this.config?.canHideColorPicker ?? this.canHideColorPicker;\r\n }\r\n this.group.get(this.config.controlName)?.setValue(this.defaultColor);\r\n }\r\n /**\r\n * Sets the color to form group control.\r\n * @memberof ColorPickerComponent\r\n * @param {string} color\r\n * @returns {void}\r\n */\r\n inputChange(color: string): void {\r\n this.defaultColor = color;\r\n this.group?.get(this.config?.controlName)?.setValue(color);\r\n this.colorPickerChange.emit(color);\r\n }\r\n /**\r\n * Sets canShowPalette to true when the palette is opened.\r\n * @memberof ColorPickerComponent\r\n * @returns {void}\r\n */\r\n onOpenPalette(): void {\r\n this.canShowPalette = true;\r\n this.colorPickerEventHandlers(true);\r\n }\r\n /**\r\n * Sets canShowPalette to false when the palette is closed.\r\n * @memberof ColorPickerComponent\r\n * @returns {void}\r\n */\r\n onClosePalette(): void {\r\n this.canShowPalette = false;\r\n this.elementRef?.nativeElement\r\n ?.querySelector('.ieeesa-color-picker__toggle-icon')\r\n ?.focus();\r\n }\r\n /**\r\n * Gets triggered when the the alpha, hue or Lightness sliders are changed\r\n * @param {string} color\r\n */\r\n onSliderChange(color: string) {\r\n this.colorPickerSliderChange.emit(color);\r\n }\r\n /**\r\n * Toggles the palette panel.\r\n * @memberof ColorPickerComponent\r\n * @returns {void}\r\n */\r\n togglePalette(): void {\r\n this.canShowPalette = !this.canShowPalette;\r\n if (this.canShowPalette) this.colorPickerDirective?.openPanel();\r\n else this.colorPickerDirective?.closePanel();\r\n }\r\n /**\r\n * Listening the color picker events to achieve the accessibility for color palette.\r\n * canAddListener false remove the event listeners which we calls in ngDestroy,\r\n * canAddListener true adding the event listeners while opening the color palette.\r\n * @memberof ColorPickerComponent\r\n * @param {boolean} canAddListener\r\n * @returns {void}\r\n */\r\n colorPickerEventHandlers(canAddListener: boolean): void {\r\n this.paletteContainer =\r\n this.colorPickerDirective?.panelRef?.location?.nativeElement?.querySelector(\r\n 'ngx-colors-panel .opened'\r\n ) as HTMLElement;\r\n setTimeout(() => {\r\n if (this.paletteContainer) {\r\n this.paletteContainer.role = 'application';\r\n this.paletteContainer.tabIndex = 0;\r\n this.paletteContainer.ariaLabel = this.colorPickerTexts?.ariaLabel?.palette;\r\n const colorPallettes = this.paletteContainer.querySelectorAll(\r\n '.colors .circle.wrapper.color'\r\n );\r\n const moreColorsArrowButton = this.paletteContainer.querySelector(\r\n '.colors .circle.button'\r\n ) as HTMLElement;\r\n const lastElement = this.paletteContainer.querySelector(\r\n '.g-input input'\r\n ) as HTMLElement;\r\n if (colorPallettes?.length) {\r\n const colorPallettesList = Array.from(\r\n colorPallettes\r\n ) as HTMLElement[];\r\n colorPallettesList.push(moreColorsArrowButton);\r\n colorPallettesList.push(lastElement);\r\n const keyDownHandlerForColorPalettes = (event: KeyboardEvent) => {\r\n this.colorPickerKeyDownHandler(colorPallettesList, event);\r\n };\r\n colorPallettesList?.forEach((element: HTMLElement, index) => {\r\n if (index !== colorPallettesList?.length - 1) {\r\n element.tabIndex = 0;\r\n element.role = 'button';\r\n element.ariaLabel = this.paletteColors[index]?.name;\r\n } else {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.hexCodeInput;\r\n }\r\n if (index === 0) element.focus();\r\n if (index === colorPallettesList?.length - 2) {\r\n element.ariaLabel = this.colorPickerTexts?.ariaLabel?.next;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const clickHandlerForMoreColorsButton = (event: any) => {\r\n setTimeout(() => {\r\n const list =\r\n this.paletteContainer?.querySelector('.nav-wrapper')?.childNodes;\r\n const gradientButtons: HTMLElement[] = [];\r\n list?.forEach((element) =>\r\n gradientButtons.push(element as HTMLElement)\r\n );\r\n if (gradientButtons?.length) {\r\n const lastElement = this.paletteContainer.querySelector(\r\n '.g-input input'\r\n ) as HTMLElement;\r\n gradientButtons.push(lastElement);\r\n gradientButtons?.forEach(\r\n (element: HTMLElement, index: number) => {\r\n if (index === 0) {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.back;\r\n element.focus();\r\n const clickHandlerForGradientPreviousButton = (\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n event: any\r\n ) => {\r\n this.onOpenPalette();\r\n event.preventDefault();\r\n };\r\n const keyDownHandlerForGradientButtons = (\r\n event: KeyboardEvent\r\n ) => {\r\n this.colorPickerKeyDownHandler(\r\n gradientButtons,\r\n event\r\n );\r\n };\r\n element?.removeEventListener(\r\n 'click',\r\n clickHandlerForGradientPreviousButton\r\n );\r\n element?.removeEventListener(\r\n 'keydown',\r\n clickHandlerForGradientPreviousButton\r\n );\r\n if (canAddListener) {\r\n element?.addEventListener(\r\n 'click',\r\n clickHandlerForGradientPreviousButton\r\n );\r\n element?.addEventListener(\r\n 'keydown',\r\n keyDownHandlerForGradientButtons\r\n );\r\n }\r\n }\r\n element.role = 'button';\r\n element.tabIndex = 0;\r\n if (\r\n element?.innerText?.trim() ===\r\n this.colorPickerTexts?.label?.select\r\n ) {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.select;\r\n element?.classList?.add('select');\r\n } else if (\r\n element?.innerText?.trim() ===\r\n this.colorPickerTexts?.label?.cancel\r\n ) {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.cancel;\r\n element?.classList?.add('cancel');\r\n }\r\n if (index === gradientButtons?.length - 1) {\r\n element.role = '';\r\n }\r\n }\r\n );\r\n }\r\n event.preventDefault();\r\n }, 250);\r\n };\r\n element.removeEventListener(\r\n 'click',\r\n clickHandlerForMoreColorsButton\r\n );\r\n if (canAddListener) {\r\n element.addEventListener(\r\n 'click',\r\n clickHandlerForMoreColorsButton\r\n );\r\n }\r\n }\r\n element.removeEventListener(\r\n 'keydown',\r\n keyDownHandlerForColorPalettes\r\n );\r\n if (canAddListener) {\r\n element.addEventListener(\r\n 'keydown',\r\n keyDownHandlerForColorPalettes\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }, 250);\r\n }\r\n /**\r\n * Listens keydown event handles to make the palette focusable.\r\n * @memberof ColorPickerComponent\r\n * @param {HTMLElement[]} colorPallettesList\r\n * @param {KeyboardEvent} event\r\n * @returns {void}\r\n */\r\n colorPickerKeyDownHandler(\r\n colorPallettesList: HTMLElement[],\r\n event: KeyboardEvent\r\n ): void {\r\n const firstElement = colorPallettesList[0];\r\n const lastElement = colorPallettesList[colorPallettesList.length - 1];\r\n if (event.code === 'Tab') {\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstElement) {\r\n lastElement.focus();\r\n event.preventDefault();\r\n }\r\n } else if (document.activeElement === lastElement) {\r\n if (this.paletteContainer?.querySelector('.nav-wrapper')) {\r\n (\r\n this.paletteContainer?.querySelector('.nav-wrapper')\r\n ?.childNodes[0] as HTMLElement\r\n ).focus();\r\n } else firstElement.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n if (event.code === 'Space' || event.code === 'Enter') {\r\n const targetElement = event.target as HTMLElement;\r\n if (targetElement?.classList?.contains('button'))\r\n targetElement?.dispatchEvent(new Event('click'));\r\n else targetElement?.firstChild?.dispatchEvent(new Event('click'));\r\n event.preventDefault();\r\n }\r\n }\r\n /**\r\n * Removing the active listeners while component get destroyed.\r\n */\r\n ngOnDestroy() {\r\n this.colorPickerEventHandlers(false);\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n/**\r\n * Checks the text is truncated\r\n * @export\r\n * @class TextTruncatedDirective\r\n */\r\n@Directive({\r\n selector: '[matTooltip][ieeesaTextTruncated]',\r\n standalone: true,\r\n})\r\nexport class TextTruncatedDirective {\r\n @Input() elementClassNameToAddTooltip!: string;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public tooltip: MatTooltip,\r\n // eslint-disable-next-line no-unused-vars\r\n public elementRef: ElementRef<HTMLElement> // eslint-disable-next-line no-empty-function\r\n ) {}\r\n @HostListener('mouseenter') mouseOver() {\r\n this.showTooltip();\r\n }\r\n @HostListener('mouseleave') mouseOut() {\r\n this.hideTooltip();\r\n }\r\n @HostListener('touchstart') touchStart() {\r\n this.showTooltip();\r\n }\r\n @HostListener('touchend') touchEnd() {\r\n this.hideTooltip();\r\n }\r\n /**\r\n * Shows the tooltip based on text overflow exists or not\r\n * @memberof TextTruncatedDirective\r\n */\r\n showTooltip() {\r\n const element = this.elementClassNameToAddTooltip\r\n ? (this.elementRef?.nativeElement.querySelector(\r\n this.elementClassNameToAddTooltip\r\n ) as HTMLElement)\r\n : this.elementRef?.nativeElement;\r\n this.tooltip.disabled = element?.scrollWidth <= element?.clientWidth;\r\n }\r\n /**\r\n * Disables the tooltip\r\n * @memberof TextTruncatedDirective\r\n */\r\n hideTooltip() {\r\n this.tooltip.disabled = true;\r\n }\r\n}\r\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatAutocompleteModule,\r\n MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n MatAutocompleteTrigger,\r\n} from '@angular/material/autocomplete';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { map, takeUntil, debounceTime } from 'rxjs/operators';\r\nimport * as autocompleteConstInfo from '../../assets/constants.json';\r\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { SelectOption } from '@ieeesa-npm/models';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { TextTruncatedDirective } from '../../directives/text-truncated/text-truncated.directive';\r\n/**\r\n * MultiSelectAutocompleteComponent allows to search the option(s) from the list and select the option(s) from the autocomplete search results.\r\n * @class MultiSelectAutocompleteComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n * @implements {OnDestroy}\r\n * @implements {AfterViewInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-multi-select-autocomplete',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n MatOptionModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatChipsModule,\r\n MatTooltipModule,\r\n TextTruncatedDirective,\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n useValue: {\r\n overlayPanelClass: 'ieeesa-multi-select-autocomplete-overlay-panel',\r\n },\r\n },\r\n ],\r\n templateUrl: './multi-select-autocomplete.component.html',\r\n styleUrls: ['./multi-select-autocomplete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MultiSelectAutocompleteComponent\r\n implements OnInit, FormField, OnDestroy, AfterViewInit\r\n{\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n selectedOptions: SelectOption[] = [];\r\n autoCompleteOptionList!: AutoCompleteOption[];\r\n /**\r\n * Sets the options for multi select autocomplete.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n @Input()\r\n set multiSelectAutoCompleteOptions(value: AutoCompleteOption[]) {\r\n this.autoCompleteOptionList = value;\r\n }\r\n /**\r\n * Returns the autocomplete options list.\r\n * @readonly\r\n * @type {AutoCompleteOption[]}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n get multiSelectAutoCompleteOptions(): AutoCompleteOption[] {\r\n return this.autoCompleteOptionList;\r\n }\r\n @Output() multiSelectAutoCompleteSearchValue = new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteClearSearchValue =\r\n new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteOptionsSelected = new EventEmitter<\r\n AutoCompleteOption[]\r\n >();\r\n @ViewChild('multiSelectAutoComplete') multiSelectAutoComplete!: ElementRef;\r\n @ViewChild('autocompleteTrigger') matACTrigger!: MatAutocompleteTrigger;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n autocompleteConstInfo: any = autocompleteConstInfo;\r\n removeIconURL =\r\n this.autocompleteConstInfo?.multiSelectAutoComplete?.icons?.remove;\r\n clearAllIconURL =\r\n this.autocompleteConstInfo?.multiSelectAutoComplete?.icons?.clearAll;\r\n clearAll =\r\n this.autocompleteConstInfo?.multiSelectAutoComplete?.label.clearAll;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n private readonly changeDetectorRef: ChangeDetectorRef // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize components instance properties.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n ngOnInit(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'multiSelectAutocomplete',\r\n FormControlType.AUTO_COMPLETE\r\n );\r\n this.group =\r\n this.group ??\r\n this.formUtilityService.getFormGroup('multiSelectAutocomplete');\r\n this.multiSelectAutoCompleteOptions =\r\n this.config?.multiSelectAutoCompleteOptions ??\r\n this.multiSelectAutoCompleteOptions;\r\n if (this.config?.value) this.selectedOptions = this.config?.value;\r\n }\r\n\r\n /**\r\n * Initialize the form control change event once the form control is ready on ngAfterViewInit by calling onValueChanges method.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.selectedOptions?.length)\r\n this.group?.get(this.config?.controlName)?.setErrors(null);\r\n this.onValueChanges();\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Emits an multiSelectAutoCompleteSearchValue change event when the value is changed and value is greater than minCharToSearch or equal to zero.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n onValueChanges(): void {\r\n // Search is driven off the raw keyup stream (not the reactive control's\r\n // valueChanges) so type-ahead keeps working even when the control uses\r\n // updateOn: 'blur' (which defers valueChanges until blur). Below the min\r\n // character count we emit the clear-search event; at/above it we emit the\r\n // search value so the parent fetches options.\r\n fromEvent(this.multiSelectAutoComplete?.nativeElement, 'keyup')\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => event?.target?.value ?? ''),\r\n debounceTime(this.autocompleteConstInfo?.autocomplete?.debounceTime)\r\n )\r\n .subscribe((text: string) => {\r\n const minChar =\r\n this.autocompleteConstInfo?.autocomplete?.minCharToSearch;\r\n if (text === '') {\r\n this.handleFieldError();\r\n this.multiSelectAutoCompleteClearSearchValue.emit(text);\r\n } else if (text.length < minChar) {\r\n this.multiSelectAutoCompleteClearSearchValue.emit(text);\r\n } else {\r\n this.multiSelectAutoCompleteSearchValue.emit(text);\r\n }\r\n });\r\n\r\n // valueChanges still handles the empty-reset case (e.g. programmatic clears\r\n // and the blur-flushed control value) to re-sync field validity.\r\n this.group?.controls[this.config?.controlName]?.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((value: string | SelectOption[]) => {\r\n // Only react to the empty-string transition (user cleared the typed\r\n // text). Do NOT also match an empty array: handleFieldError() itself\r\n // calls setValue(this.selectedOptions) — which is [] when empty — and\r\n // would re-enter this branch and recurse until a stack overflow. The\r\n // validators already handle the empty-array case.\r\n if (value === '') {\r\n this.handleFieldError();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles field error by setting the appropriate form control errors.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n handleFieldError(): void {\r\n this.group?.controls[this.config?.controlName]?.setValue(\r\n this.selectedOptions\r\n );\r\n if (this.selectedOptions?.length) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n required: false,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Adds a newly entered option to the selectedOptions array.\r\n * @param {*} event -The event containing the input and value.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n add(event: MatChipInputEvent): void {\r\n if (this.autoCompleteOptionList.length) return;\r\n const control = this.group?.get(this.config?.controlName);\r\n const input = event?.chipInput?.inputElement;\r\n const value = (event?.value || '').trim();\r\n if (value.length === 0) return;\r\n // Validate the raw token before accepting it. With updateOn: 'blur' the\r\n // control's errors are not computed while the input is focused, so we must\r\n // flush validation against the typed value (rather than read stale/absent\r\n // control.errors) — otherwise out-of-bounds free text would be added and\r\n // then skipped by skipWhenArray once it becomes a selection.\r\n control?.setValue(value, { emitEvent: false });\r\n control?.updateValueAndValidity({ emitEvent: false });\r\n const minLength = control?.errors?.['minlength']?.requiredLength;\r\n const maxLength = control?.errors?.['maxlength']?.requiredLength;\r\n if (\r\n (value.length >= minLength && value.length <= maxLength) ||\r\n (minLength === undefined && maxLength === undefined)\r\n ) {\r\n this.selectedOptions.push({ id: '', name: value });\r\n if (input) input.value = '';\r\n // Also reset the reactive control so the search text is fully cleared\r\n // after an Enter-added org (parity with the dropdown-select path).\r\n this.clearSearchInput();\r\n this.formatSelectedOption(this.selectedOptions);\r\n }\r\n }\r\n /**\r\n * Removes a selected option from the selectedOptions array.\r\n * @param {SelectOption} removedOption -The option to remove.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n onOptionRemoved(removedOption: SelectOption): void {\r\n const index = this.selectedOptions?.findIndex(\r\n (option: SelectOption) => option.id === removedOption.id\r\n );\r\n if (index >= 0) {\r\n this.selectedOptions?.splice(index, 1);\r\n }\r\n if (this.selectedOptions?.length === 0) {\r\n this.group.value[this.config?.controlName] = '';\r\n this.group?.controls[this.config?.controlName].setValue('');\r\n this.selectedOptions = [];\r\n this.autoCompleteOptionList = [];\r\n this.handleFieldError();\r\n }\r\n this.formatSelectedOption(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * Handles the selection of an autocomplete option.\r\n * @param {AutoCompleteOption} option -The selected autocomplete option.\r\n * @return {AutoCompleteOption}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange(option: any): AutoCompleteOption {\r\n const value = option?.value;\r\n if (this.isCheckboxSelected(value)) {\r\n this.onOptionRemoved(value);\r\n } else {\r\n this.selectedOptions.push(value);\r\n }\r\n this.formatSelectedOption(this.selectedOptions);\r\n requestAnimationFrame(() => {\r\n // Clear the typed search term after selection so the input is empty and\r\n // ready for the next search, while the selection remains as a chip.\r\n // Done here (inside rAF) so it runs after Material's [displayWith] writes\r\n // the option's display value back into the input on optionSelected.\r\n this.clearSearchInput();\r\n this.multiSelectAutoComplete?.nativeElement.focus();\r\n });\r\n // Drop the previously fetched options so the dropdown does not re-open with\r\n // stale results when the user clicks back into the now-empty input. Deferred\r\n // to a macrotask so it runs AFTER Material has fully finished processing this\r\n // selection (clearing it earlier desyncs the option/checkbox state and drops\r\n // the chip). The list repopulates from the parent search on the next keystroke.\r\n setTimeout(() => {\r\n this.autoCompleteOptionList = [];\r\n });\r\n return value;\r\n }\r\n\r\n /**\r\n * Clears the typeahead search text from both the reactive form control and the\r\n * native input element without touching the selected chips. Uses\r\n * `emitEvent: false` so the valueChanges search stream is not re-triggered.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n private clearSearchInput(): void {\r\n // Clear only the visible search text in the native input. The reactive\r\n // control's value must stay bound to the selected options (chips), so we do\r\n // NOT set it to '' here — that would drop the selection and re-trigger the\r\n // required validator. handleFieldError() re-syncs the control value to\r\n // selectedOptions and clears the required error when chips exist.\r\n if (this.multiSelectAutoComplete?.nativeElement) {\r\n this.multiSelectAutoComplete.nativeElement.value = '';\r\n }\r\n this.handleFieldError();\r\n }\r\n\r\n /**\r\n * Fires when focus leaves the search input (click outside / tab away). If text\r\n * was typed but never committed as a chip (i.e. nothing was picked from the\r\n * dropdown), clear it so stale search text is not left behind. Deferred with a\r\n * short timeout so that if the blur was caused by clicking a dropdown option,\r\n * onChange commits the selection first (and has already cleared the text),\r\n * making this a no-op in that case. Clicking back into the same field does not\r\n * blur it, so the text is preserved while the user is still editing.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n onInputBlur(): void {\r\n setTimeout(() => {\r\n const hasLeftoverText =\r\n !!this.multiSelectAutoComplete?.nativeElement?.value?.trim();\r\n if (hasLeftoverText) {\r\n this.clearSearchInput();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Formats the selected options and emits the multiSelectAutoCompleteOptionSelected event.\r\n * @param {SelectOption[]} selectedOptions -Array of selected options.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n formatSelectedOption(selectedOptions: SelectOption[]) {\r\n const formattedOptions = selectedOptions?.map((option) => {\r\n return {\r\n id: option.id,\r\n name: option.name,\r\n };\r\n });\r\n this.multiSelectAutoCompleteOptionsSelected?.emit(formattedOptions);\r\n }\r\n\r\n /**\r\n * Displays the name of the option\r\n * @param {AutoCompleteOption} option\r\n * @return {*} {string}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n displayOptionName(option: AutoCompleteOption): string {\r\n return option?.name ? option.name : '';\r\n }\r\n\r\n /**\r\n * Tracks the option by its index or id.\r\n * @param {number} index\r\n * @param {SelectOption} option\r\n * @return {*} {(number | string)}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n trackByFn(index: number, option: SelectOption): number | string {\r\n return option.id;\r\n }\r\n\r\n /**\r\n * Checks if the checkbox is selected.\r\n * @param {AutoCompleteOption} option\r\n * @return {*} {boolean}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n isCheckboxSelected(option: AutoCompleteOption): boolean {\r\n return this.selectedOptions?.some((item) => item.id === option.id);\r\n }\r\n\r\n /**\r\n * Clears all selected options.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n clearSelections(): void {\r\n this.group.value[this.config?.controlName] = '';\r\n this.group?.controls[this.config?.controlName].setValue('');\r\n this.selectedOptions = [];\r\n this.autoCompleteOptionList = [];\r\n this.formatSelectedOption(this.selectedOptions);\r\n this.handleFieldError();\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-multi-select-autocomplete\"\r\n [formGroup]=\"group\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-multi-select-autocomplete-field__label-left'\r\n : 'ieeesa-multi-select-autocomplete-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-multi-select-autocomplete__label\"\r\n >{{ config.label }}</mat-label\r\n >\r\n <mat-form-field\r\n class=\"ieeesa-multi-select-autocomplete__mat-form-field\"\r\n appearance=\"outline\"\r\n >\r\n <mat-chip-grid\r\n #chipGrid\r\n [attr.aria-label]=\"autocompleteConstInfo?.multiSelectAutoComplete?.ariaLabel?.selectedOptions\"\r\n >\r\n <mat-chip-row\r\n *ngFor=\"let option of selectedOptions; trackBy: trackByFn\"\r\n [attr.aria-label]=\"option?.name\"\r\n [removable]=\"true\"\r\n (removed)=\"onOptionRemoved(option)\"\r\n >\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"option.name\"\r\n class=\"ieeesa-label-lg-bold-16 m-0\"\r\n >\r\n {{ option.name }}\r\n </p>\r\n <button\r\n matChipRemove\r\n [attr.aria-label]=\"autocompleteConstInfo?.multiSelectAutoComplete?.ariaLabel?.removeOption + option.name\"\r\n >\r\n <svg class=\"ieeesa-chip__svg-avatar\" matChipAvatar>\r\n <use [attr.xlink:href]=\"removeIconURL\"></use>\r\n </svg>\r\n </button>\r\n </mat-chip-row>\r\n </mat-chip-grid>\r\n <input\r\n matInput\r\n class=\"ieeesa-multi-select-autocomplete__input ieeesa-title-sm-16\"\r\n [matAutocomplete]=\"matAutocomplete\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n #multiSelectAutoComplete\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n (blur)=\"onInputBlur()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n />\r\n <mat-autocomplete\r\n #matAutocomplete=\"matAutocomplete\"\r\n (optionSelected)=\"onChange($event.option)\"\r\n [displayWith]=\"displayOptionName\"\r\n class=\"ieeesa-multi-select-autocomplete__autocomplete-list\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of autoCompleteOptionList; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n <mat-checkbox color=\"primary\" [checked]=\"isCheckboxSelected(option)\">\r\n </mat-checkbox>\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n [matTooltip]=\"clearAll\"\r\n [attr.aria-label]=\"autocompleteConstInfo.ariaLabel.clear\"\r\n *ngIf=\"selectedOptions.length > 0\"\r\n (click)=\"clearSelections()\"\r\n >\r\n <svg class=\"ieeesa-multi-select-autocomplete__svg-clear-all\">\r\n <use [attr.xlink:href]=\"clearAllIconURL\"></use>\r\n </svg>\r\n </button>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ieeesaObserveDomChange]',\r\n standalone: true,\r\n})\r\nexport class ObserveDomChangeDirective implements OnInit, OnDestroy {\r\n observer!: MutationObserver;\r\n @Input() isSubTreeAttributeNeeded = false;\r\n @Input() observedElementClassName!: string;\r\n @Output()\r\n public domChange = new EventEmitter();\r\n @Output() domNodesChange = new EventEmitter<MutationRecord[]>();\r\n\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * Observes the dom changes and emits dom change event.\r\n * @memberof ObserveDomChangeDirective\r\n */\r\n ngOnInit(): void {\r\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations?.forEach((mutation: MutationRecord) =>\r\n this.domChange?.emit(mutation)\r\n );\r\n this.domNodesChange.emit(mutations);\r\n });\r\n this.observer?.observe(\r\n this.observedElementClassName\r\n ? this.elementRef?.nativeElement.querySelector(\r\n this.observedElementClassName\r\n )\r\n : this.elementRef?.nativeElement,\r\n {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: this.isSubTreeAttributeNeeded,\r\n }\r\n );\r\n }\r\n /**\r\n * Disconnects the observer when the directive is destroyed.\r\n * @memberof ObserveDomChangeDirective\r\n */\r\n ngOnDestroy(): void {\r\n this.observer?.disconnect();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport {\r\n EditorConfig,\r\n NgxSimpleTextEditorModule,\r\n ST_BUTTONS,\r\n} from 'ngx-simple-text-editor';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { ObserveDomChangeDirective } from '../../directives/observe-dom-change/observe-dom-change.directive';\r\n\r\n@Component({\r\n selector: 'ieeesa-rich-text-editor',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NgxSimpleTextEditorModule,\r\n MatFormFieldModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n ObserveDomChangeDirective,\r\n ],\r\n templateUrl: './rich-text-editor.component.html',\r\n styleUrls: ['./rich-text-editor.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class RichTextEditorComponent implements OnInit, AfterViewInit {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n richTextEditorTexts: any = constants?.richTextEditor;\r\n group!: FormGroup;\r\n config!: FieldConfig;\r\n contentElementClassName = '.st-area';\r\n @ViewChild('editor') rtEditor!: ElementRef;\r\n private editorContentValue = '';\r\n @Input() set value(value: string) {\r\n this.editorContentValue = value;\r\n if (this.group)\r\n this.group.get(this.config.controlName)?.setValue(this.value);\r\n }\r\n get value(): string {\r\n return this.editorContentValue;\r\n }\r\n @Input() editorLabel = this.richTextEditorTexts?.label?.editor;\r\n @Input() formControlName = 'richTextEditor';\r\n @Input() isEditorLabelNeeded = true;\r\n private editorConfigInfo: EditorConfig = {\r\n placeholder: '',\r\n buttons: [],\r\n };\r\n /**\r\n * Sets the editor config info.\r\n * @param {EditorConfig} editorConfig\r\n * @memberof RichTextEditorComponent\r\n */\r\n @Input() set editorConfig(editorConfig: EditorConfig) {\r\n this.editorConfigInfo = editorConfig;\r\n if (editorConfig?.buttons?.length) {\r\n this.editorConfigInfo.buttons = editorConfig?.buttons;\r\n this.setToolbarButtonType();\r\n } else {\r\n this.editorConfigInfo.buttons = ST_BUTTONS;\r\n }\r\n }\r\n /**\r\n * Returns the editor config info.\r\n * @returns {EditorConfig}\r\n * @memberof RichTextEditorComponent\r\n */\r\n get editorConfig(): EditorConfig {\r\n return this.editorConfigInfo;\r\n }\r\n @Output() richTextEditorContentChange = new EventEmitter<string>();\r\n colorPickerInput!: HTMLInputElement;\r\n colorPickerButton!: HTMLElement;\r\n operatingSystemName!: string;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private elementRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private renderer: Renderer2,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n /**\r\n * Initializes the form group and config details.\r\n * @memberof RichTextEditorComponent\r\n */\r\n ngOnInit(): void {\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.RICH_TEXT_EDITOR\r\n );\r\n if (this.config) {\r\n this.editorLabel = this.config?.label ?? this.editorLabel;\r\n this.value = this.config?.value ?? this.value;\r\n this.editorConfig.buttons = this.config.editorConfig?.buttons?.length\r\n ? this.config.editorConfig?.buttons\r\n : this.editorConfig?.buttons;\r\n }\r\n this.group.get(this.config.controlName)?.setValue(this.value);\r\n this.operatingSystemName = this.getOperatingSystemName();\r\n }\r\n /**\r\n * Sets RTE toolbar buttons button type to button.\r\n * @returns {void}\r\n * @memberof RichTextEditorComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.setToolbarButtonType();\r\n if (['Mac OS', 'iOS']?.includes(this.operatingSystemName)) {\r\n this.setColorPickerInputStyle();\r\n }\r\n }\r\n\r\n /**\r\n * Sets the height and width of the input field color to open the color picker in Safari.\r\n * @memberof RichTextEditorComponent\r\n * @returns {void}\r\n */\r\n setColorPickerInputStyle(): void {\r\n this.colorPickerInput?.removeAttribute('onmousedown');\r\n this.colorPickerInput?.removeAttribute('onselectstart');\r\n this.colorPickerButton = this.elementRef?.nativeElement?.querySelector(\r\n 'st-color-picker button'\r\n ) as HTMLButtonElement;\r\n if (this.colorPickerButton) {\r\n this.renderer?.setStyle(this.colorPickerButton, 'position', 'relative');\r\n this.renderer?.setStyle(this.colorPickerButton, 'width', '130px');\r\n }\r\n if (this.colorPickerInput) {\r\n this.renderer?.setStyle(this.colorPickerInput, 'width', '130px');\r\n this.renderer?.setStyle(this.colorPickerInput, 'height', '34px');\r\n this.renderer?.setStyle(this.colorPickerInput, 'opacity', '0');\r\n this.renderer?.setStyle(this.colorPickerInput, 'position', 'absolute');\r\n this.renderer?.setStyle(this.colorPickerInput, 'left', '0');\r\n this.renderer?.setStyle(this.colorPickerInput, 'top', '0');\r\n }\r\n const paletteIcon =\r\n this.elementRef?.nativeElement?.querySelector('st-color-picker i');\r\n if (paletteIcon) {\r\n this.renderer?.setStyle(paletteIcon, 'position', 'absolute');\r\n this.renderer?.setStyle(paletteIcon, 'left', '90px');\r\n this.renderer?.setStyle(paletteIcon, 'top', '12px');\r\n this.renderer?.setStyle(paletteIcon, 'padding-left', '10px');\r\n }\r\n }\r\n\r\n /**\r\n * Sets RTE toolbar buttons button type to button to prevent form submit event when the toolbar buttons clicked.\r\n */\r\n setToolbarButtonType(): void {\r\n const editorToolbar = this.elementRef?.nativeElement?.querySelectorAll(\r\n '.st-toolbar button'\r\n ) as HTMLElement[];\r\n editorToolbar?.forEach((toolBarButton: HTMLElement) => {\r\n this.renderer?.setAttribute(toolBarButton, 'type', 'button');\r\n });\r\n this.colorPickerInput = this.elementRef?.nativeElement?.querySelector(\r\n '.st-toolbar input.st-color-picker'\r\n ) as HTMLInputElement;\r\n if (this.colorPickerInput)\r\n this.renderer?.setAttribute(\r\n this.colorPickerInput,\r\n 'aria-label',\r\n this.richTextEditorTexts?.ariaLabel?.colorPicker\r\n );\r\n }\r\n /**\r\n * Emits the typed editor content to consuming components.\r\n * @returns {void}\r\n * @memberof RichTextEditorComponent\r\n */\r\n onRichTextEditorContentChange(): void {\r\n const richTextEditorElement = this.elementRef?.nativeElement.querySelector(\r\n this.contentElementClassName\r\n ) as HTMLElement;\r\n if (richTextEditorElement)\r\n this.richTextEditorContentChange.emit(richTextEditorElement.innerHTML);\r\n }\r\n /**\r\n * Gets the operating system name of the client machine.\r\n * @memberof RichTextEditorComponent\r\n * @returns {string}\r\n */\r\n getOperatingSystemName(): string {\r\n const userAgent = window.navigator.userAgent,\r\n platform =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window.navigator as any)?.userAgentData?.platform ||\r\n window.navigator.platform,\r\n macosPlatforms = ['macOS', 'Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\r\n let os = '';\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (/Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n return os;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-rich-text-editor__label-left'\r\n : 'ieeesa-rich-text-editor__label-top'\r\n \"\r\n class=\"ieeesa-rich-text-editor\"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-rich-text-editor__label\"\r\n *ngIf=\"isEditorLabelNeeded\"\r\n >{{ editorLabel }}</mat-label\r\n >\r\n <st-editor\r\n [config]=\"editorConfig\"\r\n [ariaLabel]=\"richTextEditorTexts?.ariaLabel.editor\"\r\n [formControlName]=\"config.controlName\"\r\n ieeesaObserveDomChange \r\n [observedElementClassName]=\"contentElementClassName\" \r\n [isSubTreeAttributeNeeded]=\"true\"\r\n (domNodesChange)=\"onRichTextEditorContentChange()\"\r\n ></st-editor>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"></ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n ComponentRef,\r\n Directive,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { InputComponent } from '../../components/input/input.component';\r\nimport { AutocompleteComponent } from '../../components/autocomplete/autocomplete.component';\r\nimport { CheckboxComponent } from '../../components/checkbox/checkbox.component';\r\nimport { DatePickerComponent } from '../../components/date-picker/date-picker.component';\r\nimport { RadioComponent } from '../../components/radio/radio.component';\r\nimport { SearchComponent } from '../../components/search/search.component';\r\nimport { SelectComponent } from '../../components/select/select.component';\r\nimport { TextAreaComponent } from '../../components/text-area/text-area.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { CheckboxOption } from '@ieeesa-npm/models';\r\nimport { AddFormGroupComponent } from '../../components/add-form-group/add-form-group.component';\r\nimport { TimePickerComponent } from '../../components/time-picker/time-picker.component';\r\nimport { SelectedDate } from '../../models/selected-date.model';\r\nimport { SelectedTime } from '../../models/selected-time.model';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\nimport { SlideToggleComponent } from '../../components/slide-toggle/slide-toggle.component';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\nimport { FileUploadComponent } from '../../components/file-upload/file-upload.component';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\nimport { ColorPickerComponent } from '../../components/color-picker/color-picker.component';\r\nimport { RadioOption } from '../../models/radio-option.model';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\nimport { MultiSelectAutocompleteComponent } from '../../components/multi-select-autocomplete/multi-select-autocomplete.component';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { RichTextEditorComponent } from '../../components/rich-text-editor/rich-text-editor.component';\r\nimport { FileUploadStatus } from '../../models/file-upload-status.model';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\n\r\nconst components: { [type: string]: Type<FormField> } = {\r\n [FormControlType.INPUT]: InputComponent,\r\n [FormControlType.TEXT_AREA]: TextAreaComponent,\r\n [FormControlType.SELECT]: SelectComponent,\r\n [FormControlType.SEARCH]: SearchComponent,\r\n [FormControlType.DATE]: DatePickerComponent,\r\n [FormControlType.CHECKBOX]: CheckboxComponent,\r\n [FormControlType.RADIO]: RadioComponent,\r\n [FormControlType.AUTO_COMPLETE]: AutocompleteComponent,\r\n [FormControlType.ADD_FORM_GROUP]: AddFormGroupComponent,\r\n [FormControlType.TIME_PICKER]: TimePickerComponent,\r\n [FormControlType.SLIDE_TOGGLE]: SlideToggleComponent,\r\n [FormControlType.COLOR_PICKER]: ColorPickerComponent,\r\n [FormControlType.FILE_UPLOAD]: FileUploadComponent,\r\n [FormControlType.MULTI_SELECT_AUTO_COMPLETE]:\r\n MultiSelectAutocompleteComponent,\r\n [FormControlType.RICH_TEXT_EDITOR]: RichTextEditorComponent,\r\n};\r\n\r\n/**\r\n * Provides the implementation of DynamicFormFieldDirective which hosts and creates the form fields components dynamically.\r\n * @export\r\n * @class DynamicFormFieldDirective\r\n * @implements {FormField}\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Directive({\r\n selector: '[ieeesaDynamicFormField]',\r\n standalone: true,\r\n})\r\nexport class DynamicFormFieldDirective implements FormField, OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n private _config!: FieldConfig;\r\n private _group!: FormGroup;\r\n /**\r\n * Sets the form field configuration\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n set config(value: FieldConfig) {\r\n this._config = value;\r\n if (this.component) {\r\n this.loadComponent();\r\n }\r\n }\r\n get config(): FieldConfig {\r\n return this._config;\r\n }\r\n\r\n /**\r\n * Sets the form group\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n set group(value: FormGroup) {\r\n if (this.component?.instance) {\r\n this.component.instance.group = value;\r\n }\r\n this._group = value;\r\n }\r\n get group(): FormGroup {\r\n return this._group;\r\n }\r\n private _fileUploadStatus!: FileUploadStatus;\r\n\r\n @Input() get fileUploadStatus(): FileUploadStatus {\r\n return this._fileUploadStatus;\r\n }\r\n set fileUploadStatus(value: FileUploadStatus) {\r\n if (this.component?.instance) {\r\n this.component.instance.fileUploadStatus = value;\r\n }\r\n this._fileUploadStatus = value;\r\n }\r\n\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n if (this.component?.instance) {\r\n this.component.instance.fileUploadStatus = value;\r\n }\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _submitResponse!: any;\r\n /**\r\n * Sets the submit response of form submit event\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set submitResponse(value: any) {\r\n if (this.component?.instance) {\r\n this.component.instance.submitResponse = value;\r\n }\r\n this._submitResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get submitResponse(): any {\r\n return this._submitResponse;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _searchResponse!: any;\r\n /**\r\n * Sets the form search response of form search apply.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set searchResponse(value: any) {\r\n if (this.component?.instance) {\r\n this.component.instance.searchResponse = value;\r\n }\r\n this._searchResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get searchResponse(): any {\r\n return this._searchResponse;\r\n }\r\n\r\n @Output() formSearchApply = new EventEmitter<Event>();\r\n @Output() formDropdownSelected = new EventEmitter<Event>();\r\n @Output() formDateSelected = new EventEmitter<SelectedDate>();\r\n @Output() formTimeSelected = new EventEmitter<SelectedTime>();\r\n @Output() formSelectedDateRange = new EventEmitter<{\r\n startDate: string;\r\n endDate: string;\r\n }>();\r\n @Output() formSelectSearch = new EventEmitter<{\r\n searchEvent: Event;\r\n controlName: string;\r\n }>();\r\n @Output() formAutoCompleteSearch = new EventEmitter<string>();\r\n @Output() autoCompleteClearSearchValue = new EventEmitter<string>();\r\n @Output() autoCompleteOptionSelected = new EventEmitter<Event>();\r\n @Output() formCheckboxSelection = new EventEmitter<CheckboxOption>();\r\n @Output() formInputValue = new EventEmitter<string | number>();\r\n @Output() addFormGroup = new EventEmitter<Event>();\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n @Output() formSlideToggleChange = new EventEmitter<SlideToggleOption>();\r\n @Output() dropdownOpenedChange = new EventEmitter<SelectOpenedState>();\r\n @Output() formColorPickerChange = new EventEmitter<string>();\r\n @Output() formFileUpload = new EventEmitter<File | FileList>();\r\n @Output() formRadioOptionSelected = new EventEmitter<RadioOption>();\r\n @Output() ctaButtonClick = new EventEmitter<IconButton>();\r\n @Output() formMultiSelectAutoCompleteSearch = new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteClearSearchValue =\r\n new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteOptionsSelected = new EventEmitter<\r\n AutoCompleteOption[]\r\n >();\r\n @Output() formRichTextEditorContentChange = new EventEmitter<string>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n component!: ComponentRef<any>;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public container: ViewContainerRef) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to call loadComponents method.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n ngOnInit(): void {\r\n this.loadComponent();\r\n }\r\n\r\n /**\r\n * Creates the component dynamically and initializes the instance properties of created component, also handles the created component events.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n loadComponent(): void {\r\n if (!components[this.config?.type]) {\r\n const supportedTypes = Object.keys(components).join(', ');\r\n throw new Error(\r\n `Trying to use an unsupported type (${this.config.type}).\r\n Supported types: ${supportedTypes}`\r\n );\r\n }\r\n this.component = this.container.createComponent(\r\n components[this.config?.type]\r\n );\r\n if (this.component?.instance) {\r\n this.component.instance.config = this.config;\r\n this.component.instance.group = this.group;\r\n this.component.instance.submitResponse = this.submitResponse;\r\n this.component.instance.searchResponse = this.searchResponse;\r\n if (this.config.type === FormControlType.FILE_UPLOAD) {\r\n this.component.instance.fileUploadStatus = this.fileUploadStatus;\r\n this.component.instance.fileDownloadAndDeleteConfig = this.fileDownloadAndDeleteConfig;\r\n }\r\n if (this.config.type === FormControlType.SEARCH) {\r\n this.component.instance.searchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.formSearchApply.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.CHECKBOX) {\r\n this.component.instance.checkboxSelection\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: CheckboxOption) => {\r\n this.formCheckboxSelection.emit(event);\r\n });\r\n this.component.instance.ctaButtonClick\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: IconButton) => {\r\n this.ctaButtonClick.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.SELECT) {\r\n this.component.instance.optionSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.formDropdownSelected.emit(event);\r\n });\r\n this.component.instance.optionSearched\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.formSelectSearch.emit({\r\n searchEvent: event,\r\n controlName: this.config.controlName,\r\n });\r\n });\r\n this.component.instance.dropdownOpenedChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: SelectOpenedState) => {\r\n this.dropdownOpenedChange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.DATE) {\r\n this.component.instance.selectedDate\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formDateSelected.emit({\r\n date: event,\r\n controlName: this.config.controlName,\r\n });\r\n });\r\n this.component.instance.selectedDateRange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: { startDate: string; endDate: string }) => {\r\n this.formSelectedDateRange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.AUTO_COMPLETE) {\r\n this.component.instance.autoCompleteSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formAutoCompleteSearch.emit(event);\r\n });\r\n this.component.instance.autoCompleteClearSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.autoCompleteClearSearchValue.emit(event);\r\n });\r\n this.component.instance.autoCompleteOptionSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.autoCompleteOptionSelected.emit(event);\r\n });\r\n } else if (\r\n this.config.type === FormControlType.MULTI_SELECT_AUTO_COMPLETE\r\n ) {\r\n this.component.instance.multiSelectAutoCompleteSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formMultiSelectAutoCompleteSearch.emit(event);\r\n });\r\n this.component.instance.multiSelectAutoCompleteClearSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.multiSelectAutoCompleteClearSearchValue.emit(event);\r\n });\r\n this.component.instance.multiSelectAutoCompleteOptionsSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: AutoCompleteOption[]) => {\r\n this.multiSelectAutoCompleteOptionsSelected.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.TIME_PICKER) {\r\n this.component.instance.formTimeSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formTimeSelected.emit({\r\n time: event,\r\n controlName: this.component.instance.config.controlName,\r\n });\r\n });\r\n } else if (this.config.type === FormControlType.INPUT) {\r\n this.component.instance.inputValueChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string | number) => {\r\n this.formInputValue.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.ADD_FORM_GROUP) {\r\n this.component.instance.addFormGroup\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((event: Event) => {\r\n this.addFormGroup.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.TEXT_AREA) {\r\n this.component?.instance?.supportTextLinkClick\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: LinkEventEmitType) => {\r\n this.supportTextLinkClick.emit(event);\r\n });\r\n this.component?.instance?.inputValueChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formInputValue.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.SLIDE_TOGGLE) {\r\n this.component.instance.slideToggleChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: SlideToggleOption) => {\r\n this.formSlideToggleChange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.COLOR_PICKER) {\r\n this.component.instance.colorPickerChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formColorPickerChange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.FILE_UPLOAD) {\r\n this.component.instance.uploadSelectedFiles\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: File | FileList) => {\r\n this.formFileUpload.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.RADIO) {\r\n this.component.instance.selectedRadioOption\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: RadioOption) => {\r\n this.formRadioOptionSelected.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.RICH_TEXT_EDITOR) {\r\n this.component.instance.richTextEditorContentChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formRichTextEditorContentChange.emit(event);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n/**\r\n * Directive used to set the focus of first invalid field of the form when the form is submitted\r\n * @export\r\n * @class FocusInvalidFormFieldDirective\r\n */\r\n@Directive({\r\n selector: '[ieeesaFocusInvalidFormField]',\r\n standalone: true,\r\n})\r\nexport class FocusInvalidFormFieldDirective {\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n constructor(private el: ElementRef) {}\r\n /**\r\n * Listens to the ngSubmit event and apply focus to first invalid form field\r\n * @memberof FocusInvalidFormFieldDirective\r\n */\r\n @HostListener('ngSubmit') submitForm() {\r\n const invalidElement = this.el.nativeElement.querySelector(\r\n '.ieeesa-dynamic-form__form-field input.ng-invalid,.ieeesa-dynamic-form__form-field mat-select.ng-invalid, .ieeesa-dynamic-form__form-field text-area.ng-invalid, .ieeesa-dynamic-form__form-field mat-checkbox.ng-invalid, .ieeesa-dynamic-form__form-field mat-radio-button.ng-invalid'\r\n ) as HTMLElement;\r\n invalidElement?.focus();\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n FormArray,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FormModel } from '../../models/form.model';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormGrid } from '../../models/form-grid.model';\r\nimport { DynamicFormFieldDirective } from '../../directives/dynamic-form-field/dynamic-form-field.directive';\r\nimport { AlignType, IconButton, CheckboxOption } from '@ieeesa-npm/models';\r\nimport { FocusInvalidFormFieldDirective } from '../../directives/focus-invalid-form-field/focus-invalid-form-field.directive';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { SelectedDate } from '../../models/selected-date.model';\r\nimport { SelectedTime } from '../../models/selected-time.model';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\nimport { RadioOption } from '../../models/radio-option.model';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { TextTruncatedDirective } from '../../directives/text-truncated/text-truncated.directive';\r\nimport { FileUploadStatus } from '../../models/file-upload-status.model';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\n\r\n/**\r\n * Creates a reactive form dynamically based on the passed form field configuration and handles the form events.\r\n * @export\r\n * @class DynamicFormComponent\r\n * @implements {OnInit}\r\n * @implements {AfterContentInit}\r\n */\r\n@Component({\r\n exportAs: 'dynamicForm',\r\n selector: 'ieeesa-dynamic-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n DynamicFormFieldDirective,\r\n MatButtonModule,\r\n FocusInvalidFormFieldDirective,\r\n TextTruncatedDirective,\r\n ],\r\n templateUrl: './dynamic-form.component.html',\r\n styleUrls: ['./dynamic-form.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DynamicFormComponent\r\n implements OnInit, AfterContentInit, AfterViewInit\r\n{\r\n @ViewChildren(DynamicFormFieldDirective)\r\n formFields!: QueryList<DynamicFormFieldDirective>;\r\n private _formGroups!: FormModel;\r\n /**\r\n * FormGroups passed an an input and which contains configuration information of every form fields.\r\n * @memberof DynamicFormComponent\r\n */\r\n @Input()\r\n set formGroups(value: FormModel) {\r\n this._formGroups = value;\r\n this.createFormGroupArray();\r\n }\r\n get formGroups(): FormModel {\r\n return this._formGroups;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _submitResponse!: any;\r\n /**\r\n * Sets submit response on form submit\r\n * @memberof DynamicFormComponent\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set submitResponse(value: any) {\r\n this._submitResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get submitResponse(): any {\r\n return this._submitResponse;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _searchResponse!: any;\r\n /**\r\n * Sets search response on form search event\r\n * @memberof DynamicFormComponent\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set searchResponse(value: any) {\r\n this._searchResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get searchResponse(): any {\r\n return this._searchResponse;\r\n }\r\n private _fileUploadStatus!: FileUploadStatus;\r\n\r\n @Input() get fileUploadStatus(): FileUploadStatus {\r\n return this._fileUploadStatus;\r\n }\r\n set fileUploadStatus(value: FileUploadStatus) {\r\n this._fileUploadStatus = value;\r\n }\r\n @Input() colWidth!: FormGrid;\r\n @Input() isLegendVisible!: boolean;\r\n @Input() rightButtonLabel!: string;\r\n @Input() leftButtonLabel!: string;\r\n @Input() isSubmitButtonDisabled = false;\r\n @Input() isLeftButtonDisabled = false;\r\n @Input() isLeftButtonNeeded = false;\r\n @Input() isRightButtonNeeded = true;\r\n @Input() actionButtonAlign!: AlignType;\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n alignmentType = AlignType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formSubmit: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formChange: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formInput: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formLeftButtonClicked: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formSearchApply: EventEmitter<any> = new EventEmitter<Event>();\r\n @Output() formGroupsReference = new EventEmitter<FormGroup[]>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() dropdownChange: EventEmitter<any> = new EventEmitter<Event>();\r\n @Output() formCheckboxSelection = new EventEmitter<CheckboxOption>();\r\n @Output() formDateSelected = new EventEmitter<SelectedDate>();\r\n @Output() formSelectSearch = new EventEmitter<{\r\n searchEvent: Event;\r\n controlName: string;\r\n }>();\r\n @Output() formControlChange = new EventEmitter<Event>();\r\n @Output() formAutoCompleteSearch: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() formAutoCompleteClearSearchValue: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() autoCompleteOptionSelected = new EventEmitter<FormGroup[]>();\r\n @Output() formAfterContentInit = new EventEmitter<FormGroup[]>();\r\n @Output() formSelectedDateRange = new EventEmitter<{\r\n startDate: string;\r\n endDate: string;\r\n }>();\r\n @Output() addFormGroup = new EventEmitter<Event>();\r\n @Output() formTimeSelected = new EventEmitter<SelectedTime>();\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n @Output() formSlideToggleChange = new EventEmitter<SlideToggleOption>();\r\n @Output() formFileUpload = new EventEmitter<File | FileList>();\r\n @Output() dropdownOpenedChange = new EventEmitter<SelectOpenedState>();\r\n @Output() formColorPickerChange = new EventEmitter<string>();\r\n @Output() formRadioOptionSelected = new EventEmitter<RadioOption>();\r\n @Output() ctaButtonClick = new EventEmitter<IconButton>();\r\n @Output() formMultiSelectAutoCompleteSearch: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() formMultiSelectAutoCompleteClearSearchValue: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteOptionsSelected = new EventEmitter<\r\n AutoCompleteOption[]\r\n >();\r\n @Output() formRichTextEditorContentChange = new EventEmitter<string>();\r\n form!: FormGroup;\r\n formGroupArray: FormGroup[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formControlArray: any[] = [];\r\n legendsArray: string[] = [];\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private fb: FormBuilder, private elementRef: ElementRef) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to create form group\r\n * @memberof DynamicFormComponent\r\n */\r\n ngOnInit(): void {\r\n this.createFormGroupArray();\r\n }\r\n\r\n /**\r\n * Emit generated form reference on ngAfterContentInit lifecycle hook.\r\n * @memberof DynamicFormComponent\r\n */\r\n ngAfterContentInit(): void {\r\n this.formAfterContentInit.emit(this.formGroupArray);\r\n }\r\n /**\r\n * Sets the focus to the first field.\r\n * @memberof DynamicFormComponent\r\n */\r\n ngAfterViewInit(): void {\r\n const firstFocusableElement = this.elementRef.nativeElement.querySelector(\r\n 'input, mat-select, textarea, mat-checkbox, mat-radio-button'\r\n ) as HTMLElement;\r\n setTimeout(() => firstFocusableElement?.focus(), 0);\r\n }\r\n /**\r\n * Creates form group on the basis of formGroups configuration input\r\n * @return {void}\r\n * @memberof DynamicFormComponent\r\n */\r\n createFormGroupArray(): void {\r\n this.formGroupArray = [];\r\n this.formControlArray = [];\r\n this.legendsArray = [];\r\n if (!this.formGroups) {\r\n return;\r\n }\r\n this.formGroups?.formGroup?.forEach((element) => {\r\n const controls = element.controls.filter(\r\n (control) => control.type !== 'button'\r\n );\r\n this.formGroupArray.push(this.createGroup(controls));\r\n this.formControlArray.push(controls);\r\n this.legendsArray.push(element.legend);\r\n });\r\n this.form = this.fb.group({\r\n children: this.formGroupArray,\r\n });\r\n\r\n this.formGroupsReference.emit(this.formGroupArray);\r\n }\r\n /**\r\n * Incrementally adds a single control to an existing form group at the given\r\n * group index WITHOUT rebuilding the whole form. This preserves every other\r\n * live control (including controls that are not part of the static config,\r\n * e.g. dynamically-populated dropdowns) along with their current values and\r\n * options.\r\n * @param {number} groupIndex - Index of the target form group.\r\n * @param {FieldConfig} control - Field configuration of the control to add.\r\n * @param {number} [position] - Optional position within the group's controls;\r\n * defaults to appending at the end.\r\n * @return {void}\r\n * @memberof DynamicFormComponent\r\n */\r\n addControlToGroup(\r\n groupIndex: number,\r\n control: FieldConfig,\r\n position?: number\r\n ): void {\r\n const group = this.formGroupArray?.[groupIndex];\r\n const controls = this.formControlArray?.[groupIndex];\r\n if (!group || !controls) {\r\n return;\r\n }\r\n // Avoid duplicates if the control is already present.\r\n if (group.get(control.controlName)) {\r\n return;\r\n }\r\n if (control.type === FormControlType.CHECKBOX) {\r\n group.addControl(control.controlName, this.createFormArray(control));\r\n } else {\r\n group.addControl(control.controlName, this.createControl(control));\r\n }\r\n if (position === undefined || position < 0 || position >= controls.length) {\r\n controls.push(control);\r\n } else {\r\n controls.splice(position, 0, control);\r\n }\r\n }\r\n /**\r\n * Incrementally removes a single control from an existing form group by its\r\n * control name WITHOUT rebuilding the whole form. Other live controls and\r\n * their values/options are left untouched.\r\n * @param {number} groupIndex - Index of the target form group.\r\n * @param {string} controlName - Name of the control to remove.\r\n * @return {void}\r\n * @memberof DynamicFormComponent\r\n */\r\n removeControlFromGroup(groupIndex: number, controlName: string): void {\r\n const group = this.formGroupArray?.[groupIndex];\r\n const controls = this.formControlArray?.[groupIndex];\r\n if (!group || !controls) {\r\n return;\r\n }\r\n if (group.get(controlName)) {\r\n group.removeControl(controlName);\r\n }\r\n const configIndex = controls.findIndex(\r\n (config: FieldConfig) => config.controlName === controlName\r\n );\r\n if (configIndex > -1) {\r\n controls.splice(configIndex, 1);\r\n }\r\n }\r\n /**\r\n * Returns true when the live form group at the given index currently contains\r\n * a control with the given name. Reflects the rendered form state (including\r\n * controls added/removed incrementally), not the static config.\r\n * @param {number} groupIndex - Index of the target form group.\r\n * @param {string} controlName - Name of the control to look for.\r\n * @return {boolean} Whether the control exists in the rendered group.\r\n * @memberof DynamicFormComponent\r\n */\r\n hasControlInGroup(groupIndex: number, controlName: string): boolean {\r\n return !!this.formGroupArray?.[groupIndex]?.get(controlName);\r\n }\r\n /**\r\n * Creates form group using form builder\r\n * @param {any[]} controls\r\n * @return {FormGroup}\r\n * @memberof DynamicFormComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(controls: any[]): FormGroup {\r\n const group = this.fb.group({});\r\n controls.forEach((control: FieldConfig) => {\r\n if (control.type === FormControlType.CHECKBOX) {\r\n group.addControl(control.controlName, this.createFormArray(control));\r\n } else {\r\n group.addControl(control.controlName, this.createControl(control));\r\n }\r\n });\r\n return group;\r\n }\r\n /**\r\n * Creates form array for Checkbox group and returns.\r\n * @param {FieldConfig} controls\r\n * @return {FormArray<any>}\r\n * @memberof DynamicFormComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createFormArray(controls: FieldConfig): FormArray<any> {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let formArray: FormArray<any>;\r\n const group = this.fb.group({});\r\n group.addControl(controls.controlName, this.createControl(controls));\r\n const isRequiredValidator = group\r\n ?.get(controls.controlName)\r\n ?.hasValidator(Validators.required);\r\n if (isRequiredValidator)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formArray = new FormArray<any>(\r\n [],\r\n this.checkboxSelectionRequiredValidator(controls?.minSelectionRequired)\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n else formArray = new FormArray<any>([]);\r\n controls?.checkboxOptions?.forEach((control) => {\r\n formArray.push(\r\n new FormControl({ value: control.checked, disabled: control.disabled })\r\n );\r\n });\r\n return formArray;\r\n }\r\n\r\n /**\r\n * Custom validator to set required filed validation error for the checkbox field type based on the number of configured minimum checkbox options to be selected whenever the filed configured with required.\r\n * @param {number} [minSelectionRequired=1]\r\n * @return {*}\r\n * @memberof DynamicFormComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n checkboxSelectionRequiredValidator(minSelectionRequired = 1): any {\r\n return function validate(formGroup: FormGroup) {\r\n let checked = 0;\r\n Object.keys(formGroup.controls).forEach((key) => {\r\n const control = formGroup.controls[key];\r\n if (control.value) {\r\n checked++;\r\n }\r\n });\r\n if (checked < minSelectionRequired) {\r\n return {\r\n checkboxSelectionRequired: true,\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n /**\r\n * Creates form control based on form field configuration\r\n * @param {FieldConfig} control\r\n * @return {FormControl}\r\n * @memberof DynamicFormComponent\r\n */\r\n createControl(control: FieldConfig): FormControl {\r\n const { disabled, validation, value, updateOn } = control;\r\n return this.fb.control(\r\n { disabled, value },\r\n updateOn ? { validators: validation, updateOn } : validation\r\n );\r\n }\r\n\r\n /**\r\n * Emits formGroupArray\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormSubmit(): void {\r\n this.formSubmit.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Emits formGroupArray\r\n * @memberof DynamicFormComponent\r\n */\r\n onLeftButtonClicked(): void {\r\n this.formLeftButtonClicked.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Emits formGroupArray\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormChange(): void {\r\n this.formChange.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Handles form field select type drop down selection event\r\n * @memberof DynamicFormComponent\r\n */\r\n onDropdownChange(): void {\r\n this.dropdownChange.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Handles form input change event\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n formInputChange(event: Event): void {\r\n this.formControlChange.emit(event);\r\n this.formInput.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Handles form field search apply event\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onSearchApply(event: Event): void {\r\n this.formSearchApply.emit(event);\r\n }\r\n\r\n /**\r\n * Handles search event inside form field select\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onSelectSearch(event: { searchEvent: Event; controlName: string }): void {\r\n this.formSelectSearch.emit(event);\r\n }\r\n\r\n /**\r\n * Takes the index and the formGroup as arguments and needs to return the unique identifier for this formGroup.\r\n * @param {number} index\r\n * @param {FormGroup} formGroup\r\n * @memberof DynamicFormComponent\r\n */\r\n trackByFormGroup(index: number, formGroup: FormGroup) {\r\n return formGroup.controls;\r\n }\r\n\r\n /**\r\n * Handles form date selection event\r\n * @param {SelectedDate} selectedDate\r\n * @memberof DynamicFormComponent\r\n */\r\n onDateSelected(selectedDate: SelectedDate): void {\r\n this.formDateSelected.emit(selectedDate);\r\n }\r\n /**\r\n * Handles form time selection event\r\n * @param {SelectedTime} selectedTime\r\n * @memberof DynamicFormComponent\r\n */\r\n onTimeSelected(selectedTime: SelectedTime): void {\r\n this.formTimeSelected.emit(selectedTime);\r\n }\r\n /**\r\n * Emits selected form date range\r\n * @param {{startDate: string, endDate: string}} dateRange\r\n * @memberof DynamicFormComponent\r\n */\r\n onSelectedDateRange(dateRange: { startDate: string; endDate: string }) {\r\n this.formSelectedDateRange.emit(dateRange);\r\n }\r\n\r\n /**\r\n * Handles form field auto complete search event\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAutoCompleteSearch(event: string): void {\r\n this.formAutoCompleteSearch.emit(event);\r\n }\r\n /**\r\n * Handles form field auto complete search clear event\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAutoCompleteClearSearchValue(event: string): void {\r\n this.formAutoCompleteClearSearchValue.emit(event);\r\n }\r\n\r\n /**\r\n * Handles form field checkbox selection event\r\n * @param {CheckboxOption} option\r\n * @memberof DynamicFormComponent\r\n */\r\n onCheckboxSelection(option: CheckboxOption): void {\r\n this.formCheckboxSelection.emit(option);\r\n }\r\n\r\n /**\r\n * Handles form field auto complete option selection event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAutoCompleteOptionSelected(): void {\r\n this.autoCompleteOptionSelected.emit(this.formGroupArray);\r\n }\r\n /**\r\n *\r\n * Listens form field multi select auto complete search event and emits formMultiSelectAutoCompleteSearch event.\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onMultiSelectAutoCompleteSearch(event: string): void {\r\n this.formMultiSelectAutoCompleteSearch.emit(event);\r\n }\r\n\r\n /**\r\n * Listens form field multi select auto complete search clear event and emits formMultiSelectAutoCompleteClearSearchValue event.\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onMultiSelectAutoCompleteClearSearchValue(event: string): void {\r\n this.formMultiSelectAutoCompleteClearSearchValue.emit(event);\r\n }\r\n /**\r\n * Listens form field multi select auto complete option selection event and emits multiSelectAutoCompleteOptionSelected event.\r\n * @param {AutoCompleteOption[]} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onMultiSelectAutoCompleteOptionsSelected(event: AutoCompleteOption[]): void {\r\n this.multiSelectAutoCompleteOptionsSelected.emit(event);\r\n }\r\n\r\n /**\r\n * Handles form slide toggle event and emits formSlideToggleChange event.\r\n * @param {SlideToggleOption} toggle\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormSlideToggleChange(toggle: SlideToggleOption): void {\r\n this.formSlideToggleChange.emit(toggle);\r\n }\r\n\r\n /**\r\n * Handles form color picker event and emits formColorPickerChange event.\r\n * @param {string} colorCode\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormColorPickerChange(colorCode: string): void {\r\n this.formColorPickerChange.emit(colorCode);\r\n }\r\n\r\n /**\r\n * Handles form rich text editor event and emits formRichTextEditorContentChange event.\r\n * @param {string} htmlMarkupText\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormRichTextEditorContentChange(htmlMarkupText: string): void {\r\n this.formRichTextEditorContentChange.emit(htmlMarkupText);\r\n }\r\n\r\n /**\r\n * Handles file upload event and emits formFileUpload event\r\n * @param {(File | FileList)} file\r\n * @memberof DynamicFormComponent\r\n */\r\n onFileUpload(file: File | FileList): void {\r\n this.formFileUpload.emit(file);\r\n }\r\n\r\n /**\r\n * Handles form field radio button selection event\r\n * @param {RadioOption} option\r\n * @memberof DynamicFormComponent\r\n */\r\n onRadioOptionSelection(option: RadioOption): void {\r\n this.formRadioOptionSelected.emit(option);\r\n }\r\n\r\n /**\r\n * Converts passed control name in hyphenated css class name\r\n * @param {string} className\r\n * @return {string}\r\n * @memberof DynamicFormComponent\r\n */\r\n getRowClassName(className: string): string {\r\n return className\r\n .replace(/([A-Z])/g, ' $1')\r\n .toLowerCase()\r\n .split(' ')\r\n .join('-');\r\n }\r\n /**\r\n * Emits the addFormGroup event\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAddFormGroup(event: Event): void {\r\n this.addFormGroup.emit(event);\r\n }\r\n /**\r\n * Emits supportTextLinkClick event on click of form support text link\r\n * @param {LinkEventEmitType} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onSupportTextLinkClick(event: LinkEventEmitType): void {\r\n this.supportTextLinkClick.emit(event);\r\n }\r\n /**\r\n * Listens select form field dropdownOpenedChange event and emits dropdownOpenedChange event.\r\n * @memberof DynamicFormComponent\r\n * @param {SelectOpenedState} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onDropdownOpenedChange(event: SelectOpenedState): void {\r\n this.dropdownOpenedChange.emit(event);\r\n }\r\n\r\n /**\r\n * Emits ctaButtonClick event along with clicked button information.\r\n * @param {IconButton} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onCheckboxCTAButtonClick(event: IconButton): void {\r\n this.ctaButtonClick.emit(event);\r\n }\r\n}\r\n","<form\r\n class=\"ieeesa-dynamic-form\"\r\n [formGroup]=\"form\"\r\n (change)=\"onFormChange()\"\r\n (ngSubmit)=\"onFormSubmit()\"\r\n (input)=\"formInputChange($event)\"\r\n ieeesaFocusInvalidFormField\r\n>\r\n <fieldset\r\n class=\"ieeesa-dynamic-form__fieldset\"\r\n *ngFor=\"\r\n let formGrp of formGroupArray;\r\n let i = index;\r\n trackBy: trackByFormGroup\r\n \"\r\n [attr.aria-label]=\"(!legendsArray[i] && isLegendVisible) ? 'Form section ' + (i + 1) : null\"\r\n >\r\n <legend\r\n class=\"float-none w-auto p-2 ieeesa-dynamic-form__legend\"\r\n *ngIf=\"isLegendVisible && legendsArray[i]\"\r\n >\r\n {{ legendsArray[i] }}\r\n </legend>\r\n <div class=\"row\">\r\n <div\r\n class=\"col-{{ colWidth.xs }} col-sm-{{ colWidth.sm }} col-md-{{\r\n colWidth.md\r\n }} col-lg-{{ colWidth.lg }} col-xl-{{ colWidth.xl }}\r\n ieeesa-dynamic-form__form-field\"\r\n [ngClass]=\"getRowClassName(formControlArray[i][j].controlName)\"\r\n *ngFor=\"let control of formControlArray[i]; let j = index\"\r\n >\r\n <ng-template\r\n ieeesaDynamicFormField\r\n [config]=\"formControlArray[i][j]\"\r\n [group]=\"formGrp\"\r\n [submitResponse]=\"submitResponse\"\r\n [searchResponse]=\"searchResponse\"\r\n [fileUploadStatus]=\"fileUploadStatus\"\r\n [fileDownloadAndDeleteConfig]=\"fileDownloadAndDeleteConfig\"\r\n (formSearchApply)=\"onSearchApply($event)\"\r\n (formDropdownSelected)=\"onFormChange(); onDropdownChange()\"\r\n (formDateSelected)=\"onFormChange(); onDateSelected($event)\"\r\n (formSelectedDateRange)=\"onSelectedDateRange($event)\"\r\n (formSelectSearch)=\"onSelectSearch($event)\"\r\n (formAutoCompleteSearch)=\"onAutoCompleteSearch($event)\"\r\n (autoCompleteClearSearchValue)=\"\r\n onAutoCompleteClearSearchValue($event)\r\n \"\r\n (autoCompleteOptionSelected)=\"\r\n onFormChange(); onAutoCompleteOptionSelected()\r\n \"\r\n (formCheckboxSelection)=\"onCheckboxSelection($event)\"\r\n (ctaButtonClick)=\"onCheckboxCTAButtonClick($event)\"\r\n (formInputValue)=\"onFormChange()\"\r\n (addFormGroup)=\"onAddFormGroup($event)\"\r\n (formTimeSelected)=\"onFormChange(); onTimeSelected($event)\"\r\n (supportTextLinkClick)=\"onSupportTextLinkClick($event)\"\r\n (formSlideToggleChange)=\"onFormSlideToggleChange($event)\"\r\n (formFileUpload)=\"onFileUpload($event)\"\r\n (dropdownOpenedChange)=\"onDropdownOpenedChange($event)\"\r\n (formColorPickerChange)=\"onFormColorPickerChange($event)\"\r\n (formRadioOptionSelected)=\"onRadioOptionSelection($event)\"\r\n (formMultiSelectAutoCompleteSearch)=\"\r\n onMultiSelectAutoCompleteSearch($event)\r\n \"\r\n (multiSelectAutoCompleteClearSearchValue)=\"\r\n onMultiSelectAutoCompleteClearSearchValue($event)\r\n \"\r\n (multiSelectAutoCompleteOptionsSelected)=\"\r\n onFormChange(); onMultiSelectAutoCompleteOptionsSelected($event)\r\n \"\r\n (formRichTextEditorContentChange)=\"\r\n onFormRichTextEditorContentChange($event)\r\n \"\r\n >\r\n </ng-template>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <ng-content select=\"[component]\"></ng-content>\r\n <div class=\"row\">\r\n <div\r\n class=\"col-12 ieeesa-dynamic-form__actions\"\r\n [ngClass]=\"{\r\n 'justify-content-end': actionButtonAlign === alignmentType.LEFT,\r\n 'justify-content-center': actionButtonAlign === alignmentType.MIDDLE,\r\n 'justify-content-start': actionButtonAlign === alignmentType.RIGHT\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"isRightButtonNeeded\"\r\n type=\"submit\"\r\n mat-button\r\n class=\"mat-primary-button ieeesa-dynamic-form__actions--right-btn\"\r\n [disabled]=\"isSubmitButtonDisabled\"\r\n >\r\n {{ rightButtonLabel }}\r\n </button>\r\n <button\r\n *ngIf=\"isLeftButtonNeeded\"\r\n type=\"button\"\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-dynamic-form__actions--left-btn\"\r\n (click)=\"onLeftButtonClicked()\"\r\n [disabled]=\"isLeftButtonDisabled\"\r\n >\r\n {{ leftButtonLabel }}\r\n </button>\r\n </div>\r\n </div>\r\n</form>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FooterConfig, FooterLink } from '../../models/footer-config.model';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\n/**\r\n * Implements & displays copyright information and IEEE quick access links.\r\n * @class FooterComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-footer',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, MatDividerModule],\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n})\r\nexport class FooterComponent implements OnInit {\r\n /**\r\n * Input property to get the configuration information of footer copyright text and quick access links.\r\n * @type {FooterConfig}\r\n * @memberof FooterComponent\r\n */\r\n private footerConfigInfo!: FooterConfig;\r\n @Input()\r\n set footerConfig(value: FooterConfig) {\r\n this.footerConfigInfo = value;\r\n }\r\n get footerConfig(): FooterConfig {\r\n return this.footerConfigInfo;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n screenTexts: any = screenTexts;\r\n currentYear = new Date().getFullYear();\r\n\r\n /**\r\n * Initializes the component with default values if not provided.\r\n * It should hide the the dashboard link if the user is not signed in.\r\n * @return -returns nothing\r\n * @memberof FooterComponent\r\n */\r\n ngOnInit(): void {\r\n this.footerConfig = this.footerConfig ?? this.screenTexts['footer'];\r\n }\r\n\r\n /**\r\n * TrackByFunction is called for each item in the collection and return a unique identifier for that item.\r\n * @param {number} index -The index of the current item in the collection.\r\n * @param {FooterLink} link -Link object with required properties.\r\n * @return {string} -returns link label as an unique identifier.\r\n * @memberof FooterComponent\r\n */\r\n trackByFunc(index: number, link: FooterLink): string {\r\n return link.label;\r\n }\r\n}\r\n","<footer class=\"sa-footer\">\r\n <section class=\"sa-footer__links flex-align-center text-center\">\r\n <ul class=\"list-unstyled flex-align-center flex-wrap\">\r\n <li\r\n class=\"d-flex align-items-center ieeesa-title-sm-14\"\r\n *ngFor=\"\r\n let link of footerConfig.links;\r\n let i = index;\r\n trackBy: trackByFunc\r\n \"\r\n >\r\n <ng-container\r\n *ngIf=\"link?.isRouterLink; then routerLink; else redirectUrl\"\r\n >\r\n </ng-container>\r\n <ng-template #routerLink>\r\n <a\r\n [routerLink]=\"link.redirectUrl\"\r\n [attr.aria-label]=\"link.ariaLabel\"\r\n class=\"sa-footer__links-section__link\"\r\n >{{ link.label }}</a\r\n >\r\n </ng-template>\r\n <ng-template #redirectUrl>\r\n <a\r\n [attr.href]=\"link.redirectUrl\"\r\n target=\"_blank\"\r\n [attr.aria-label]=\"link.ariaLabel\"\r\n class=\"sa-footer__links-section__link\"\r\n >{{ link.label }}</a\r\n >\r\n </ng-template>\r\n <mat-divider [vertical]=\"true\"></mat-divider>\r\n </li>\r\n </ul>\r\n <img\r\n class=\"sa-footer__links__logo\"\r\n src=\"{{ footerConfig.ieeeLogo }}\"\r\n alt=\"{{ screenTexts?.footer?.alt?.logo }}\"\r\n />\r\n </section>\r\n <section class=\"sa-footer__copyright text-center\">\r\n <p class=\"ieeesa-label-md-14 sa-footer__copyright__content\">\r\n {{ footerConfig.copyright.textPart1 }} {{ currentYear }}\r\n {{ footerConfig.copyright.textPart2 }}\r\n <a\r\n [attr.href]=\"footerConfig.copyright.link\"\r\n target=\"_blank\"\r\n class=\"sa-footer__copyright__hyperlink\"\r\n >{{ footerConfig.copyright.hyperLinkPart3 }}</a\r\n >\r\n <br />\r\n {{ footerConfig.copyright.textPart4 }}\r\n </p>\r\n </section>\r\n</footer>\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule, NgClass } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Menu } from '../../models/menu.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * Creates menu and the menu items are icon based buttons\r\n * @export\r\n * @class MenuComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n NgClass,\r\n ],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MenuComponent {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n @Input() menuItems!: Menu[];\r\n @Input() button!: IconButton;\r\n @Input() defaultIconSize = '';\r\n @Input() isMarginBottomZero = false;\r\n @Output() menuToggleButtonElement: EventEmitter<HTMLElement> =\r\n new EventEmitter<HTMLElement>();\r\n @Output() menuItemClick: EventEmitter<Menu> = new EventEmitter<Menu>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * Emits the clicked menu item and emits menu button element event when its not triggered through mouse.\r\n * @param {Menu} menu\r\n * @memberof MenuComponent\r\n */\r\n onMenuItemClick(menu: Menu) {\r\n this.menuItemClick.emit(menu);\r\n const menuElement = this.elementRef.nativeElement.querySelector(\r\n 'button.mdc-icon-button'\r\n );\r\n this.menuToggleButtonElement.emit(menuElement);\r\n }\r\n /**\r\n * Takes the index and the menu item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @param {Menu} menu\r\n * @return {number}\r\n * @memberof MenuComponent\r\n */\r\n trackByFn(index: number, menu: Menu): number {\r\n return menu.id;\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n mat-icon-button\r\n [ngClass]=\"{ 'ieeesa-menu__trigger': button?.iconURL }\"\r\n [matMenuTriggerFor]=\"menu\"\r\n [attr.aria-label]=\"constants?.ariaLabel?.menuIcon\"\r\n>\r\n <svg\r\n class=\"ieeesa-menu__button mt-md-2\"\r\n *ngIf=\"button?.iconURL; else defaultIcon\"\r\n >\r\n <use [attr.xlink:href]=\"button.iconURL\"></use>\r\n </svg>\r\n <ng-template #defaultIcon\r\n ><i class=\"fa-solid fa-ellipsis-vertical\" [ngClass]=\"defaultIconSize\"></i\r\n ></ng-template>\r\n</button>\r\n<mat-menu\r\n #menu=\"matMenu\"\r\n class=\"ieeesa-menu\"\r\n backdropClass=\"ieeesa-menu-overlay\"\r\n [ngClass]=\"{ 'ieeesa-menu__pd-1': menuItems && menuItems.length > 0 }\"\r\n>\r\n <ng-container *ngIf=\"menuItems && menuItems.length > 0\">\r\n <ng-container *ngFor=\"let item of menuItems; trackBy: trackByFn\">\r\n <button\r\n mat-menu-item\r\n class=\"ieeesa-menu__item\"\r\n [ngClass]=\"{\r\n 'ieeesa-menu__item__mb-0': isMarginBottomZero\r\n }\"\r\n (click)=\"onMenuItemClick(item)\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n [matTooltip]=\"item.toolTip\"\r\n [matTooltipDisabled]=\"!item.isToolTipNeeded\"\r\n [disabled]=\"item?.isDisabled\"\r\n >\r\n <svg class=\"ieeesa-menu__item__icon\" *ngIf=\"item.iconURL\">\r\n <use [attr.xlink:href]=\"item.iconURL\"></use>\r\n </svg>\r\n <span class=\"ieeesa-menu__item__label ieeesa-label-md-14\"\r\n >{{ item.label }}</span\r\n >\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n</mat-menu>\r\n","export enum UserProfileMenu {\r\n // eslint-disable-next-line no-unused-vars\r\n USER_PROFILE = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n SIGN_OUT = 2,\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ieeesa-image-preview',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './image-preview.component.html',\r\n styleUrls: ['./image-preview.component.scss'],\r\n})\r\nexport class ImagePreviewComponent implements OnInit {\r\n isSvg = false;\r\n imageURL!: string;\r\n @Input() imageAltText!: string;\r\n @Input() set imageUrl(value: string) {\r\n this.imageURL = value;\r\n }\r\n\r\n ngOnInit(): void {\r\n const imageNameWithExtension = this.imageUrl?.substring(\r\n this.imageUrl?.lastIndexOf('/') + 1,\r\n this.imageUrl?.indexOf('?')\r\n );\r\n if (imageNameWithExtension) {\r\n const [imageName, imageExtension] = imageNameWithExtension.split('.');\r\n this.imageAltText = this.imageAltText ?? imageName;\r\n this.isSvg = imageExtension.includes('svg');\r\n }\r\n }\r\n}\r\n","<div class=\"ieeesa-image-preview\">\r\n <img\r\n class=\"ieeesa-image-preview__image\"\r\n alt=\"{{ imageAltText }}\"\r\n [src]=\"imageURL\"\r\n />\r\n</div>\r\n","import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport * as constants from '../assets/constants.json';\r\n\r\n/**\r\n * BreakpointObserver utility service helps us to get the mobile view based on the configured breakpoint.\r\n * @export\r\n * @class BreakpointObserverService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BreakpointObserverService {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserver: BreakpointObserver // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Based on break point max-width it returns the Observable of BreakpointState\r\n * @return {Observable<BreakpointState>}\r\n * @memberof BreakpointObserverService\r\n */\r\n getBreakpoint(): Observable<BreakpointState> {\r\n return this.breakpointObserver.observe(\r\n '(max-width: ' + this.constants.breakPointMaxWidth + ')'\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HeaderConfig } from '../../models/header-config.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport {\r\n AuthService,\r\n StorageService,\r\n AlertsService,\r\n} from '@ieeesa-npm/utility';\r\nimport { IconButton, AlertType } from '@ieeesa-npm/models';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MenuComponent } from '../menu/menu.component';\r\nimport { Menu } from '../../models/menu.model';\r\nimport { UserProfileMenu } from '../../models/profile-menu.model';\r\nimport { ImagePreviewComponent } from '../image-preview/image-preview.component';\r\nimport { FileUploadService } from '../../services/file-upload.service';\r\n/**\r\n * Implements & displays application logo, title, signed in user information, sign-out link, and hamburger link for mobile view.\r\n * @class HeaderComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-header',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n MatMenuModule,\r\n ImagePreviewComponent,\r\n ],\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HeaderComponent implements OnInit, OnDestroy {\r\n private headerConfigInfo!: HeaderConfig;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n screenTexts: any = constants;\r\n private profileMenuOptions: Menu[] =\r\n this.screenTexts?.header?.userProfileMenuOptions;\r\n menuItems!: Menu[];\r\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\r\n isMobileView = false;\r\n imageUrl!: string;\r\n logo!: string;\r\n imageAltText!: string;\r\n /**\r\n * HeaderConfig represents the configurable properties required for header component.\r\n * Input property of the component to get the configurable values such as logo, app title, signed in user name and logout redirect URL.\r\n * @type {HeaderConfig}\r\n * @memberof HeaderComponent\r\n */\r\n @Input()\r\n set headerConfig(value: HeaderConfig) {\r\n this.headerConfigInfo = value;\r\n this.getImageUrl();\r\n }\r\n get headerConfig(): HeaderConfig {\r\n return this.headerConfigInfo;\r\n }\r\n @Input()\r\n set menuConfig(value: Menu[]) {\r\n this.profileMenuOptions = value;\r\n this.getMenuItems();\r\n }\r\n get menuConfig(): Menu[] {\r\n return this.profileMenuOptions;\r\n }\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n\r\n @Output() toggleNavMenuClick = new EventEmitter<Event>();\r\n @Output() profileMenuClick = new EventEmitter<Menu>();\r\n userProfileIconButton: IconButton = this.screenTexts?.header?.buttons[0];\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakPointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private authService: AuthService,\r\n // eslint-disable-next-line no-unused-vars\r\n private storageService: StorageService,\r\n // eslint-disable-next-line no-unused-vars\r\n private alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private fileUploadService: FileUploadService\r\n ) {\r\n breakPointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n this.getMenuItems();\r\n });\r\n }\r\n\r\n /**\r\n * Sets the appBaseUrl and gets the logo download AWS pre-signed URL from API.\r\n */\r\n ngOnInit(): void {\r\n this.getImageUrl();\r\n this.imageAltText = this.screenTexts?.header?.alt?.logo;\r\n }\r\n\r\n /**\r\n * Gets the logo download AWS pre-signed URL from API when isLogoFromAwsS3 is true.\r\n */\r\n getImageUrl(): void {\r\n if (this.headerConfigInfo?.apiBaseUrl)\r\n this.fileUploadService.setApiBaseUrl(this.headerConfigInfo.apiBaseUrl);\r\n if (this.headerConfigInfo?.isLogoFromAwsS3) {\r\n this.getFileDownloadPresignedUrls(this.headerConfigInfo?.logoUrl);\r\n } else {\r\n this.imageUrl = this.headerConfigInfo?.logoUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Desktop event to navigate to logout page.\r\n * Deletes the application specific and SSO related cookies.\r\n * @memberof HeaderComponent\r\n */\r\n logout(): void {\r\n this.authService?.deleteCookie(this.headerConfig?.cookieName);\r\n this.storageService?.clearStorage();\r\n window.location.href = this.headerConfig?.ssoSignOutUrl;\r\n }\r\n /**\r\n * Emits toggleNavMenuClick event once hamburger icon is clicked.\r\n * @param {Event} event\r\n * @memberof HeaderComponent\r\n */\r\n toggleNavMenu(event: Event): void {\r\n this.toggleNavMenuClick.emit(event);\r\n }\r\n /**\r\n * Handles the profile menu item click event and calls the logout\r\n * method when Sign Out button is clicked..\r\n * @param {Menu} menu\r\n * @memberof HeaderComponent\r\n */\r\n onUserProfileMenuClick(menu: Menu): void {\r\n if (menu?.id === UserProfileMenu.SIGN_OUT) {\r\n this.logout();\r\n } else if (menu?.id === UserProfileMenu.USER_PROFILE) {\r\n this.profileMenuClick.emit(menu);\r\n }\r\n }\r\n /**\r\n * Retrieves pre-signed URL for downloading the logo from Amazon S3 bucket.\r\n * @memberof HeaderComponent\r\n */\r\n getFileDownloadPresignedUrls(fileName: string): void {\r\n this.fileUploadService\r\n .getFileDownloadPresignedUrls(\r\n fileName,\r\n this.headerConfigInfo?.isPublicAPI,\r\n this.headerConfigInfo?.domainUrl\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (response: any) => {\r\n this.imageUrl = response?.body;\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: Error) => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: error?.message || this.screenTexts?.header?.errors?.['2029'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Modifies the menu items based on mobile or desktop.\r\n */\r\n getMenuItems(): void {\r\n if (this.isMobileView) {\r\n this.menuItems = this.profileMenuOptions;\r\n } else {\r\n this.menuItems = this.profileMenuOptions?.slice(\r\n 0,\r\n this.profileMenuOptions?.length - 1\r\n );\r\n }\r\n }\r\n /**\r\n * Cleans up resources when the component is destroyed.\r\n * @memberof HeaderComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<header\r\n class=\"ieeesa-header container-fluid d-flex align-items-center justify-content-between flex-wrap\"\r\n>\r\n <div class=\"order-0 order-sm-0\">\r\n <ieeesa-image-preview\r\n class=\"ieeesa-header__logo\"\r\n [imageUrl]=\"imageUrl\"\r\n [imageAltText]=\"imageAltText\"\r\n ></ieeesa-image-preview>\r\n </div>\r\n <div\r\n class=\"order-2 order-sm-1 ieeesa-header__heading-container flex-align-center justify-content-start justify-content-sm-center\"\r\n >\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleNavMenu($event)\"\r\n *ngIf=\"headerConfig?.isSignedIn && isMobileView\"\r\n [attr.aria-label]=\"screenTexts?.header?.ariaLabel?.hamburgerMenu\"\r\n class=\"ieeesa-text-button d-block d-sm-none\"\r\n >\r\n <i class=\"fa-solid fa-bars ieeesa-header__hamburger-menu\"></i>\r\n </button>\r\n <h2 class=\"ieeesa-header__heading ieeesa-title-inter-lg-bold-24\">\r\n {{ headerConfig.applicationName }}\r\n </h2>\r\n </div>\r\n <div\r\n class=\"order-1 order-sm-2 ieeesa-header__profile-container px-0 d-flex align-items-start align-items-sm-center justify-content-end\"\r\n >\r\n <a\r\n class=\"ieeesa-header__help-icon-link\"\r\n [attr.aria-label]=\"screenTexts?.header?.ariaLabel?.helpLink\"\r\n href=\"{{ headerConfig.helpLink }}\"\r\n target=\"_blank\"\r\n >\r\n <i class=\"fa-regular fa-circle-question ieeesa-header__help-icon\"></i>\r\n </a>\r\n <p\r\n *ngIf=\"headerConfig.isSignedIn\"\r\n class=\"ieeesa-header__user-name ieeesa-title-sm-16 m-0 d-none d-md-block\"\r\n >\r\n {{ headerConfig.userName }}\r\n </p>\r\n <div\r\n *ngIf=\"headerConfig.isSignedIn\"\r\n class=\"ieeesa-header__user-profile-wrapper\"\r\n >\r\n <ng-container>\r\n <ieeesa-menu\r\n [button]=\"userProfileIconButton\"\r\n (menuItemClick)=\"onUserProfileMenuClick($event)\"\r\n [isMarginBottomZero]=\"true\"\r\n [menuItems]=\"menuItems\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </div>\r\n <button\r\n *ngIf=\"headerConfig.isSignedIn\"\r\n class=\"ieeesa-text-button ieeesa-header__sign-out ieeesa-label-md-14 d-none d-md-block\"\r\n (click)=\"logout()\"\r\n >\r\n {{ screenTexts?.header?.label?.signOut }}\r\n </button>\r\n </div>\r\n</header>\r\n","import {\r\n Directive,\r\n HostBinding,\r\n Input,\r\n OnInit,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { SafeStyle } from '@angular/platform-browser';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * Sets background color and image for the attached element.\r\n * @export\r\n * @class SetBackgroundDirective\r\n * @implements {OnInit}\r\n */\r\n@Directive({\r\n selector: '[ieeesaSetBackground]',\r\n providers: [forwardRef(() => SafePipe)],\r\n standalone: true,\r\n})\r\nexport class SetBackgroundDirective implements OnInit {\r\n @Input() background!: { color?: string; imgURL?: string };\r\n @HostBinding('style.background') bg!: SafeStyle;\r\n @HostBinding('style.background-size') bgSize = 'cover';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private safePipe: SafePipe) {}\r\n\r\n /**\r\n * Sets the elements background color and image.\r\n * @memberof SetBackgroundDirective\r\n */\r\n ngOnInit(): void {\r\n const bgColor =\r\n this.background?.color !== ''\r\n ? this.background?.color\r\n : this.constants.defaultWelcomeBgColor;\r\n const bgValue =\r\n this.background?.imgURL !== ''\r\n ? `url('${this.background?.imgURL}') no-repeat center center`\r\n : bgColor;\r\n this.bg = this.safePipe.transform(bgValue, SafeType.STYLE);\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Legend } from '../../models/legend.model';\r\nimport { SetBackgroundDirective } from '../../directives/set-background/set-background.directive';\r\n\r\n@Component({\r\n selector: 'ieeesa-legend',\r\n standalone: true,\r\n imports: [CommonModule, SetBackgroundDirective],\r\n templateUrl: './legend.component.html',\r\n styleUrls: ['./legend.component.scss'],\r\n})\r\nexport class LegendComponent implements OnInit {\r\n @Input() legends!: Legend[];\r\n private isSortingNeeded = false;\r\n\r\n @Input()\r\n set isSorting(value: boolean) {\r\n this.isSortingNeeded = value;\r\n }\r\n get isSorting(): boolean {\r\n return this.isSortingNeeded;\r\n }\r\n\r\n ngOnInit(): void {\r\n if(this.isSortingNeeded){\r\n this.legends?.sort((a, b) => {\r\n return a?.hierarchy - b?.hierarchy\r\n })\r\n }\r\n }\r\n\r\n trackByFn(index: number, item: Legend): string {\r\n return item.label;\r\n }\r\n}\r\n","<div class=\"ieeesa-legend d-flex flex-column flex-wrap flex-sm-row\">\r\n <div\r\n *ngFor=\"let item of legends; trackBy: trackByFn\"\r\n class=\"ieeesa-legend__indicator d-flex\"\r\n >\r\n <div\r\n *ngIf=\"!item.iconUrl\"\r\n class=\"ieeesa-legend__square\"\r\n [ngClass]=\"item.color\"\r\n ieeesaSetBackground\r\n [background]=\"{ imgURL: '', color: item.color }\"\r\n ></div>\r\n <svg *ngIf=\"item.iconUrl\" class=\"ieeesa-legend__icon\" aria-hidden=\"true\">\r\n <use [attr.xlink:href]=\"item.iconUrl\"></use>\r\n </svg>\r\n <p class=\"ieeesa-body-md-16 px-2\">{{ item.label }}</p>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewEncapsulation,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ListHeader, ListItem } from '../../models/list-item.model';\r\nimport { MenuComponent } from '../menu/menu.component';\r\nimport { Menu } from '../../models/menu.model';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType, IconButton } from '@ieeesa-npm/models';\r\nimport { ObserveDomChangeDirective } from '../../directives/observe-dom-change/observe-dom-change.directive';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\nimport { FileDownloadComponent } from '../file-download/file-download.component';\r\nimport { DownloadAttachment } from '../../models/download-file.model';\r\nimport {\r\n CdkDragDrop,\r\n DragDropModule,\r\n moveItemInArray,\r\n} from '@angular/cdk/drag-drop';\r\n@Component({\r\n selector: 'ieeesa-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatListModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n IconButtonComponent,\r\n FileDownloadComponent,\r\n forwardRef(() => SafePipe),\r\n ObserveDomChangeDirective,\r\n DragDropModule,\r\n ],\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ListComponent implements OnDestroy {\r\n listItems!: ListItem[];\r\n listHeader!: ListHeader;\r\n @Output() selectedItemAndAction = new EventEmitter<{\r\n selectedMenu: Menu;\r\n selectedItem: ListItem;\r\n }>();\r\n @Output() reorderedList = new EventEmitter<ListItem[]>();\r\n @Input()\r\n set listDataItems(listItem: ListItem[]) {\r\n this.listItems = listItem;\r\n this.getListItemsPositionAndLevel(this.listItems, 0);\r\n }\r\n get listDataItems(): ListItem[] {\r\n return this.listItems;\r\n }\r\n @Input()\r\n set listHeaderConfig(listHeaderDetail: ListHeader) {\r\n this.listHeader = listHeaderDetail;\r\n }\r\n get listHeaderConfig(): ListHeader {\r\n return this.listHeader;\r\n }\r\n @Output() hyperLinkAndButtonClick = new EventEmitter<Event>();\r\n @Output() downloadSelectedFile = new EventEmitter<\r\n File | DownloadAttachment\r\n >();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n @Input() indentation = this.constants?.list?.defaultIndentation;\r\n dragAndDropIconUrl = this.constants?.list?.dragAndDropIconUrl;\r\n addListButton!: IconButton;\r\n safeType: string = SafeType.HTML;\r\n @Input()\r\n set addListButtonConfig(addListButton: IconButton) {\r\n this.addListButton = addListButton;\r\n }\r\n get addListButtonConfig(): IconButton {\r\n return this.addListButton;\r\n }\r\n @Output() domChangeEvent = new EventEmitter<MutationRecord>();\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n @Input() isReorderRequired = false;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public elementRef: ElementRef) {}\r\n /**\r\n * Emits hyperLinkAndButtonClick event on click of hyper link.\r\n * @param {Event} event\r\n * @memberof ListComponent\r\n */\r\n onAnchorElementClick(event: Event): void {\r\n event.preventDefault();\r\n this.hyperLinkAndButtonClick.emit(event);\r\n }\r\n /**\r\n * Constructs the index position/number and itemLevel for each list item.\r\n * @param {ListItem[]} items\r\n * @param {number} itemLevel\r\n * @param {string} [parentIndex]\r\n * @memberof ListComponent\r\n */\r\n getListItemsPositionAndLevel(\r\n items: ListItem[],\r\n itemLevel: number,\r\n parentIndex?: string\r\n ): void {\r\n items?.forEach((item, index) => {\r\n const position = parentIndex ? parentIndex.slice(-1) === '.' ? `${parentIndex}${index + 1}` : `${parentIndex}.${index + 1}` : `${index + 1}.`;\r\n item.position = position;\r\n item.itemLevel = itemLevel;\r\n const reorderedRank = isNaN(+position.slice(position.length - 1))\r\n ? +position.slice(0, position?.length - 1)\r\n : +position.slice(position?.lastIndexOf('.') + 1);\r\n item.reorderedRank = reorderedRank;\r\n if (item.subItems)\r\n this.getListItemsPositionAndLevel(\r\n item.subItems,\r\n itemLevel + 1,\r\n position\r\n );\r\n });\r\n }\r\n /**\r\n * Emits the selected menu action and the item.\r\n * @param {Menu} event\r\n * @param {ListItem} item\r\n * @memberof ListComponent\r\n */\r\n selectedMenuAction(event: Menu, item: ListItem): void {\r\n this.selectedItemAndAction.emit({\r\n selectedMenu: event,\r\n selectedItem: item,\r\n });\r\n }\r\n /**\r\n * Returns unique identifier for the list.\r\n * @param {number} index\r\n * @param {ListItem} item\r\n * @return {(number | string)}\r\n * @memberof ListComponent\r\n */\r\n trackByFn(index: number, item: ListItem): number | string {\r\n return item.id;\r\n }\r\n /**\r\n * Emits hyperLinkAndButtonClick event on click of button.\r\n * @memberof ListComponent\r\n */\r\n onClickAddItem(): void {\r\n this.hyperLinkAndButtonClick.emit();\r\n }\r\n /**\r\n * Adds click event to the anchor tags whenever dom changes.\r\n * @memberof ListComponent\r\n */\r\n onDomChange(event: MutationRecord) {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.addEventListener('click', this.onAnchorElementClick.bind(this));\r\n });\r\n this.domChangeEvent.emit(event);\r\n }\r\n /**\r\n * Emits downloadSelectedFile event.\r\n * @memberof ListComponent\r\n */\r\n downloadFile(file: File | DownloadAttachment): void {\r\n this.downloadSelectedFile.emit(file);\r\n }\r\n /**\r\n * Triggers when the item is dropped.\r\n * @param {CdkDragDrop} event\r\n * @param {ListItem[]} items\r\n * @param {number} nestingLevel\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n drop(event: CdkDragDrop<any>, items: ListItem[], nestingLevel: number) {\r\n if (event?.previousContainer === event?.container) {\r\n moveItemInArray(items, event.previousIndex, event.currentIndex);\r\n }\r\n if (event.currentIndex !== event.previousIndex) {\r\n this.getListItemsPositionAndLevel(this.listItems, nestingLevel);\r\n this.reorderedList.emit(items);\r\n }\r\n }\r\n /**\r\n * Removing the event listeners on destroy.\r\n * @memberof ListComponent\r\n */\r\n ngOnDestroy(): void {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.removeEventListener('click', this.onAnchorElementClick);\r\n });\r\n }\r\n}\r\n","<div class=\"ieeesa-list-container\">\r\n <div class=\"d-flex\">\r\n <div>\r\n <p *ngIf=\"listHeader?.title\" class=\"ieeesa-title-lg-24 mb-0\">\r\n {{ listHeader.title }}\r\n </p>\r\n <p\r\n *ngIf=\"listHeader?.description\"\r\n class=\"ieeesa-body-md-14 ieeesa-list-description\"\r\n [innerHTML]=\"listHeader.description | safe : safeType\"\r\n ieeesaObserveDomChange\r\n (domChange)=\"onDomChange($event)\"\r\n ></p>\r\n </div>\r\n <ieeesa-icon-button\r\n class=\"ieeesa-add-icon-button\"\r\n *ngIf=\"listHeader?.canShowAddList\"\r\n [iconButton]=\"addListButton\"\r\n (iconButtonClick)=\"onClickAddItem()\"\r\n [ngClass]=\"\r\n addListButton?.disabled\r\n ? 'ieeesa-list-container__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n </div>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveList;\r\n context: { $implicit: listItems, itemLevel: 0 }\r\n \"\r\n >\r\n </ng-container>\r\n</div>\r\n<ng-template #recursiveList let-items let-itemLevel=\"itemLevel\">\r\n <ng-container *ngIf=\"isReorderRequired\">\r\n <mat-list\r\n class=\"ieeesa-list-item\"\r\n cdkDropList\r\n cdkDropListData=\"items\"\r\n (cdkDropListDropped)=\"drop($event, items, itemLevel)\"\r\n >\r\n <ng-container\r\n *ngFor=\"let item of items; let index = index; trackBy: trackByFn\"\r\n >\r\n <div\r\n class=\"ieeesa-list-item-container d-flex\"\r\n [style.marginLeft.px]=\"itemLevel * indentation\"\r\n >\r\n <mat-list-item\r\n [ngClass]=\"{\r\n 'ieeesa-list-item__root-level-item': itemLevel === 0,\r\n 'ieeesa-list-item__subitem': itemLevel > 0\r\n }\"\r\n [cdkDragData]=\"item\"\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"agendaItem; context: { $implicit: item }\"\r\n ></ng-container>\r\n </mat-list-item>\r\n </div>\r\n <ng-container *ngIf=\"item?.subItems\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveList;\r\n context: {\r\n $implicit: item.subItems,\r\n itemLevel: itemLevel + 1\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-list>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isReorderRequired\">\r\n <mat-list class=\"ieeesa-list-item\">\r\n <ng-container\r\n *ngFor=\"let item of items; let index = index; trackBy: trackByFn\"\r\n >\r\n <div\r\n class=\"ieeesa-list-item-container d-flex\"\r\n [style.marginLeft.px]=\"itemLevel * indentation\"\r\n >\r\n <mat-list-item\r\n [ngClass]=\"{\r\n 'ieeesa-list-item__root-level-item': itemLevel === 0,\r\n 'ieeesa-list-item__subitem': itemLevel > 0\r\n }\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"agendaItem; context: { $implicit: item }\"\r\n ></ng-container>\r\n </mat-list-item>\r\n </div>\r\n <ng-container *ngIf=\"item?.subItems\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveList;\r\n context: {\r\n $implicit: item.subItems,\r\n itemLevel: itemLevel + 1\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-list>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #agendaItem let-item>\r\n <div class=\"ieeesa-list-item-child d-flex\">\r\n <span class=\"ieeesa-list-item__item d-flex\">\r\n <svg class=\"drag-icon\" *ngIf=\"isReorderRequired\">\r\n <use [attr.xlink:href]=\"dragAndDropIconUrl\"></use>\r\n </svg>\r\n <span class=\"list-number\">\r\n {{ item?.position }}\r\n </span>\r\n <span>\r\n <span class=\"item-name d-block\">{{ item?.title }}</span>\r\n <span class=\"ieeesa-list-item__desc d-block\" *ngIf=\"item?.description\">\r\n {{ item?.description }}\r\n </span>\r\n <ieeesa-file-download\r\n class=\"ieeesa-list-item__list-file-download\"\r\n *ngIf=\"item?.attachments?.length\"\r\n [fileDownloadAndDeleteConfig]=\"fileDownloadAndDeleteConfig\"\r\n [downloadFiles]=\"item?.attachments\"\r\n (downloadSelectedFile)=\"downloadFile($event)\"\r\n ></ieeesa-file-download>\r\n </span>\r\n </span>\r\n <span class=\"ieeesa-menu__action\">\r\n <ieeesa-menu\r\n *ngIf=\"item?.actionMenus\"\r\n class=\"ieeesa-menu__icon\"\r\n [button]=\"item?.actionIcon\"\r\n [menuItems]=\"item?.actionMenus\"\r\n (menuItemClick)=\"selectedMenuAction($event, item)\"\r\n ></ieeesa-menu>\r\n </span>\r\n </div>\r\n</ng-template>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { ToggleButton } from '../../models/toggle-button.model';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * ToggleButtonComponent allows users to select toggle between group of buttons.\r\n * The component takes an array of ToggleButton objects as an input, where each object contains id, label and isDisabled property. Default the first button is selected when selectedLabel is not provided.\r\n * @class ToggleButtonComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-toggle-button',\r\n standalone: true,\r\n imports: [CommonModule, MatButtonToggleModule],\r\n templateUrl: './toggle-button.component.html',\r\n styleUrls: ['./toggle-button.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ToggleButtonComponent implements OnInit {\r\n /**\r\n * Label of the selected button. Default is an empty string.\r\n * @type {string}\r\n */\r\n @Input() selectedLabel = '';\r\n /**\r\n * An array of ToggleButton objects that represent the buttons in the toggle group.\r\n * Each ToggleButton object must have properties: id, label, and isDisabled.\r\n * @type {ToggleButton[]}\r\n */\r\n @Input() buttons!: ToggleButton[];\r\n /**\r\n * Event emitter that emits the selected ToggleButton object when a button is clicked.\r\n * @type {EventEmitter<ToggleButton>}\r\n */\r\n @Output() toggleSelected: EventEmitter<ToggleButton> =\r\n new EventEmitter<ToggleButton>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n defaultTickIconURL = this.constants?.chips?.icons?.check?.iconURL;\r\n @Input() canShowLabel = true;\r\n selectedId = 0;\r\n\r\n /**\r\n * By default, the first button in a group is selected when selectedLabel is not provided.\r\n * @return -returns nothing\r\n */\r\n ngOnInit(): void {\r\n this.selectedLabel = !this.selectedLabel\r\n ? this.buttons[0]?.label\r\n : this.selectedLabel;\r\n this.selectedId = this.buttons[0]?.id;\r\n }\r\n /**\r\n * Updates the selectedLabel with the clicked button label and emits the toggleSelected event with the selected ToggleButton object.\r\n * @param {ToggleButton} button -Selected ToggleButton object.\r\n * @return -returns nothing\r\n */\r\n toggleButtonClicked(button: ToggleButton): void {\r\n this.selectedLabel = button.label;\r\n this.selectedId = button.id;\r\n this.toggleSelected.emit(button);\r\n }\r\n\r\n /**\r\n * TrackByFunction is called for each item in the collection and return a unique identifier for that item.\r\n * @param {number} index -The index of the current item in the collection.\r\n * @param {ToggleButton} button -The current button object from the collection being iterated.\r\n * @return {number} -returns number\r\n */\r\n trackByFn(index: number, button: ToggleButton): number {\r\n return button.id;\r\n }\r\n}\r\n","<mat-button-toggle-group\r\n class=\"ieeesa-toggle-btn-group\"\r\n [value]=\"selectedLabel\"\r\n>\r\n <mat-button-toggle\r\n class=\"ieeesa-toggle-btn-group__button\"\r\n *ngFor=\"let button of buttons; trackBy: trackByFn\"\r\n [value]=\"button.label\"\r\n [disabled]=\"button?.isDisabled ? button.isDisabled : false\"\r\n (change)=\"toggleButtonClicked(button)\"\r\n >\r\n <ng-container\r\n *ngIf=\"button?.canShowTickSelection && button?.id === selectedId\"\r\n >\r\n <svg\r\n class=\"ieeesa-toggle-btn-group__button__icon me-1\"\r\n *ngIf=\"button?.tickIconURL; else defaultTickIcon\"\r\n >\r\n <use [attr.xlink:href]=\"button?.tickIconURL\"></use>\r\n </svg>\r\n <ng-template #defaultTickIcon>\r\n <svg class=\"ieeesa-toggle-btn-group__button__icon me-1\">\r\n <use [attr.xlink:href]=\"defaultTickIconURL\"></use>\r\n </svg>\r\n </ng-template>\r\n </ng-container>\r\n <svg\r\n class=\"ieeesa-toggle-btn-group__button__icon me-1\"\r\n *ngIf=\"button?.isIconNeeded ?? false\"\r\n >\r\n <use [attr.xlink:href]=\"button?.iconURL\"></use>\r\n </svg>\r\n\r\n <span *ngIf=\"canShowLabel\" class=\"ieeesa-toggle-btn-group__button__label\">\r\n {{ button.label }}</span\r\n >\r\n </mat-button-toggle>\r\n</mat-button-toggle-group>\r\n","import {\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Inject,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogModule,\r\n MatDialogRef,\r\n} from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ModalType } from '@ieeesa-npm/models';\r\nimport { ToggleButtonComponent } from '../../components/toggle-button/toggle-button.component';\r\nimport { ToggleButton } from '../../models/toggle-button.model';\r\nimport * as modalInfo from '../../assets/constants.json';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * This component encapsulates the functionality of a modal dialog and implements reusable contents part of the modal components such as text content, loading another component into the modal and emitting modal events to consumed component.\r\n * It utilizes Angular Material's MatDialog module to display the modal dialog.\r\n * @usageNotes -Pass ModalComponent and data options as parameters to MatDialog open method as given below\r\n this.dialog.open(ConfirmationDialogComponent, {data: {}})\r\n * @class ModalComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-modal',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n ToggleButtonComponent,\r\n MatDialogModule,\r\n ],\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalComponent implements OnInit, OnDestroy {\r\n @ViewChild('componentContainer', { read: ViewContainerRef, static: true })\r\n componentContainer!: ViewContainerRef;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentRef!: ComponentRef<any>;\r\n formSubmit = new EventEmitter();\r\n submitFormResponse = new EventEmitter();\r\n formCancel = new EventEmitter();\r\n toggleButtonClicked = new EventEmitter();\r\n isComponentLoaded = false;\r\n heading = '';\r\n subHeading = '';\r\n promptMessage = '';\r\n leftButtonLabel = '';\r\n rightButtonLabel = '';\r\n closeAriaLabel = modalInfo?.ariaLabel?.close;\r\n toggleButtons!: ToggleButton[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentReference: any;\r\n modalType!: ModalType;\r\n isCloseNeeded = false;\r\n modalConfirm = new EventEmitter();\r\n canCloseModal = true;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentData: any;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public dialogRef: MatDialogRef<ModalComponent>,\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-explicit-any\r\n @Inject(MAT_DIALOG_DATA) public modalData: any // eslint-disable-next-line no-empty-function, @typescript-eslint/no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initializes the component.\r\n * @return -returns nothing\r\n */\r\n ngOnInit(): void {\r\n this.heading = this.modalData?.heading;\r\n this.subHeading = this.modalData?.subHeading;\r\n this.promptMessage = this.modalData?.promptMessage;\r\n this.leftButtonLabel = this.modalData?.leftButtonLabel;\r\n this.rightButtonLabel = this.modalData?.rightButtonLabel;\r\n this.toggleButtons = this.modalData?.toggleButtons;\r\n this.componentReference = this.modalData?.componentReference;\r\n this.modalType = this.modalData?.modalType;\r\n this.isCloseNeeded = this.modalData?.isCloseNeeded;\r\n this.canCloseModal = this.modalData?.canCloseModal ?? true;\r\n this.componentData = this.modalData?.componentData;\r\n if (this.componentReference) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n /**\r\n * Emit onToggleButtonClicked event when a toggle button is selected.\r\n * @param {ToggleButton} selected -Selected toggle button object.\r\n */\r\n onToggleButtonSelect(selected: ToggleButton) {\r\n if (this.toggleButtons.length > 0) {\r\n this.heading = selected?.label;\r\n }\r\n this.toggleButtonClicked.emit(selected);\r\n }\r\n\r\n /**\r\n * Loads the component into the view container.\r\n */\r\n loadComponent() {\r\n if (this.isComponentLoaded) {\r\n this.componentRef.destroy();\r\n this.componentContainer.clear();\r\n }\r\n this.componentRef = this.componentContainer.createComponent(\r\n this.componentReference\r\n );\r\n // Generic data passing — pass data to dynamic component via the input name specified in modalData\r\n if (this.modalData?.data2DynamicComponent !== null && this.modalData?.data2DynamicComponent !== undefined) {\r\n const inputName = this.modalData?.dataInputName || 'personalizedUserIdleSessionInfo';\r\n if (inputName in this.componentRef.instance) {\r\n this.componentRef.instance[inputName] = this.modalData.data2DynamicComponent;\r\n }\r\n }\r\n this.isComponentLoaded = true;\r\n if (\r\n this.modalType === ModalType.FORM ||\r\n this.modalType === ModalType.FORM_AND_CONTENT\r\n ) {\r\n this.componentRef?.instance?.submitFormResponse\r\n ?.pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (result: any) => {\r\n this.submitFormResponse.emit(result);\r\n }\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.componentRef?.instance?.formCancel\r\n ?.pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .subscribe((result: any) => {\r\n this.formCancel.emit(result);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handles the confirmation event.\r\n * @param {boolean} value - The confirmation value.\r\n */\r\n onConfirm(value: boolean) {\r\n this.modalConfirm.emit(value);\r\n this.dialogRef.close();\r\n }\r\n /**\r\n * Closes modal based on canCloseModal and emits an event.\r\n * @param {boolean} value\r\n * @memberof ModalComponent\r\n */\r\n onModalClose(value: boolean): void {\r\n if (this.canCloseModal) this.dialogRef.close();\r\n this.modalConfirm.emit(value);\r\n }\r\n /**\r\n * Returns dialog type\r\n * @return {number} value-Dialog type enum\r\n */\r\n getModalType(): boolean {\r\n return (\r\n this.modalType === ModalType.DIALOG ||\r\n this.modalType === ModalType.CONTENT\r\n );\r\n }\r\n\r\n /**\r\n * Cleans up resources when the component is destroyed.\r\n */\r\n ngOnDestroy() {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.componentRef = null as any;\r\n }\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-modal\">\r\n <div mat-dialog-title class=\"ieeesa-modal-title px-0 m-0\">\r\n <h4\r\n class=\"ieeesa-modal-title__heading ieeesa-headline-lg-32 my-0\"\r\n *ngIf=\"heading\"\r\n >\r\n <span>{{ heading }}</span>\r\n </h4>\r\n <p\r\n class=\"ieeesa-modal-title__prompt-message ieeesa-headline-sm-26 m-0\"\r\n *ngIf=\"promptMessage\"\r\n >\r\n <span>{{ promptMessage }}</span>\r\n </p>\r\n <p\r\n class=\"ieeesa-modal-title__sub-heading ieeesa-body-md-14 text-left m-0\"\r\n *ngIf=\"subHeading\"\r\n >\r\n {{ subHeading }}\r\n </p>\r\n <ieeesa-toggle-button\r\n *ngIf=\"toggleButtons && toggleButtons.length > 0\"\r\n class=\"float-end\"\r\n [buttons]=\"toggleButtons\"\r\n (toggleSelected)=\"onToggleButtonSelect($event)\"\r\n ></ieeesa-toggle-button>\r\n </div>\r\n <div mat-dialog-content class=\"ieeesa-label-lg-16 px-0\">\r\n <ng-container #componentContainer></ng-container>\r\n </div>\r\n <div\r\n mat-dialog-actions\r\n class=\"d-flex justify-content-end p-0 flex-nowrap\"\r\n *ngIf=\"getModalType()\"\r\n >\r\n <button\r\n mat-button\r\n class=\"mat-secondary-button align-self-stretch\"\r\n (click)=\"onConfirm(false)\"\r\n >\r\n {{ leftButtonLabel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-primary-button align-self-stretch\"\r\n (click)=\"onConfirm(true)\"\r\n >\r\n {{ rightButtonLabel }}\r\n </button>\r\n </div>\r\n <button\r\n *ngIf=\"isCloseNeeded\"\r\n [attr.aria-label]=\"closeAriaLabel\"\r\n (click)=\"onModalClose(false)\"\r\n class=\"ieeesa-modal__close-button\"\r\n >\r\n <i class=\"ieeesa-modal__close-icon fa fa-close\"></i>\r\n </button>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogRef,\r\n MatDialogModule,\r\n} from \"@angular/material/dialog\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { AlignType, ConfirmationModalData } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * ModalConfirmationComponent is used to get user confirmation and this component should be invoked by using Angular material MatDialog open method.\r\n * @usageNotes -Pass ModalConfirmationComponent and data options as parameters to MatDialog open method as given below\r\n this.dialog.open(ModalConfirmationComponent, {data: {}})\r\n * @class ModalConfirmationComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-modal-confirmation',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './modal-confirmation.component.html',\r\n styleUrls: ['./modal-confirmation.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalConfirmationComponent {\r\n alignmentType = AlignType;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public confirmationModalData: ConfirmationModalData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<ModalConfirmationComponent> // eslint-disable-next-line no-empty-function\r\n ) {\r\n dialogRef.disableClose = true;\r\n }\r\n\r\n /**\r\n * Handles the user confirmation and emits the confirmation value using the confirmationEvent.\r\n * @param {boolean} confirmation -A boolean value indicating whether the user confirmed (true) or canceled (false) the action.\r\n * @memberof ModalConfirmationComponent\r\n * @returns - returns nothing\r\n */\r\n onConfirm(confirmation: boolean): void {\r\n this.dialogRef.close(confirmation);\r\n }\r\n}\r\n","<div class=\"ieeesa-confirmation\">\r\n <div mat-dialog-content class=\"ieeesa-headline-sm-26 row\">\r\n <span class=\"ieeesa-body-md-14 ieeesa-confirmation__content col px-0\">\r\n <ng-container *ngIf=\"confirmationModalData.messageParts?.length; else plainMessage\">\r\n <ng-container *ngFor=\"let part of confirmationModalData.messageParts\">\r\n <strong *ngIf=\"part.bold\">{{ part.text }}</strong>\r\n <ng-container *ngIf=\"!part.bold\">{{ part.text }}</ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #plainMessage>{{ confirmationModalData.promptMessage }}</ng-template>\r\n </span>\r\n </div>\r\n <div\r\n mat-dialog-actions\r\n class=\"d-flex p-2 row flex-nowrap\"\r\n [ngClass]=\"{\r\n 'justify-content-start': confirmationModalData.actionButtonAlign === alignmentType.LEFT,\r\n 'justify-content-center': confirmationModalData.actionButtonAlign === alignmentType.MIDDLE,\r\n 'justify-content-end': confirmationModalData.actionButtonAlign === alignmentType.RIGHT,\r\n \r\n }\"\r\n >\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button col-sm-6\"\r\n (click)=\"onConfirm(false)\"\r\n >\r\n {{ confirmationModalData.leftButtonLabel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-primary-button col-sm-6\"\r\n (click)=\"onConfirm(true)\"\r\n >\r\n {{ confirmationModalData.rightButtonLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogModule,\r\n MatDialogRef,\r\n} from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { InfoModalData } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * ModalInfoComponent is a simple informational dialog that displays a centered message\r\n * with a single dismissal button. \r\n *\r\n * @usageNotes - Pass ModalInfoComponent and data options as parameters to MatDialog open method:\r\n * this.dialog.open(ModalInfoComponent, { data: { message: '...', buttonLabel: 'OK' } })\r\n * @class ModalInfoComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-modal-info',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './modal-info.component.html',\r\n styleUrls: ['./modal-info.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalInfoComponent {\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public data: InfoModalData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<ModalInfoComponent>\r\n ) {\r\n dialogRef.disableClose = true;\r\n }\r\n\r\n /**\r\n * Closes the info dialog.\r\n * @memberof ModalInfoComponent\r\n */\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div class=\"ieeesa-modal-info\">\r\n <div mat-dialog-content class=\"ieeesa-headline-sm-26 row\">\r\n <span class=\"ieeesa-body-md-16\r\n ieeesa-modal-info__content col px-0\">\r\n {{ data.message }}\r\n </span>\r\n </div>\r\n <div\r\n mat-dialog-actions\r\n class=\"d-flex p-2 row flex-nowrap justify-content-center\"\r\n >\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button\"\r\n (click)=\"onClose()\"\r\n [attr.aria-label]=\"data.buttonLabel\"\r\n >\r\n {{ data.buttonLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MediaMatcher } from '@angular/cdk/layout';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SideMenuItem } from '../../models/navigation-menu.model';\r\nimport { provideAnimations } from '@angular/platform-browser/animations';\r\n/**\r\n * The component accepts menu items data as configurable input parameter and the menus are populated based on it.\r\n * The component checks the defined mobile device resolution and accordingly updates the side navigation menu view.\r\n * The component accepts menu opened/closed state as an input parameter. By default, the side menu is configured to open state.\r\n * @export\r\n * @class NavigationMenuComponent\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-navigation-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatSidenavModule,\r\n MatListModule,\r\n MatExpansionModule,\r\n MatButtonModule,\r\n RouterModule,\r\n ],\r\n providers: [provideAnimations()],\r\n templateUrl: './navigation-menu.component.html',\r\n styleUrls: ['./navigation-menu.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NavigationMenuComponent implements OnDestroy {\r\n @Input() isMenuOpen = true;\r\n @Input() sideMenu!: SideMenuItem[];\r\n @ViewChild('navMenu') navMenu!: MatSidenav;\r\n mobileQuery: MediaQueryList;\r\n mobileQueryListener: () => void;\r\n\r\n constructor(\r\n public changeDetectorRef: ChangeDetectorRef,\r\n public media: MediaMatcher\r\n ) {\r\n this.mobileQuery = media.matchMedia('(max-width: 576px)');\r\n this.mobileQueryListener = () => changeDetectorRef.detectChanges();\r\n this.mobileQuery.addEventListener('change', () => {\r\n this.mobileQueryListener();\r\n });\r\n }\r\n /**\r\n * Takes the index and the current item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @param {array} menuItems\r\n * @return {number}\r\n * @memberof NavigationMenuComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n trackByFn(index: number, menuItems: any): number {\r\n return menuItems.id;\r\n }\r\n /**\r\n * This method returns the status for menu to be opened or closed by default, basis on device resolution\r\n * @return {boolean}\r\n * @memberof NavigationMenuComponent\r\n */\r\n isMenuOpened(): boolean {\r\n return this.mobileQuery.matches ? false : this.isMenuOpen;\r\n }\r\n\r\n /**\r\n * Toggles the navigation menu state.\r\n * @memberof NavigationMenuComponent\r\n */\r\n toggleNavMenu(): void {\r\n if (this.mobileQuery?.matches) {\r\n this.navMenu?.toggle();\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n this.mobileQuery.removeEventListener('change', () => {\r\n this.mobileQueryListener();\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-sidenav\"\r\n [ngClass]=\"mobileQuery?.matches ? 'ieeesa-sidenav--mobile' : ''\"\r\n>\r\n <mat-sidenav-container class=\"ieeesa-sidenav__container\">\r\n <mat-sidenav\r\n role=\"navigation\"\r\n #navMenu\r\n [opened]=\"isMenuOpened()\"\r\n [mode]=\"mobileQuery.matches ? 'over' : 'side'\"\r\n [fixedInViewport]=\"mobileQuery.matches\"\r\n [ngClass]=\"{ 'ieeesa-sidenav__container__mobile': mobileQuery.matches }\"\r\n >\r\n <mat-nav-list>\r\n <ng-template #recursiveMenuList let-menuItems>\r\n <ng-container\r\n *ngFor=\"let item of menuItems; let i = index; trackBy: trackByFn\"\r\n >\r\n <ng-container *ngIf=\"item?.subMenuItems?.length; else subMenu\">\r\n <mat-accordion>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div\r\n class=\"d-flex align-items-center ieeesa-label-lg-16 ieeesa-sidenav__container__menu-item\"\r\n >\r\n <svg\r\n *ngIf=\"item?.iconURL\"\r\n class=\"ieeesa-sidenav__container__menu-item-icon\"\r\n aria-label=\"\"\r\n >\r\n <use [attr.xlink:href]=\"item.iconURL\"></use>\r\n </svg>\r\n {{ item.displayName }}\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveMenuList;\r\n context: { $implicit: item.subMenuItems }\r\n \"\r\n ></ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-template #subMenu>\r\n <a\r\n mat-list-item\r\n [routerLink]=\"[item.routeURL]\"\r\n (click)=\"toggleNavMenu()\"\r\n routerLinkActive=\"active-item\"\r\n >\r\n <div\r\n class=\"ieeesa-label-lg-16 d-flex align-items-center ieeesa-sidenav__container__menu-item\"\r\n >\r\n <svg\r\n *ngIf=\"item?.iconURL\"\r\n class=\"ieeesa-sidenav__container__menu-item-icon\"\r\n aria-label=\"\"\r\n >\r\n <use [attr.xlink:href]=\"item.iconURL\"></use>\r\n </svg>\r\n {{ item.displayName }}\r\n </div>\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveMenuList;\r\n context: { $implicit: sideMenu }\r\n \"\r\n ></ng-container>\r\n </mat-nav-list>\r\n </mat-sidenav>\r\n </mat-sidenav-container>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\n/**\r\n * The NotificationComponent displays a notification with a heading, title, content, and an optional button.\r\n * Component can be reused in page not found, access denied, session expired notification, logged out pages.\r\n * @class NotificationComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-notification',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n forwardRef(() => SafePipe),\r\n ],\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n})\r\nexport class NotificationComponent {\r\n @Input() heading!: string;\r\n @Input() title!: string;\r\n @Input() content!: string;\r\n @Input() buttonLabel!: string;\r\n @Input() buttonIcon = true;\r\n @Input() headingIconURL!:string;\r\n @Input() buttonIconURL!:string;\r\n @Output() notify = new EventEmitter();\r\n safeType: string = SafeType.HTML;\r\n\r\n /**\r\n * Emits the notify event on clicking notify button.\r\n */\r\n onClick() {\r\n this.notify.emit();\r\n }\r\n}\r\n","<div class=\"ieeesa-notification flex-align-center row\">\r\n <div class=\"ieeesa-notification__body col-md-4 col-lg-4 p-4\">\r\n <svg class=\"ieeesa-notification__header-icon\" *ngIf=\"headingIconURL\">\r\n <use [attr.xlink:href]=\"headingIconURL\"></use>\r\n </svg>\r\n <h1\r\n class=\"ieeesa-notification__heading ieeesa-display-lg-57 text-capitalize\"\r\n *ngIf=\"heading\"\r\n >\r\n {{ heading }}\r\n </h1>\r\n <p class=\"ieeesa-notification__title ieeesa-title-lg-bold-24\">\r\n {{ title }}\r\n </p>\r\n <p\r\n class=\"ieeesa-notification__message ieeesa-title-md-18\"\r\n [innerHTML]=\"content | safe : safeType\"\r\n ></p>\r\n <button *ngIf=\"buttonLabel\"\r\n mat-button\r\n color=\"primary\"\r\n class=\"ieeesa-notification__button ieeesa-label-lg-bold-16 mat-primary-button\"\r\n (click)=\"onClick()\"\r\n >\r\n <svg class=\"ieeesa-notification__button__icon me-2\" *ngIf=\"buttonIconURL\">\r\n <use [attr.xlink:href]=\"buttonIconURL\"></use>\r\n </svg> \r\n <i\r\n *ngIf=\"buttonIcon && !buttonIconURL\"\r\n class=\"fa-solid fa-arrow-left\"\r\n ></i>\r\n {{ buttonLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SetBackgroundDirective } from '../../directives/set-background/set-background.directive';\r\nimport { AppConfigInfo } from '../../models/app-config-info.model';\r\nimport { Router } from '@angular/router';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * Provides reusable implementation to pre-login page by getting the application config information as an input to the component.\r\n * @export\r\n * @class WelcomeComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-welcome',\r\n standalone: true,\r\n imports: [CommonModule, MatButtonModule, SetBackgroundDirective],\r\n templateUrl: './welcome.component.html',\r\n styleUrls: ['./welcome.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class WelcomeComponent implements OnInit {\r\n /**\r\n * AppConfigInfo data can be passed as input while calling this component using selector and it can also be passed as a route data.\r\n * @usage <nesc-welcome [appConfigInfo]=\"appConfigInfo\"></nesc-welcome> or routes: Route[]=[{ path: 'landing', component: WelcomeComponent, data:{appConfigInfo:appConfigInfo} }]\r\n * @type {AppConfigInfo}\r\n * @memberof WelcomeComponent\r\n */\r\n @Input() appConfigInfo: AppConfigInfo = {\r\n appTitle: '',\r\n appDescription: '',\r\n cookieName: '',\r\n ssoSignOutUrl: '',\r\n domainUrl: '',\r\n createAccountUrl: '',\r\n };\r\n @Output() signInClick: EventEmitter<Event> = new EventEmitter<Event>();\r\n @Output() signUpClick: EventEmitter<Event> = new EventEmitter<Event>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n url: string = constants?.welcome?.buttons?.[0]?.url;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private router: Router) {}\r\n\r\n ngOnInit(): void {\r\n this.appConfigInfo.createAccountUrl =\r\n this.appConfigInfo.createAccountUrl ?? this.url;\r\n }\r\n\r\n /**\r\n * Navigates to passed sign up route url or emits the click event in case route url is not there.\r\n * @param {Event} event\r\n * @memberof WelcomeComponent\r\n */\r\n onCreateAccountClick(event: Event): void {\r\n if (this.appConfigInfo?.domainUrl) {\r\n const createAccountUrl = `${this.appConfigInfo?.createAccountUrl}?url=${this.appConfigInfo?.domainUrl}/&signinurl=${this.appConfigInfo?.domainUrl}${this.appConfigInfo?.signInRouteUrl}`;\r\n window.open(createAccountUrl, '_blank');\r\n } else {\r\n this.signUpClick.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to passed sign in route url or emits the click event in case route url is not there.\r\n * @param {Event} event\r\n * @memberof WelcomeComponent\r\n */\r\n onSignInClick(event: Event): void {\r\n if (this.appConfigInfo?.signInRouteUrl) {\r\n this.router.navigate([this.appConfigInfo?.signInRouteUrl]);\r\n } else {\r\n this.signInClick.emit(event);\r\n }\r\n }\r\n}\r\n","<div\r\n *ngIf=\"appConfigInfo\"\r\n class=\"ieeesa-welcome d-flex justify-content-center\"\r\n ieeesaSetBackground\r\n [background]=\"appConfigInfo.background ?? { color: '', imgURL: '' }\"\r\n>\r\n <div\r\n class=\"jumbotron ieeesa-welcome__note d-flex flex-column justify-content-between px-4 px-sm-5 px-md-5 px-lg-5 py-4 mx-2 mx-sm-4 mx-md-4 mx-lg-4 my-5\"\r\n >\r\n <ng-container>\r\n <h1 class=\"ieeesa-display-md-47 ieeesa-welcome__note--heading\">\r\n {{ appConfigInfo.appTitle }}\r\n </h1>\r\n <p class=\"ieeesa-title-lg-24 ieeesa-welcome__note--description\">\r\n {{ appConfigInfo.appDescription }}\r\n </p>\r\n </ng-container>\r\n <div\r\n class=\"ieeesa-welcome__action d-flex align-items-center justify-content-between justify-content-sm-center justify-content-md-center justify-content-lg-center justify-content-xl-center flex-column flex-sm-row flex-md-row flex-lg-row flex-xl-row\"\r\n >\r\n <button\r\n class=\"my-4 my-sm-5 my-md-5 my-lg-5 no-bg-color-btn btn ieeesa-welcome__action--register d-flex align-items-center justify-content-center ieeesa-label-lg-bold-16 order-2 order-sm-1 order-md-1 order-lg-1 order-xl-1\"\r\n (click)=\"onCreateAccountClick($event)\"\r\n rel=\"noopener noreferrer\"\r\n [attr.ariaLabel]=\"constants?.welcome?.buttons?.[0]?.ariaLabel\"\r\n target=\"_blank\"\r\n >\r\n {{ constants?.welcome?.buttons?.[0]?.label }}\r\n </button>\r\n <button\r\n mat-raised-button\r\n mat-button\r\n class=\"mx-0 my-3 mx-sm-5 mx-md-5 mx-lg-5 mat-primary-button ieeesa-welcome__action--sign-in ieeesa-label-lg-bold-16 order-1 order-sm-2 order-md-2 order-lg-2 order-xl-2\"\r\n (click)=\"onSignInClick($event)\"\r\n >\r\n {{ constants?.welcome?.buttons?.[1]?.label }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum ChipOrientation {\r\n HORIZONTAL = 'HORIZONTAL',\r\n VERTICAL = 'VERTICAL',\r\n}\r\nexport enum ChipsType {\r\n STATIC = ' STATIC',\r\n TOGGLE = 'TOGGLE',\r\n INPUT = 'INPUT',\r\n AUTOCOMPLETE = 'AUTOCOMPLETE',\r\n FORM_CONTROL = 'FORM_CONTROL',\r\n AVATAR = 'AVATAR',\r\n}\r\nexport enum FilterOptionType {\r\n CHECKBOX = 'CHECKBOX',\r\n DROPDOWN = 'DROPDOWN',\r\n}\r\n\r\nexport interface ChipOption {\r\n id: number | string;\r\n name: string;\r\n checked: boolean;\r\n disabled?: boolean;\r\n chipType: ChipsType;\r\n optionType?: FilterOptionType;\r\n canShowSelection?: boolean;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatChipListbox,\r\n MatChipOption,\r\n MatChipsModule,\r\n} from '@angular/material/chips';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport {\r\n ChipOption,\r\n ChipOrientation,\r\n ChipsType,\r\n} from '../../models/chip-option.model';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * Chips component allow users to view information, make selections, filter content.\r\n * @export\r\n * @class ChipComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-chips',\r\n standalone: true,\r\n imports: [CommonModule, MatChipsModule],\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n})\r\nexport class ChipsComponent implements OnInit, OnDestroy {\r\n defaultVisibleChips!: ChipOption[];\r\n isMobileView = false;\r\n labelViewAllOrLess!: string;\r\n constants = constants;\r\n chipsType = ChipsType;\r\n orientations = ChipOrientation;\r\n activeLabel: string = this.constants?.chips?.label?.viewLess;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n private chips!: ChipOption[];\r\n @Input()\r\n set chipGroup(value: ChipOption[]) {\r\n this.chips = value;\r\n this.viewChips(this.activeLabel);\r\n }\r\n get chipGroup(): ChipOption[] {\r\n return this.chips;\r\n }\r\n @Input() chipOrientation: ChipOrientation = this.orientations.HORIZONTAL;\r\n @Input() noOfDefaultVisibleChips: number =\r\n this.constants?.chips?.noOfDefaultVisibleChips;\r\n @Input() hasViewMoreForDesktop = false;\r\n @Input() hasViewMoreForMobile = false;\r\n @Input() avatar!: IconButton;\r\n @Input() arrow!: IconButton;\r\n @Input() check!: IconButton;\r\n @ViewChild(MatChipListbox) chipListBox!: MatChipListbox;\r\n @Input() isViewMoreNeeded = false;\r\n private hasChipToggledInfo!: boolean;\r\n @Input()\r\n get hasChipToggled() {\r\n return this.hasChipToggledInfo;\r\n }\r\n set hasChipToggled(value: boolean) {\r\n this.hasChipToggledInfo = value;\r\n if (value) {\r\n const lastSelectedChip = this.chipListBox?.selected as MatChipOption;\r\n if (lastSelectedChip) lastSelectedChip.selected = false;\r\n }\r\n }\r\n @Input() viewAllLabel: string = this.constants?.chips?.label?.viewAll;\r\n @Input() viewLessLabel: string = this.constants?.chips?.label?.viewLess;\r\n @Output() selectedChip = new EventEmitter();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public breakpointObserverService: BreakpointObserverService) {}\r\n ngOnInit(): void {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n this.getViewMore();\r\n this.viewChips(this.activeLabel);\r\n });\r\n }\r\n /**\r\n * Onclick the chip, it emits selectedChip event with selected chip.\r\n * @param {ChipOption} chip\r\n * @memberof ChipComponent\r\n */\r\n onChipClick(chip: ChipOption): void {\r\n chip.checked = !chip.checked;\r\n this.selectedChip.emit(chip);\r\n this.chipGroup.forEach((chipOption) => {\r\n if (chipOption.id !== chip.id) chipOption.checked = false;\r\n });\r\n }\r\n /**\r\n * Shows list of chips on the basis of view more/less button state.\r\n * @memberof ChipComponent\r\n */\r\n viewChips(clickedLabel: string): void {\r\n if (this.isViewMoreNeeded) {\r\n if (clickedLabel === this.constants?.chips?.label?.viewLess) {\r\n this.activeLabel = this.constants?.chips?.label?.viewLess;\r\n this.defaultVisibleChips = this.chips?.slice(\r\n 0,\r\n this.constants?.chips?.noOfDefaultVisibleChips\r\n );\r\n this.labelViewAllOrLess = this.constants?.chips?.label?.viewAll;\r\n } else {\r\n this.defaultVisibleChips = this.chips;\r\n this.labelViewAllOrLess = this.constants?.chips?.label?.viewLess;\r\n this.activeLabel = this.constants?.chips?.label?.viewAll;\r\n }\r\n } else {\r\n this.defaultVisibleChips = this.chips;\r\n }\r\n }\r\n /**\r\n * Sets the isViewMoreNeeded value based on hasViewMore and isMobileView values.\r\n * @memberof ChipsComponent\r\n */\r\n getViewMore(): void {\r\n this.isViewMoreNeeded =\r\n (this.hasViewMoreForDesktop && !this.isMobileView) ||\r\n (this.hasViewMoreForMobile && this.isMobileView);\r\n }\r\n /**\r\n * Allows Angular to detect the specific chip option that needs to change or be added by tracking option unique Id.\r\n * @param {number} index\r\n * @param {ChipOption} option\r\n * @return {*} {(number | string)}\r\n * @memberof ChipComponent\r\n */\r\n trackById(index: number, option: ChipOption): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-chip\">\r\n <mat-chip-listbox\r\n [attr.aria-label]=\"constants?.chips?.ariaLabel?.chipsList\"\r\n [ngClass]=\"\r\n chipOrientation === orientations.VERTICAL\r\n ? 'mat-mdc-chip-set-stacked'\r\n : ''\r\n \"\r\n >\r\n <mat-chip-option\r\n *ngFor=\"let chip of defaultVisibleChips; trackBy: trackById\"\r\n (selectionChange)=\"onChipClick(chip)\"\r\n [attr.aria-label]=\"chip?.name\"\r\n [ngClass]=\"\r\n chip?.checked && chip?.canShowSelection ? 'selected-checked-state' : ''\r\n \"\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <ng-container *ngIf=\"chip?.chipType === chipsType.AVATAR\">\r\n <svg\r\n class=\"ieeesa-chip__svg-avatar\"\r\n *ngIf=\"avatar?.iconURL\"\r\n matChipAvatar\r\n >\r\n <use [attr.xlink:href]=\"avatar?.iconURL\"></use>\r\n </svg>\r\n </ng-container>\r\n <ng-container *ngIf=\"chip?.canShowSelection\">\r\n <svg class=\"ieeesa-chip__svg-check-icon\" *ngIf=\"check?.iconURL\">\r\n <use [attr.xlink:href]=\"check?.iconURL\"></use>\r\n </svg>\r\n </ng-container>\r\n <p class=\"ieeesa-label-lg-bold-16 m-0\">{{ chip?.name }}</p>\r\n <ng-container *ngIf=\"chip?.chipType === chipsType.TOGGLE\">\r\n <svg\r\n [ngClass]=\"\r\n hasChipToggled && chip?.checked\r\n ? 'ieeesa-chip__selected-state'\r\n : 'ieeesa-chip__unselected-state'\r\n \"\r\n class=\"ieeesa-chip__svg-trailing-icon\"\r\n *ngIf=\"arrow?.iconURL\"\r\n matChipTrailingIcon\r\n >\r\n <use [attr.xlink:href]=\"arrow?.iconURL\"></use>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </mat-chip-option>\r\n </mat-chip-listbox>\r\n <button\r\n *ngIf=\"isViewMoreNeeded && chipGroup.length > noOfDefaultVisibleChips\"\r\n (click)=\"viewChips(labelViewAllOrLess)\"\r\n class=\"ieeesa-view-more-or-less-button ieeesa-label-lg-bold-16\"\r\n >\r\n {{ labelViewAllOrLess }}\r\n </button>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n ViewEncapsulation,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { CheckboxOption, IconButton, SelectOption } from '@ieeesa-npm/models';\r\nimport { ChipOption, FilterOptionType } from '../../models/chip-option.model';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { FiltersAndOptions } from '../../models/filters-options.model';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SelectComponent } from '../../components/select/select.component';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\n\r\n/**\r\n * Provides an implementation for group of filter.\r\n * @export\r\n * @class FilterComponent\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-filter',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatCheckboxModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n ChipsComponent,\r\n CheckboxComponent,\r\n IconButtonComponent,\r\n ReactiveFormsModule,\r\n MatSelectModule,\r\n SelectComponent,\r\n ],\r\n templateUrl: './filter.component.html',\r\n styleUrls: ['./filter.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FilterComponent implements OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n arrow: IconButton = this.constants?.chips?.icons?.arrow;\r\n check: IconButton = this.constants?.chips?.icons?.check;\r\n removeIcon: IconButton = this.constants?.chips?.icons?.remove;\r\n isFilterOpened = false;\r\n selectedCheckboxes!: CheckboxOption[];\r\n onFilterToggle = false;\r\n isFilterActive = false;\r\n isMobileView = false;\r\n isApplyButtonDisabled = true;\r\n filtersAndOptions = new Map<number | string, CheckboxOption[]>();\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n recreateCheckboxOptionsControl!: CheckboxOption[];\r\n @ViewChild(SelectComponent) selectComponent!: SelectComponent;\r\n private filteredTypeOptionsInfo!: ChipOption[];\r\n private selectedFilterOptionType: FilterOptionType =\r\n FilterOptionType.CHECKBOX;\r\n @Input() set filterOptionType(optionType: FilterOptionType) {\r\n this.selectedFilterOptionType = optionType;\r\n }\r\n get filterOptionType() {\r\n return this.selectedFilterOptionType;\r\n }\r\n optionsType = FilterOptionType;\r\n @Input()\r\n set appliedFilterOptions(options: ChipOption[]) {\r\n this.filteredTypeOptionsInfo = options;\r\n }\r\n get appliedFilterOptions() {\r\n return this.filteredTypeOptionsInfo;\r\n }\r\n @Input() filterButton: IconButton = this.constants?.filter?.buttons[0];\r\n @Input() filters!: ChipOption[];\r\n @Input() canShowSelection = false;\r\n private selectedFilterOptionsList!: CheckboxOption[];\r\n selectedFilterDropDownList: SelectOption[] = [];\r\n defaultSelectedFilterDropDownOptions: SelectOption[] = [];\r\n selectedFilterId!: string | number;\r\n prevSelectedFilterOptionsList: CheckboxOption[] = [];\r\n @Input()\r\n set selectedFilterOptions(options: CheckboxOption[]) {\r\n if (options && this.selectedFilterId) {\r\n this.filtersAndOptions.set(this.selectedFilterId, options);\r\n this.setFilterSelectionOnOptionChange();\r\n this.selectedFilterOptionsList = options;\r\n if (\r\n this.prevSelectedFilterOptionsList.length &&\r\n this.prevSelectedFilterOptionsList[0].name !==\r\n this.selectedFilterOptionsList?.[0]?.name\r\n )\r\n this.recreateCheckboxOptionsControl = options;\r\n this.prevSelectedFilterOptionsList = this.selectedFilterOptionsList;\r\n }\r\n if (this.filterOptionType === this.optionsType.DROPDOWN) {\r\n this.selectedFilterDropDownList = this.selectedFilterOptionsList.map(\r\n (selectOption: CheckboxOption) => {\r\n return { id: selectOption.id, name: selectOption.name ?? '' };\r\n }\r\n );\r\n }\r\n }\r\n get selectedFilterOptions() {\r\n return this.selectedFilterOptionsList;\r\n }\r\n @Output() selectedFilter = new EventEmitter<ChipOption>();\r\n @Output() filteredOptions = new EventEmitter<FiltersAndOptions[]>();\r\n @Output() removeFilteredOption = new EventEmitter();\r\n @Output() filterDropdownSearch = new EventEmitter<string>();\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private changeDetectorReference: ChangeDetectorRef\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n this.filterButton.disabled = !this.isMobileView;\r\n });\r\n }\r\n /**\r\n * OnFilterSelected receives the selected filter from chip component, emits the selected filter and toggle the isFilterByOptionsVisible state.\r\n * @param {ChipOption} type\r\n * @memberof FilterComponent\r\n */\r\n onFilterSelected(type: ChipOption): void {\r\n this.selectedFilterId = type.id;\r\n if (type.checked) {\r\n this.selectedFilter.emit(type);\r\n }\r\n this.isFilterOpened = type?.checked;\r\n this.filterOptionType = type.optionType ?? this.optionsType.CHECKBOX;\r\n this.onFilterToggle = false;\r\n }\r\n /**\r\n * OnRemovalOfFilteredOption method receives removed chip from chip component and emits the event with removed chip.\r\n * @param {ChipOption} option\r\n * @memberof FilterComponent\r\n */\r\n onRemovalOfFilteredOption(option: ChipOption): void {\r\n if (option?.name === this.constants?.filter?.label?.clearAll) {\r\n this.appliedFilterOptions = [];\r\n this.filtersAndOptions.forEach((options: CheckboxOption[]) => {\r\n options?.forEach((option: CheckboxOption) => (option.checked = false));\r\n });\r\n this.removeFilteredOption.emit([]);\r\n } else {\r\n this.appliedFilterOptions = this.appliedFilterOptions.filter(\r\n (res: ChipOption) => res.id !== option.id\r\n );\r\n this.appliedFilterOptions =\r\n this.appliedFilterOptions.length === 1 ? [] : this.appliedFilterOptions;\r\n this.filtersAndOptions.forEach((options: CheckboxOption[]) => {\r\n options?.forEach((checkBoxOption: CheckboxOption) => {\r\n if (checkBoxOption.id === option.id) checkBoxOption.checked = false;\r\n });\r\n });\r\n this.removeFilteredOption.emit(this.getListOfSelectedCheckboxes());\r\n }\r\n this.setFilterSelectionOnOptionChange();\r\n }\r\n getListOfSelectedCheckboxes() {\r\n const selectedFiltersAndOptions: FiltersAndOptions[] = [];\r\n this.filtersAndOptions.forEach(\r\n (value: CheckboxOption[], key: string | number) => {\r\n const selectedOptions: CheckboxOption[] = [];\r\n value?.forEach((option) => {\r\n if (option.checked) selectedOptions.push(option);\r\n });\r\n if (selectedOptions.length)\r\n selectedFiltersAndOptions.push({ [key]: selectedOptions });\r\n }\r\n );\r\n return selectedFiltersAndOptions;\r\n }\r\n /**\r\n * OnFilterApply toggles the isFilterByOptionsVisible state, emits the selected filter options and toggles the filter stateO\r\n * @memberof FilterComponent\r\n */\r\n onFilterApply(): void {\r\n this.isFilterOpened = !this.isFilterOpened;\r\n this.filteredOptions.emit(this.getListOfSelectedCheckboxes());\r\n this.onFilterToggle = true;\r\n this.isApplyButtonDisabled = true;\r\n this.changeDetectorReference.detectChanges();\r\n }\r\n /**\r\n * SelectedFilterOptions method is called for every selection and deselection of filter option and stores the selected filter options.\r\n * @param {FiltersAndOptions[]} values\r\n * @memberof FilterComponent\r\n */\r\n selectedFilterOptionsInfo(values: CheckboxOption[]): void {\r\n if (this.getListOfSelectedCheckboxes().length === 0)\r\n this.isApplyButtonDisabled = true;\r\n else this.isApplyButtonDisabled = false;\r\n if (values && this.selectedFilterId) {\r\n this.filtersAndOptions.set(this.selectedFilterId, values);\r\n this.setFilterSelectionOnOptionChange();\r\n }\r\n }\r\n /**\r\n * OnFilterByIconClick method toggles the isFilterActive value.\r\n * @memberof FilterComponent\r\n */\r\n onFilterByIconClick(): void {\r\n this.isFilterActive = !this.isFilterActive;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof FilterComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * OnDropdownSelectionChange() is called for every drop down selection changes and sets selectedFilterOptionsList.\r\n * @memberof FilterComponent\r\n */\r\n onDropdownSelectionChange(option: SelectOption): void {\r\n if (option && this.selectedFilterId) {\r\n const selectedOption: CheckboxOption[] = [\r\n {\r\n id: option.id,\r\n name: option.name,\r\n checked: true,\r\n disabled: false,\r\n },\r\n ];\r\n this.selectedFilterOptionsList?.map((option) => {\r\n if (option.id === selectedOption[0].id) {\r\n option.checked = true;\r\n } else {\r\n option.checked = false;\r\n }\r\n });\r\n this.isApplyButtonDisabled = false;\r\n this.filtersAndOptions.set(this.selectedFilterId, selectedOption);\r\n this.setFilterSelectionOnOptionChange();\r\n }\r\n }\r\n\r\n /**\r\n * SetFilterSelectionOnOptionChange() called on every selection and deselection of filter option and sets canShowSelection flag to show or hide the tick mark of selected filter option.\r\n * @memberof FilterComponent\r\n */\r\n setFilterSelectionOnOptionChange(): void {\r\n if (this.canShowSelection) {\r\n for (const [key, options] of this.filtersAndOptions) {\r\n const filterOption = this.filters.find((chipOption) => {\r\n return chipOption.name === key;\r\n });\r\n if (filterOption) {\r\n filterOption.canShowSelection = options.some(\r\n (option) => option.checked === true\r\n );\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Emits the filterDropdownSearch event with the searched text value.\r\n * @param {string} searchText\r\n * @memberof FilterComponent\r\n */\r\n onDropdownSearch(searchText: string): void {\r\n this.filterDropdownSearch.emit(searchText);\r\n }\r\n /**\r\n * Emits filterDropdownSearch event to reset the dropdown options to default when the dropdown is closed and sets search term empty.\r\n * @param {SelectOpenedState} event\r\n * @memberof FilterComponent\r\n */\r\n onDropdownOpenedChange(event: SelectOpenedState): void {\r\n if (this.defaultSelectedFilterDropDownOptions?.length === 0) {\r\n this.defaultSelectedFilterDropDownOptions =\r\n this.selectedFilterDropDownList;\r\n }\r\n if (!event?.opened) {\r\n this.selectedFilterDropDownList =\r\n this.defaultSelectedFilterDropDownOptions;\r\n }\r\n if (\r\n !event?.opened &&\r\n this.selectComponent?.formFields?.toArray()?.[0]?.searchTerm\r\n ) {\r\n this.selectComponent.formFields.toArray()[0].searchTerm = '';\r\n }\r\n }\r\n}\r\n","<div class=\"ieeesa-filter\" *ngIf=\"filters && filters.length > 0\">\r\n <div\r\n class=\"d-flex flex-column flex-sm-column flex-md-column flex-lg-row flex-xl-row\"\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterButton\"\r\n (click)=\"onFilterByIconClick()\"\r\n ></ieeesa-icon-button>\r\n <p\r\n class=\"ieeesa-label-lg-bold-16 m-0\"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n {{ constants?.filter?.label?.filterBy }}\r\n </p>\r\n </div>\r\n <div\r\n [ngClass]=\"\r\n !isMobileView\r\n ? 'd-flex align-items-center'\r\n : 'd-flex align-self-stretch flex-wrap align-items-center pt-sm-2 pt-md-2 pt-2'\r\n \"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n <ieeesa-chips\r\n [chipGroup]=\"filters\"\r\n [arrow]=\"arrow\"\r\n [check]=\"check\"\r\n [hasChipToggled]=\"onFilterToggle\"\r\n (selectedChip)=\"onFilterSelected($event)\"\r\n ></ieeesa-chips>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!isMobileView || isFilterActive\">\r\n <ieeesa-checkbox\r\n [checkboxes]=\"selectedFilterOptions\"\r\n [recreateCheckboxOptionsControl]=\"recreateCheckboxOptionsControl\"\r\n (checkboxOptionsAndSelection)=\"selectedFilterOptionsInfo($event)\"\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.CHECKBOX\"\r\n class=\"d-flex gap-2 ieeesa-filter__filter-options\"\r\n ></ieeesa-checkbox>\r\n <ieeesa-select\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.DROPDOWN\"\r\n [isSortNeeded]=\"false\"\r\n [dropdownOptions]=\"selectedFilterDropDownList\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants?.viewGroups?.filterByLabel\"\r\n (optionSelected)=\"onDropdownSelectionChange($event)\"\r\n (optionSearched)=\"onDropdownSearch($event)\"\r\n (dropdownOpenedChange)=\"onDropdownOpenedChange($event)\"\r\n [isSearch]=\"true\"\r\n ></ieeesa-select>\r\n <button\r\n mat-button\r\n *ngIf=\"isFilterOpened\"\r\n class=\"mat-tertiary-button m-2\"\r\n [disabled]=\"isApplyButtonDisabled\"\r\n (click)=\"onFilterApply()\"\r\n >\r\n {{ constants?.filter?.label?.applyButton }}\r\n </button>\r\n <ieeesa-chips\r\n [chipGroup]=\"appliedFilterOptions\"\r\n [isViewMoreNeeded]=\"true\"\r\n *ngIf=\"appliedFilterOptions\"\r\n [arrow]=\"removeIcon\"\r\n (selectedChip)=\"onRemovalOfFilteredOption($event)\"\r\n class=\"d-flex gap-2 mt-2\"\r\n [hasViewMoreForDesktop]=\"false\"\r\n [hasViewMoreForMobile]=\"true\"\r\n ></ieeesa-chips>\r\n </ng-container>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport * as constants from '../../assets/constants.json';\r\n@Component({\r\n selector: 'ieeesa-loader',\r\n standalone: true,\r\n imports: [CommonModule, MatProgressSpinnerModule],\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss'],\r\n})\r\nexport class LoaderComponent {\r\n @Input() diameter = 48;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n loader: any = constants;\r\n}\r\n","<div class=\"ieeesa-loader\">\r\n <mat-progress-spinner\r\n class=\"ieeesa-loader__progress-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"diameter\"\r\n [attr.aria-label]=\"loader.ariaLabel.spinner\"\r\n ></mat-progress-spinner>\r\n <div class=\"ieeesa-loader__overlay\"></div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum TableColumnType {\r\n TEXT = 'TEXT',\r\n LINK = 'LINK',\r\n SELECT = 'SELECT',\r\n ADD = 'ADD',\r\n EDIT = 'EDIT',\r\n DELETE = 'DELETE',\r\n ACTIONS = 'ACTIONS',\r\n NESTED_TABLE = 'NESTED_TABLE',\r\n SLIDE_TOGGLE = 'SLIDE_TOGGLE',\r\n}\r\n\r\nexport enum TableColumnSortDirection {\r\n ASCENDING = 'asc',\r\n DESCENDING = 'desc',\r\n NO_SORT = '',\r\n}\r\n\r\nexport interface TableColumnSchema {\r\n id: number;\r\n columnDef: string;\r\n heading: string;\r\n columnType: TableColumnType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: any;\r\n isDateColumn?: boolean;\r\n isStickyColumn?: boolean;\r\n isStickyEndColumn?: boolean;\r\n isSortableColumn?: boolean;\r\n isHTMLCellData?: boolean;\r\n isContentUnderLink?: boolean;\r\n hasColumnActions?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n showIconFlag?: (row: any) => boolean;\r\n iconFlagUrl?: string;\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n AfterViewInit,\r\n ViewEncapsulation,\r\n OnDestroy,\r\n forwardRef,\r\n ElementRef,\r\n HostListener,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport {\r\n MatPaginator,\r\n MatPaginatorModule,\r\n PageEvent,\r\n} from '@angular/material/paginator';\r\nimport {\r\n MatSort,\r\n MatSortModule,\r\n Sort,\r\n SortDirection,\r\n} from '@angular/material/sort';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType, IconButton, CheckboxOption } from '@ieeesa-npm/models';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\nimport {\r\n TableColumnSchema,\r\n TableColumnSortDirection,\r\n TableColumnType,\r\n} from '../../models/table-schema.model';\r\nimport { PaginatorConfig } from '../../models/paginator-config.model';\r\nimport { SearchComponent } from '../search/search.component';\r\nimport { FilterComponent } from '../filter/filter.component';\r\nimport { TableActions } from '../../models/table-actions.model';\r\nimport { ChipOption, ChipsType } from '../../models/chip-option.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { SearchType } from '../../models/search.model';\r\nimport { FiltersAndOptions } from '../../models/filters-options.model';\r\nimport { TextTruncatedDirective } from '../../directives/text-truncated/text-truncated.directive';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MenuComponent } from '../menu/menu.component';\r\nimport { Menu } from '../../models/menu.model';\r\nimport {\r\n animate,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n} from '@angular/animations';\r\nimport { LegendComponent } from '../legend/legend.component';\r\nimport { Legend } from '../../models/legend.model';\r\nimport { TableColumnMenuInfo } from '../../models/table-column-menu-info.model';\r\nimport { SlideToggleComponent } from '../slide-toggle/slide-toggle.component';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\n\r\n/**\r\n * Provides a Material Design styled data-table that can be used to display rows of data with sortBy, filterBy, add/edit/delete table row data, pagination, search table data.\r\n * @export\r\n * @class DataTableComponent\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-data-table',\r\n standalone: true,\r\n imports: [\r\n forwardRef(() => SafePipe),\r\n CommonModule,\r\n MatIconModule,\r\n MatSortModule,\r\n SlideToggleComponent,\r\n MatSlideToggleModule,\r\n MatTableModule,\r\n MatPaginatorModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n CheckboxComponent,\r\n IconButtonComponent,\r\n SearchComponent,\r\n FilterComponent,\r\n TextTruncatedDirective,\r\n MenuComponent,\r\n MatTooltipModule,\r\n MenuComponent,\r\n MatTooltipModule,\r\n MenuComponent,\r\n LegendComponent,\r\n ],\r\n templateUrl: './data-table.component.html',\r\n styleUrls: ['./data-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('detailExpand', [\r\n state(\r\n 'collapsed',\r\n style({ height: '0px', minHeight: '0', display: 'none' })\r\n ),\r\n state('expanded', style({ height: '*' })),\r\n transition(\r\n 'expanded <=> collapsed',\r\n animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ),\r\n ]),\r\n ],\r\n})\r\nexport class DataTableComponent implements OnInit, AfterViewInit, OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private tableData!: any[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private nestedTableData!: any[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n expandedElement: any;\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set tableDataInfo(value: any[]) {\r\n this.tableData = value;\r\n this.tableDataChanges();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get tableDataInfo(): any[] {\r\n return this.tableData;\r\n }\r\n\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set nestedTableDataInfo(value: any[]) {\r\n this.nestedTableData = value;\r\n this.tableDataChanges();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get nestedTableDataInfo(): any[] {\r\n return this.nestedTableData;\r\n }\r\n private columnSchema!: TableColumnSchema[];\r\n @Input()\r\n set columnSchemaInfo(value: TableColumnSchema[]) {\r\n this.columnSchema = value;\r\n if (this.columnSchema)\r\n this.displayedColumns = this.columnSchema?.map((c) => c?.columnDef);\r\n }\r\n get columnSchemaInfo(): TableColumnSchema[] {\r\n return this.columnSchema;\r\n }\r\n private nestedTableColumnSchema!: TableColumnSchema[];\r\n @Input()\r\n set nestedTableColumnSchemaInfo(value: TableColumnSchema[]) {\r\n this.nestedTableColumnSchema = value;\r\n this.nestedTableDisplayedColumns = this.nestedTableColumnSchema?.map(\r\n (c) => c?.columnDef\r\n );\r\n this.nestedTableDataSource = new MatTableDataSource(this.nestedTableData);\r\n }\r\n get nestedTableColumnSchemaInfo(): TableColumnSchema[] {\r\n return this.nestedTableColumnSchema;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n @Input() tableActions!: TableActions;\r\n @Input() hasNestedTable = false;\r\n @Input() tableColumnActions!: Menu[];\r\n @Input() tableColumnActionMenuSize = '';\r\n @Input() tableRowActions!: Menu[];\r\n @Input() nestedTableRowActions!: Menu[];\r\n @Input() caption!: string;\r\n @Input() viewAll!: string;\r\n private paginatorConfiguration!: PaginatorConfig;\r\n @Input()\r\n set paginatorConfig(value: PaginatorConfig) {\r\n this.paginatorConfiguration = value;\r\n }\r\n get paginatorConfig(): PaginatorConfig {\r\n return this.paginatorConfiguration;\r\n }\r\n private nestedPaginatorConfiguration!: PaginatorConfig;\r\n @Input()\r\n set nestedPaginatorConfig(value: PaginatorConfig) {\r\n this.nestedPaginatorConfiguration = value;\r\n this.showNestedTablePaginationInfo =\r\n '1 - ' +\r\n +`${this.nestedPaginatorConfig.recordsPerPage}` +\r\n ' of ' +\r\n +`${this.nestedPaginatorConfig.totalRecords}`;\r\n }\r\n get nestedPaginatorConfig(): PaginatorConfig {\r\n return this.nestedPaginatorConfiguration;\r\n }\r\n private legendsInfo!: Legend[];\r\n @Input()\r\n set legends(value: Legend[]) {\r\n this.legendsInfo = value;\r\n }\r\n get legends(): Legend[] {\r\n return this.legendsInfo;\r\n }\r\n private currentPageIndex = 0;\r\n @Input()\r\n set pageIndex(value: number) {\r\n this.currentPageIndex = value;\r\n if (this.paginator) {\r\n this.paginator.pageIndex = value;\r\n }\r\n }\r\n get pageIndex(): number {\r\n return this.currentPageIndex;\r\n }\r\n private currentPageSize = 0;\r\n @Input()\r\n set pageSize(value: number) {\r\n this.currentPageSize = value;\r\n if (this.paginator) {\r\n this.paginator.pageSize = value;\r\n }\r\n }\r\n get pageSize(): number {\r\n return this.currentPageSize;\r\n }\r\n @Input() searchPlaceHolderText!: string;\r\n @Input() rowEditButton!: IconButton;\r\n @Input() rowDeleteButton!: IconButton;\r\n @Input() tableEditButton!: IconButton;\r\n @Input() tableDeleteButton!: IconButton;\r\n @Input() rowExpandButton!: IconButton;\r\n @Input() rowCollapseButton!: IconButton;\r\n @Input() isNestedTableHeaderNeeded = false;\r\n @Input() addButton!: IconButton;\r\n @Input() defaultColumnSortDirection: SortDirection =\r\n TableColumnSortDirection.ASCENDING;\r\n @Input() defaultSortedColumn!: string;\r\n @Input() isClearSortNeeded = true;\r\n @Input() filters!: ChipOption[];\r\n @Input() selectedFilterOptions!: CheckboxOption[];\r\n @Input() appliedFilterOptions!: ChipOption[];\r\n @Input() searchType: SearchType = SearchType.ON_CLICK;\r\n @Input() className!: string;\r\n @Input() searchSupportMessage!: string;\r\n @Input() inbuiltSortingNeeded = false;\r\n @Input() isCellTextOverflowEllipsis = false;\r\n @Input() isTableHeaderNeeded = true;\r\n @Input() tableColumnsHeaderText = '';\r\n @Input() verticalColumnHeaderNumber = 0;\r\n @Input() scrollbarSupportMessage = '';\r\n @Input() isScrollSupportMessageNeeded = false;\r\n @Input() isStickyHeaderNeeded = false;\r\n @Input() customStickyHeaderNeeded = false;\r\n @Input() headerElementClassName = '';\r\n @Input() minCharToSearch = this.constants?.search?.minCharToSearch;\r\n @Output() rowSelected = new EventEmitter();\r\n @Output() selectedRowToEdit = new EventEmitter();\r\n @Output() selectedRowToDelete = new EventEmitter();\r\n @Output() selectedRowsToDelete = new EventEmitter<TableColumnSchema[]>();\r\n @Output() rowLink = new EventEmitter();\r\n @Output() addRow = new EventEmitter();\r\n @Output() columnDataOnRowLinkClick = new EventEmitter();\r\n @Output() menuActionClick = new EventEmitter();\r\n @Output() selectActionMenu = new EventEmitter();\r\n @Output() paginationChange = new EventEmitter<PageEvent>();\r\n @Output() selectedFilter = new EventEmitter<ChipOption>();\r\n @Output() removeFilteredOption = new EventEmitter();\r\n @Output() filteredOptions = new EventEmitter<FiltersAndOptions[]>();\r\n @Output() searchedValue = new EventEmitter<string>();\r\n @Output() sortChange = new EventEmitter<Sort>();\r\n @Output() selectedRowsInfo = new EventEmitter<TableColumnSchema[]>();\r\n @Output() rowExpansionClick = new EventEmitter();\r\n @Output() tableColumnMenuActionClick =\r\n new EventEmitter<TableColumnMenuInfo>();\r\n @Output() tableColumnMenuToggleButton = new EventEmitter<HTMLElement>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() rowSlideToggle = new EventEmitter<{\r\n slideToggle: SlideToggleOption;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rowData: any;\r\n }>();\r\n @ViewChild(MatSort) sort!: MatSort;\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n headerCellElement!: HTMLElement;\r\n headerHeight!: DOMRect;\r\n @ViewChild('tableContent') tableContent!: ElementRef<HTMLElement>;\r\n @HostListener('document:scroll') setStickyTableHeader() {\r\n if (this.elRef.nativeElement && this.customStickyHeaderNeeded) {\r\n const dataTableContent = this.elRef.nativeElement\r\n .querySelector('.ieeesa-data-table__content')\r\n .getBoundingClientRect();\r\n if (this.headerElementClassName)\r\n this.headerHeight = document\r\n ?.querySelector(this.headerElementClassName)\r\n ?.getBoundingClientRect() as DOMRect;\r\n if (dataTableContent) {\r\n this.elRef.nativeElement\r\n .querySelectorAll(' .mat-mdc-header-cell')\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .forEach((column: any) => {\r\n if (\r\n dataTableContent.top <\r\n (this.headerHeight ? this.headerHeight.bottom : 0) &&\r\n dataTableContent.bottom > 0\r\n ) {\r\n this.renderer.setStyle(\r\n column,\r\n 'top',\r\n dataTableContent.top * -1 +\r\n (this.headerHeight ? this.headerHeight.height : 0) -\r\n 1 +\r\n 'px'\r\n );\r\n if (column.classList.contains('mat-mdc-table-sticky')) {\r\n this.renderer.setStyle(column, 'zIndex', 2);\r\n } else {\r\n this.renderer.setStyle(column, 'position', 'sticky');\r\n this.renderer.setStyle(column, 'zIndex', 1);\r\n }\r\n } else {\r\n this.renderer.setStyle(column, 'top', 0 + 'px');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n displayedColumns!: string[];\r\n nestedTableDisplayedColumns!: string[];\r\n isMobileView = false;\r\n isScrollingEnabled = false;\r\n resizeObserverForTableContent!: ResizeObserver;\r\n resizeObserverForTableCell!: ResizeObserver;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dataSource!: MatTableDataSource<any>;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n nestedTableDataSource!: MatTableDataSource<any>;\r\n selectedRows = new SelectionModel<TableColumnSchema>(true, []);\r\n pageLimit!: number;\r\n pageOffset!: number;\r\n columnType = TableColumnType;\r\n isSearchActive = false;\r\n clearAll = this.constants?.dataTable?.label?.clearAll;\r\n noRecordFound = this.constants?.dataTable?.message?.noRecordFound;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n showNestedTablePaginationInfo!: string;\r\n private _searchResultMessage!: string;\r\n @Input()\r\n set searchResultMessage(value: string) {\r\n this._searchResultMessage = value;\r\n }\r\n get searchResultMessage(): string {\r\n return this._searchResultMessage;\r\n }\r\n safeType: SafeType = SafeType.HTML;\r\n @Input() rowMenuActionIcon!: IconButton;\r\n @Input() canDisableCheckbox = false;\r\n @Input() isEllipsisRequiredForLink = false;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private elRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private renderer: Renderer2\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n\r\n /**\r\n * Initializes the data table component and sets the table action buttons.\r\n * @memberof DataTableComponent\r\n */\r\n ngOnInit(): void {\r\n this.displayedColumns = this.columnSchema?.map((c) => c?.columnDef);\r\n const tableActionButtons: IconButton[] = this.constants?.dataTable?.buttons;\r\n this.rowEditButton = this.rowEditButton ?? tableActionButtons[3];\r\n this.rowDeleteButton = this.rowDeleteButton ?? tableActionButtons[4];\r\n this.addButton = this.addButton ?? tableActionButtons[2];\r\n this.tableEditButton = this.tableEditButton ?? tableActionButtons[0];\r\n this.tableEditButton.disabled = true;\r\n this.tableDeleteButton = this.tableDeleteButton ?? tableActionButtons[1];\r\n this.rowExpandButton = this.rowExpandButton ?? tableActionButtons[5];\r\n this.rowCollapseButton =\r\n this.rowCollapseButton ?? this.rowCollapseButton ?? tableActionButtons[6];\r\n this.tableDeleteButton.disabled = true;\r\n this.selectedRows.changed\r\n .pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .subscribe((result: any) => {\r\n this.tableEditButton.disabled = false;\r\n this.tableDeleteButton.disabled = false;\r\n if (result?.source?.selected?.length === 0) {\r\n this.tableEditButton.disabled = true;\r\n this.tableDeleteButton.disabled = true;\r\n } else if (\r\n result?.source?.selected?.length === 1 &&\r\n !result?.source?.selected?.[0]?.canDelete\r\n ) {\r\n this.tableDeleteButton.disabled = true;\r\n } else if (result?.source?.selected?.length > 1) {\r\n this.tableDeleteButton.disabled = false;\r\n this.tableEditButton.disabled = true;\r\n }\r\n });\r\n this.dataSource = new MatTableDataSource(this.tableData);\r\n if (this.scrollbarSupportMessage) {\r\n this.resizeObserverForTableContent = new ResizeObserver(\r\n (element: ResizeObserverEntry[]) => {\r\n this.isScrollingEnabled =\r\n element[0]?.target?.scrollWidth > element[0]?.target?.clientWidth;\r\n }\r\n );\r\n }\r\n if (this.tableColumnsHeaderText && this.verticalColumnHeaderNumber)\r\n this.resizeObserverForTableCell = new ResizeObserver(() => {\r\n this.setMarginLeftForHeaderText();\r\n });\r\n this.tableDataChanges();\r\n }\r\n\r\n /**\r\n * Initializes the sort feature of dataSource and set margin left for tableColumnsHeaderText if it isn't empty.\r\n * @memberof DataTableComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.inbuiltSortingNeeded) {\r\n this.dataSource.sort = this.sort;\r\n this.sort.disableClear = true;\r\n }\r\n this.headerCellElement = this.tableContent.nativeElement.querySelector(\r\n '.mat-mdc-header-cell'\r\n ) as HTMLElement;\r\n this.resizeObserverForTableCell?.observe(this.headerCellElement);\r\n this.resizeObserverForTableContent?.observe(\r\n this.tableContent.nativeElement\r\n );\r\n }\r\n /**\r\n * Set margin left for table column header text based on width of columns.\r\n * @memberof DataTableComponent\r\n */\r\n setMarginLeftForHeaderText(): void {\r\n let columnsWidth = 0;\r\n for (let column = 0; column < this.verticalColumnHeaderNumber; column++) {\r\n const verticalColumnHeaderClassName =\r\n '.mat-column-' + this.columnSchema[column].columnDef;\r\n const columnElement = this.elRef?.nativeElement?.querySelector(\r\n verticalColumnHeaderClassName\r\n ) as HTMLElement;\r\n if (columnElement) columnsWidth += columnElement?.offsetWidth;\r\n }\r\n const columnsHeaderElement = this.elRef?.nativeElement?.querySelector(\r\n '.ieeesa-data-table__columns-header-text'\r\n ) as HTMLElement;\r\n if (columnsHeaderElement)\r\n columnsHeaderElement.style.marginLeft = columnsWidth + 'px';\r\n }\r\n /**\r\n * Sets the dataSource whenever the table data changes.\r\n * @memberof DataTableComponent\r\n */\r\n tableDataChanges(): void {\r\n if (this.dataSource) {\r\n this.dataSource.data = this.tableData;\r\n if (this.inbuiltSortingNeeded) this.dataSource.sort = this.sort;\r\n this.selectedRows.clear();\r\n }\r\n if (this.nestedTableDataSource) {\r\n this.nestedTableDataSource.data = this.nestedTableData;\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n /**\r\n * SortTableData method emits the clicked table column name and sorting direction\r\n * @param {Sort} sort\r\n * @memberof DataTableComponent\r\n */\r\n sortTableData(sort: Sort): void {\r\n this.sortChange.emit(sort);\r\n }\r\n /**\r\n * Handle edit actions method emits the clicked row data\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onRowActionClick(row: any) {\r\n this.selectActionMenu.emit(row);\r\n }\r\n /**\r\n * Emits the slide toggle option along with the selected row info.\r\n * @param {SlideToggleOption} slideToggleOption\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rowSlideToggleChange(slideToggleOption: SlideToggleOption, row: any) {\r\n this.rowSlideToggle.emit({ slideToggle: slideToggleOption, rowData: row });\r\n }\r\n /**\r\n * Menu item action method emits the clicked menu options\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n menuItemAction(row: any): void {\r\n this.menuActionClick.emit(row);\r\n }\r\n /**\r\n * OnSelectClick method emits the rowSelected event with selected row data.\r\n * @param {*} row\r\n * @param {boolean} checked\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSelectClick(row: any): void {\r\n this.selectedRows.toggle(row);\r\n row.checked = !row.checked;\r\n this.rowSelected.emit(row);\r\n this.selectedRowsInfo.emit(this.selectedRows.selected);\r\n }\r\n /**\r\n * Emits tableColumnActionInfo event with tableColumnInfo and menuActionInfo.\r\n * @param {TableColumnSchema} column\r\n * @param {Menu} menuAction\r\n * @memberof DataTableComponent\r\n */\r\n tableColumnActionClick(column: TableColumnSchema, menuAction: Menu): void {\r\n this.tableColumnMenuActionClick.emit({\r\n tableColumnInfo: column,\r\n menuActionInfo: menuAction,\r\n });\r\n }\r\n /**\r\n * Emits tableColumnActionElement event with the selected HTML Element.\r\n * @param {HTMLElement} element\r\n * @memberof DataTableComponent\r\n */\r\n tableColumnActionElement(element: HTMLElement): void {\r\n this.tableColumnMenuToggleButton.emit(element);\r\n }\r\n /**\r\n * OnEditClick method emits the selectedRowToEdit event with the selected row data.\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onEditClick(row: any): void {\r\n this.selectedRowToEdit.emit(row);\r\n }\r\n\r\n /**\r\n * OnDeleteClick method emits the selectedRowToDelete event with the selected row data.\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onDeleteClick(row: any): void {\r\n this.selectedRowToDelete.emit(row);\r\n }\r\n\r\n /**\r\n *OnLinkClick method emits the event with row and column.\r\n * @param {*} row\r\n * @param {TableColumnSchema} [column]\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onLinkClick(row: any, column?: TableColumnSchema): void {\r\n this.rowLink.emit(row);\r\n this.columnDataOnRowLinkClick.emit({ row, column });\r\n }\r\n\r\n /**\r\n * OnTableEditClick method emits event with selected rows data when edit button clicked.\r\n * @memberof DataTableComponent\r\n */\r\n onTableEditClick(): void {\r\n this.selectedRowToEdit.emit(this.selectedRows.selected);\r\n }\r\n\r\n /**\r\n * OnDeleteTableClick method emits event with selected row data when delete button clicked.\r\n * @memberof DataTableComponent\r\n */\r\n onDeleteTableClick(): void {\r\n this.selectedRowsToDelete.emit(this.selectedRows.selected);\r\n }\r\n\r\n /**\r\n * OnAddClick method emits the add event when add button clicked.\r\n * @memberof DataTableComponent\r\n */\r\n onAddClick(): void {\r\n this.addRow.emit();\r\n }\r\n\r\n /**\r\n * OnTableSearchClick method toggles the isSearchActive state when the search icon is clicked for the mobile view.\r\n * @memberof DataTableComponent\r\n */\r\n onTableSearchClick(): void {\r\n this.isSearchActive = !this.isSearchActive;\r\n }\r\n\r\n /**\r\n * SelectedFilterInfo method emits the selectedFilter event with selected filter information.\r\n * @param {ChipOption} option\r\n * @memberof DataTableComponent\r\n */\r\n selectedFilterTypeInfo(option: ChipOption): void {\r\n this.selectedFilter.emit(option);\r\n }\r\n\r\n /**\r\n * Emits the rowExpansionClick event with the selected row data when the row is expanded.\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onTableRowExpansionClick(row: any): void {\r\n this.nestedTableDataSource.data = [];\r\n if (this.expandedElement === row) this.rowExpansionClick.emit(row);\r\n }\r\n\r\n /**\r\n * OnSelectedFilterOptions method emits the filteredOptions event with the selected options and adds \"Clear all\" option to clear the all selections.\r\n * @param {CheckboxOption[]} options\r\n * @memberof DataTableComponent\r\n */\r\n onSelectedFilterOptions(selectedOptions: FiltersAndOptions[]): void {\r\n this.filteredOptions.emit(selectedOptions);\r\n this.appliedFilterOptions = [];\r\n selectedOptions?.forEach((options) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\r\n for (const [key, value] of Object.entries(options)) {\r\n value?.forEach((option) => {\r\n if (option.checked) {\r\n this.appliedFilterOptions.push({\r\n id: option.id,\r\n name: option.name as string,\r\n checked: option.checked,\r\n disabled: option.disabled,\r\n chipType: ChipsType.TOGGLE,\r\n });\r\n }\r\n });\r\n }\r\n });\r\n this.appliedFilterOptions.push({\r\n id: this.clearAll,\r\n name: this.clearAll,\r\n disabled: false,\r\n checked: false,\r\n chipType: ChipsType.STATIC,\r\n });\r\n }\r\n /**\r\n * OnRemovalOfFilteredOption method emits the removeFilteredOption event with removed option.\r\n * @param {ChipOption} option\r\n * @memberof DataTableComponent\r\n */\r\n onRemovalOfFilteredOption(options: FiltersAndOptions[]): void {\r\n this.removeFilteredOption.emit(options);\r\n }\r\n\r\n /**\r\n * SearchValue method emits the searched value and resets page index to zero.\r\n * @param {string} value\r\n * @memberof DataTableComponent\r\n */\r\n searchValue(value: string): void {\r\n this.searchedValue.emit(value);\r\n if (\r\n this.paginator &&\r\n (value?.length === 0 || value.trim()?.length >= this.minCharToSearch)\r\n ) {\r\n this.paginator.pageIndex = 0;\r\n }\r\n }\r\n /**\r\n * Handles the pagination for every page.\r\n * @param {PageEvent} event\r\n * @memberof DataTableComponent\r\n */\r\n handlePagination(event: PageEvent): void {\r\n this.paginationChange.emit(event);\r\n }\r\n /**\r\n * IsAllRowSelected method returns the boolean value by checking selectedRows and totalRows length.\r\n * @return {*} {boolean}\r\n * @memberof DataTableComponent\r\n */\r\n isAllRowsSelected(): boolean {\r\n if (this.canDisableCheckbox)\r\n return (\r\n this.selectedRows.selected.length ===\r\n this.dataSource.data.filter((item) => !item?.disable)?.length\r\n );\r\n return this.selectedRows.selected.length === this.dataSource.data.length;\r\n }\r\n\r\n /**\r\n * ToggleAllRowsSelection method clears selectedRows when all rows are selected else selects the all rows.\r\n * @return {*} {void}\r\n * @memberof DataTableComponent\r\n */\r\n toggleAllRowsSelection(): void {\r\n if (this.isAllRowsSelected()) this.selectedRows.clear();\r\n else if (this.canDisableCheckbox)\r\n this.selectedRows.select(\r\n ...this.dataSource.data.filter((item) => !item?.disable)\r\n );\r\n else this.selectedRows.select(...this.dataSource.data);\r\n\r\n this.selectedRowsInfo.emit(this.selectedRows.selected);\r\n }\r\n\r\n /**\r\n * Allows Angular to detect the specific table row that needs to change or be added by tracking row unique Id.\r\n * @param {number} index\r\n * @param {TableColumnSchema} column\r\n * @return {*} {number}\r\n * @memberof DataTableComponent\r\n */\r\n trackById(index: number, column: TableColumnSchema): number {\r\n return column.id;\r\n }\r\n /**\r\n * Sets the table row left border as per the legend color\r\n * @param {string} color\r\n * @return {*}\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getRowBorderLeftColor(color: string): any {\r\n return {\r\n borderLeft: '5px solid ' + color,\r\n };\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof DataTableComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.resizeObserverForTableCell?.unobserve(this.headerCellElement);\r\n this.resizeObserverForTableContent?.unobserve(\r\n this.tableContent.nativeElement\r\n );\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <div\r\n class=\"d-flex\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'flex-column ms-4'\r\n : 'justify-content-center position-relative'\r\n \"\r\n >\r\n <caption\r\n class=\"ieeesa-data-table--caption\"\r\n *ngIf=\"caption\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-title-md-18'\"\r\n >\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <p\r\n *ngIf=\"isScrollingEnabled && isScrollSupportMessageNeeded\"\r\n class=\"m-0 mb-2\"\r\n [ngClass]=\"{ 'position-absolute bottom-0 end-0': !isMobileView }\"\r\n >\r\n {{ scrollbarSupportMessage }}\r\n </p>\r\n </div>\r\n <div\r\n *ngIf=\"tableActions\"\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-between align-items-lg-baseline p-sm-0\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7 col-lg-6' }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex align-items-center gap-lg-4 gap-md-3 gap-sm-3 gap-3 col-md-5 col-lg-6 justify-content-end ps-0\"\r\n [ngClass]=\"!tableActions?.isFilterNeeded ? 'col-md-12 col-lg-12' : ''\"\r\n >\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n [ngClass]=\"\r\n addButton?.disabled ? 'ieeesa-data-table__actions--disabled' : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0 || tableDeleteButton.disabled\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }} p-0\"\r\n [filters]=\"filters\"\r\n *ngIf=\"tableActions?.isFilterNeeded\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2 mt-2 md-2\"\r\n [supportMessage]=\"searchSupportMessage\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <p\r\n class=\"ieeesa-data-table__search_result_label\"\r\n *ngIf=\"searchResultMessage\"\r\n [innerHTML]=\"searchResultMessage | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-data-table__columns-header-text mb-0 ieeesa-title-md-18 text-center\"\r\n *ngIf=\"tableColumnsHeaderText\"\r\n [innerHTML]=\"tableColumnsHeaderText | safe : safeType\"\r\n ></p>\r\n <div\r\n class=\"ieeesa-data-table__content\"\r\n [ngClass]=\"\r\n tableDataInfo && tableDataInfo.length === 0\r\n ? 'ieeesa-data-table__no-table-data'\r\n : ''\r\n \"\r\n #tableContent\r\n >\r\n <table\r\n mat-table\r\n [ngClass]=\"className\"\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortDisableClear]=\"isClearSortNeeded\"\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n (matSortChange)=\"sortTableData($event)\"\r\n [trackBy]=\"trackById\"\r\n multiTemplateDataRows\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span [ngClass]=\"{ 'me-2': column.hasColumnActions }\">{{\r\n column.heading\r\n }}</span>\r\n <ng-container *ngIf=\"column.hasColumnActions\">\r\n <ieeesa-menu\r\n [menuItems]=\"tableColumnActions\"\r\n [defaultIconSize]=\"tableColumnActionMenuSize\"\r\n (menuItemClick)=\"tableColumnActionClick(column, $event)\"\r\n (menuToggleButtonElement)=\"tableColumnActionElement($event)\"\r\n class=\"ieeesa-data-table__column-menu\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: tableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n [attr.colspan]=\"displayedColumns?.length\"\r\n >\r\n <div\r\n class=\"ieeesa-expanded-row\"\r\n [@detailExpand]=\"row === expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"ieeesa-nested-data-table\">\r\n <table\r\n #nestedTable\r\n mat-table\r\n [trackBy]=\"trackById\"\r\n [dataSource]=\"nestedTableDataSource\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of nestedTableColumnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: nestedTableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNestedTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"\r\n nestedTableDisplayedColumns;\r\n sticky: false\r\n \"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-nested-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: nestedTableDisplayedColumns\"\r\n [ngStyle]=\"\r\n row?.legendColor\r\n ? getRowBorderLeftColor(row?.legendColor)\r\n : ''\r\n \"\r\n ></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"row === expandedElement\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center ieeesa-expanded-row__footer\"\r\n *ngIf=\"\r\n nestedPaginatorConfig.totalRecords >\r\n nestedPaginatorConfig.recordsPerPage &&\r\n nestedPaginatorConfig.recordsPerPage > 0\r\n \"\r\n >\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ viewAll ?? \"\" }}\r\n </button>\r\n <span class=\"nested-element-detail__footer--detail\">{{\r\n showNestedTablePaginationInfo\r\n }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: false\"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n [ngClass]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\r\n [ngStyle]=\"\r\n row?.legendColor ? getRowBorderLeftColor(row?.legendColor) : ''\r\n \"\r\n *matRowDef=\"let row; columns: displayedColumns; let i = dataIndex\"\r\n ></tr>\r\n <ng-container *ngIf=\"hasNestedTable\">\r\n <tr\r\n mat-row\r\n *matRowDef=\"let details; columns: ['expandedDetail']\"\r\n class=\"ieeesa-row-expanded-table-detail\"\r\n ></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n<p\r\n class=\"ieeesa-data-table__message ieeesa-title-lg-bold-24 text-center p-5\"\r\n *ngIf=\"tableDataInfo && tableDataInfo.length === 0\"\r\n>\r\n {{ noRecordFound }}\r\n</p>\r\n<div class=\"row ieeesa-data-table__pagination-container\">\r\n <ieeesa-legend\r\n class=\"col-sm-12 col-md-5 d-flex align-items-end px-4\"\r\n *ngIf=\"legends?.length\"\r\n [ngClass]=\"!tableActions?.isPaginationNeeded ? 'col-md-12' : ''\"\r\n [legends]=\"legends\"\r\n [isSorting]=\"true\"\r\n ></ieeesa-legend>\r\n <div\r\n *ngIf=\"tableActions?.isPaginationNeeded\"\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse col-sm-12 col-md-7\"\r\n [ngClass]=\"!legends?.length ? 'col-md-12' : ''\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n #paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</div>\r\n<ng-template\r\n #tableData\r\n let-column=\"column\"\r\n let-row=\"row\"\r\n let-tableRowActions=\"tableRowActions\"\r\n>\r\n <ng-container [ngSwitch]=\"column?.columnType\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngIf=\"isCellTextOverflowEllipsis; then ellipsisCell; else textWrapCell\"\r\n >\r\n </ng-container>\r\n <ng-template #textWrapCell>\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"column?.cellData(row) | safe : safeType\"\r\n ></p>\r\n <ng-container *ngIf=\"!column?.isHTMLCellData\">\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p></ng-container\r\n >\r\n </ng-template>\r\n <ng-template #ellipsisCell>\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"column?.cellData(row)\"\r\n class=\"ieeesa-data-table__cell-content--ellipsis ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <div class=\"ieeesa-cell-data\">\r\n <div class=\"ieeesa-cell-data__link-row\">\r\n <ng-container\r\n *ngIf=\"\r\n isEllipsisRequiredForLink;\r\n then ellipsisCell;\r\n else textWrapCell\r\n \"\r\n >\r\n </ng-container>\r\n <ng-template #ellipsisCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n ieeesaTextTruncated\r\n [elementClassNameToAddTooltip]=\"'.mdc-button .mdc-button__label'\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link ieeesa-data-table__cell-content-link--ellipsis\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText ?? column?.cellData(row)\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <ng-template #textWrapCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <svg\r\n *ngIf=\"column?.showIconFlag && column?.showIconFlag(row)\"\r\n class=\"ieeesa-data-table__attendance-flag-icon\"\r\n [attr.aria-label]=\"'Has attendance records'\"\r\n >\r\n <use [attr.xlink:href]=\"column?.iconFlagUrl ?? '/assets/images/sprites/sprites.svg#icon-attendance-flag'\"></use>\r\n </svg>\r\n </div>\r\n\r\n <ng-container *ngIf=\"column?.isContentUnderLink\">\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"row?.contentUnderLink | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"!column?.isHTMLCellData\"\r\n >\r\n {{ row?.contentUnderLink }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.NESTED_TABLE\">\r\n <ieeesa-icon-button\r\n mat-button\r\n *ngIf=\"row?.hasChildren\"\r\n (iconButtonClick)=\"\r\n expandedElement = expandedElement === row ? null : row;\r\n onTableRowExpansionClick(row)\r\n \"\r\n [iconButton]=\"\r\n expandedElement === row ? rowExpandButton : rowCollapseButton\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n [disabled]=\"row?.disable && canDisableCheckbox\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType.SLIDE_TOGGLE\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"column?.cellData(row)\"\r\n (slideToggleChange)=\"rowSlideToggleChange($event, row)\"\r\n [canShowIcon]=\"true\"\r\n ></ieeesa-slide-toggle>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.ACTIONS\">\r\n <ieeesa-menu\r\n [button]=\"rowMenuActionIcon\"\r\n [menuItems]=\"tableRowActions ?? row.menuAction\"\r\n (click)=\"menuItemAction(row)\"\r\n (menuItemClick)=\"onRowActionClick($event)\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n","import { Component, Input, OnDestroy, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\nimport {\r\n ActivatedRoute,\r\n Data,\r\n NavigationEnd,\r\n Router,\r\n RouterModule,\r\n} from '@angular/router';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { Breadcrumb } from '../../models/breadcrumb.model';\r\n\r\n/**\r\n * Reusable breadcrumb component for displaying and navigating through a hierarchy of pages.\r\n * @class BreadcrumbComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-breadcrumb',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class BreadcrumbComponent implements OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n breadcrumbTexts: any = screenTexts;\r\n /**\r\n * Initial route for the breadcrumb component.\r\n * @type {string}\r\n * @default '/'\r\n * @memberof BreadcrumbComponent\r\n */\r\n @Input() breadcrumbInitialRoute = '/';\r\n /**\r\n * Initial label for the breadcrumb component.\r\n * @type {string}\r\n * @default breadcrumbTexts?.breadcrumb?.label?.initial\r\n * @memberof BreadcrumbComponent\r\n */\r\n @Input() breadcrumbInitialRouteLabel =\r\n this.breadcrumbTexts?.breadcrumb?.label?.initial;\r\n breadcrumbs!: Breadcrumb[];\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n static readonly ROUTE_DATA_BREADCRUMB = 'breadcrumb';\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public activatedRoute: ActivatedRoute,\r\n // eslint-disable-next-line no-unused-vars\r\n private router: Router\r\n ) {\r\n this.breadcrumbs = [];\r\n this.setRouteData();\r\n }\r\n\r\n /**\r\n * Sets up the subscription to router events to update breadcrumbs.\r\n * @memberof BreadcrumbComponent\r\n */\r\n setRouteData() {\r\n this.router.events\r\n .pipe(\r\n filter((event) => event instanceof NavigationEnd),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe(() => {\r\n this.breadcrumbs = this.createBreadcrumbs(this.activatedRoute.root);\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * Recursively gets the breadcrumb items for the given route.\r\n * @param {ActivatedRoute} route - The activated route.\r\n * @param {string} [url=''] - The current URL.\r\n * @param {Breadcrumb[]} [breadcrumbs=[]] - The current breadcrumb items.\r\n * @return {Breadcrumb[]} - The array of breadcrumb items.\r\n * @memberof BreadcrumbComponent\r\n */\r\n createBreadcrumbs(\r\n route: ActivatedRoute,\r\n url = '',\r\n breadcrumbs: Breadcrumb[] = []\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): any {\r\n const children: ActivatedRoute[] = route.children;\r\n\r\n if (children.length === 0) {\r\n return breadcrumbs;\r\n }\r\n\r\n for (const child of children) {\r\n const routeURL: string = child.snapshot.url\r\n .map((segment) => segment.path)\r\n .join('/');\r\n if (routeURL !== '') {\r\n url += `/${routeURL}`;\r\n }\r\n\r\n const routeData: Data = child.snapshot.data;\r\n const label =\r\n child.snapshot.data[BreadcrumbComponent.ROUTE_DATA_BREADCRUMB];\r\n // Capture query params from the route snapshot so breadcrumb links preserve them\r\n const snapshotQueryParams = child.snapshot.queryParams ?? {};\r\n const queryParams = Object.keys(snapshotQueryParams).length > 0\r\n ? snapshotQueryParams\r\n : undefined;\r\n if (\r\n routeData['breadcrumbData'] &&\r\n routeData['breadcrumbData'].breadcrumb &&\r\n label\r\n ) {\r\n const newLabel = routeData['breadcrumbData'].breadcrumb;\r\n const actionLabel = routeData['breadcrumbData'].actionBreadcrumb;\r\n const breadcrumbUrl = routeData['breadcrumbData'].breadcrumbUrl ?? url;\r\n const actionBreadcrumbUrl =\r\n routeData['breadcrumbData'].actionBreadcrumbUrl ?? url;\r\n const breadcrumbParams =\r\n routeData['breadcrumbData'].queryParam ?? queryParams;\r\n const actionBreadcrumbParams =\r\n routeData['breadcrumbData'].actionBreadcrumbParams ?? breadcrumbParams;\r\n breadcrumbs.push({\r\n label: newLabel,\r\n url: breadcrumbUrl,\r\n params: breadcrumbParams,\r\n });\r\n if (actionLabel) {\r\n breadcrumbs.push({\r\n label: actionLabel,\r\n url: actionBreadcrumbUrl,\r\n params: actionBreadcrumbParams,\r\n });\r\n }\r\n } else if (label) {\r\n breadcrumbs.push({ label, url, params: queryParams });\r\n }\r\n return this.createBreadcrumbs(child, url, breadcrumbs);\r\n }\r\n }\r\n\r\n /**\r\n * Takes the index and the current item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @return {number}\r\n * @memberof BreadcrumbComponent\r\n */\r\n trackByFn(index: number): number {\r\n return index;\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof BreadcrumbComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ul class=\"ieeesa-breadcrumb breadcrumb\">\r\n <li>\r\n <a\r\n [routerLink]=\"breadcrumbInitialRoute\"\r\n class=\"ieeesa-body-sm-14 text-decoration-none\"\r\n >{{ breadcrumbInitialRouteLabel }}\r\n </a>\r\n </li>\r\n\r\n <li\r\n *ngFor=\"\r\n let breadcrumb of breadcrumbs;\r\n let last = last;\r\n let i = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container *ngIf=\"!last; else disableLink\">\r\n <a\r\n [routerLink]=\"breadcrumb?.url\"\r\n [queryParams]=\"breadcrumb?.params\"\r\n class=\"ieeesa-body-sm-14 text-decoration-none\"\r\n >{{ breadcrumb.label }}</a\r\n >\r\n </ng-container>\r\n <ng-template #disableLink>\r\n <span class=\"ieeesa-body-sm-14\">{{ breadcrumb.label }}</span>\r\n </ng-template>\r\n </li>\r\n</ul>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Button, Tile } from '../../models/tile.model';\r\nimport { AlignType } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * Creates tile component.\r\n * @export\r\n * @class TileComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-tile',\r\n standalone: true,\r\n imports: [CommonModule, MatCardModule, MatButtonModule],\r\n templateUrl: './tile.component.html',\r\n styleUrls: ['./tile.component.scss'],\r\n})\r\nexport class TileComponent {\r\n alignmentType = AlignType;\r\n private tilesInfo!: Tile[];\r\n /**\r\n * Input property to get the tiles info.\r\n * @type {Tile}\r\n * @memberof TileComponent\r\n */\r\n @Input() set tiles(value: Tile[]) {\r\n this.tilesInfo = value;\r\n }\r\n\r\n get tiles(): Tile[] {\r\n return this.tilesInfo;\r\n }\r\n /**\r\n * Emits the click event\r\n * @type {EventEmitter}\r\n * @memberof TileComponent\r\n */\r\n @Output() tileClicked = new EventEmitter<Tile>();\r\n\r\n private buttonAlignment = AlignType.RIGHT;\r\n\r\n /**\r\n * Sets tile buttons alignment type..\r\n * @type {string} accepts Left, Right and Middle as values\r\n * @memberof TileComponent\r\n */\r\n @Input() set buttonAlignmentInfo(value: AlignType) {\r\n this.buttonAlignment = value;\r\n }\r\n\r\n get buttonAlignmentInfo(): AlignType {\r\n return this.buttonAlignment;\r\n }\r\n\r\n trackByFn(index: number, item: Tile): string {\r\n return item?.title;\r\n }\r\n\r\n trackByButtonFn(index: number, item: Button): string {\r\n return item?.id;\r\n }\r\n\r\n onTileButtonClicked(tile: Tile): void {\r\n this.tileClicked?.emit(tile);\r\n }\r\n}\r\n","<div class=\"d-flex flex-column flex-wrap flex-sm-row flex-container\">\r\n <mat-card\r\n *ngFor=\"let tile of tiles; trackBy: trackByFn\"\r\n class=\"ieeesa-tile d-flex\"\r\n [ngClass]=\"{ 'ieeesa-tile--inactive': !tile?.isActive }\"\r\n >\r\n <mat-card-header class=\"ieeesa-tile__header ieeesa-headline-sm-24\">\r\n <mat-card-title>{{ tile?.title }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content class=\"ieeesa-tile__content ieeesa-body-color-sm-14\">\r\n <p>{{ tile?.description }}</p>\r\n </mat-card-content>\r\n <mat-card-actions\r\n class=\"ieeesa-tile__actions d-flex flex-nowrap\"\r\n [ngClass]=\"{\r\n 'justify-content-start':\r\n buttonAlignmentInfo === alignmentType.LEFT,\r\n 'justify-content-end':\r\n buttonAlignmentInfo === alignmentType.RIGHT,\r\n 'justify-content-center':\r\n buttonAlignmentInfo === alignmentType.MIDDLE\r\n }\"\r\n >\r\n <button\r\n *ngFor=\"let button of tile?.buttons; trackBy: trackByButtonFn\"\r\n mat-button\r\n [disabled]=\"button?.isDisabled\"\r\n class=\"mat-tertiary-button ieeesa-tile__actions__button\"\r\n (click)=\"onTileButtonClicked(tile)\"\r\n >\r\n <span\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-tile__actions__button__label\"\r\n >{{ button?.label }}\r\n <i\r\n *ngIf=\"button?.isRightArrowNeeded\"\r\n class=\"fa fa-arrow-right\"\r\n aria-hidden=\"true\"\r\n ></i\r\n ></span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum CustomProperties {\r\n EVENT_ID = 'eventId',\r\n MEETING_ID = 'meetingId',\r\n ROUTE_PATHS = 'routePaths',\r\n API_BASE_URL = 'apiBaseURL',\r\n API_DOMAIN_URL = 'apiDomainURL',\r\n USER_PERMISSIONS = 'userPermissions',\r\n ACTION_TYPE = 'actionType',\r\n IS_VIEW_ONLY = 'isViewOnly',\r\n IS_MEMBER_OF_GROUP = 'isMemberOfGroup',\r\n TENANT_FEATURES = 'tenantFeatures',\r\n}\r\n","/* eslint-disable no-empty-function */\r\nimport {\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatTabChangeEvent,\r\n MatTabGroup,\r\n MatTabsModule,\r\n} from '@angular/material/tabs';\r\nimport { Tab } from '../../models/tab.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ModalConfirmationComponent } from '../modal-confirmation/modal-confirmation.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { FormGroup } from '@angular/forms';\r\nimport {\r\n EventsAndMeetingRouteConfig,\r\n UserPermission,\r\n ConfirmationModalData\r\n} from '@ieeesa-npm/models';\r\nimport { CustomProperties } from '../../models/custom-properties.model';\r\n\r\n@Component({\r\n selector: 'ieeesa-tabs',\r\n standalone: true,\r\n imports: [CommonModule, MatTabsModule],\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TabsComponent implements OnInit, OnDestroy {\r\n @ViewChild('componentContainer', { read: ViewContainerRef, static: true })\r\n componentContainer!: ViewContainerRef;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentRef!: ComponentRef<any>;\r\n isComponentLoaded = false;\r\n previousTabIndex = 0;\r\n private isFormValuesChanged = false;\r\n @Input() selectedTabIndex = 0;\r\n private _tabs: Tab[] = [];\r\n @Input()\r\n set tabs(tab: Tab[]) {\r\n this._tabs = tab;\r\n }\r\n get tabs(): Tab[] {\r\n return this._tabs;\r\n }\r\n @Input()\r\n set isFormChanged(status: boolean) {\r\n this.isFormValuesChanged = status;\r\n }\r\n get isFormChanged(): boolean {\r\n return this.isFormValuesChanged;\r\n }\r\n @Input() confirmationModalConfig!: ConfirmationModalData;\r\n @Output() selectedIndexChange = new EventEmitter<MatTabChangeEvent>();\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formCancel = new EventEmitter<any>();\r\n formSubmit = new EventEmitter<FormGroup[]>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n modalConfigTexts = this.constants?.modalConfig;\r\n @Input() isViewOnly!: string | boolean;\r\n @Input() isMemberOfGroup!: string | boolean;\r\n @Input() eventId!: string;\r\n @Input() meetingId!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() actionType!: any;\r\n @Input() routePaths!: EventsAndMeetingRouteConfig;\r\n @Input() apiBaseURL!: string;\r\n @Input() apiDomainURL!: string;\r\n @Input() userPermissions!: UserPermission[];\r\n @Input() isInlineMode = false;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() tenantFeatures: any[] | undefined;\r\n customProperties = [\r\n CustomProperties.EVENT_ID,\r\n CustomProperties.MEETING_ID,\r\n CustomProperties.ROUTE_PATHS,\r\n CustomProperties.API_BASE_URL,\r\n CustomProperties.API_DOMAIN_URL,\r\n CustomProperties.USER_PERMISSIONS,\r\n CustomProperties.ACTION_TYPE,\r\n CustomProperties.IS_VIEW_ONLY,\r\n CustomProperties.IS_MEMBER_OF_GROUP,\r\n CustomProperties.TENANT_FEATURES,\r\n ];\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(public dialog: MatDialog) {}\r\n /**\r\n * Verifies tabs count and calls createComponent() to load selected component.\r\n * @memberof TabsComponent\r\n */\r\n ngOnInit(): void {\r\n this.previousTabIndex = this.selectedTabIndex ?? 0;\r\n if (\r\n this.tabs?.length > 0 &&\r\n this.tabs?.[this.selectedTabIndex]?.componentRef\r\n ) {\r\n this.createComponent(this.tabs?.[this.selectedTabIndex]);\r\n }\r\n }\r\n /**\r\n * Opens confirmation modal on tab change event when leaving with unsaved changes.\r\n * @param {MatTabGroup} tab\r\n * @param event\r\n * @memberof TabsComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onTabChange(tab: MatTabGroup, event: MatTabChangeEvent): void {\r\n if (tab?.selectedIndex !== this.previousTabIndex && this.isFormChanged) {\r\n const dialogRef = this.dialog?.open(ModalConfirmationComponent, {\r\n data: this.confirmationModalConfig,\r\n width: this.modalConfigTexts?.width,\r\n autoFocus: this.modalConfigTexts?.autoFocus,\r\n ariaLabel: this.modalConfigTexts?.ariaLabel,\r\n panelClass: [\r\n 'ieeesa-modal-confirm-dialog',\r\n 'ieeesa-cancel-modal-confirm-dialog',\r\n ],\r\n });\r\n dialogRef\r\n ?.afterClosed()\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((result) => {\r\n if (result) {\r\n this.previousTabIndex = event.index;\r\n this.loadSelectedTabContent(event);\r\n } else {\r\n tab.selectedIndex = this.previousTabIndex;\r\n }\r\n });\r\n } else if (tab?.selectedIndex !== this.previousTabIndex) {\r\n this.previousTabIndex = event.index;\r\n this.loadSelectedTabContent(event);\r\n }\r\n }\r\n /**\r\n * Loads the respective component on tab change event when componentRef is available.\r\n * @param {MatTabChangeEvent} event\r\n * @memberof TabsComponent\r\n */\r\n loadSelectedTabContent(event: MatTabChangeEvent): void {\r\n this.isFormChanged = false;\r\n this.selectedIndexChange.emit(event);\r\n if (this.tabs?.[event.index]?.componentRef)\r\n this.createComponent(this.tabs?.[event.index]);\r\n }\r\n /**\r\n * Dynamically loads the component in the DOM container based on the passed tab and clears the previously loaded component before loading the new one.\r\n * @param {Tab} tab\r\n * @memberof TabsComponent\r\n */\r\n createComponent(tab: Tab): void {\r\n if (this.isComponentLoaded) {\r\n this.componentRef.destroy();\r\n this.componentContainer.clear();\r\n }\r\n this.componentRef = this.componentContainer?.createComponent(\r\n tab.componentRef\r\n );\r\n this.setCustomComponentProperties(this.customProperties as []);\r\n // Set isInlineMode only if the component supports it (e.g., CreateModifyMeetingComponent)\r\n if (this.isInlineMode && this.componentRef?.instance && 'isInlineMode' in this.componentRef.instance) {\r\n this.componentRef.setInput('isInlineMode', this.isInlineMode);\r\n }\r\n this.componentRef?.instance?.formCancel\r\n ?.pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .subscribe((result: any) => {\r\n this.formCancel.emit(result);\r\n });\r\n this.componentRef?.instance?.formSubmit\r\n ?.pipe(takeUntil(this.destroy$))\r\n .subscribe((result: FormGroup[]) => {\r\n this.formSubmit.emit(result);\r\n });\r\n this.isComponentLoaded = true;\r\n }\r\n /**\r\n * Sets dynamic input property which is being sent by the consumer component and its value is not undefined for the component loaded by the tab component.\r\n * @param {[]} properties\r\n * @memberof TabsComponent\r\n */\r\n setCustomComponentProperties(properties: []): void {\r\n const thisObj = this as object;\r\n // Tab components declare different subsets of these inputs; setting an undeclared one throws NG0303.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const declaredInputs =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (this.componentRef?.componentType as any)?.['ɵcmp']?.inputs ?? {};\r\n properties.forEach((property) => {\r\n if (\r\n property in thisObj &&\r\n thisObj[property] !== undefined &&\r\n property in declaredInputs\r\n ) {\r\n this.componentRef?.setInput(property, thisObj[property]);\r\n }\r\n });\r\n }\r\n /**\r\n * Returns unique identifier for the tab.\r\n * @param {number} index\r\n * @param {Tab} option\r\n * @return {*} {(number | string)}\r\n * @memberof TabsComponent\r\n */\r\n trackByFn(index: number, option: Tab): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * Cleans up resources when the component is destroyed\r\n * @memberof TabsComponent\r\n */\r\n ngOnDestroy() {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.componentRef = null as any;\r\n }\r\n }\r\n}\r\n","<mat-tab-group\r\n #tabGroup\r\n class=\"ieeesa-tab-group\"\r\n (selectedTabChange)=\"onTabChange(tabGroup, $event)\"\r\n [selectedIndex]=\"selectedTabIndex\"\r\n>\r\n <mat-tab\r\n *ngFor=\"let tab of tabs; trackBy: trackByFn\"\r\n [label]=\"tab?.label ?? ''\"\r\n [disabled]=\"tab?.disabled\"\r\n >\r\n </mat-tab>\r\n</mat-tab-group>\r\n<ng-container #componentContainer></ng-container>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum ButtonType {\r\n NORMAL = 'NORMAL',\r\n ICON = 'ICON'\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { ButtonType } from '../../models/button-type.model';\r\nimport { CardButton } from '../../models/card-button.model';\r\nimport { CardInfo } from '../../models/card-info.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { AlignType } from '@ieeesa-npm/models';\r\n\r\n@Component({\r\n selector: 'ieeesa-card',\r\n standalone: true,\r\n imports: [CommonModule, MatCardModule, MatButtonModule, IconButtonComponent],\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CardComponent implements OnDestroy {\r\n isMobileView = false;\r\n destroy$ = new Subject<boolean>();\r\n alignmentType = AlignType;\r\n buttonType = ButtonType;\r\n @Input() buttonAlignmentInfo = AlignType.LEFT;\r\n @Output() actionButtonClicked = new EventEmitter<CardButton>();\r\n\r\n private cardDetails!: CardInfo;\r\n @Input() set cardInfo(value: CardInfo) {\r\n this.cardDetails = value;\r\n }\r\n get cardInfo(): CardInfo {\r\n return this.cardDetails;\r\n }\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakPointObserverService: BreakpointObserverService\r\n ) {\r\n this.breakPointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n /**\r\n * Emits the action button click event.\r\n * @type {Button}\r\n * @memberof CardComponent\r\n */\r\n onActionButtonClicked(button: CardButton): void {\r\n this.actionButtonClicked.emit(button);\r\n }\r\n /**\r\n * Keep tracks the button based on the ID in the DOM tree.\r\n * @memberof CardComponent\r\n */\r\n trackByButtonFn(index: number, item: CardButton): number {\r\n return item?.id;\r\n }\r\n /**\r\n * Performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CardComponent\r\n */\r\n ngOnDestroy() {\r\n this.destroy$?.next(true);\r\n this.destroy$?.unsubscribe();\r\n }\r\n}\r\n","<mat-card\r\n *ngIf=\"cardInfo\"\r\n class=\"ieeesa-card mt-3 d-flex\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-card__min-height' : ''\"\r\n>\r\n <mat-card-header class=\"ieeesa-card__header p-0\">\r\n <mat-card-title-group>\r\n <mat-card-title\r\n class=\"ieeesa-card__header--title ieeesa-headline-sm-24 p-0\"\r\n >\r\n {{ cardInfo?.title }}\r\n </mat-card-title>\r\n <mat-card-subtitle\r\n class=\"ieeesa-card__header--sub-title ieeesa-body-md-14\"\r\n *ngIf=\"cardInfo?.subTitle\"\r\n >\r\n {{ cardInfo?.subTitle }}\r\n </mat-card-subtitle>\r\n </mat-card-title-group>\r\n </mat-card-header>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardActions;\r\n context: { $implicit: cardInfo?.headerActions }\r\n \"\r\n ></ng-container>\r\n <mat-card-content class=\"ieeesa-card__content p-0\">\r\n <ng-content select=\"[component]\"></ng-content>\r\n <ng-content select=\"[description]\"></ng-content>\r\n </mat-card-content>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardActions;\r\n context: { $implicit: cardInfo?.footerActions }\r\n \"\r\n ></ng-container>\r\n <ng-template #cardActions let-actions>\r\n <mat-card-actions\r\n class=\"ieeesa-card--actions d-flex flex-nowrap p-0\"\r\n [ngClass]=\"{\r\n 'justify-content-start': buttonAlignmentInfo === alignmentType.LEFT,\r\n 'justify-content-end': buttonAlignmentInfo === alignmentType.RIGHT,\r\n 'justify-content-center': buttonAlignmentInfo === alignmentType.MIDDLE\r\n }\"\r\n *ngIf=\"actions?.length\"\r\n >\r\n <ng-container *ngFor=\"let button of actions; trackBy: trackByButtonFn\">\r\n <ng-container\r\n *ngIf=\"button?.buttonType === buttonType.ICON; else normalButton\"\r\n >\r\n <ieeesa-icon-button\r\n [iconButton]=\"button\"\r\n (iconButtonClick)=\"onActionButtonClicked(button)\"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-template #normalButton>\r\n <button\r\n mat-button\r\n (click)=\"onActionButtonClicked(button)\"\r\n class=\"mat-tertiary-button\"\r\n *ngIf=\"button?.isVisible\"\r\n >\r\n <span\r\n class=\"ieeesa-card--actions__label ieeesa-btn-label-lg-bold-16\"\r\n >\r\n {{ button?.label }}\r\n </span>\r\n </button>\r\n </ng-template>\r\n </ng-container>\r\n </mat-card-actions>\r\n </ng-template>\r\n</mat-card>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatAccordion, MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { AccordionInfo } from '../../models/accordion-info.model';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ieeesa-accordion',\r\n standalone: true,\r\n templateUrl: './accordion.component.html',\r\n styleUrls: ['./accordion.component.scss'],\r\n imports: [CommonModule, MatExpansionModule, MatButtonModule, MatIconModule],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AccordionComponent implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n @ViewChild(MatAccordion)\r\n accordion!: MatAccordion;\r\n isMobileView = false;\r\n private accordionDetails!: AccordionInfo;\r\n @Input() set accordionInfo(value: AccordionInfo) {\r\n this.accordionDetails = value;\r\n }\r\n get accordionInfo(): AccordionInfo {\r\n return this.accordionDetails;\r\n }\r\n @Output() accordionOpened = new EventEmitter<boolean>();\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(private breakpointObserverService: BreakpointObserverService) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: { matches: boolean }) => {\r\n this.isMobileView = result?.matches;\r\n });\r\n }\r\n /**\r\n * Emits accordionOpened event with true when accordion is expanded or false if accordion is collapsed.\r\n * @param {boolean} isExpanded\r\n * @memberof AccordionComponent\r\n */\r\n setOpenedStatus(isExpanded: boolean): void {\r\n this.accordionOpened.emit(isExpanded);\r\n }\r\n /**\r\n * Performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof AccordionComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$?.next(true);\r\n this.destroy$?.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-accordion\" *ngIf=\"accordionInfo\">\r\n <mat-accordion class=\"ieeesa-accordion__mat-accordion\">\r\n <mat-expansion-panel\r\n [disabled]=\"accordionInfo?.isDisabled\"\r\n (opened)=\"setOpenedStatus(true)\"\r\n (closed)=\"setOpenedStatus(false)\"\r\n >\r\n <mat-expansion-panel-header\r\n class=\"ieeesa-accordion__panel-header\"\r\n [ngClass]=\"{ 'accordion-header': isMobileView }\"\r\n >\r\n <mat-panel-title\r\n class=\"ieeesa-accordion__header--title ieeesa-title-lg-24\"\r\n >{{ accordionInfo?.title }}</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <ng-content select=\"[actions]\"></ng-content>\r\n <ng-content select=\"[component]\"></ng-content>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { InactiveTenantDisplay } from '../../models/inactive-tenant.model';\r\nimport { SetBackgroundDirective } from '../../directives/set-background/set-background.directive';\r\nimport { AppConfigInfo } from '../../models/app-config-info.model';\r\n/**\r\n * Provides reusable implementation to Inactive tenant error page by getting the application config and display contents information as an input to the component.\r\n * @export\r\n * @class InactiveTenantComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-inactive-tenant',\r\n templateUrl: './inactive-tenant.component.html',\r\n styleUrls: ['./inactive-tenant.component.scss'],\r\n imports: [CommonModule, SetBackgroundDirective],\r\n standalone: true,\r\n})\r\nexport class InactiveTenantComponent {\r\n /**\r\n * AppConfigInfo data can be passed as input while calling this component using selector.\r\n * @usage <nesc-inactive-tenant [appConfigInfo]=\"appConfigInfo\" [inactiveTenantDisplay]=\"inactiveTenantDisplay\"></nesc-inactive-tenant> or routes: Route[]=[{ path: 'landing', component: InactiveTenantComponent, data:{appConfigInfo:appConfigInfo} }]\r\n * @type {AppConfigInfo}\r\n * @type {InactiveTenantDisplay}\r\n * @memberof InactiveTenantComponent\r\n */\r\n @Input() appConfigInfo: AppConfigInfo = {\r\n appTitle: '',\r\n appDescription: '',\r\n cookieName: '',\r\n ssoSignOutUrl: '',\r\n domainUrl: '',\r\n createAccountUrl: '',\r\n };\r\n @Input() inactiveTenantDisplay: InactiveTenantDisplay = {\r\n helpLink: '',\r\n errorMessage: '',\r\n supportText: '',\r\n };\r\n}\r\n","<div\r\n class=\"ieeesa-inactive-tenant d-flex justify-content-center\"\r\n ieeesaSetBackground\r\n [background]=\"appConfigInfo.background ?? { color: '', imgURL: '' }\"\r\n>\r\n <div\r\n class=\"jumbotron ieeesa-inactive-tenant__note d-flex flex-column justify-content-between text-center px-4 py-4 my-5\"\r\n >\r\n <div\r\n class=\"mb-0 ieeesa-title-lg-24 ieeesa-inactive-tenant__note--description\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ inactiveTenantDisplay?.errorMessage }}\r\n </p>\r\n <p class=\"mb-0\">\r\n {{ inactiveTenantDisplay?.supportText }}\r\n </p>\r\n <a\r\n class=\"pointer\"\r\n href=\"mailto:{{ inactiveTenantDisplay?.helpLink }}\"\r\n rel=\"noopener noreferrer\"\r\n >{{ inactiveTenantDisplay?.helpLink }}</a\r\n >\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExportFormat, ExportFormatOption } from '../../models/export-format-popover.model';\r\n\r\n/**\r\n * ExportFormatPopoverComponent renders a popover presenting format selection\r\n * cards (CSV / Excel). Positioned via CSS absolute below the trigger element.\r\n *\r\n * @export\r\n * @class ExportFormatPopoverComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-export-format-popover',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './export-format-popover.component.html',\r\n styleUrls: ['./export-format-popover.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ExportFormatPopoverComponent {\r\n /** Array of format options to display in the popover */\r\n @Input() formatOptions: ExportFormatOption[] = [];\r\n\r\n /**\r\n * @deprecated No longer used for positioning; kept for backwards compatibility.\r\n */\r\n @Input() origin?: unknown;\r\n\r\n /** Controls visibility */\r\n private _isOpen = false;\r\n @Input()\r\n set isOpen(value: boolean) {\r\n // Clear any previously highlighted format each time the popover opens, so it\r\n // always opens with no pre-selected format.\r\n if (value && !this._isOpen) {\r\n this.selectedFormat = null;\r\n }\r\n this._isOpen = value;\r\n }\r\n get isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n\r\n /** Title text displayed at the top of the popover */\r\n @Input() popoverTitle = 'Select the file format for attendance export.';\r\n\r\n /** Subtitle map for format options (keyed by ExportFormat value) */\r\n @Input() formatSubtitles: Record<string, string> = {\r\n csv: 'Comma separated file',\r\n xls: 'Spreadsheet File',\r\n };\r\n\r\n /** Tracks the currently selected format for visual highlight */\r\n selectedFormat: ExportFormat | null = null;\r\n\r\n /** Emits when user selects a format */\r\n @Output() formatSelected = new EventEmitter<ExportFormat>();\r\n\r\n /** Emits when the popover should be closed (backdrop click or after selection). */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * Handles format option selection via click or Enter key.\r\n * @param {ExportFormat} format\r\n */\r\n onFormatSelect(format: ExportFormat): void {\r\n this.selectedFormat = format;\r\n this.formatSelected.emit(format);\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Closes the popover via backdrop click.\r\n */\r\n onBackdropClick(): void {\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * TrackBy function for *ngFor on format options.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n trackByFormat(index: number, option: ExportFormatOption): string {\r\n return option.value;\r\n }\r\n}\r\n\r\n","<!-- Backdrop -->\r\n<div\r\n *ngIf=\"isOpen\"\r\n class=\"ieeesa-export-format-popover__backdrop\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n (click)=\"onBackdropClick()\"\r\n (document:keydown.escape)=\"onBackdropClick()\"\r\n></div>\r\n\r\n<!-- Popover -->\r\n<div *ngIf=\"isOpen\" class=\"ieeesa-export-format-popover\" role=\"listbox\">\r\n <p class=\"ieeesa-export-format-popover__title\">{{ popoverTitle }}</p>\r\n <div class=\"ieeesa-export-format-popover__options\">\r\n <button\r\n *ngFor=\"let option of formatOptions; trackBy: trackByFormat\"\r\n class=\"ieeesa-export-format-popover__option\"\r\n [class.ieeesa-export-format-popover__option--selected]=\"selectedFormat === option.value\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"selectedFormat === option.value\"\r\n [attr.aria-label]=\"option.ariaLabel\"\r\n (click)=\"onFormatSelect(option.value)\"\r\n (keydown.enter)=\"onFormatSelect(option.value)\"\r\n >\r\n <span class=\"ieeesa-export-format-popover__option-label\">{{ option.label }}</span>\r\n <span class=\"ieeesa-export-format-popover__option-subtitle\">\r\n {{ formatSubtitles[option.value] }}\r\n </span>\r\n </button>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport {\r\n FilterPopoverCategory,\r\n FilterPopoverOption,\r\n FilterPopoverSelection,\r\n} from '../../models/filter-popover.model';\r\n\r\n/**\r\n * FilterPopoverComponent renders a configurable multi-category filter popup.\r\n * Positioned via CSS absolute — parent must wrap trigger + this component\r\n * in a `position: relative` container.\r\n *\r\n * Supports single or multi-category mode:\r\n * - Single category: left nav is hidden, only checkbox list shown.\r\n * - Multi-category: left nav with category selection + right panel.\r\n *\r\n * @export\r\n * @class FilterPopoverComponent\r\n * @implements {OnChanges}\r\n */\r\n@Component({\r\n selector: 'ieeesa-filter-popover',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatCheckboxModule],\r\n templateUrl: './filter-popover.component.html',\r\n styleUrls: ['./filter-popover.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FilterPopoverComponent implements OnChanges {\r\n /** Controls visibility */\r\n @Input() isOpen = false;\r\n\r\n /** Filter categories with their options — parent defines what to show */\r\n @Input() categories: FilterPopoverCategory[] = [];\r\n\r\n /** Header title text */\r\n @Input() title = 'Filters';\r\n\r\n /** Clear all button text */\r\n @Input() clearAllLabel = 'Clear all';\r\n\r\n /** Select all link text */\r\n @Input() selectAllLabel = 'Select all';\r\n\r\n /** Deselect all link text */\r\n @Input() deselectAllLabel = 'Deselect all';\r\n\r\n /** Reset button text */\r\n @Input() resetLabel = 'Reset';\r\n\r\n /** Apply button text */\r\n @Input() applyLabel = 'Apply';\r\n\r\n /** No results message */\r\n @Input() noResultsMessage = 'No results found';\r\n\r\n /** Search placeholder prefix (appended with category label) */\r\n @Input() searchPlaceholderPrefix = 'Search';\r\n\r\n /** Emits the current selection when user clicks Apply */\r\n @Output() filterApplied = new EventEmitter<FilterPopoverSelection>();\r\n\r\n /** Emits when user clicks Reset */\r\n @Output() filterReset = new EventEmitter<void>();\r\n\r\n /** Emits when the popover should be closed (backdrop click or after Apply). */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /** Currently active category index */\r\n activeCategoryIndex = 0;\r\n\r\n /** Search term for filtering options */\r\n searchTerm = '';\r\n\r\n /** Internal working copy of categories */\r\n workingCategories: FilterPopoverCategory[] = [];\r\n\r\n /**\r\n * Refreshes working copy when opening or categories change.\r\n */\r\nngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOpen'] && this.isOpen) {\r\n this.initWorkingCopy();\r\n return;\r\n }\r\n\r\n // Only refresh categories while closed so we don't clobber in-progress user selections.\r\n if (changes['categories'] && !this.isOpen) {\r\n this.initWorkingCopy();\r\n }\r\n}\r\n\r\n /** Whether this is a single-category filter (hides left nav) */\r\n get isSingleCategory(): boolean {\r\n return this.workingCategories.length === 1;\r\n }\r\n\r\n /** Total number of selected options across all categories */\r\n get totalSelectedCount(): number {\r\n return this.workingCategories.reduce(\r\n (sum, cat) => sum + (cat.selectedCount ?? 0), 0\r\n );\r\n }\r\n\r\n /** Currently active category */\r\n get activeCategory(): FilterPopoverCategory | undefined {\r\n return this.workingCategories[this.activeCategoryIndex];\r\n }\r\n\r\n /** Options filtered by search term for the active category */\r\n get filteredOptions(): FilterPopoverOption[] {\r\n if (!this.activeCategory) return [];\r\n if (!this.searchTerm.trim()) return this.activeCategory.options;\r\n const term = this.searchTerm.toLowerCase();\r\n return this.activeCategory.options.filter((opt) =>\r\n opt.label.toLowerCase().includes(term)\r\n );\r\n }\r\n\r\n /** Whether all visible options are checked */\r\n get isAllVisibleSelected(): boolean {\r\n const visible = this.filteredOptions;\r\n return visible.length > 0 && visible.every((opt) => opt.checked);\r\n }\r\n\r\n /** Selects a category from the left nav */\r\n onCategorySelect(index: number): void {\r\n this.activeCategoryIndex = index;\r\n this.searchTerm = '';\r\n }\r\n\r\n /** Toggles a single checkbox option */\r\n onOptionToggle(option: FilterPopoverOption): void {\r\n option.checked = !option.checked;\r\n this.recalculateSelectedCount(this.activeCategoryIndex);\r\n }\r\n\r\n /** Toggles all visible options */\r\n onSelectAll(): void {\r\n const shouldSelect = !this.isAllVisibleSelected;\r\n this.filteredOptions.forEach((opt) => (opt.checked = shouldSelect));\r\n this.recalculateSelectedCount(this.activeCategoryIndex);\r\n }\r\n\r\n /** Applies filter and emits selection */\r\n onApply(): void {\r\n const selection: FilterPopoverSelection = {};\r\n this.workingCategories.forEach((cat) => {\r\n const selected = cat.options.filter((opt) => opt.checked).map((opt) => opt.label);\r\n if (selected.length > 0) {\r\n selection[cat.id] = selected;\r\n }\r\n });\r\n this.filterApplied.emit(selection);\r\n this.closed.emit();\r\n }\r\n\r\n /** Resets all selections */\r\n onReset(): void {\r\n this.workingCategories.forEach((cat) => {\r\n cat.options.forEach((opt) => (opt.checked = false));\r\n cat.selectedCount = 0;\r\n });\r\n this.searchTerm = '';\r\n this.filterReset.emit();\r\n }\r\n\r\n /** Clears all (same as reset) */\r\n onClearAll(): void {\r\n this.onReset();\r\n }\r\n\r\n /** Closes via backdrop click */\r\n onBackdropClick(): void {\r\n this.closed.emit();\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n trackByCategory(index: number): number {\r\n return index;\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n trackByOption(_index: number, option: FilterPopoverOption): string {\r\n return option.id;\r\n }\r\n\r\n // --- Private ---\r\n\r\n private initWorkingCopy(): void {\r\n this.workingCategories = this.categories.map((cat) => ({\r\n ...cat,\r\n options: cat.options.map((opt) => ({ ...opt })),\r\n selectedCount: cat.options.filter((opt) => opt.checked).length,\r\n }));\r\n this.activeCategoryIndex = 0;\r\n this.searchTerm = '';\r\n }\r\n\r\n private recalculateSelectedCount(categoryIndex: number): void {\r\n const cat = this.workingCategories[categoryIndex];\r\n if (cat) {\r\n cat.selectedCount = cat.options.filter((opt) => opt.checked).length;\r\n }\r\n }\r\n}\r\n","<!-- Backdrop -->\r\n<div\r\n *ngIf=\"isOpen\"\r\n class=\"ieeesa-filter-popover__backdrop\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n (click)=\"onBackdropClick()\"\r\n (document:keydown.escape)=\"onBackdropClick()\"\r\n></div>\r\n\r\n<!-- Filter Panel -->\r\n<div *ngIf=\"isOpen\" class=\"ieeesa-filter-popover\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"title\">\r\n <!-- Header -->\r\n <div class=\"ieeesa-filter-popover__header\">\r\n <div class=\"ieeesa-filter-popover__header-left\">\r\n <svg class=\"ieeesa-filter-popover__header-icon\">\r\n <use xlink:href=\"/assets/images/sprites/sprites.svg#icon-filter-attendees\"></use>\r\n </svg>\r\n <span class=\"ieeesa-filter-popover__header-title\">{{ title }}</span>\r\n <span\r\n *ngIf=\"totalSelectedCount > 0\"\r\n class=\"ieeesa-filter-popover__badge ieeesa-filter-popover__badge--header\"\r\n >\r\n {{ totalSelectedCount }}\r\n </span>\r\n </div>\r\n <button\r\n *ngIf=\"totalSelectedCount > 0\"\r\n class=\"ieeesa-filter-popover__clear-all\"\r\n (click)=\"onClearAll()\"\r\n type=\"button\"\r\n >\r\n {{ clearAllLabel }}\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"ieeesa-filter-popover__body\">\r\n <!-- Left Nav (hidden for single category) -->\r\n <div *ngIf=\"!isSingleCategory\" class=\"ieeesa-filter-popover__nav\">\r\n <button\r\n *ngFor=\"let category of workingCategories; let i = index; trackBy: trackByCategory\"\r\n class=\"ieeesa-filter-popover__nav-item\"\r\n [class.ieeesa-filter-popover__nav-item--active]=\"i === activeCategoryIndex\"\r\n (click)=\"onCategorySelect(i)\"\r\n type=\"button\"\r\n >\r\n <span class=\"ieeesa-filter-popover__nav-label\">{{ category.label }}</span>\r\n <span\r\n *ngIf=\"category.selectedCount && category.selectedCount > 0\"\r\n class=\"ieeesa-filter-popover__badge ieeesa-filter-popover__badge--nav\"\r\n >\r\n {{ category.selectedCount }}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <!-- Right Content -->\r\n <div class=\"ieeesa-filter-popover__content\">\r\n <!-- Search -->\r\n <div class=\"ieeesa-filter-popover__search-wrapper\">\r\n <svg class=\"ieeesa-filter-popover__search-icon\">\r\n <use xlink:href=\"/assets/images/sprites/sprites.svg#icon-search\"></use>\r\n </svg>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-filter-popover__search-input\"\r\n [placeholder]=\"searchPlaceholderPrefix + ' ' + (activeCategory?.label ?? '') + '...'\"\r\n [(ngModel)]=\"searchTerm\"\r\n [attr.aria-label]=\"searchPlaceholderPrefix + ' ' + (activeCategory?.label ?? '')\"\r\n />\r\n </div>\r\n\r\n <!-- Select All -->\r\n <button\r\n class=\"ieeesa-filter-popover__select-all\"\r\n (click)=\"onSelectAll()\"\r\n type=\"button\"\r\n >\r\n {{ isAllVisibleSelected ? deselectAllLabel : selectAllLabel }}\r\n </button>\r\n\r\n <!-- Options List -->\r\n <div class=\"ieeesa-filter-popover__options-list\">\r\n <div\r\n *ngFor=\"let option of filteredOptions; trackBy: trackByOption\"\r\n class=\"ieeesa-filter-popover__option\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"option.checked\"\r\n (change)=\"onOptionToggle(option)\"\r\n [attr.aria-label]=\"option.label\"\r\n color=\"primary\"\r\n >\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </div>\r\n <div\r\n *ngIf=\"filteredOptions.length === 0\"\r\n class=\"ieeesa-filter-popover__no-results\"\r\n >\r\n {{ noResultsMessage }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ieeesa-filter-popover__footer\">\r\n <button\r\n class=\"ieeesa-filter-popover__btn-reset\"\r\n (click)=\"onReset()\"\r\n type=\"button\"\r\n >\r\n {{ resetLabel }}\r\n </button>\r\n <button\r\n class=\"ieeesa-filter-popover__btn-apply\"\r\n (click)=\"onApply()\"\r\n type=\"button\"\r\n >\r\n {{ applyLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogRef,\r\n MatDialogModule,\r\n} from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { PolicyConfirmationDialogData } from '../../models/policy-confirmation-dialog.model';\r\n\r\n/**\r\n * PolicyConfirmationDialogComponent is a reusable confirmation dialog that displays\r\n * a configurable title, body text, and Cancel/Confirm action buttons.\r\n * Used for the IEEE Data Access and Use Policy confirmation in the attendance export flow.\r\n *\r\n * Opens via `MatDialog.open(PolicyConfirmationDialogComponent, { data: PolicyConfirmationDialogData })`.\r\n * Returns `true` on confirm, `false` on cancel or close.\r\n *\r\n * @export\r\n * @class PolicyConfirmationDialogComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-policy-confirmation-dialog',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './policy-confirmation-dialog.component.html',\r\n styleUrls: ['./policy-confirmation-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PolicyConfirmationDialogComponent {\r\n /** Text before the hyperlink */\r\n bodyTextBefore = '';\r\n /** Text after the hyperlink */\r\n bodyTextAfter = '';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public data: PolicyConfirmationDialogData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<PolicyConfirmationDialogComponent>\r\n ) {\r\n dialogRef.disableClose = true;\r\n this.splitBodyText();\r\n }\r\n\r\n /**\r\n * Splits the bodyText around the policyLinkText so the template can render\r\n * the link portion as a hyperlink.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n private splitBodyText(): void {\r\n if (this.data.policyUrl && this.data.policyLinkText) {\r\n const index = this.data.bodyText.indexOf(this.data.policyLinkText);\r\n if (index > -1) {\r\n this.bodyTextBefore = this.data.bodyText.substring(0, index);\r\n this.bodyTextAfter = this.data.bodyText.substring(\r\n index + this.data.policyLinkText.length\r\n );\r\n return;\r\n }\r\n }\r\n this.bodyTextBefore = this.data.bodyText;\r\n this.bodyTextAfter = '';\r\n }\r\n\r\n /**\r\n * Handles the Confirm button click — closes the dialog returning `true`.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n onConfirm(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n /**\r\n * Handles the Cancel button click — closes the dialog returning `false`.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n onCancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n /**\r\n * Handles the X (close) button click — closes the dialog returning `false`.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n onClose(): void {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","<div class=\"ieeesa-policy-confirmation-dialog\">\r\n <div class=\"ieeesa-policy-confirmation-dialog__header\">\r\n <h2 class=\"ieeesa-policy-confirmation-dialog__title\">{{ data.title }}</h2>\r\n <button\r\n class=\"ieeesa-policy-confirmation-dialog__close-btn\"\r\n [attr.aria-label]=\"'Close ' + data.title + ' dialog'\"\r\n (click)=\"onClose()\"\r\n >\r\n <i class=\"fa-solid fa-xmark\"></i>\r\n </button>\r\n </div>\r\n <hr class=\"ieeesa-policy-confirmation-dialog__divider\" />\r\n <div class=\"ieeesa-policy-confirmation-dialog__body\">\r\n <ng-container *ngIf=\"data.policyUrl && data.policyLinkText && bodyTextBefore !== data.bodyText; else plainText\">\r\n {{ bodyTextBefore }}<a\r\n [href]=\"data.policyUrl\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"ieeesa-policy-confirmation-dialog__policy-link\"\r\n [attr.aria-label]=\"data.policyLinkText + ' (opens in new tab)'\"\r\n >{{ data.policyLinkText }}</a>{{ bodyTextAfter }}\r\n </ng-container>\r\n <ng-template #plainText>{{ data.bodyText }}</ng-template>\r\n </div>\r\n <hr class=\"ieeesa-policy-confirmation-dialog__divider\" />\r\n <div class=\"ieeesa-policy-confirmation-dialog__footer\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-policy-confirmation-dialog__btn-cancel\"\r\n [attr.aria-label]=\"data.cancelLabel\"\r\n (click)=\"onCancel()\"\r\n >\r\n {{ data.cancelLabel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-primary-button ieeesa-policy-confirmation-dialog__btn-confirm\"\r\n [attr.aria-label]=\"data.confirmLabel\"\r\n (click)=\"onConfirm()\"\r\n >\r\n {{ data.confirmLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogRef,\r\n MatDialogModule,\r\n} from '@angular/material/dialog';\r\nimport { ExportSuccessDialogData } from '../../models/export-success-dialog.model';\r\n\r\n/**\r\n * ExportSuccessDialogComponent displays a centered success message after\r\n * a file export completes. Shows the filename in bold and a single \"Close\" button.\r\n *\r\n * Opens via `MatDialog.open(ExportSuccessDialogComponent, { data: ExportSuccessDialogData })`.\r\n *\r\n * @export\r\n * @class ExportSuccessDialogComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-export-success-dialog',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule],\r\n templateUrl: './export-success-dialog.component.html',\r\n styleUrls: ['./export-success-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ExportSuccessDialogComponent {\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public data: ExportSuccessDialogData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<ExportSuccessDialogComponent>\r\n ) {}\r\n\r\n /**\r\n * Handles the Close button click — closes the dialog.\r\n * @memberof ExportSuccessDialogComponent\r\n */\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div class=\"ieeesa-export-success-dialog\">\r\n <div class=\"ieeesa-export-success-dialog__content\">\r\n <span class=\"ieeesa-export-success-dialog__message\">{{ data.message }}</span>\r\n <span class=\"ieeesa-export-success-dialog__filename\">{{ data.filename }}</span>\r\n </div>\r\n <div class=\"ieeesa-export-success-dialog__actions\">\r\n <button\r\n class=\"ieeesa-export-success-dialog__btn-close\"\r\n [attr.aria-label]=\"data.closeLabel\"\r\n (click)=\"onClose()\"\r\n >\r\n {{ data.closeLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n HomeGroupSelectionData,\r\n HomeGroupSelectionResult,\r\n QualifyingGroup,\r\n} from '../../models/home-group-selection.model';\r\n\r\n/**\r\n * HomeGroupSelectionComponent is a generic, reusable dialog for selecting a\r\n * home Working Group to receive reciprocal attendance credit (SP3M-18).\r\n *\r\n * It is shown when an attendee (or an admin acting on their behalf) qualifies\r\n * for reciprocal credit in more than one home Working Group and must choose\r\n * which one should receive the credit. The first qualifying group is\r\n * pre-selected so Submit is enabled immediately; Submit is disabled only if no\r\n * group is selected.\r\n *\r\n * This component is feature-agnostic — all display text is supplied by the\r\n * caller via MAT_DIALOG_DATA (HomeGroupSelectionData). It performs no API calls;\r\n * it collects the selection and returns it so the caller can re-submit.\r\n *\r\n * Footer:\r\n * - Submit → closes with { homeGroupId }\r\n * - Cancel → closes with null (caller aborts)\r\n *\r\n * @export\r\n * @class HomeGroupSelectionComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-home-group-selection',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './home-group-selection.component.html',\r\n styleUrls: ['./home-group-selection.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HomeGroupSelectionComponent implements OnInit {\r\n /** Qualifying home groups the user must choose between. */\r\n qualifyingGroups: QualifyingGroup[] = [];\r\n /** The currently selected home group id. */\r\n selectedGroupId = '';\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n @Inject(MAT_DIALOG_DATA) public data: HomeGroupSelectionData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<HomeGroupSelectionComponent>\r\n ) {\r\n // Non-dismissable: user must explicitly choose Submit or Cancel.\r\n this.dialogRef.disableClose = true;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.qualifyingGroups = this.data?.qualifyingGroups ?? [];\r\n\r\n // Pre-select the first qualifying group (matches the design + enables Submit).\r\n if (this.qualifyingGroups.length > 0) {\r\n this.selectedGroupId = this.qualifyingGroups[0].groupId;\r\n }\r\n }\r\n\r\n /**\r\n * trackBy for the qualifying groups list.\r\n * @param {number} _index\r\n * @param {QualifyingGroup} group\r\n * @return {string}\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n trackByGroupId(_index: number, group: QualifyingGroup): string {\r\n return group.groupId;\r\n }\r\n\r\n /**\r\n * Whether Submit should be enabled — true once a group is selected.\r\n * @return {boolean}\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n get canSubmit(): boolean {\r\n return !!this.selectedGroupId;\r\n }\r\n\r\n /**\r\n * Cancel handler — closes with null so the caller aborts.\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n onCancel(): void {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n /**\r\n * Submit handler — closes with the selected home group id.\r\n * No-ops if no group is selected.\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n onSubmit(): void {\r\n if (!this.canSubmit) {\r\n return;\r\n }\r\n const result: HomeGroupSelectionResult = { homeGroupId: this.selectedGroupId };\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","<div class=\"ieeesa-home-group-selection\">\r\n\r\n <!-- Header -->\r\n <div class=\"ieeesa-home-group-selection__header\" *ngIf=\"data?.title\">\r\n <h2 mat-dialog-title class=\"ieeesa-home-group-selection__title ieeesa-headline-sm-24\">\r\n {{ data.title }}\r\n </h2>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-home-group-selection__close-btn\"\r\n aria-label=\"Close\"\r\n (click)=\"onCancel()\"\r\n >\r\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"ieeesa-home-group-selection__body\">\r\n\r\n <p class=\"ieeesa-home-group-selection__message ieeesa-body-lg-16\" *ngIf=\"data?.messageLine1\">\r\n {{ data.messageLine1 }}\r\n </p>\r\n <p\r\n class=\"ieeesa-home-group-selection__message ieeesa-body-lg-16\"\r\n *ngIf=\"data?.messageLine2\"\r\n >\r\n {{ data.messageLine2 }}\r\n </p>\r\n\r\n <!-- Qualifying home groups radio list -->\r\n <div\r\n class=\"ieeesa-home-group-selection__options\"\r\n role=\"radiogroup\"\r\n [attr.aria-label]=\"data?.groupOptionAriaLabel\"\r\n >\r\n <label\r\n *ngFor=\"let group of qualifyingGroups; trackBy: trackByGroupId\"\r\n class=\"ieeesa-home-group-selection__option\"\r\n [class.ieeesa-home-group-selection__option--selected]=\"selectedGroupId === group.groupId\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"homeGroup\"\r\n class=\"ieeesa-home-group-selection__radio\"\r\n [value]=\"group.groupId\"\r\n [(ngModel)]=\"selectedGroupId\"\r\n />\r\n <span class=\"ieeesa-home-group-selection__option-label ieeesa-body-lg-16-bold\">\r\n {{ group.groupName }}\r\n </span>\r\n </label>\r\n </div>\r\n\r\n <!-- Info banner -->\r\n <div class=\"ieeesa-home-group-selection__info\" *ngIf=\"data?.infoText\">\r\n <span class=\"ieeesa-home-group-selection__info-icon\" aria-hidden=\"true\">ⓘ</span>\r\n <span class=\"ieeesa-home-group-selection__info-text ieeesa-body-sm-14\">\r\n {{ data.infoText }}\r\n </span>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ieeesa-home-group-selection__footer\">\r\n <button\r\n type=\"button\"\r\n class=\"mat-mdc-button mat-mdc-button-base mat-tertiary-button\"\r\n (click)=\"onCancel()\"\r\n >\r\n {{ data?.cancelLabel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"mat-mdc-button mat-mdc-button-base mat-primary-button\"\r\n [disabled]=\"!canSubmit\"\r\n (click)=\"onSubmit()\"\r\n >\r\n {{ data?.submitLabel }}\r\n </button>\r\n </div>\r\n\r\n</div>\r\n","export interface AccordionInfo {\r\n id: number | string;\r\n title: string;\r\n isDisabled: boolean;\r\n}\r\nexport enum AccordionDetails {\r\n // eslint-disable-next-line no-unused-vars\r\n BASIC_DETAILS = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n ROLES_AND_PERMISSIONS = 2,\r\n // eslint-disable-next-line no-unused-vars\r\n GROUP_TYPES = 3,\r\n // eslint-disable-next-line no-unused-vars\r\n MEETINGS_AND_EVENTS = 4,\r\n // eslint-disable-next-line no-unused-vars\r\n BALLOTS = 5,\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum AllowedFileTypes {\r\n JPG = 'jpg',\r\n PNG = 'png',\r\n SVG = 'svg',\r\n}","export enum LinkType {\r\n // eslint-disable-next-line no-unused-vars\r\n ADD_MEETING = 'ADD_MEETING',\r\n}\r\n","/**\r\n * Available export file formats for attendance data\r\n */\r\n/* eslint-disable no-unused-vars */\r\nexport enum ExportFormat {\r\n CSV = 'csv',\r\n EXCEL = 'xls',\r\n}\r\n\r\n/**\r\n * Configuration option for a format selection card in the export format popover\r\n */\r\nexport interface ExportFormatOption {\r\n label: string;\r\n value: ExportFormat;\r\n ariaLabel: string;\r\n}\r\n","/**\r\n * Shared models for the reusable Home Group Selection dialog (SP3M-18).\r\n *\r\n * The dialog is generic and feature-agnostic: all display text is supplied by\r\n * the calling feature library (e.g. attendance, attendees) via MAT_DIALOG_DATA,\r\n * so this presentation-layer component never depends on any feature's constants.\r\n */\r\n\r\n/**\r\n * A single selectable Working Group in the home-group selection dialog.\r\n * Mirrors the backend HomeGroupOption ({ groupId, groupName }).\r\n */\r\nexport interface QualifyingGroup {\r\n groupId: string;\r\n groupName: string;\r\n}\r\n\r\n/**\r\n * The homeGroupSelectionPrompt object returned by the attendance log-in APIs\r\n * when the user qualifies for reciprocal credit in more than one home group.\r\n * Mirrors HomeGroupSelectionPromptResponse from the attendee-api.\r\n */\r\nexport interface HomeGroupSelectionPrompt {\r\n eventId: string;\r\n qualifyingGroups: QualifyingGroup[];\r\n}\r\n\r\n/**\r\n * Data passed to the HomeGroupSelectionComponent via MAT_DIALOG_DATA.\r\n * All text is provided by the caller so the component stays generic.\r\n */\r\nexport interface HomeGroupSelectionData {\r\n /** Qualifying home groups the user must choose between. */\r\n qualifyingGroups: QualifyingGroup[];\r\n /** Dialog title. */\r\n title: string;\r\n /** First instruction paragraph (context). */\r\n messageLine1: string;\r\n /** Second instruction paragraph (the \"please select\" prompt). */\r\n messageLine2: string;\r\n /** Informational note shown in the footer banner. */\r\n infoText: string;\r\n /** Submit button label. */\r\n submitLabel: string;\r\n /** Cancel button label. */\r\n cancelLabel: string;\r\n /** Accessibility label for the radio group. */\r\n groupOptionAriaLabel: string;\r\n}\r\n\r\n/**\r\n * Result returned by HomeGroupSelectionComponent when the user clicks Submit.\r\n * `null` is returned when the user cancels.\r\n */\r\nexport interface HomeGroupSelectionResult {\r\n homeGroupId: string;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * TimezoneFormatPipe formats a time zone string for display by replacing every\r\n * underscore in the raw IANA identifier with a space. This is a display-only\r\n * transform: for example `(UTC-04:00) America/New_York` is shown as\r\n * `(UTC-04:00) America/New York`. The underlying stored value (which the backend\r\n * expects with underscores) is never modified. Null, undefined, or empty inputs\r\n * return an empty string so templates can apply their own fallback.\r\n * @export\r\n * @class TimezoneFormatPipe\r\n * @implements {PipeTransform}\r\n */\r\n@Pipe({\r\n name: 'timezoneFormat',\r\n standalone: true,\r\n})\r\nexport class TimezoneFormatPipe implements PipeTransform {\r\n /**\r\n * Replaces underscores with spaces in a time zone string for display.\r\n * @param {(string | null | undefined)} value - The raw time zone string, e.g. `(UTC-04:00) America/New_York`.\r\n * @return {string} The display-friendly time zone with spaces instead of underscores, or an empty string.\r\n * @memberof TimezoneFormatPipe\r\n */\r\n transform(value: string | null | undefined): string {\r\n return (value ?? '').replace(/_/g, ' ');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { FormUtilityService } from './services/form-utility.service';\r\nimport { DatepickerService } from './services/datepicker.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [DatepickerService, FormUtilityService],\r\n})\r\nexport class PresentationModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\nexport interface StepConfig {\r\n id: number;\r\n label: string;\r\n isVisible: boolean;\r\n isCompleted: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\n/**\r\n * StepperComponent is a reusable horizontal stepper for multi-step workflows.\r\n * Displays numbered step indicators and emits step change events.\r\n * @export\r\n * @class StepperComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-stepper',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class StepperComponent {\r\n @Input() steps: StepConfig[] = [];\r\n @Input() activeStepIndex = 0;\r\n @Output() stepChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Returns only the visible steps.\r\n * @readonly\r\n * @type {StepConfig[]}\r\n * @memberof StepperComponent\r\n */\r\n get visibleSteps(): StepConfig[] {\r\n return this.steps.filter((step) => step.isVisible);\r\n }\r\n\r\n /**\r\n * Navigates to a step if it's not disabled.\r\n * Emits stepChange to let the parent update activeStepIndex (parent is source of truth).\r\n * @param {number} index - index within visible steps\r\n * @memberof StepperComponent\r\n */\r\n goToStep(index: number): void {\r\n const step = this.visibleSteps[index];\r\n if (step && !step.isDisabled) {\r\n this.stepChange.emit(index);\r\n }\r\n }\r\n\r\n /**\r\n * Moves to the next step.\r\n * @memberof StepperComponent\r\n */\r\n nextStep(): void {\r\n if (this.activeStepIndex < this.visibleSteps.length - 1) {\r\n this.goToStep(this.activeStepIndex + 1);\r\n }\r\n }\r\n\r\n /**\r\n * Moves to the previous step.\r\n * @memberof StepperComponent\r\n */\r\n previousStep(): void {\r\n if (this.activeStepIndex > 0) {\r\n this.goToStep(this.activeStepIndex - 1);\r\n }\r\n }\r\n}\r\n","<div class=\"ieeesa-stepper\">\r\n <div class=\"ieeesa-stepper__header\">\r\n <ng-container *ngFor=\"let step of visibleSteps; let i = index; let last = last\">\r\n <div\r\n class=\"ieeesa-stepper__step\"\r\n [class.ieeesa-stepper__step--active]=\"i === activeStepIndex\"\r\n [class.ieeesa-stepper__step--completed]=\"step.isCompleted\"\r\n [class.ieeesa-stepper__step--disabled]=\"step.isDisabled\"\r\n [attr.aria-label]=\"step.label\"\r\n role=\"presentation\"\r\n >\r\n <span class=\"ieeesa-stepper__step-number\">{{ i + 1 }}</span>\r\n <span class=\"ieeesa-stepper__step-label\">{{ step.label }}</span>\r\n </div>\r\n <div *ngIf=\"!last\" class=\"ieeesa-stepper__connector\"></div>\r\n </ng-container>\r\n </div>\r\n <div class=\"ieeesa-stepper__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of presentation\r\n */\r\nexport * from './lib/components/autocomplete/autocomplete.component';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/date-picker/date-picker.component';\r\nexport * from './lib/components/date-picker-header/date-picker-header.component';\r\nexport * from './lib/components/dynamic-form/dynamic-form.component';\r\nexport * from './lib/components/footer/footer.component';\r\nexport * from './lib/components/form-error/form-error.component';\r\nexport * from './lib/components/form-support-text/form-support-text.component';\r\nexport * from './lib/components/header/header.component';\r\nexport * from './lib/components/icon-button/icon-button.component';\r\nexport * from './lib/components/input/input.component';\r\nexport * from './lib/components/legend/legend.component';\r\nexport * from './lib/components/list/list.component';\r\nexport * from './lib/components/menu/menu.component';\r\nexport * from './lib/components/modal/modal.component';\r\nexport * from './lib/components/modal-confirmation/modal-confirmation.component';\r\nexport * from './lib/components/modal-info/modal-info.component';\r\nexport * from './lib/components/navigation-menu/navigation-menu.component';\r\nexport * from './lib/components/notification/notification.component';\r\nexport * from './lib/components/radio/radio.component';\r\nexport * from './lib/components/search/search.component';\r\nexport * from './lib/components/select/select.component';\r\nexport * from './lib/components/text-area/text-area.component';\r\nexport * from './lib/components/toggle-button/toggle-button.component';\r\nexport * from './lib/components/welcome/welcome.component';\r\nexport * from './lib/components/chips/chips.component';\r\nexport * from './lib/components/filter/filter.component';\r\nexport * from './lib/components/loader/loader.component';\r\nexport * from './lib/components/data-table/data-table.component';\r\nexport * from './lib/components/breadcrumb/breadcrumb.component';\r\nexport * from './lib/components/tile/tile.component';\r\nexport * from './lib/components/time-picker/time-picker.component';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/slide-toggle/slide-toggle.component';\r\nexport * from './lib/components/card/card.component';\r\nexport * from './lib/components/color-picker/color-picker.component';\r\nexport * from './lib/components/file-upload/file-upload.component';\r\nexport * from './lib/components/file-download/file-download.component';\r\nexport * from './lib/components/accordion/accordion.component';\r\nexport * from './lib/components/inactive-tenant/inactive-tenant.component';\r\nexport * from './lib/components/image-preview/image-preview.component';\r\nexport * from './lib/components/rich-text-editor/rich-text-editor.component';\r\nexport * from './lib/components/multi-select-autocomplete/multi-select-autocomplete.component';\r\nexport * from './lib/components/export-format-popover/export-format-popover.component';\r\nexport * from './lib/components/filter-popover/filter-popover.component';\r\nexport * from './lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component';\r\nexport * from './lib/components/export-success-dialog/export-success-dialog.component';\r\nexport * from './lib/components/home-group-selection/home-group-selection.component';\r\n\r\nexport * from './lib/directives/dynamic-form-field/dynamic-form-field.directive';\r\nexport * from './lib/directives/set-background/set-background.directive';\r\nexport * from './lib/directives/text-truncated/text-truncated.directive';\r\nexport * from './lib/directives/file-upload/file-upload.directive';\r\nexport * from './lib/directives/observe-dom-change/observe-dom-change.directive';\r\n\r\nexport * from './lib/models/accordion-info.model';\r\nexport * from './lib/models/align-browsed-files.model';\r\nexport * from './lib/models/allowed-file-types.model';\r\nexport * from './lib/models/app-config-info.model';\r\nexport * from './lib/models/autocomplete-option.model';\r\nexport * from './lib/models/calendar.model';\r\nexport * from './lib/models/custom-properties.model';\r\nexport * from './lib/models/date-picker.model';\r\nexport * from './lib/models/download-file.model';\r\nexport * from './lib/models/event-emit-type.model';\r\nexport * from './lib/models/field-config.model';\r\nexport * from './lib/models/footer-config.model';\r\nexport * from './lib/models/form-control-types.model';\r\nexport * from './lib/models/form-field.model';\r\nexport * from './lib/models/form-grid.model';\r\nexport * from './lib/models/form.model';\r\nexport * from './lib/models/header-config.model';\r\nexport * from './lib/models/legend.model';\r\nexport * from './lib/models/link-type.model';\r\nexport * from './lib/models/list-item.model';\r\nexport * from './lib/models/menu.model';\r\nexport * from './lib/models/navigation-menu.model';\r\nexport * from './lib/models/radio-option.model';\r\nexport * from './lib/models/search.model';\r\nexport * from './lib/models/select-opened-state.model';\r\nexport * from './lib/models/selected-date.model';\r\nexport * from './lib/models/selected-time.model';\r\nexport * from './lib/models/tab.model';\r\nexport * from './lib/models/toggle-button.model';\r\nexport * from './lib/models/chip-option.model';\r\nexport * from './lib/models/paginator-config.model';\r\nexport * from './lib/models/table-actions.model';\r\nexport * from './lib/models/table-schema.model';\r\nexport * from './lib/models/breadcrumb.model';\r\nexport * from './lib/models/tile.model';\r\nexport * from './lib/models/file-upload-response.model';\r\nexport * from './lib/models/file-upload-status.model';\r\nexport * from './lib/models/filters-options.model';\r\nexport * from './lib/models/profile-menu.model';\r\nexport * from './lib/models/slide-toggle-options.model';\r\nexport * from './lib/models/button-type.model';\r\nexport * from './lib/models/card-button.model';\r\nexport * from './lib/models/card-info.model';\r\nexport * from './lib/models/color-format.model';\r\nexport * from './lib/models/file-download-config.model';\r\nexport * from './lib/models/file-info.model';\r\nexport * from './lib/models/file-upload-payload-model';\r\nexport * from './lib/models/file-upload-presigned-url-res.model';\r\nexport * from './lib/models/file-upload-response.model';\r\nexport * from './lib/models/inactive-tenant.model';\r\nexport * from './lib/models/table-column-menu-info.model';\r\nexport * from './lib/models/export-format-popover.model';\r\nexport * from './lib/models/filter-popover.model';\r\nexport * from './lib/models/policy-confirmation-dialog.model';\r\nexport * from './lib/models/export-success-dialog.model';\r\nexport * from './lib/models/home-group-selection.model';\r\n\r\nexport * from './lib/services/datepicker.service';\r\nexport * from './lib/services/form-utility.service';\r\nexport * from './lib/services/file-upload.service';\r\nexport * from './lib/services/break-point-observer.service';\r\nexport * from './lib/pipes/safe.pipe';\r\nexport * from './lib/pipes/timezone-format.pipe';\r\n\r\nexport * from './lib/presentation.module';\r\n\r\n// Re-export from @ieeesa-npm/models (needed because dist/presentation is used by other library builds)\r\nexport { SelectOption, CheckboxOption, IconButton, AlignType, ConfirmationModalData, MessagePart, InfoModalData } from '@ieeesa-npm/models';\r\n\r\nexport * from './lib/components/stepper/stepper.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","autocompleteConstInfo","filter","i1.FormUtilityService","i7","i8","i2","i3","i5","i6","moment","datePickerInfo","i3.DatepickerService","i4","buttonActionsInfo","i2.DatepickerService","i3.FormUtilityService","searchInfo","dropdownInfo","constantsInfo","constants","i2.FileUploadService","constants?.colorPicker","takeUntil","map","debounceTime","i9","i11","constants?.richTextEditor","screenTexts","i1.BreakpointObserverService","i3.FileUploadService","i1.SafePipe","modalInfo?.ariaLabel","constants?.welcome"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ieeesa-npm-presentation.mjs","sources":["../../../projects/presentation/src/lib/components/form-error/form-error.component.ts","../../../projects/presentation/src/lib/components/form-error/form-error.component.html","../../../projects/presentation/src/lib/models/form-control-types.model.ts","../../../projects/presentation/src/lib/pipes/safe.pipe.ts","../../../projects/presentation/src/lib/components/form-support-text/form-support-text.component.ts","../../../projects/presentation/src/lib/components/form-support-text/form-support-text.component.html","../../../projects/presentation/src/lib/services/form-utility.service.ts","../../../projects/presentation/src/lib/components/autocomplete/autocomplete.component.ts","../../../projects/presentation/src/lib/components/autocomplete/autocomplete.component.html","../../../projects/presentation/src/lib/components/icon-button/icon-button.component.ts","../../../projects/presentation/src/lib/components/icon-button/icon-button.component.html","../../../projects/presentation/src/lib/components/checkbox/checkbox.component.ts","../../../projects/presentation/src/lib/components/checkbox/checkbox.component.html","../../../projects/presentation/src/lib/date-formats.ts","../../../projects/presentation/src/lib/services/datepicker.service.ts","../../../projects/presentation/src/lib/components/date-picker-header/date-picker-header.component.ts","../../../projects/presentation/src/lib/components/date-picker-header/date-picker-header.component.html","../../../projects/presentation/src/lib/models/calendar.model.ts","../../../projects/presentation/src/lib/components/date-picker/date-picker.component.ts","../../../projects/presentation/src/lib/components/date-picker/date-picker.component.html","../../../projects/presentation/src/lib/models/input-field-type.model.ts","../../../projects/presentation/src/lib/components/input/input.component.ts","../../../projects/presentation/src/lib/components/input/input.component.html","../../../projects/presentation/src/lib/components/radio/radio.component.ts","../../../projects/presentation/src/lib/components/radio/radio.component.html","../../../projects/presentation/src/lib/validation-patterns.ts","../../../projects/presentation/src/lib/models/search.model.ts","../../../projects/presentation/src/lib/components/search/search.component.ts","../../../projects/presentation/src/lib/components/search/search.component.html","../../../projects/presentation/src/lib/components/select/select.component.ts","../../../projects/presentation/src/lib/components/select/select.component.html","../../../projects/presentation/src/lib/components/text-area/text-area.component.ts","../../../projects/presentation/src/lib/components/text-area/text-area.component.html","../../../projects/presentation/src/lib/components/add-form-group/add-form-group.component.ts","../../../projects/presentation/src/lib/components/add-form-group/add-form-group.component.html","../../../projects/presentation/src/lib/components/time-picker/time-picker.component.ts","../../../projects/presentation/src/lib/components/time-picker/time-picker.component.html","../../../projects/presentation/src/lib/components/slide-toggle/slide-toggle.component.ts","../../../projects/presentation/src/lib/components/slide-toggle/slide-toggle.component.html","../../../projects/presentation/src/lib/directives/file-upload/file-upload.directive.ts","../../../projects/presentation/src/lib/models/align-browsed-files.model.ts","../../../projects/presentation/src/lib/services/file-upload.service.ts","../../../projects/presentation/src/lib/components/file-download/file-download.component.ts","../../../projects/presentation/src/lib/components/file-download/file-download.component.html","../../../projects/presentation/src/lib/components/file-upload/file-upload.component.ts","../../../projects/presentation/src/lib/components/file-upload/file-upload.component.html","../../../projects/presentation/src/lib/models/color-format.model.ts","../../../projects/presentation/src/lib/components/color-picker/color-picker.component.ts","../../../projects/presentation/src/lib/components/color-picker/color-picker.component.html","../../../projects/presentation/src/lib/directives/text-truncated/text-truncated.directive.ts","../../../projects/presentation/src/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.ts","../../../projects/presentation/src/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.html","../../../projects/presentation/src/lib/directives/observe-dom-change/observe-dom-change.directive.ts","../../../projects/presentation/src/lib/components/rich-text-editor/rich-text-editor.component.ts","../../../projects/presentation/src/lib/components/rich-text-editor/rich-text-editor.component.html","../../../projects/presentation/src/lib/directives/dynamic-form-field/dynamic-form-field.directive.ts","../../../projects/presentation/src/lib/directives/focus-invalid-form-field/focus-invalid-form-field.directive.ts","../../../projects/presentation/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/presentation/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/presentation/src/lib/components/footer/footer.component.ts","../../../projects/presentation/src/lib/components/footer/footer.component.html","../../../projects/presentation/src/lib/components/menu/menu.component.ts","../../../projects/presentation/src/lib/components/menu/menu.component.html","../../../projects/presentation/src/lib/models/profile-menu.model.ts","../../../projects/presentation/src/lib/components/image-preview/image-preview.component.ts","../../../projects/presentation/src/lib/components/image-preview/image-preview.component.html","../../../projects/presentation/src/lib/services/break-point-observer.service.ts","../../../projects/presentation/src/lib/components/header/header.component.ts","../../../projects/presentation/src/lib/components/header/header.component.html","../../../projects/presentation/src/lib/directives/set-background/set-background.directive.ts","../../../projects/presentation/src/lib/components/legend/legend.component.ts","../../../projects/presentation/src/lib/components/legend/legend.component.html","../../../projects/presentation/src/lib/components/list/list.component.ts","../../../projects/presentation/src/lib/components/list/list.component.html","../../../projects/presentation/src/lib/components/toggle-button/toggle-button.component.ts","../../../projects/presentation/src/lib/components/toggle-button/toggle-button.component.html","../../../projects/presentation/src/lib/components/modal/modal.component.ts","../../../projects/presentation/src/lib/components/modal/modal.component.html","../../../projects/presentation/src/lib/components/modal-confirmation/modal-confirmation.component.ts","../../../projects/presentation/src/lib/components/modal-confirmation/modal-confirmation.component.html","../../../projects/presentation/src/lib/components/modal-info/modal-info.component.ts","../../../projects/presentation/src/lib/components/modal-info/modal-info.component.html","../../../projects/presentation/src/lib/components/navigation-menu/navigation-menu.component.ts","../../../projects/presentation/src/lib/components/navigation-menu/navigation-menu.component.html","../../../projects/presentation/src/lib/components/notification/notification.component.ts","../../../projects/presentation/src/lib/components/notification/notification.component.html","../../../projects/presentation/src/lib/components/welcome/welcome.component.ts","../../../projects/presentation/src/lib/components/welcome/welcome.component.html","../../../projects/presentation/src/lib/models/chip-option.model.ts","../../../projects/presentation/src/lib/components/chips/chips.component.ts","../../../projects/presentation/src/lib/components/chips/chips.component.html","../../../projects/presentation/src/lib/components/filter/filter.component.ts","../../../projects/presentation/src/lib/components/filter/filter.component.html","../../../projects/presentation/src/lib/components/loader/loader.component.ts","../../../projects/presentation/src/lib/components/loader/loader.component.html","../../../projects/presentation/src/lib/models/table-schema.model.ts","../../../projects/presentation/src/lib/components/data-table/data-table.component.ts","../../../projects/presentation/src/lib/components/data-table/data-table.component.html","../../../projects/presentation/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../projects/presentation/src/lib/components/breadcrumb/breadcrumb.component.html","../../../projects/presentation/src/lib/components/tile/tile.component.ts","../../../projects/presentation/src/lib/components/tile/tile.component.html","../../../projects/presentation/src/lib/models/custom-properties.model.ts","../../../projects/presentation/src/lib/components/tabs/tabs.component.ts","../../../projects/presentation/src/lib/components/tabs/tabs.component.html","../../../projects/presentation/src/lib/models/button-type.model.ts","../../../projects/presentation/src/lib/components/card/card.component.ts","../../../projects/presentation/src/lib/components/card/card.component.html","../../../projects/presentation/src/lib/components/accordion/accordion.component.ts","../../../projects/presentation/src/lib/components/accordion/accordion.component.html","../../../projects/presentation/src/lib/components/inactive-tenant/inactive-tenant.component.ts","../../../projects/presentation/src/lib/components/inactive-tenant/inactive-tenant.component.html","../../../projects/presentation/src/lib/components/export-format-popover/export-format-popover.component.ts","../../../projects/presentation/src/lib/components/export-format-popover/export-format-popover.component.html","../../../projects/presentation/src/lib/components/filter-popover/filter-popover.component.ts","../../../projects/presentation/src/lib/components/filter-popover/filter-popover.component.html","../../../projects/presentation/src/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.ts","../../../projects/presentation/src/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.html","../../../projects/presentation/src/lib/components/export-success-dialog/export-success-dialog.component.ts","../../../projects/presentation/src/lib/components/export-success-dialog/export-success-dialog.component.html","../../../projects/presentation/src/lib/components/home-group-selection/home-group-selection.component.ts","../../../projects/presentation/src/lib/components/home-group-selection/home-group-selection.component.html","../../../projects/presentation/src/lib/models/accordion-info.model.ts","../../../projects/presentation/src/lib/models/allowed-file-types.model.ts","../../../projects/presentation/src/lib/models/link-type.model.ts","../../../projects/presentation/src/lib/models/export-format-popover.model.ts","../../../projects/presentation/src/lib/models/home-group-selection.model.ts","../../../projects/presentation/src/lib/pipes/timezone-format.pipe.ts","../../../projects/presentation/src/lib/presentation.module.ts","../../../projects/presentation/src/lib/components/stepper/stepper.component.ts","../../../projects/presentation/src/lib/components/stepper/stepper.component.html","../../../projects/presentation/src/public-api.ts","../../../projects/presentation/src/ieeesa-npm-presentation.ts"],"sourcesContent":["import { Component, Input, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\n\r\n/**\r\n * Implements and displays form error messages and form submission error response message on submission of form.\r\n * @export\r\n * @class FormErrorComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-form-error',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './form-error.component.html',\r\n styleUrls: ['./form-error.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FormErrorComponent {\r\n @Input() formGroup!: FormGroup;\r\n @Input() config!: FieldConfig;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() submitResponse!: any;\r\n}\r\n","<ng-container *ngIf=\"formGroup && config?.controlName\">\r\n <div\r\n class=\"ieeesa-body-sm-12 ieeesa-form-error\"\r\n *ngIf=\"\r\n formGroup.controls[config.controlName]?.touched ||\r\n (formGroup.controls[config.controlName]?.dirty &&\r\n formGroup.controls[config.controlName]?.invalid)\r\n \"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n [attr.aria-invalid]=\"formGroup.controls[config.controlName].invalid\"\r\n >\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['validStartDate']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastStartDate']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['validEndDate'] &&\r\n !formGroup.controls[config.controlName].errors?.[\r\n 'checkboxSelectionRequired'\r\n ]\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['validStartTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastStartTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['validEndTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastEndDate']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pastEndTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.pastDateTimeErrorMessage || config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['invalidEndDateTime']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateTimeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['required'] ||\r\n formGroup.controls[config.controlName].errors?.[\r\n 'checkboxSelectionRequired'\r\n ]\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.requiredErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['minlength'] ||\r\n (formGroup.controls[config.controlName].errors?.['matDatepickerMin'] &&\r\n !formGroup.controls[config.controlName].errors?.['validEndDate'])\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.minErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['maxlength'] ||\r\n formGroup.controls[config.controlName].errors?.['max']\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.maxErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['pattern']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.patternErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['email']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidEmailErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['invalidStartDateRange']\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateRangeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.['invalidEndDateRange']\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidDateRangeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['invalidColor']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.invalidColorErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['maxFileSize']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.maxFileSizeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"formGroup.controls[config.controlName].errors?.['invalidFileType']\"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.allowedFileTypeErrorMessage }}\r\n </p>\r\n <p\r\n *ngIf=\"\r\n formGroup.controls[config.controlName].errors?.[\r\n 'maxFilesUploadLimitReached'\r\n ]\r\n \"\r\n class=\"ieeesa-form-error--text m-0\"\r\n >\r\n {{ config.maxFilesUploadLimitErrorMessage }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-form-error\"\r\n *ngIf=\"\r\n (formGroup.controls[config.controlName]?.touched ||\r\n formGroup.controls[config.controlName]?.dirty) &&\r\n submitResponse\r\n \"\r\n >\r\n <p class=\"ieeesa-form-error--text mt-1\">\r\n {{ submitResponse }}\r\n </p>\r\n </div>\r\n</ng-container>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum FormControlType {\r\n INPUT = 'INPUT',\r\n TEXT_AREA = 'TEXT_AREA',\r\n SELECT = 'SELECT',\r\n SEARCH = 'SEARCH',\r\n DATE = 'DATE',\r\n CHECKBOX = 'CHECKBOX',\r\n RADIO = 'RADIO',\r\n AUTO_COMPLETE = 'AUTO_COMPLETE',\r\n MULTI_SELECT_AUTO_COMPLETE = 'MULTI_SELECT_AUTO_COMPLETE',\r\n ADD_FORM_GROUP = 'ADD_FORM_GROUP',\r\n TIME_PICKER = 'TIME_PICKER',\r\n SLIDE_TOGGLE = 'SLIDE_TOGGLE',\r\n COLOR_PICKER = 'COLOR_PICKER',\r\n FILE_UPLOAD = 'FILE_UPLOAD',\r\n RICH_TEXT_EDITOR = 'RICH_TEXT_EDITOR'\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {\r\n DomSanitizer,\r\n SafeHtml,\r\n SafeStyle,\r\n SafeScript,\r\n SafeUrl,\r\n SafeResourceUrl,\r\n} from '@angular/platform-browser';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * SafePipe is using DomSanitizer service which helps to prevent attackers from injecting malicious client-side scripts into web pages, which is often referred to as Cross-site Scripting or XSS.\r\n * @export\r\n * @class SafePipe\r\n * @implements {PipeTransform}\r\n */\r\n@Pipe({\r\n name: 'safe',\r\n standalone: true,\r\n})\r\nexport class SafePipe implements PipeTransform {\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(protected sanitizer: DomSanitizer) {}\r\n transform(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n value: any,\r\n type: string\r\n ): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\r\n switch (type) {\r\n case SafeType.HTML:\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case SafeType.STYLE:\r\n return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case SafeType.SCRIPT:\r\n return this.sanitizer.bypassSecurityTrustScript(value);\r\n case SafeType.URL:\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case SafeType.RESOURCE_URL:\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default:\r\n throw new Error(`Invalid safe type specified: ${type}`);\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\n@Component({\r\n selector: 'ieeesa-form-support-text',\r\n standalone: true,\r\n templateUrl: './form-support-text.component.html',\r\n styleUrls: ['./form-support-text.component.scss'],\r\n imports: [CommonModule, forwardRef(() => SafePipe)],\r\n})\r\nexport class FormSupportTextComponent implements OnDestroy, AfterViewInit {\r\n @Input() formGroup!: FormGroup;\r\n @Input() config!: FieldConfig;\r\n safeType: string = SafeType.HTML;\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public elementRef: ElementRef) {}\r\n /**\r\n * Emits supportTextLinkClick event on click of form support text link\r\n * Passes linkType if available\r\n * @param {Event} event\r\n * @memberof FormSupportTextComponent\r\n */\r\n onAnchorElementClick(event: Event): void {\r\n event.preventDefault();\r\n if (this.config?.linkType)\r\n this.supportTextLinkClick.emit({\r\n event: event,\r\n linkType: this.config?.linkType,\r\n });\r\n else this.supportTextLinkClick.emit({ event: event });\r\n }\r\n /**\r\n * Adds click event to the anchor tags using querySelectorAll\r\n * @memberof FormSupportTextComponent\r\n */\r\n ngAfterViewInit(): void {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.addEventListener('click', this.onAnchorElementClick.bind(this));\r\n });\r\n }\r\n /**\r\n * Removing the event listeners on destroy\r\n * @memberof FormSupportTextComponent\r\n */\r\n ngOnDestroy(): void {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.removeEventListener('click', this.onAnchorElementClick);\r\n });\r\n }\r\n}\r\n","<p\r\n class=\"pt-1 m-0 ieeesa-body-sm-14 ieeesa-form-support-text\"\r\n [id]=\"config?.ariaDescribedById ?? ''\"\r\n *ngIf=\"\r\n config?.supportMessage &&\r\n config?.controlName &&\r\n ((formGroup.controls[config.controlName]?.untouched &&\r\n (formGroup.controls[config.controlName]?.pristine ||\r\n formGroup.controls[config.controlName]?.valid)) ||\r\n (formGroup.controls[config.controlName]?.touched &&\r\n formGroup.controls[config.controlName]?.valid))\r\n \"\r\n [attr.aria-hidden]=\"\r\n formGroup.controls[config.controlName]?.touched &&\r\n formGroup.controls[config.controlName]?.valid\r\n \"\r\n [innerHTML]=\"config?.supportMessage | safe : safeType\"\r\n></p>\r\n","import { Injectable } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../models/field-config.model';\r\nimport { FormControlType } from '../models/form-control-types.model';\r\n\r\n/**\r\n * Creates form fields configuration and form group based on passed parameters.\r\n * @export\r\n * @class FormUtilityService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FormUtilityService {\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private fb: FormBuilder) {}\r\n /**\r\n * Returns form fields configuration based on passed control name and type.\r\n * @param {string} controlName\r\n * @param {string} controlType\r\n * @return {FieldConfig}\r\n * @memberof FormUtilityService\r\n */\r\n getFormFieldConfig(controlName: string, controlType: string): FieldConfig {\r\n return {\r\n controlName: controlName,\r\n type: controlType,\r\n };\r\n }\r\n /**\r\n * Creates and returns form group with passed control name added.\r\n * @param {string} controlName\r\n * @return {FormGroup}\r\n * @memberof FormUtilityService\r\n */\r\n getFormGroup(\r\n controlName: string,\r\n formControlConfig?: FieldConfig\r\n ): FormGroup {\r\n if (formControlConfig?.type === FormControlType.CHECKBOX) {\r\n const group = this.fb.group({});\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const formArray = new FormArray<any>([]);\r\n formControlConfig?.checkboxOptions?.forEach((control) => {\r\n formArray.push(new FormControl(control.checked));\r\n });\r\n group.addControl(controlName, formArray);\r\n return group;\r\n }\r\n return this.fb.group({\r\n [controlName]: [],\r\n });\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { debounceTime, filter, fromEvent, map, Subject, takeUntil } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport {\r\n MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n MatAutocompleteModule,\r\n} from '@angular/material/autocomplete';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { SelectOption } from '@ieeesa-npm/models';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as autocompleteConstInfo from '../../assets/constants.json';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\n\r\n/**\r\n * Provides auto suggestion for the entered input by filtering the options from the given list of options.\r\n * @export\r\n * @class AutocompleteComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-autocomplete',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n MatOptionModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n useValue: { overlayPanelClass: 'ieeesa-autocomplete-overlay-pane' },\r\n },\r\n ],\r\n templateUrl: './autocomplete.component.html',\r\n styleUrls: ['./autocomplete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AutocompleteComponent\r\n implements OnInit, FormField, OnDestroy, AfterViewInit\r\n{\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n value = '';\r\n autoCompleteOptionList!: AutoCompleteOption[];\r\n @Input()\r\n set autoCompleteOptions(value: AutoCompleteOption[]) {\r\n this.autoCompleteOptionList = value;\r\n }\r\n get autoCompleteOptions(): AutoCompleteOption[] {\r\n return this.autoCompleteOptionList;\r\n }\r\n @Input() isSelectedOptionsVisible = true;\r\n @Output() autoCompleteSearchValue = new EventEmitter<string>();\r\n @Output() autoCompleteClearSearchValue = new EventEmitter<string>();\r\n @Output() autoCompleteOptionSelected = new EventEmitter<AutoCompleteOption>();\r\n @ViewChild('autoComplete') autoComplete!: ElementRef;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n autocompleteConstInfo: any = autocompleteConstInfo;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n private formUtilityService: FormUtilityService,\r\n private elementRef: ElementRef<HTMLElement>\r\n ) {}\r\n private formOverlayScrollContainer?: HTMLElement;\r\n private readonly preferredAutocompleteOverlayHeight = 168;\r\n private readonly overlayWheelListener = (event: WheelEvent): void => {\r\n const target = event.target as Element | null;\r\n if (target?.closest('.cdk-overlay-pane')) return;\r\n\r\n const formBody = this.formOverlayScrollContainer;\r\n if (!formBody || formBody.scrollHeight <= formBody.clientHeight) return;\r\n\r\n formBody.scrollTop += event.deltaY;\r\n formBody.scrollLeft += event.deltaX;\r\n formBody.dispatchEvent(new Event('scroll'));\r\n event.preventDefault();\r\n };\r\n private readonly formScrollListener = (): void => {\r\n const formBody = this.formOverlayScrollContainer;\r\n if (!formBody) return;\r\n\r\n this.updateOverlayClipBounds(formBody);\r\n };\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize components instance properties.\r\n * @memberof AutocompleteComponent\r\n */\r\n ngOnInit(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'autocomplete',\r\n FormControlType.AUTO_COMPLETE\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup('autocomplete');\r\n this.autoCompleteOptions =\r\n this.config?.autoCompleteOptions ?? this.autoCompleteOptions;\r\n }\r\n\r\n /**\r\n * Initialize the form control change event once the form control is ready on ngAfterViewInit by calling onValueChanges method.\r\n * @memberof AutocompleteComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.onValueChanges();\r\n }\r\n /**\r\n * Emits an autoCompleteSearchValue change event when the value is changed and value is greater than minCharToSearch or equal to zero.\r\n * @memberof AutocompleteComponent\r\n */\r\n onValueChanges(): void {\r\n fromEvent(this.autoComplete?.nativeElement, 'keyup')\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => {\r\n return event?.target?.value;\r\n }),\r\n filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (res: any) =>\r\n res?.length <\r\n this.autocompleteConstInfo.autocomplete.minCharToSearch &&\r\n res?.length !== 0\r\n ),\r\n debounceTime(this.autocompleteConstInfo.autocomplete.debounceTime)\r\n )\r\n .subscribe((text: string) => {\r\n this.autoCompleteClearSearchValue.emit(text);\r\n });\r\n this.group?.controls[this.config?.controlName]?.valueChanges\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (res: any) =>\r\n res?.length >=\r\n this.autocompleteConstInfo.autocomplete.minCharToSearch ||\r\n res?.length === 0\r\n ),\r\n debounceTime(this.autocompleteConstInfo.autocomplete.debounceTime)\r\n )\r\n .subscribe((text: string) => {\r\n this.autoCompleteSearchValue.emit(text);\r\n });\r\n }\r\n /**\r\n * Emits the selected option when the form on change event is triggered and returns option.\r\n * @param {AutoCompleteOption} data // data is an selected option of autoCompleteOptions.\r\n * @return {AutoCompleteOption} // Returns selected option as AutoCompleteOption\r\n * @memberof AutocompleteComponent\r\n */\r\n onChange(data: AutoCompleteOption): AutoCompleteOption {\r\n this.autoCompleteOptionSelected.emit(data);\r\n return data;\r\n }\r\n /**\r\n * Display the selected option name\r\n * @param {AutoCompleteOption} option\r\n * @return {string}\r\n * @memberof AutocompleteComponent\r\n */\r\n displayOptionName(option: AutoCompleteOption): string {\r\n return option?.name ? option.name : '';\r\n }\r\n /**\r\n * Takes the index and the current item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @param {SelectOption} option\r\n * @return {(number | string)}\r\n * @memberof AutocompleteComponent\r\n */\r\n trackByFn(index: number, option: SelectOption): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof AutocompleteComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.clearOverlayClipBounds();\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n onAutocompleteOpen(): void {\r\n this.setOverlayClipBounds();\r\n setTimeout(() => {\r\n const formBody = this.formOverlayScrollContainer;\r\n if (formBody) {\r\n this.makeRoomForAutocompleteOverlay(formBody);\r\n }\r\n });\r\n }\r\n\r\n onAutocompleteClose(): void {\r\n this.clearOverlayClipBounds();\r\n }\r\n\r\n private setOverlayClipBounds(): void {\r\n const formBody = this.getFormOverlayScrollContainer();\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n const viewportHeight =\r\n this.elementRef.nativeElement.ownerDocument.defaultView?.innerHeight ?? 0;\r\n\r\n if (!formBody || !viewportHeight) return;\r\n\r\n this.updateOverlayClipBounds(formBody);\r\n this.formOverlayScrollContainer = formBody;\r\n formBody.addEventListener('scroll', this.formScrollListener);\r\n this.elementRef.nativeElement.ownerDocument.addEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n { capture: true, passive: false }\r\n );\r\n documentElement.classList.add('ieeesa-form-overlay-open');\r\n }\r\n\r\n private getFormOverlayScrollContainer(): HTMLElement | null {\r\n const candidates = [\r\n this.elementRef.nativeElement.closest('.ieeesa-dynamic-form__body'),\r\n this.elementRef.nativeElement.closest('.ieeesa-stepper__content'),\r\n ] as (HTMLElement | null)[];\r\n\r\n return (\r\n candidates.find((element) => {\r\n if (!element) return false;\r\n\r\n const overflowY = getComputedStyle(element).overflowY;\r\n return (\r\n (overflowY === 'auto' || overflowY === 'scroll') &&\r\n element.scrollHeight > element.clientHeight\r\n );\r\n }) ??\r\n candidates.find((element) => !!element) ??\r\n null\r\n );\r\n }\r\n\r\n private updateOverlayClipBounds(formBody: HTMLElement): void {\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n const viewportHeight =\r\n this.elementRef.nativeElement.ownerDocument.defaultView?.innerHeight ?? 0;\r\n\r\n if (!viewportHeight) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-top',\r\n `${Math.max(0, Math.floor(formBodyRect.top))}px`\r\n );\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-bottom',\r\n `${Math.max(0, viewportHeight - Math.ceil(formBodyRect.bottom))}px`\r\n );\r\n }\r\n\r\n private makeRoomForAutocompleteOverlay(formBody: HTMLElement): void {\r\n const inputElement = this.autoComplete?.nativeElement as HTMLElement | null;\r\n if (!inputElement) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n const inputRect = inputElement.getBoundingClientRect();\r\n const availableHeight = formBodyRect.bottom - inputRect.bottom - 12;\r\n const missingHeight =\r\n this.preferredAutocompleteOverlayHeight - availableHeight;\r\n\r\n if (missingHeight <= 0) return;\r\n\r\n const maxScrollTop = formBody.scrollHeight - formBody.clientHeight;\r\n const nextScrollTop = Math.min(\r\n maxScrollTop,\r\n formBody.scrollTop + Math.ceil(missingHeight)\r\n );\r\n\r\n if (nextScrollTop === formBody.scrollTop) return;\r\n\r\n formBody.scrollTop = nextScrollTop;\r\n formBody.dispatchEvent(new Event('scroll'));\r\n }\r\n\r\n private clearOverlayClipBounds(): void {\r\n this.formOverlayScrollContainer?.removeEventListener(\r\n 'scroll',\r\n this.formScrollListener\r\n );\r\n this.elementRef.nativeElement.ownerDocument.removeEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n true\r\n );\r\n this.formOverlayScrollContainer = undefined;\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n documentElement.classList.remove('ieeesa-form-overlay-open');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-top');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-bottom');\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-autocomplete\"\r\n [formGroup]=\"group\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-autocomplete-field__label-left'\r\n : 'ieeesa-autocomplete-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-autocomplete__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <mat-form-field class=\"ieeesa-autocomplete__mat-form\" appearance=\"outline\">\r\n <input\r\n matInput\r\n class=\"ieeesa-autocomplete__input\"\r\n [matAutocomplete]=\"auto\"\r\n matAutocompletePosition=\"below\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n #autoComplete\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"onChange($event.option.value)\"\r\n (opened)=\"onAutocompleteOpen()\"\r\n (closed)=\"onAutocompleteClose()\"\r\n [displayWith]=\"displayOptionName\"\r\n class=\"ieeesa-autocomplete__autocomplete-list\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of autoCompleteOptions; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n <span>{{ option.name }}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"autocompleteConstInfo.ariaLabel.clear\"\r\n *ngIf=\"value\"\r\n (click)=\"value = ''\"\r\n >\r\n <i class=\"fa-solid fa-xmark ieeesa-autocomplete__cancel-icon\"></i>\r\n </button>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n/**\r\n * Creates svg icon as button component.\r\n * @export\r\n * @class IconButtonComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-icon-button',\r\n standalone: true,\r\n imports: [CommonModule, MatTooltipModule],\r\n templateUrl: './icon-button.component.html',\r\n styleUrls: ['./icon-button.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class IconButtonComponent {\r\n @Input() iconButton!: IconButton;\r\n @Input() isLabelNeeded = false;\r\n @Output() iconButtonClick = new EventEmitter<IconButton>();\r\n /**\r\n * Emits the clicked icon button information.\r\n * @param {Event} IconButton\r\n * @memberof IconButtonComponent\r\n */\r\n onClick(event: IconButton) {\r\n this.iconButtonClick.emit(event);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n class=\"ieeesa-icon-button border-0 ieeesa-icon-button__{{ iconButton.id }}\"\r\n [attr.aria-label]=\"iconButton.ariaLabel\"\r\n [matTooltip]=\"iconButton.toolTip\"\r\n [disabled]=\"iconButton.disabled\"\r\n (click)=\"onClick(iconButton)\"\r\n>\r\n <svg\r\n class=\"ieeesa-icon-button__svg\"\r\n [ngClass]=\"\r\n iconButton.disabled\r\n ? 'ieeesa-icon-button__disabled'\r\n : 'ieeesa-icon-button__enabled'\r\n \"\r\n *ngIf=\"iconButton?.iconURL\"\r\n >\r\n <use [attr.xlink:href]=\"iconButton.iconURL\"></use>\r\n </svg>\r\n <span class=\"ieeesa-icon-button__label\" *ngIf=\"isLabelNeeded\">{{\r\n iconButton?.label\r\n }}</span>\r\n</button>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { CheckboxOption, IconButton } from '@ieeesa-npm/models';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\n\r\n/**\r\n * Provides implementation of all types of checkboxes.\r\n * @export\r\n * @class CheckboxComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-checkbox',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatListModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n FormErrorComponent,\r\n ReactiveFormsModule,\r\n MatCheckboxModule,\r\n FormSupportTextComponent,\r\n IconButtonComponent,\r\n ],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CheckboxComponent implements OnInit, FormField, OnDestroy {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n private _checkboxes!: CheckboxOption[];\r\n @Input() isLabelNeeded = true;\r\n /**\r\n * Input property to get checkbox options.\r\n * @memberof CheckboxComponent\r\n * @usageNotes const checkboxes = [{ id: 1, name:\"Angular\"}]\r\n */\r\n @Input()\r\n set checkboxes(value: CheckboxOption[]) {\r\n this._checkboxes = value;\r\n }\r\n get checkboxes(): CheckboxOption[] {\r\n return this._checkboxes;\r\n }\r\n @Input()\r\n set recreateCheckboxOptionsControl(value: CheckboxOption[]) {\r\n if (this.group && value) {\r\n this._checkboxes = value;\r\n this.recreateFormControl();\r\n }\r\n }\r\n selectedCheckboxesInfo = new SelectionModel<CheckboxOption>(true, []);\r\n @Output() checkboxSelection = new EventEmitter<CheckboxOption>();\r\n @Output() checkboxOptionsAndSelection = new EventEmitter<CheckboxOption[]>();\r\n @Output() selectedCheckboxes = new EventEmitter<CheckboxOption[]>();\r\n @Output() ctaButtonClick = new EventEmitter<IconButton>();\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private formUtilityService: FormUtilityService) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method of component to initialize component instance properties\r\n * and emits whenever the checkboxes selection state changes\r\n * @memberof CheckboxComponent\r\n */\r\n ngOnInit(): void {\r\n this.createFormGroupAndInitializeProperties();\r\n this.selectedCheckboxesInfo.changed\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.selectedCheckboxes.emit(result?.source?.selected);\r\n this.checkboxOptionsAndSelection.emit(this.checkboxes);\r\n });\r\n }\r\n /**\r\n * Recreate form controls whenever the new set of checkboxes are loaded when component is already initialized\r\n * @memberof CheckboxComponent\r\n */\r\n recreateFormControl(): void {\r\n this.config = this.formUtilityService.getFormFieldConfig(\r\n 'checkbox',\r\n FormControlType.CHECKBOX\r\n );\r\n this.config.checkboxOptions = this.checkboxes;\r\n this.group = this.formUtilityService.getFormGroup('checkbox', this.config);\r\n }\r\n /**\r\n * Creates form group and initializes components properties from config.\r\n * @memberof CheckboxComponent\r\n */\r\n createFormGroupAndInitializeProperties(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'checkbox',\r\n FormControlType.CHECKBOX\r\n );\r\n this.checkboxes = this.config?.checkboxOptions ?? this.checkboxes;\r\n this.config.checkboxOptions = this.checkboxes;\r\n this.group =\r\n this.group ??\r\n this.formUtilityService.getFormGroup('checkbox', this.config);\r\n }\r\n /**\r\n * Sets checkbox selection and emits selected option on change event.\r\n * @param {CheckboxOption} option\r\n * @param {boolean} checked\r\n * @memberof CheckboxComponent\r\n */\r\n onChange(option: CheckboxOption, checked: boolean): void {\r\n option.checked = !checked;\r\n this.checkboxSelection.emit(option);\r\n }\r\n /**\r\n * Allows Angular to detect the specific checkbox option that needs to change or be added instead of rebuilding the whole checkbox options in DOM by tracking option unique Id.\r\n * @param {number} index\r\n * @return {number}\r\n * @memberof CheckboxComponent\r\n */\r\n trackById(\r\n index: number,\r\n option: CheckboxOption | IconButton\r\n ): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * Emits ctaButtonClick event along with clicked button information.\r\n * @param {IconButton} event\r\n * @memberof CheckboxComponent\r\n */\r\n onCheckboxCTAButtonClick(event: IconButton): void {\r\n this.ctaButtonClick.emit(event);\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CheckboxComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-checkbox-field\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-checkbox-field__label-left'\r\n : 'ieeesa-checkbox-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-checkbox-field__label\">{{\r\n config?.label\r\n }}</mat-label>\r\n <ng-container [formArrayName]=\"config?.controlName ?? 'checkboxes'\">\r\n <mat-list class=\"p-0\" role=\"group\" [attr.aria-label]=\"config?.ariaLabel\">\r\n <ng-container\r\n *ngFor=\"let option of checkboxes; let i = index; trackBy: trackById\"\r\n >\r\n <mat-checkbox\r\n [formControlName]=\"i\"\r\n (change)=\"\r\n onChange(option, option.checked);\r\n selectedCheckboxesInfo.toggle(option)\r\n \"\r\n [disabled]=\"option.disabled\"\r\n [checked]=\"option.checked\"\r\n >\r\n {{ option.name }}\r\n </mat-checkbox>\r\n <ng-container *ngIf=\"option.checked\">\r\n <ng-container\r\n *ngFor=\"\r\n let button of option?.ctaButton;\r\n let i = index;\r\n trackBy: trackById\r\n \"\r\n >\r\n <ieeesa-icon-button\r\n class=\"px-5\"\r\n [iconButton]=\"button\"\r\n [isLabelNeeded]=\"isLabelNeeded\"\r\n (iconButtonClick)=\"onCheckboxCTAButtonClick($event)\"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-list>\r\n </ng-container>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n <ieeesa-form-error\r\n *ngIf=\"config && group\"\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n >\r\n </ieeesa-form-error>\r\n</div>\r\n","export const DateFormats = {\r\n display: {\r\n dateInput: 'DD MMM YYYY',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n daysFormat: 'ddd',\r\n monthFormat: 'YYYY-MM',\r\n fullMonthLabel: 'MMM',\r\n month: 'M',\r\n },\r\n};\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * DatepickerService is used in date-picker and date-picker-header component to get date range, isRangeSelection, and selected date(s).\r\n * @export\r\n * @class DatepickerService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DatepickerService implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n range = new Subject<{ start: Date | string; end: Date | string }>();\r\n range$ = this.range.asObservable();\r\n selectedRange!: { start: Date | string; end: Date | string };\r\n selectedDate!: Date | string;\r\n isRangeSelection = false;\r\n constructor() {\r\n this.range$?.pipe(takeUntil(this.destroy$)).subscribe((range) => {\r\n this.selectedRange = {\r\n start: range.start,\r\n end: range.end,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Returns the calendar type.\r\n * @return {boolean}\r\n * @memberof DatepickerService\r\n */\r\n getCalendarType(): boolean {\r\n return this.isRangeSelection;\r\n }\r\n /**\r\n * Returns selected range\r\n * @return {({ start: Date | string; end: Date | string })}\r\n * @memberof DatepickerService\r\n */\r\n getSelectedRange(): { start: Date | string; end: Date | string } {\r\n return this.selectedRange;\r\n }\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","import { Component, Inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport {\r\n DateAdapter,\r\n MAT_DATE_FORMATS,\r\n MatDateFormats,\r\n MatNativeDateModule,\r\n} from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormGroup } from '@angular/forms';\r\nimport moment_ from 'moment';\r\nimport { DatepickerService } from '../../services/datepicker.service';\r\nimport { DateFormats } from '../../date-formats';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport * as datePickerInfo from '../../assets/constants.json';\r\nconst moment = moment_;\r\n\r\n/**\r\n * Provides implementation of date picker custom header and being used in date-picker component.\r\n * @export\r\n * @class DatePickerHeaderComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-date-picker-header',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatNativeDateModule,\r\n MatIconModule,\r\n ],\r\n templateUrl: './date-picker-header.component.html',\r\n styleUrls: ['./date-picker-header.component.scss'],\r\n})\r\nexport class DatePickerHeaderComponent implements OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n @Input() group!: FormGroup;\r\n arrowDirection = false;\r\n range!: { start: string; end: string };\r\n isRangeSelection = false;\r\n selectedDate!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n datePickerInfo: any = datePickerInfo;\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public calendar: MatCalendar<Date>,\r\n // eslint-disable-next-line no-unused-vars\r\n public dateAdapter: DateAdapter<Date>,\r\n // eslint-disable-next-line no-unused-vars\r\n @Inject(MAT_DATE_FORMATS) public dateFormats: MatDateFormats,\r\n // eslint-disable-next-line no-unused-vars\r\n private datepickerService: DatepickerService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize components instance properties.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n ngOnInit(): void {\r\n this.isRangeSelection = this.datepickerService.getCalendarType();\r\n const selectedRange = this.datepickerService.getSelectedRange();\r\n if (selectedRange) {\r\n this.setRange(selectedRange);\r\n }\r\n this.datepickerService.range$\r\n ?.pipe(takeUntil(this.destroy$))\r\n .subscribe((range) => {\r\n this.setRange(range);\r\n });\r\n this.selectedDate = this.datepickerService.selectedDate\r\n ? moment(this.datepickerService.selectedDate).format(\r\n DateFormats.display.dateInput\r\n )\r\n : '';\r\n }\r\n\r\n /**\r\n * Sets the min and max date range.\r\n * @param {({ start: Date | string; end: Date | string })} range\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setRange(range: { start: Date | string; end: Date | string }): void {\r\n this.range = {\r\n start:\r\n moment(range.start).date() +\r\n ' ' +\r\n moment(range.start).format(DateFormats.display.fullMonthLabel),\r\n end:\r\n moment(range.end).date() +\r\n ' ' +\r\n moment(range.end).format(DateFormats.display.fullMonthLabel),\r\n };\r\n }\r\n\r\n /**\r\n * Implementation of getMonthLabel method to get the month label.\r\n * @readonly\r\n * @return {string}\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n get getMonthLabel(): string {\r\n if (this.dateAdapter?.format) {\r\n return this.dateAdapter.format(\r\n this.calendar.activeDate,\r\n this.dateFormats.display.monthYearA11yLabel\r\n );\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Sets previous month in a calendar on click of previous month arrow in date picker.\r\n * @param {('month' | 'year')} mode\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setPreviousMonth(mode: 'month' | 'year'): void {\r\n this.calendar.activeDate =\r\n mode === 'month'\r\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, -1)\r\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, -1);\r\n }\r\n\r\n /**\r\n * Sets next month in a calendar on click of previous month arrow in date picker.\r\n * @param {('month' | 'year')} mode\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setNextMonth(mode: 'month' | 'year'): void {\r\n this.calendar.activeDate =\r\n mode === 'month'\r\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, 1)\r\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, 1);\r\n }\r\n\r\n /**\r\n * Sets the calendar current view on the open of year drop down in date picker.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n setCalendarView(): void {\r\n this.calendar.currentView =\r\n this.calendar.currentView === 'month' ? 'multi-year' : 'month';\r\n this.arrowDirection = !this.arrowDirection;\r\n }\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof DatePickerHeaderComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-datepicker-header--selected-date-container\">\r\n <p\r\n class=\"ieeesa-label-lg-bold-16 ieeesa-datepicker-header__select-date-label\"\r\n >\r\n {{ datePickerInfo.datePicker.selectDateLabel }}\r\n </p>\r\n <p\r\n class=\"headline-lg-34 ieeesa-datepicker-header__selected-date m-0\"\r\n *ngIf=\"range || isRangeSelection\"\r\n >\r\n {{ range.start }} - {{ range.end }}\r\n </p>\r\n <p\r\n class=\"headline-lg-34 ieeesa-datepicker-header__selected-date m-0\"\r\n *ngIf=\"!isRangeSelection\"\r\n >\r\n {{ selectedDate }}\r\n </p>\r\n</div>\r\n<div class=\"ieeesa-datepicker-header--content m-0\">\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"ieeesa-datepicker-header--content--period-button ieeesa-label-lg-16 text-start\"\r\n (click)=\"setCalendarView()\"\r\n [attr.aria-label]=\"getMonthLabel\"\r\n cdkAriaLive=\"polite\"\r\n >\r\n {{ getMonthLabel }}\r\n <i\r\n *ngIf=\"!arrowDirection\"\r\n class=\"ieeesa-datepicker-header--content--period-button--arrow-icon fa-solid fa-arrow-down\"\r\n ></i>\r\n <i\r\n *ngIf=\"arrowDirection\"\r\n class=\"ieeesa-datepicker-header--content--period-button--arrow-icon fa-solid fa-arrow-up\"\r\n ></i>\r\n </button>\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"ieeesa-label-lg-16 ieeesa-datepicker-header--content--arrow-left-btn\"\r\n [attr.aria-label]=\"datePickerInfo.ariaLabel.previousMonth\"\r\n cdkAriaLive=\"polite\"\r\n (click)=\"setPreviousMonth('month')\"\r\n >\r\n <i class=\"ieeesa-datepicker-header__arrow-left fa-solid fa-arrow-left\"></i>\r\n </button>\r\n <button\r\n mat-button\r\n type=\"button\"\r\n class=\"ieeesa-label-lg-16 ieeesa-datepicker-header--content--arrow-right-btn text-end\"\r\n [attr.aria-label]=\"datePickerInfo.ariaLabel.nextMonth\"\r\n cdkAriaLive=\"polite\"\r\n (click)=\"setNextMonth('month')\"\r\n >\r\n <i\r\n class=\"ieeesa-datepicker-header__arrow-right fa-solid fa-arrow-right\"\r\n ></i>\r\n </button>\r\n</div>\r\n","export enum CalendarType {\r\n // eslint-disable-next-line no-unused-vars\r\n SINGLE_DATE_SELECTION = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n CALENDAR = 2,\r\n // eslint-disable-next-line no-unused-vars\r\n DATE_RANGE_SELECTION = 3,\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n MomentDateAdapter,\r\n MAT_MOMENT_DATE_ADAPTER_OPTIONS,\r\n} from '@angular/material-moment-adapter';\r\nimport {\r\n DateAdapter,\r\n MAT_DATE_FORMATS,\r\n MAT_DATE_LOCALE,\r\n} from '@angular/material/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport {\r\n MAT_DATEPICKER_SCROLL_STRATEGY,\r\n MatDatepickerModule,\r\n} from '@angular/material/datepicker';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport moment_ from 'moment';\r\nimport { DatePickerHeaderComponent } from '../../components/date-picker-header/date-picker-header.component';\r\nimport { DateFormats } from '../../date-formats';\r\nimport { FieldConfig } from '../..//models/field-config.model';\r\nimport { CalendarType } from '../../models/calendar.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { DatepickerService } from '../../services/datepicker.service';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport * as buttonActionsInfo from '../../assets/constants.json';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { SelectedDate } from '../../models/selected-date.model';\r\nconst moment = moment_;\r\n\r\n@Injectable()\r\nexport class CustomDateAdapter extends MomentDateAdapter {\r\n /**\r\n * Overrides the getDayOfWeekNames method of MomentDateAdapter to show first letter of day in capital in date picker header.\r\n * @return {string[]}\r\n * @memberof CustomDateAdapter\r\n */\r\n override getDayOfWeekNames(): string[] {\r\n return ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n }\r\n}\r\n\r\n/**\r\n * Date selection of type SINGLE_DATE_SELECTION, DATE_RANGE_SELECTION and CALENDAR and handling of calendar events.\r\n * @export\r\n * @class DatePickerComponent\r\n * @implements {FormField}\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-date-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatExpansionModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n DatePickerHeaderComponent,\r\n MatButtonModule,\r\n FormSupportTextComponent,\r\n ],\r\n providers: [\r\n { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },\r\n {\r\n provide: DateAdapter,\r\n useClass: CustomDateAdapter,\r\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\r\n },\r\n {\r\n provide: MAT_DATE_FORMATS,\r\n useValue: DateFormats,\r\n },\r\n {\r\n provide: MAT_DATEPICKER_SCROLL_STRATEGY,\r\n useFactory: (overlay: Overlay) => () =>\r\n overlay.scrollStrategies.reposition(),\r\n deps: [Overlay],\r\n },\r\n ],\r\n templateUrl: './date-picker.component.html',\r\n styleUrls: ['./date-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DatePickerComponent implements FormField, OnInit, OnDestroy {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n datePickerHeader = DatePickerHeaderComponent;\r\n calendarTypes = CalendarType;\r\n private _selectedDates: string[] = [];\r\n /**\r\n * Gets preselected dates as an input.\r\n * @memberof DatePickerComponent\r\n */\r\n @Input()\r\n set selectedDates(value: string[]) {\r\n this._selectedDates = value;\r\n if (\r\n this.formControlName &&\r\n this.selectedDates?.length === 1 &&\r\n this.selectedDates[0] !== undefined &&\r\n this.calendarType === CalendarType.SINGLE_DATE_SELECTION\r\n ) {\r\n this.datepickerService.selectedDate = value[0];\r\n this.createFormGroup(value[0]);\r\n this.datepickerService.isRangeSelection = false;\r\n }\r\n }\r\n /**\r\n * Returns selected dates\r\n * @readonly\r\n * @type {string[]}\r\n * @memberof DatePickerComponent\r\n */\r\n get selectedDates(): string[] {\r\n return this._selectedDates;\r\n }\r\n private _selectedRange: string[] = [];\r\n /**\r\n * Gets preselected date range as an input.\r\n * @memberof DatePickerComponent\r\n */\r\n @Input()\r\n set selectedRange(value: string[]) {\r\n this._selectedRange = value;\r\n if (\r\n this.selectedRange?.length === 2 &&\r\n this.calendarType === CalendarType.DATE_RANGE_SELECTION\r\n ) {\r\n this.createFormGroupWithRangeControls(value[0], value[1]);\r\n this.setDateRange(value[0], value[1]);\r\n this.datepickerService.isRangeSelection = true;\r\n }\r\n }\r\n /**\r\n * Returns selected date range\r\n * @readonly\r\n * @type {string[]}\r\n * @memberof DatePickerComponent\r\n */\r\n get selectedRange(): string[] {\r\n return this._selectedRange;\r\n }\r\n\r\n @Input() calendarType: CalendarType = CalendarType.SINGLE_DATE_SELECTION;\r\n @Input() formControlName!: string;\r\n @Input() placeholderLabel = '';\r\n @Input() isDisabled = false;\r\n @Input() isLabelAlignedLeft = false;\r\n @Input() datepickerLabel = '';\r\n @Input() dateRange!: { minDate: string; maxDate: string };\r\n @Input() minDate!: Date | moment.Moment;\r\n @Input() maxDate!: Date | moment.Moment;\r\n @Output() selectedDate = new EventEmitter<SelectedDate>();\r\n @Output() selectedDateRange = new EventEmitter<{\r\n startDate: string;\r\n endDate: string;\r\n }>();\r\n calendarSelectedDate!: Date;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n buttonActionsInfo: any = buttonActionsInfo;\r\n private formOverlayScrollContainer?: HTMLElement;\r\n private readonly overlayWheelListener = (event: WheelEvent): void => {\r\n const target = event.target as Element | null;\r\n if (target?.closest('.cdk-overlay-pane')) return;\r\n\r\n const formBody = this.formOverlayScrollContainer;\r\n if (!formBody || formBody.scrollHeight <= formBody.clientHeight) return;\r\n\r\n formBody.scrollTop += event.deltaY;\r\n formBody.scrollLeft += event.deltaX;\r\n event.preventDefault();\r\n };\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private fb: FormBuilder,\r\n // eslint-disable-next-line no-unused-vars\r\n private changeDetectorRef: ChangeDetectorRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private datepickerService: DatepickerService,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n private elementRef: ElementRef<HTMLElement> // eslint-disable-next-line no-empty-function,\r\n ) {}\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to creates config if its undefined and sets components instance variables if config is defined. Sets the form group value if form group is defined.\r\n * @memberof DatePickerComponent\r\n */\r\n ngOnInit(): void {\r\n if (!this.config) {\r\n const controlName = this.formControlName ?? 'datepicker';\r\n this.config = this.formUtilityService.getFormFieldConfig(\r\n controlName,\r\n FormControlType.DATE\r\n );\r\n if (\r\n this.config &&\r\n this.calendarType === CalendarType.DATE_RANGE_SELECTION\r\n ) {\r\n this.config.dateRangeControls = {\r\n startDate: 'startDate',\r\n endDate: 'endDate',\r\n };\r\n }\r\n } else {\r\n this.initializePropertiesFromConfig();\r\n }\r\n if (!this.group) {\r\n if (this.calendarType === CalendarType.SINGLE_DATE_SELECTION) {\r\n this.createFormGroup();\r\n } else if (this.calendarType === CalendarType.DATE_RANGE_SELECTION) {\r\n this.createFormGroupWithRangeControls();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes properties from the config input\r\n * @memberof DatePickerComponent\r\n */\r\n initializePropertiesFromConfig(): void {\r\n this.calendarType =\r\n this.config?.datePicker?.calendarType ??\r\n CalendarType.SINGLE_DATE_SELECTION;\r\n this.placeholderLabel = this.config?.datePicker?.placeholderLabel ?? '';\r\n this.datepickerLabel = this.config?.datePicker?.label ?? '';\r\n this.isLabelAlignedLeft =\r\n this.config?.datePicker?.isLabelAlignedLeft ?? false;\r\n this.dateRange = this.config?.datePicker?.dateRange ?? {\r\n minDate: '',\r\n maxDate: '',\r\n };\r\n this.isDisabled = !!this.config.disabled;\r\n if (\r\n this.config.datePicker?.calendarType === CalendarType.DATE_RANGE_SELECTION\r\n ) {\r\n this.group.addControl('startDate', new FormControl());\r\n this.group.addControl('endDate', new FormControl());\r\n }\r\n }\r\n /**\r\n * Handle date change event and emits the selected date.\r\n * @memberof DatePickerComponent\r\n */\r\n onDateChange(): void {\r\n this.selectedDate.emit({\r\n date: this.group?.get(this.config?.controlName)?.value,\r\n controlName: this.config?.controlName\r\n });\r\n this.datepickerService.selectedDate = this.group?.get(\r\n this.config.controlName\r\n )?.value;\r\n this.datepickerService.isRangeSelection = false;\r\n }\r\n\r\n /**\r\n * Sets and emits selected date range\r\n * @memberof DatePickerComponent\r\n */\r\n onDateRangeChange(): void {\r\n this.datepickerService.isRangeSelection = true;\r\n this.setDateRange(\r\n this.group.value.startDate ?? '',\r\n this.group.value.endDate ?? ''\r\n );\r\n\r\n this.selectedDateRange.emit({\r\n startDate: this.group.value.startDate ?? '',\r\n endDate: this.group.value.endDate ?? '',\r\n });\r\n }\r\n\r\n /**\r\n * Sets the min and max date range.\r\n * @param {(string | Date)} startDate\r\n * @param {(string | Date)} endDate\r\n * @memberof DatePickerComponent\r\n */\r\n setDateRange(startDate: string | Date, endDate: string | Date): void {\r\n this.datepickerService.range.next({\r\n start: startDate,\r\n end: endDate,\r\n });\r\n }\r\n\r\n /**\r\n * Creates form group and initializes form value\r\n * @param {string} [date]\r\n * @memberof DatePickerComponent\r\n */\r\n createFormGroup(date?: string): void {\r\n this.group = this.fb.group({\r\n [this.formControlName ? this.formControlName : 'datepicker']: date\r\n ? [moment(date).utc(true).format()]\r\n : [],\r\n });\r\n }\r\n /**\r\n * Creates form group with range type of controls and sets the min and max range values.\r\n * @param {string} [startDate]\r\n * @param {string} [endDate]\r\n * @memberof DatePickerComponent\r\n */\r\n createFormGroupWithRangeControls(startDate?: string, endDate?: string): void {\r\n this.group = this.fb.group({\r\n startDate: startDate ? [moment(startDate).utc(true).format()] : [],\r\n endDate: endDate ? [moment(endDate).utc(true).format()] : [],\r\n });\r\n }\r\n /**\r\n * Checks if the form control has required validator.\r\n * @return {boolean}\r\n * @memberof DatePickerComponent\r\n */\r\n isRequired(): boolean {\r\n return this.group?.controls[this.config?.controlName]?.hasValidator(\r\n Validators.required\r\n );\r\n }\r\n\r\n /**\r\n * Sets the updated selected date using datepicker service which will be shown in datepicker header\r\n * @param {string} controlName\r\n * @memberof DatePickerComponent\r\n */\r\n onDatePickerOpen(controlName: string) {\r\n this.scrollFieldIntoViewForCalendar();\r\n this.setOverlayClipBounds();\r\n this.datepickerService.selectedDate = this.group.get(controlName)?.value;\r\n }\r\n\r\n onDatePickerClose(): void {\r\n this.clearOverlayClipBounds();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearOverlayClipBounds();\r\n }\r\n\r\n private setOverlayClipBounds(): void {\r\n const formBody = this.getFormOverlayScrollContainer();\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n const viewportHeight =\r\n this.elementRef.nativeElement.ownerDocument.defaultView?.innerHeight ?? 0;\r\n\r\n if (!formBody || !viewportHeight) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-top',\r\n `${Math.max(0, Math.floor(formBodyRect.top))}px`\r\n );\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-bottom',\r\n `${Math.max(0, viewportHeight - Math.ceil(formBodyRect.bottom))}px`\r\n );\r\n this.formOverlayScrollContainer = formBody;\r\n this.elementRef.nativeElement.ownerDocument.addEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n { capture: true, passive: false }\r\n );\r\n documentElement.classList.add('ieeesa-form-overlay-open');\r\n }\r\n\r\n private scrollFieldIntoViewForCalendar(): void {\r\n const formBody = this.getFormOverlayScrollContainer();\r\n const dateField = this.elementRef.nativeElement.querySelector(\r\n 'input[matInput]'\r\n ) as HTMLElement | null;\r\n\r\n if (!formBody || !dateField) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n const dateFieldRect = dateField.getBoundingClientRect();\r\n const targetTop = formBodyRect.top + 16;\r\n const scrollDelta = dateFieldRect.top - targetTop;\r\n\r\n if (scrollDelta > 0) {\r\n formBody.scrollTop += scrollDelta;\r\n }\r\n }\r\n\r\n private getFormOverlayScrollContainer(): HTMLElement | null {\r\n const candidates = [\r\n this.elementRef.nativeElement.closest('.ieeesa-dynamic-form__body'),\r\n this.elementRef.nativeElement.closest('.ieeesa-stepper__content'),\r\n ] as (HTMLElement | null)[];\r\n\r\n return (\r\n candidates.find((element) => {\r\n if (!element) return false;\r\n\r\n const overflowY = getComputedStyle(element).overflowY;\r\n return (\r\n (overflowY === 'auto' || overflowY === 'scroll') &&\r\n element.scrollHeight > element.clientHeight\r\n );\r\n }) ??\r\n candidates.find((element) => !!element) ??\r\n null\r\n );\r\n }\r\n\r\n private clearOverlayClipBounds(): void {\r\n this.elementRef.nativeElement.ownerDocument.removeEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n true\r\n );\r\n this.formOverlayScrollContainer = undefined;\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n documentElement.classList.remove('ieeesa-form-overlay-open');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-top');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-bottom');\r\n }\r\n}","<div class=\"ieeesa-datepicker\">\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.SINGLE_DATE_SELECTION\"\r\n class=\"ieeesa-datepicker--single-selection\"\r\n [ngClass]=\"!isRequired() ? 'ieeesa-datepicker__valid-date' : ''\"\r\n [ngClass]=\"{\r\n 'ieeesa-datepicker__valid-date': !isRequired(),\r\n 'ieeesa-datepicker__label-left': isLabelAlignedLeft,\r\n 'ieeesa-datepicker__label-top': !isLabelAlignedLeft\r\n }\"\r\n >\r\n <mat-label\r\n *ngIf=\"datepickerLabel\"\r\n class=\"ieeesa-body-sm-14 ieeesa-datepicker__label\"\r\n >{{ datepickerLabel }}\r\n </mat-label>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n (dateInput)=\"onDateChange()\"\r\n (click)=\"picker.open()\"\r\n [matDatepicker]=\"picker\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [min]=\"config?.datePicker?.minDate ?? minDate\"\r\n [max]=\"config?.datePicker?.maxDate ?? maxDate\"\r\n [formControlName]=\"config.controlName\"\r\n [placeholder]=\"\r\n placeholderLabel ?? buttonActionsInfo?.datePicker?.dateFormatLabel\r\n \"\r\n #calendar\r\n readonly\r\n />\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"picker\"\r\n >\r\n <svg matDatepickerToggleIcon class=\"ieeesa-datepicker__datepicker-icon\">\r\n <use\r\n [attr.xlink:href]=\"buttonActionsInfo?.datePicker?.datePickerIcon\"\r\n ></use>\r\n </svg>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker\r\n #picker\r\n yPosition=\"below\"\r\n [calendarHeaderComponent]=\"datePickerHeader\"\r\n (opened)=\"onDatePickerOpen(config.controlName)\"\r\n (closed)=\"onDatePickerClose()\"\r\n >\r\n </mat-datepicker>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\">\r\n </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n </div>\r\n\r\n <div\r\n [formGroup]=\"group\"\r\n *ngIf=\"calendarType === calendarTypes.DATE_RANGE_SELECTION\"\r\n class=\"ieeesa-datepicker--multi-selection\"\r\n [ngClass]=\"\r\n isLabelAlignedLeft\r\n ? 'ieeesa-datepicker__label-left'\r\n : 'ieeesa-datepicker__label-top'\r\n \"\r\n >\r\n <mat-label\r\n *ngIf=\"datepickerLabel\"\r\n class=\"ieeesa-datepicker__label ieeesa-body-sm-14\"\r\n >{{ datepickerLabel }}\r\n </mat-label>\r\n <mat-form-field>\r\n <mat-date-range-input [rangePicker]=\"rangePicker\" [formGroup]=\"group\">\r\n <input\r\n matStartDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.startDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel + ' - '\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n <input\r\n matEndDate\r\n matInput\r\n [formControlName]=\"config.dateRangeControls?.endDate ?? ''\"\r\n [placeholder]=\"buttonActionsInfo?.datePicker?.dateFormatLabel\"\r\n (dateChange)=\"onDateRangeChange()\"\r\n />\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle\r\n class=\"mat-datepicker-toggle\"\r\n matIconSuffix\r\n [for]=\"rangePicker\"\r\n ></mat-datepicker-toggle>\r\n <mat-date-range-picker\r\n #rangePicker\r\n yPosition=\"below\"\r\n [calendarHeaderComponent]=\"datePickerHeader\"\r\n (dateInput)=\"onDateRangeChange()\"\r\n (opened)=\"onDatePickerOpen(config.controlName)\"\r\n (closed)=\"onDatePickerClose()\"\r\n >\r\n </mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"calendarType === calendarTypes.CALENDAR\"\r\n class=\"ieeesa-datepicker--calendar\"\r\n >\r\n <mat-calendar\r\n [headerComponent]=\"datePickerHeader\"\r\n [(selected)]=\"calendarSelectedDate\"\r\n >\r\n </mat-calendar>\r\n </div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum InputFieldType {\r\n EMAIL = 'EMAIL',\r\n NUMBER = 'NUMBER',\r\n TEXT = 'TEXT',\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { InputFieldType } from '../../models/input-field-type.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as buttonActionsInfo from '../../assets/constants.json';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\n\r\n/**\r\n * Provides implementation of input type number, email and text\r\n * @export\r\n * @class InputComponent\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatInputModule,\r\n MatIconModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class InputComponent implements FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n invalidChars = ['-', '+', 'e'];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n buttonActionsInfo: any = buttonActionsInfo;\r\n @Output() inputValueChange = new EventEmitter<string | number>();\r\n\r\n /**\r\n * Handles keyboard event of type keydown to restrict invalid characters.\r\n * @param {KeyboardEvent} event\r\n * @memberof InputComponent\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (\r\n (this.invalidChars.includes(event.key.toLowerCase()) ||\r\n (this.config.isInteger && event.key.toLowerCase() === '.')) &&\r\n this.config.isNumber\r\n ) {\r\n event.preventDefault();\r\n }\r\n }\r\n /**\r\n * Clears the form group control value of type input\r\n * @memberof InputComponent\r\n */\r\n clear(): void {\r\n this.group.get(this.config.controlName)?.setValue('');\r\n }\r\n\r\n /**\r\n * Handles form control input on change event to set min and max value errors\r\n * @memberof InputComponent\r\n */\r\n onChange(): void {\r\n const inputControl = this.group?.get(this.config?.controlName);\r\n if (\r\n this.config.max &&\r\n this.config.isNumber &&\r\n Number(inputControl?.value) > this.config.max\r\n ) {\r\n inputControl?.setErrors({\r\n maxlength: true,\r\n });\r\n }\r\n if (\r\n this.config.min &&\r\n this.config.isNumber &&\r\n inputControl?.value !== '' &&\r\n Number(inputControl?.value) < this.config.min\r\n ) {\r\n inputControl?.setErrors({\r\n minlength: true,\r\n });\r\n }\r\n this.inputValueChange.emit(inputControl?.value);\r\n }\r\n /**\r\n * Returns input field type\r\n * @memberof InputComponent\r\n */\r\n getInputFieldType(): string {\r\n if (this.config?.isEmail) {\r\n return InputFieldType.EMAIL;\r\n } else if (this.config?.isNumber) {\r\n return InputFieldType.NUMBER;\r\n }\r\n return InputFieldType.TEXT;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-input-field\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-input-field__label-left'\r\n : 'ieeesa-input-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-input-field__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <mat-form-field>\r\n <input\r\n class=\"ieeesa-input-field__content ieeesa-body-lg-16\"\r\n [type]=\"getInputFieldType()\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [min]=\"config.min ?? null\"\r\n [max]=\"config.max ?? null\"\r\n [maxlength]=\"config.maxLength ?? null\"\r\n [minlength]=\"config.minLength ?? null\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onChange()\"\r\n autocomplete=\"off\"\r\n matInput\r\n />\r\n <button\r\n *ngIf=\"\r\n group.get(this.config.controlName)?.value &&\r\n group.get(this.config.controlName)?.valid &&\r\n this.config?.clear\r\n \"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"buttonActionsInfo.ariaLabel.clear\"\r\n class=\"ieeesa-input-field__btn--clear\"\r\n (click)=\"clear()\"\r\n >\r\n <i class=\"fa-regular fa-circle-xmark ieeesa-input-field__icon--clear\"></i>\r\n </button>\r\n <ng-container\r\n *ngIf=\"\r\n group.get(this.config.controlName)?.invalid &&\r\n (group.get(this.config.controlName)?.dirty ||\r\n group.get(this.config.controlName)?.touched)\r\n \"\r\n matSuffix>\r\n <i\r\n class=\"fa-solid fa-circle-exclamation ieeesa-input-field__icon--warning\"\r\n [attr.aria-label]=\"buttonActionsInfo.ariaLabel.warning\"\r\n role=\"img\"\r\n ></i>\r\n </ng-container>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text [formGroup]=\"group\" [config]=\"config\"></ieeesa-form-support-text>\r\n</div>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { RadioOption } from '../../models/radio-option.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\n\r\n/**\r\n * Provides implementation of form field radio type component\r\n * @export\r\n * @class RadioComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-radio',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatRadioModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n ],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class RadioComponent implements OnInit, FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() formControlName = 'radio';\r\n private radioGroups: RadioOption[] = [];\r\n @Input()\r\n set radioGroup(value: RadioOption[]) {\r\n this.radioGroups = value;\r\n }\r\n get radioGroup(): RadioOption[] {\r\n return this.radioGroups;\r\n }\r\n @Input() isDisabled = false;\r\n @Output() selectedRadioOption = new EventEmitter<RadioOption>();\r\n\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private formUtilityService: FormUtilityService) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to create form group and initialize components instance properties\r\n * @memberof RadioComponent\r\n */\r\n ngOnInit(): void {\r\n if (!this.group) {\r\n this.group =\r\n this.group ??\r\n this.formUtilityService.getFormGroup(this.formControlName);\r\n }\r\n this.initializeConfigProperties();\r\n }\r\n\r\n /**\r\n * Initializes the components instance properties from config else it defines config\r\n * @memberof RadioComponent\r\n */\r\n initializeConfigProperties(): void {\r\n if (this.config?.radioOptions) {\r\n this.radioGroup = this.config.radioOptions;\r\n this.isDisabled = this.config?.disabled ?? false;\r\n }\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.RADIO\r\n );\r\n }\r\n\r\n /**\r\n * Handles radio selection event on change of it\r\n * @param {RadioOption} value\r\n * @memberof RadioComponent\r\n */\r\n onChange(value: RadioOption): void {\r\n this.selectedRadioOption.emit(value);\r\n }\r\n /**\r\n * Allows Angular to detect the specific radio option that needs to change or be added instead of rebuilding the whole radio options in DOM by tracking option unique Id.\r\n * @param {number} index\r\n * @return {number}\r\n * @memberof RadioComponent\r\n */\r\n trackById(index: number, radio: RadioOption): number | string {\r\n return radio.id;\r\n }\r\n}\r\n","<div [formGroup]=\"group\" class=\"ieeesa-radio-field\" *ngIf=\"group\">\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-radio-field__label\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-radio-field__label-left'\r\n : 'ieeesa-radio-field__label-top'\r\n \"\r\n >{{ config.label }}</mat-label\r\n >\r\n <mat-radio-group\r\n [formControlName]=\"config.controlName\"\r\n [disabled]=\"isDisabled\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n >\r\n <mat-radio-button\r\n *ngFor=\"let radio of radioGroup; trackBy: trackById\"\r\n [value]=\"radio.label\"\r\n [name]=\"radio.label\"\r\n [aria-label]=\"radio.label\"\r\n [id]=\"'' + radio.id\"\r\n (change)=\"onChange(radio)\"\r\n [checked]=\"radio.checked\"\r\n class=\"ieeesa-radio-field__button\"\r\n >\r\n {{ radio.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n</div>\r\n","export const ValidationPatterns = {\r\n alphanumeric: /^[a-zA-Z0-9 _-]+$/,\r\n mixOfAlphanumeric: /^[0-9]*[a-zA-Z]+[a-zA-Z0-9 _()-]*$/,\r\n numeric: '^0|[1-9][0-9]*$',\r\n email: /^[a-z0-9._%+-]+@[a-z0-9.-]+\\\\.[a-z]{2,4}$/,\r\n};\r\n","export enum SearchType {\r\n // eslint-disable-next-line no-unused-vars\r\n EMAIL = 'EMAIL',\r\n // eslint-disable-next-line no-unused-vars\r\n AUTO = 'AUTO',\r\n // eslint-disable-next-line no-unused-vars\r\n ON_CLICK = 'ON_CLICK',\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n Subject,\r\n debounceTime,\r\n distinctUntilChanged,\r\n filter,\r\n fromEvent,\r\n map,\r\n takeUntil,\r\n} from 'rxjs';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { ValidationPatterns } from '../../validation-patterns';\r\nimport { SearchType } from '../../models/search.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport * as searchInfo from '../../assets/constants.json';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nconst MIN_CHAR = 3;\r\n/**\r\n * Component support search capability and used as a form filed with type search and independently as search component.\r\n * @export\r\n * @class SearchComponent\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n * @implements {OnDestroy}\r\n * @implements {FormField}\r\n */\r\n@Component({\r\n selector: 'ieeesa-search',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './search.component.html',\r\n styleUrls: ['./search.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SearchComponent\r\n implements OnInit, AfterViewInit, OnDestroy, FormField\r\n{\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() formControlName = 'search';\r\n @Input() placeholderLabel = '';\r\n @Input() searchTerm = '';\r\n @Input() supportMessage!: string;\r\n @Input() searchType: SearchType = SearchType.AUTO;\r\n @Output() searchValue = new EventEmitter();\r\n @ViewChild('searchControl') searchControl!: ElementRef;\r\n @Input() minCharacterToSearch = MIN_CHAR;\r\n searchResponse!: string;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n searchInfo: any = searchInfo;\r\n isSearchValueEmitted = false;\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private cd: ChangeDetectorRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize config and form group if its undefined\r\n * @memberof SearchComponent\r\n */\r\n ngOnInit(): void {\r\n if (this.config?.searchType) this.searchType = this.config?.searchType;\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.SEARCH\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config.supportMessage =\r\n this.config?.supportMessage ?? this.supportMessage;\r\n }\r\n\r\n /**\r\n * Handles form control search keyup event and emits searched value\r\n * @memberof SearchComponent\r\n */\r\n ngAfterViewInit() {\r\n this.group\r\n ?.get(this.config?.controlName)\r\n ?.setValue(this.config?.value ?? this.searchTerm);\r\n if (this.searchType === SearchType.AUTO && this.searchControl) {\r\n fromEvent(this.searchControl?.nativeElement, 'keyup')\r\n .pipe(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => {\r\n return event.target.value;\r\n }),\r\n filter(\r\n (res) => res.length >= this.minCharacterToSearch || res.length === 0\r\n ),\r\n debounceTime(this.searchInfo.autocomplete.debounceTime),\r\n distinctUntilChanged()\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((text: string) => {\r\n this.searchValue.emit(text);\r\n });\r\n } else if (this.searchType === SearchType.ON_CLICK) {\r\n fromEvent<KeyboardEvent>(this.searchControl?.nativeElement, 'keyup')\r\n .pipe(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (e: any) =>\r\n e.key === 'Enter' &&\r\n (e?.target?.value?.length >= this.minCharacterToSearch ||\r\n e?.target?.value?.length === 0)\r\n ),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => {\r\n return event?.target?.value;\r\n }),\r\n debounceTime(this.searchInfo.autocomplete.debounceTime)\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((text: string) => {\r\n if (!this.isSearchValueEmitted) this.searchValue.emit(text);\r\n this.isSearchValueEmitted = false;\r\n });\r\n }\r\n this.cd.detectChanges();\r\n }\r\n\r\n /**\r\n * Stops typing keystrokes from bubbling up to a parent control (such as an\r\n * Angular Material `mat-select`) that would otherwise consume them. This is\r\n * required when the search input is rendered inside a `mat-select` dropdown,\r\n * where the space bar activates the highlighted option instead of typing a\r\n * space, and letter keys trigger the built-in typeahead. Navigation and\r\n * dismissal keys (Arrow keys, Enter, Escape, Tab) are allowed to propagate so\r\n * the parent dropdown keeps its keyboard behaviour.\r\n * @param {KeyboardEvent} event - The keydown event raised by the search input.\r\n * @memberof SearchComponent\r\n */\r\n onSearchKeyDown(event: KeyboardEvent): void {\r\n const propagatableKeys = [\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'Enter',\r\n 'Escape',\r\n 'Tab',\r\n ];\r\n if (!propagatableKeys.includes(event.key)) {\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n /**\r\n * Validates email based on defined validation patterns\r\n * @param {string} email\r\n * @return {boolean}\r\n * @memberof SearchComponent\r\n */\r\n isValidateEmail(email: string): boolean {\r\n const regularExpression = ValidationPatterns.email;\r\n return regularExpression.test(String(email).toLowerCase());\r\n }\r\n\r\n /**\r\n * Clears search response on change of form search control value\r\n * @memberof SearchComponent\r\n */\r\n onChange(): void {\r\n this.searchResponse = '';\r\n }\r\n\r\n /**\r\n * Clears search response and emits searched value on search input change\r\n * @memberof SearchComponent\r\n */\r\n onSearchInputChange(): void {\r\n this.isSearchValueEmitted = false;\r\n if (this.group.get(this.config.controlName)?.value === '') {\r\n this.searchValue.emit(this.group.get(this.config.controlName)?.value);\r\n }\r\n if (this.searchTerm.length === 0) {\r\n this.searchResponse = '';\r\n }\r\n }\r\n\r\n /**\r\n * Emits the searchValue event along with the searched term while clicking on the search icon\r\n * @memberof SearchComponent\r\n */\r\n onSearchClick(): void {\r\n const searchTextValue = this.group.get(this.config.controlName)?.value;\r\n if (\r\n searchTextValue?.length >= this.minCharacterToSearch ||\r\n searchTextValue?.length === 0\r\n ) {\r\n this.isSearchValueEmitted = true;\r\n this.searchValue.emit(searchTextValue);\r\n }\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof SearchComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-search-field\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-search-field__label-left'\r\n : 'ieeesa-search-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-search-field__label\"\r\n >{{ config.label }}</mat-label\r\n >\r\n <mat-form-field appearance=\"outline\">\r\n <span class=\"ieeesa-search-field__content ieeesa-body-md-16\">\r\n <input\r\n matInput\r\n autocomplete=\"off\"\r\n [type]=\"searchType\"\r\n [formControlName]=\"config.controlName\"\r\n [placeholder]=\"placeholderLabel\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n (change)=\"onChange()\"\r\n (input)=\"onSearchInputChange()\"\r\n (keydown)=\"onSearchKeyDown($event)\"\r\n bindon-ngModel=\"searchTerm\"\r\n #searchControl\r\n />\r\n <button\r\n mat-button\r\n (click)=\"onSearchClick()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"searchInfo?.ariaLabel?.search\"\r\n class=\"ieeesa-search-field__button\"\r\n >\r\n <svg\r\n class=\"ieeesa-search-field__search-icon\"\r\n >\r\n <use [attr.xlink:href]=\"searchInfo?.search?.searchIcon\"></use>\r\n </svg>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n AfterViewInit,\r\n OnDestroy,\r\n ViewChildren,\r\n QueryList,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport {\r\n MAT_SELECT_CONFIG,\r\n MAT_SELECT_SCROLL_STRATEGY,\r\n MatSelectModule,\r\n} from '@angular/material/select';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { SelectOption } from '@ieeesa-npm/models';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { SearchType } from '../../models/search.model';\r\nimport { SearchComponent } from '../../components/search/search.component';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as dropdownInfo from '../../assets/constants.json';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\n\r\n/**\r\n * Component implementation supports select type of form filed and select type is configurable to support single selection or multi-selection with multilevel or single level.\r\n * @export\r\n * @class SelectComponent\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SearchComponent,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n FormSupportTextComponent,\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_SELECT_CONFIG,\r\n useValue: { overlayPanelClass: 'ieeesa-select-overlay-pane' },\r\n },\r\n {\r\n provide: MAT_SELECT_SCROLL_STRATEGY,\r\n useFactory: (overlay: Overlay) => () =>\r\n overlay.scrollStrategies.reposition(),\r\n deps: [Overlay],\r\n },\r\n ],\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SelectComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChildren(SearchComponent)\r\n formFields!: QueryList<SearchComponent>;\r\n group!: FormGroup;\r\n config!: FieldConfig;\r\n arrowDirection = false;\r\n searchType = SearchType.AUTO;\r\n sortedOptions!: SelectOption[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dropdownInfo: any = dropdownInfo;\r\n private _dropdownOptions!: SelectOption[];\r\n private _selectedOptions!: SelectOption | SelectOption[];\r\n private _isSortNeeded = true;\r\n private unsortedDropdownOptions!: SelectOption[];\r\n private formOverlayScrollContainer?: HTMLElement;\r\n private readonly overlayWheelListener = (event: WheelEvent): void => {\r\n const target = event.target as Element | null;\r\n if (target?.closest('.cdk-overlay-pane')) return;\r\n\r\n const formBody = this.formOverlayScrollContainer;\r\n if (!formBody || formBody.scrollHeight <= formBody.clientHeight) return;\r\n\r\n formBody.scrollTop += event.deltaY;\r\n formBody.scrollLeft += event.deltaX;\r\n event.preventDefault();\r\n };\r\n /**\r\n * Takes isSortNeeded as input to check if the passed options are sorted or not.\r\n * @memberof SelectComponent\r\n */\r\n @Input()\r\n set isSortNeeded(value: boolean) {\r\n this._isSortNeeded = value;\r\n if (!value && this.unsortedDropdownOptions)\r\n this._dropdownOptions = this.unsortedDropdownOptions;\r\n }\r\n get isSortNeeded(): boolean {\r\n return this._isSortNeeded;\r\n }\r\n /**\r\n * Sets the dropdown options for selection.\r\n * @memberof SelectComponent\r\n */\r\n @Input()\r\n set dropdownOptions(value: SelectOption[]) {\r\n if (value) this.unsortedDropdownOptions = [...value];\r\n if (this.isSortNeeded && Array.isArray(value)) {\r\n this._dropdownOptions = this.arraySorting(value);\r\n } else {\r\n this._dropdownOptions = value;\r\n }\r\n }\r\n get dropdownOptions(): SelectOption[] {\r\n return this._dropdownOptions;\r\n }\r\n /**\r\n * Sets the selected option\r\n * @memberof SelectComponent\r\n */\r\n @Input()\r\n set selectedOptions(value: SelectOption | SelectOption[]) {\r\n if (Array.isArray(value)) {\r\n this._selectedOptions = this.arraySorting(value);\r\n } else {\r\n this._selectedOptions = value;\r\n }\r\n\r\n if (this.config?.controlName && this.group) {\r\n this.group.get(this.config.controlName)?.setValue(this._selectedOptions);\r\n }\r\n }\r\n get selectedOptions(): SelectOption | SelectOption[] {\r\n return this._selectedOptions;\r\n }\r\n @Input() formControlName = 'select';\r\n @Input() isMultiLevel = false;\r\n @Input() isLabelAlignedLeft = false;\r\n @Input() selectLabel = '';\r\n @Input() isMultiSelect = false;\r\n @Input() isDisabled = false;\r\n @Input() isSearch = false;\r\n @Input() placeholderText = this.dropdownInfo.dropdown.placeholderText;\r\n @Output() optionSelected = new EventEmitter<SelectOption>();\r\n @Output() optionSearched = new EventEmitter<string>();\r\n @Output() dropdownOpenedChange = new EventEmitter<SelectOpenedState>();\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n private elementRef: ElementRef<HTMLElement> // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initializes components instance properties from config if its defined otherwise creates form group and config.\r\n * @memberof SelectComponent\r\n */\r\n ngOnInit(): void {\r\n this.updateArrowDirection(false);\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.SELECT\r\n );\r\n if (this.config) {\r\n this.isMultiSelect = this.config.isMultiSelect ?? false;\r\n this.dropdownOptions =\r\n this.config?.dropdownOptions ?? this.dropdownOptions;\r\n this.selectedOptions = this.selectedOptions ?? this.config?.value;\r\n this.selectLabel = this.config?.label ?? this.selectLabel;\r\n this.placeholderText = this.config?.placeholder ?? this.placeholderText;\r\n this.isMultiSelect = this.config?.isMultiSelect ?? this.isMultiSelect;\r\n this.isDisabled = this.config?.disabled ?? this.isDisabled;\r\n this.searchType = this.config?.searchType ?? this.searchType;\r\n this.isSortNeeded = this.config?.isSortNeeded ?? this.isSortNeeded;\r\n this.isSearch = this.config?.isSearch ?? this.isSearch;\r\n }\r\n this.group.get(this.config.controlName)?.setValue(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * Emits selected option on changes the selected option.\r\n * @param {SelectOption} event\r\n * @memberof SelectComponent\r\n */\r\n onChange(event: SelectOption): void {\r\n this.optionSelected.emit(event);\r\n }\r\n\r\n /**\r\n * Sets the select dropdown arrow direction\r\n * @param {boolean} opened\r\n * @memberof SelectComponent\r\n */\r\n updateArrowDirection(opened: boolean): void {\r\n this.arrowDirection = opened;\r\n if (opened) {\r\n this.prepareSelectOverlayPosition();\r\n } else {\r\n this.clearOverlayClipBounds();\r\n }\r\n this.dropdownOpenedChange.emit({\r\n controlName: this.config?.controlName,\r\n opened: opened,\r\n });\r\n }\r\n\r\n prepareSelectOverlayPosition(): void {\r\n this.setOverlayClipBounds();\r\n setTimeout(() => {\r\n const overlayPane = this.elementRef.nativeElement.ownerDocument\r\n .querySelector('.ieeesa-select-overlay-pane');\r\n if (!overlayPane) {\r\n this.clearOverlayClipBounds();\r\n return;\r\n }\r\n\r\n this.keepTopSelectPanelInsideFormBody();\r\n }, 150);\r\n }\r\n\r\n /**\r\n * Clears form overlay bounds when the component is destroyed while open.\r\n * @memberof SelectComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.clearOverlayClipBounds();\r\n }\r\n\r\n private setOverlayClipBounds(): void {\r\n const formBody = this.getFormOverlayScrollContainer();\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n const viewportHeight =\r\n this.elementRef.nativeElement.ownerDocument.defaultView?.innerHeight ?? 0;\r\n\r\n if (!formBody || !viewportHeight) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-top',\r\n `${Math.max(0, Math.floor(formBodyRect.top))}px`\r\n );\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-bottom',\r\n `${Math.max(0, viewportHeight - Math.ceil(formBodyRect.bottom))}px`\r\n );\r\n this.formOverlayScrollContainer = formBody;\r\n this.elementRef.nativeElement.ownerDocument.addEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n { capture: true, passive: false }\r\n );\r\n documentElement.classList.add('ieeesa-form-overlay-open');\r\n }\r\n\r\n private getFormOverlayScrollContainer(): HTMLElement | null {\r\n const candidates = [\r\n this.elementRef.nativeElement.closest('.ieeesa-dynamic-form__body'),\r\n this.elementRef.nativeElement.closest('.ieeesa-stepper__content'),\r\n ] as (HTMLElement | null)[];\r\n\r\n return (\r\n candidates.find((element) => {\r\n if (!element) return false;\r\n\r\n const overflowY = getComputedStyle(element).overflowY;\r\n return (\r\n (overflowY === 'auto' || overflowY === 'scroll') &&\r\n element.scrollHeight > element.clientHeight\r\n );\r\n }) ??\r\n candidates.find((element) => !!element) ??\r\n null\r\n );\r\n }\r\n\r\n private clearOverlayClipBounds(): void {\r\n this.elementRef.nativeElement.ownerDocument.removeEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n true\r\n );\r\n this.formOverlayScrollContainer = undefined;\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n documentElement.classList.remove('ieeesa-form-overlay-open');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-top');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-bottom');\r\n documentElement.style.removeProperty('--ieeesa-form-select-panel-top');\r\n documentElement.style.removeProperty('--ieeesa-form-select-panel-max-height');\r\n documentElement.classList.remove('ieeesa-form-top-select-open');\r\n }\r\n\r\n private keepTopSelectPanelInsideFormBody(): void {\r\n const formBody = this.formOverlayScrollContainer;\r\n const selectTrigger = this.elementRef.nativeElement.querySelector(\r\n '.mat-mdc-select-trigger'\r\n );\r\n const overlayPane = this.elementRef.nativeElement.ownerDocument\r\n .querySelector('.ieeesa-select-overlay-pane') as HTMLElement | null;\r\n const selectPanel = overlayPane?.querySelector(\r\n '.mat-mdc-select-panel'\r\n ) as HTMLElement | null;\r\n\r\n if (!formBody || !selectTrigger || !overlayPane || !selectPanel) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n const triggerRect = selectTrigger.getBoundingClientRect();\r\n const triggerOffsetFromFormTop = triggerRect.top - formBodyRect.top;\r\n const minimumSpaceBelow = 120;\r\n\r\n if (\r\n !overlayPane.classList.contains('mat-mdc-select-panel-above') ||\r\n triggerOffsetFromFormTop > minimumSpaceBelow\r\n ) {\r\n return;\r\n }\r\n\r\n const top = triggerRect.bottom + 4;\r\n const maxHeight = Math.max(\r\n 96,\r\n Math.floor(formBodyRect.bottom - top - 8)\r\n );\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n\r\n overlayPane.style.top = `${Math.round(top)}px`;\r\n overlayPane.style.bottom = 'auto';\r\n selectPanel.style.maxHeight = `${maxHeight}px`;\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-select-panel-top',\r\n `${Math.round(top)}px`\r\n );\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-select-panel-max-height',\r\n `${maxHeight}px`\r\n );\r\n documentElement.classList.add('ieeesa-form-top-select-open');\r\n }\r\n\r\n /**\r\n * Takes the index and the current option as arguments and needs to return the unique identifier for this option.\r\n * @param {number} index\r\n * @param {SelectOption} option\r\n * @return {(number | string)}\r\n * @memberof SelectComponent\r\n */\r\n trackByFn(index: number, option: SelectOption): number | string {\r\n return option.id;\r\n }\r\n\r\n /**\r\n * Emits searched options on filtering options in select dropdown\r\n * @param {string} searchText\r\n * @memberof SelectComponent\r\n */\r\n onOptionSearch(searchText: string) {\r\n this.optionSearched.emit(searchText);\r\n }\r\n\r\n /**\r\n * Compares the two passed options\r\n * @param {any} option1\r\n * @param {any} option2\r\n * @return {boolean}\r\n * @memberof SelectComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n comparer(option1: any, option2: any): boolean {\r\n return option1 && option2 ? option1.id === option2.id : option1 === option2;\r\n }\r\n\r\n /**\r\n * Sorts the options\r\n * @memberof SelectComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.isSortNeeded && Array.isArray(this.dropdownOptions)) {\r\n this.dropdownOptions = this.arraySorting(this.dropdownOptions);\r\n }\r\n }\r\n\r\n /**\r\n * Sorts the options by using arraySorting method\r\n * @memberof SelectComponent\r\n */\r\n sortOptions(): void {\r\n if (this.isSortNeeded && Array.isArray(this.dropdownOptions)) {\r\n this.sortedOptions = this.arraySorting(this.dropdownOptions);\r\n } else {\r\n this.sortedOptions = this.dropdownOptions;\r\n }\r\n }\r\n\r\n /**\r\n * Utility method to sort dropdown options in ascending order.\r\n * @param {SelectOption[]} list\r\n * @return {SelectOption[]}\r\n * @memberof SelectComponent\r\n */\r\n arraySorting(list: SelectOption[]): SelectOption[] {\r\n const clonedValue = [...list];\r\n const sort = clonedValue.sort((a, b) => {\r\n if (a.name.toLowerCase() === b.name.toLowerCase()) return 0;\r\n if (a.name.toLowerCase() === 'all') return -1;\r\n if (b.name.toLowerCase() === 'all') return 1;\r\n if (a.name.toLowerCase() < b.name.toLowerCase()) return -1;\r\n if (a.name.toLowerCase() > b.name.toLowerCase()) return 1;\r\n return 0;\r\n });\r\n return sort;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-select-field\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n isLabelAlignedLeft\r\n ? 'ieeesa-select-field__label-left'\r\n : 'ieeesa-select-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-select-field__label\">{{\r\n selectLabel\r\n }}</mat-label>\r\n <mat-form-field\r\n [ngClass]=\"\r\n arrowDirection\r\n ? 'ieeesa-select-field__arrow-up'\r\n : 'ieeesa-select-field__arrow-down'\r\n \"\r\n >\r\n <mat-select\r\n disableOptionCentering\r\n *ngIf=\"isMultiSelect\"\r\n (click)=\"prepareSelectOverlayPosition()\"\r\n (openedChange)=\"updateArrowDirection($event)\"\r\n (selectionChange)=\"onChange($event.value)\"\r\n [formControlName]=\"config.controlName\"\r\n [multiple]=\"isMultiSelect\"\r\n [disabled]=\"isDisabled\"\r\n [aria-label]=\"config.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"placeholderText\"\r\n [compareWith]=\"comparer\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isSearch && arrowDirection\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"onOptionSearch($event)\"\r\n ></ieeesa-search>\r\n <ng-container\r\n *ngIf=\"!isMultiLevel\"\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: dropdownOptions }\"\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"isMultiLevel\">\r\n <mat-optgroup\r\n *ngFor=\"let option of dropdownOptions; trackBy: trackByFn\"\r\n [label]=\"option.name\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: option.option_groups }\"\r\n >\r\n </ng-container>\r\n </mat-optgroup>\r\n </ng-container>\r\n <ng-template #dropdownOptionsTemplateRef let-options=\"data\">\r\n <mat-option\r\n *ngFor=\"let option of options; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n\r\n <mat-select\r\n disableOptionCentering\r\n [compareWith]=\"comparer\"\r\n *ngIf=\"!isMultiSelect\"\r\n (click)=\"prepareSelectOverlayPosition()\"\r\n [multiple]=\"isMultiSelect\"\r\n (openedChange)=\"updateArrowDirection($event)\"\r\n (selectionChange)=\"onChange($event.value)\"\r\n [formControlName]=\"config.controlName\"\r\n [disabled]=\"isDisabled\"\r\n [aria-label]=\"config.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"placeholderText\"\r\n >\r\n <ieeesa-search\r\n *ngIf=\"isSearch && arrowDirection\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"onOptionSearch($event)\"\r\n ></ieeesa-search>\r\n <ng-container\r\n *ngIf=\"!isMultiLevel\"\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: dropdownOptions }\"\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"isMultiLevel\">\r\n <mat-optgroup\r\n *ngFor=\"let option of dropdownOptions; trackBy: trackByFn\"\r\n [label]=\"option.name\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"dropdownOptionsTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: option.option_groups }\"\r\n >\r\n </ng-container>\r\n </mat-optgroup>\r\n </ng-container>\r\n <ng-template #dropdownOptionsTemplateRef let-options=\"data\">\r\n <mat-option\r\n *ngFor=\"let option of options; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n {{ option.name }}\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport * as constantsInfo from '../../assets/constants.json';\r\nimport { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\n\r\n@Component({\r\n selector: 'ieeesa-text-area',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './text-area.component.html',\r\n styleUrls: ['./text-area.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TextAreaComponent implements OnInit, FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() remainingCharsLeftMessage!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constantsInfo;\r\n leftCharCount!: number;\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n @Output() inputValueChange = new EventEmitter<string>();\r\n /**\r\n * Initializes the leftCharCount and remainingCharsLeftMessage\r\n * @memberof TextAreaComponent\r\n */\r\n ngOnInit(): void {\r\n this.remainingCharsLeftMessage =\r\n this.remainingCharsLeftMessage ??\r\n this.config?.remainingCharsLeftMessage ??\r\n this.constants?.textarea?.leftCharacters;\r\n this.leftCharCount =\r\n this.config?.maxCharCount ?? this.config?.maxRangeLimit ?? 0;\r\n if (this.config?.value && this.config?.maxCharCount) {\r\n this.leftCharCount =\r\n this.config?.maxCharCount - this.config?.value?.length;\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the remaining characters count on change of form control value and sets the remaining count.\r\n * @memberof TextAreaComponent\r\n */\r\n onChange(event: Event): void {\r\n let count = 0;\r\n if (this.config?.maxCharCount) {\r\n count =\r\n this.config?.maxCharCount -\r\n (event.target as HTMLInputElement)?.value?.length;\r\n } else if (\r\n this.config?.maxRangeLimit &&\r\n (this.group?.get(this.config?.controlName)?.valid ||\r\n (event.target as HTMLInputElement)?.value === '')\r\n ) {\r\n const inputRanges = (event.target as HTMLInputElement)?.value?.split(',');\r\n const validRangesCount: number = inputRanges?.filter(\r\n (input: string) => input !== ''\r\n )?.length;\r\n count = this.config.maxRangeLimit - validRangesCount;\r\n }\r\n this.leftCharCount = count > 0 ? count : 0;\r\n this.inputValueChange.emit((event.target as HTMLInputElement)?.value);\r\n }\r\n /**\r\n * Emits supportTextLinkClick event on click of form support text link\r\n * @param {LinkEventEmitType} event\r\n * @memberof TextAreaComponent\r\n */\r\n onSupportTextLinkClick(event: LinkEventEmitType) {\r\n this.supportTextLinkClick.emit(event);\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-text-area-field\"\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-text-area-field__label-left'\r\n : 'ieeesa-text-area-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-text-area-field__label\">\r\n <span\r\n class=\"d-flex justify-content-between\"\r\n *ngIf=\"config?.maxCharCount || config?.maxRangeLimit\"\r\n >\r\n <span class=\"ieeesa-text-area-field__label-text\">\r\n {{ config.label }}\r\n </span>\r\n <span>\r\n <span class=\"ieeesa-text-area-field__left-char-count\">{{\r\n leftCharCount\r\n }}</span\r\n ><span class=\"ieeesa-text-area-field__left-char-text\">{{\r\n remainingCharsLeftMessage\r\n }}</span>\r\n </span>\r\n </span>\r\n <ng-container *ngIf=\"!config?.maxCharCount && !config?.maxRangeLimit\">\r\n {{ config.label }}\r\n </ng-container>\r\n </mat-label>\r\n <mat-form-field appearance=\"fill\">\r\n <textarea\r\n [name]=\"config.name ?? ''\"\r\n cdkTextareaAutosize\r\n matInput\r\n [attr.aria-label]=\"config.ariaLabel ?? ''\"\r\n [attr.aria-multiline]=\"config?.ariaMultiline ?? true\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [maxlength]=\"config.maxLength ?? constants.textarea.maxLengthDefault\"\r\n [readonly]=\"config.isReadonly\"\r\n (input)=\"onChange($event)\"\r\n class=\"ieeesa-text-area-field__content ieeesa-body-lg-18 {{\r\n config.controlName\r\n }}\"\r\n [ngClass]=\"\r\n config.isResize\r\n ? 'ieeesa-text-area-field__resize'\r\n : 'ieeesa-text-area-field__no-resize'\r\n \"\r\n >\r\n {{ config.value }}</textarea\r\n >\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n (supportTextLinkClick)=\"onSupportTextLinkClick($event)\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport * as buttonActionsInfo from '../../assets/constants.json';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'ieeesa-add-form-group',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, MatInputModule, MatButtonModule],\r\n templateUrl: './add-form-group.component.html',\r\n styleUrls: ['./add-form-group.component.scss'],\r\n})\r\nexport class AddFormGroupComponent implements FormField {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Output() addFormGroup = new EventEmitter<Event>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n buttonActionsInfo: any = buttonActionsInfo;\r\n\r\n /**\r\n * Emits the addFormGroup event on click of add form group button.\r\n * @param {Event} event\r\n * @memberof AddFormGroupComponent\r\n */\r\n onAddFormGroup(event: Event): void {\r\n this.addFormGroup.emit(event);\r\n }\r\n}\r\n","<ng-container class=\"ieeesa-add-form-group\" [formGroup]=\"group\">\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-add-form-group__label\">{{\r\n config?.label\r\n }}</mat-label>\r\n <button\r\n [disabled]=\"config?.disabled\"\r\n type=\"button\"\r\n mat-button\r\n matSuffix\r\n [attr.aria-label]=\"buttonActionsInfo?.ariaLabel?.addFormGroup\"\r\n class=\"mat-tertiary-button ieeesa-add-form-group__action\"\r\n (click)=\"onAddFormGroup($event)\"\r\n >\r\n <i class=\"fa-solid fa-plus\"></i>\r\n {{ buttonActionsInfo?.button?.add }}\r\n </button>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnDestroy,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport * as constantsInfo from '../../assets/constants.json';\r\nimport { SelectedTime } from '../../models/selected-time.model';\r\n@Component({\r\n selector: 'ieeesa-time-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n NgxMaterialTimepickerModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n TextFieldModule,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TimePickerComponent implements OnDestroy {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Output() formTimeSelected = new EventEmitter<SelectedTime>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constantsInfo;\r\n @ViewChild('picker') picker!: ElementRef;\r\n\r\n private formOverlayScrollContainer?: HTMLElement;\r\n private readonly overlayWheelListener = (event: WheelEvent): void => {\r\n const target = event.target as Element | null;\r\n if (target?.closest('.timepicker-overlay')) return;\r\n\r\n const formBody = this.formOverlayScrollContainer;\r\n if (!formBody || formBody.scrollHeight <= formBody.clientHeight) return;\r\n\r\n formBody.scrollTop += event.deltaY;\r\n formBody.scrollLeft += event.deltaX;\r\n event.preventDefault();\r\n };\r\n\r\n constructor(private elementRef: ElementRef<HTMLElement>) {}\r\n\r\n /**\r\n * Handles form time selection event\r\n * @type {void}\r\n * @memberof TimePickerComponent\r\n */\r\n onTimeSelection(time: string): void {\r\n this.group.markAsDirty();\r\n this.formTimeSelected.emit({\r\n time: time,\r\n controlName: this.config.controlName,\r\n });\r\n }\r\n\r\n onTimePickerOpen(): void {\r\n this.setOverlayClipBounds();\r\n }\r\n\r\n onTimePickerClose(): void {\r\n this.clearOverlayClipBounds();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearOverlayClipBounds();\r\n }\r\n\r\n private setOverlayClipBounds(): void {\r\n const formBody = this.getFormOverlayScrollContainer();\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n const viewportHeight =\r\n this.elementRef.nativeElement.ownerDocument.defaultView?.innerHeight ?? 0;\r\n\r\n if (!formBody || !viewportHeight) return;\r\n\r\n const formBodyRect = formBody.getBoundingClientRect();\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-top',\r\n `${Math.max(0, Math.floor(formBodyRect.top))}px`\r\n );\r\n documentElement.style.setProperty(\r\n '--ieeesa-form-overlay-clip-bottom',\r\n `${Math.max(0, viewportHeight - Math.ceil(formBodyRect.bottom))}px`\r\n );\r\n this.formOverlayScrollContainer = formBody;\r\n this.elementRef.nativeElement.ownerDocument.addEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n { capture: true, passive: false }\r\n );\r\n documentElement.classList.add('ieeesa-form-overlay-open');\r\n }\r\n\r\n private getFormOverlayScrollContainer(): HTMLElement | null {\r\n const candidates = [\r\n this.elementRef.nativeElement.closest('.ieeesa-dynamic-form__body'),\r\n this.elementRef.nativeElement.closest('.ieeesa-stepper__content'),\r\n ] as (HTMLElement | null)[];\r\n\r\n return (\r\n candidates.find((element) => {\r\n if (!element) return false;\r\n\r\n const overflowY = getComputedStyle(element).overflowY;\r\n return (\r\n (overflowY === 'auto' || overflowY === 'scroll') &&\r\n element.scrollHeight > element.clientHeight\r\n );\r\n }) ??\r\n candidates.find((element) => !!element) ??\r\n null\r\n );\r\n }\r\n\r\n private clearOverlayClipBounds(): void {\r\n this.elementRef.nativeElement.ownerDocument.removeEventListener(\r\n 'wheel',\r\n this.overlayWheelListener,\r\n true\r\n );\r\n this.formOverlayScrollContainer = undefined;\r\n const documentElement = this.elementRef.nativeElement.ownerDocument\r\n .documentElement;\r\n documentElement.classList.remove('ieeesa-form-overlay-open');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-top');\r\n documentElement.style.removeProperty('--ieeesa-form-overlay-clip-bottom');\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-time-picker-field\"\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-time-picker-field__label-left'\r\n : 'ieeesa-time-picker-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-time-picker-field__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <mat-form-field appearance=\"fill\">\r\n <input\r\n matInput\r\n [ngxTimepicker]=\"picker\"\r\n [format]=\"\r\n config?.is24HoursTimeFormat\r\n ? config?.hour24\r\n : constants?.timePicker?.defaultTimeFormat\r\n \"\r\n [attr.aria-label]=\"config.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [readonly]=\"config.isReadonly\"\r\n class=\"ieeesa-time-picker-field__content ieeesa-body-lg-18\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-time-picker-field__toggle-icon\"\r\n (click)=\"picker.open()\"\r\n matSuffix\r\n [attr.aria-label]=\"config.ariaLabel ?? ''\"\r\n >\r\n <svg ngxMaterialTimepickerToggleIcon>\r\n <use [attr.xlink:href]=\"constants?.timePicker?.timePickerIcon\"></use>\r\n </svg>\r\n </button>\r\n <ngx-material-timepicker\r\n #picker\r\n (timeSet)=\"onTimeSelection($event)\"\r\n (opened)=\"onTimePickerOpen()\"\r\n (closed)=\"onTimePickerClose()\"\r\n ></ngx-material-timepicker>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatSlideToggleChange,\r\n MatSlideToggleModule,\r\n} from '@angular/material/slide-toggle';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormErrorComponent } from '../../components/form-error/form-error.component';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\n\r\n@Component({\r\n selector: 'ieeesa-slide-toggle',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatSlideToggleModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './slide-toggle.component.html',\r\n styleUrls: ['./slide-toggle.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SlideToggleComponent implements OnInit, AfterViewInit {\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n @Input() formControlName = 'slideToggle';\r\n slideToggleOption!: SlideToggleOption;\r\n /**\r\n * Input property to get slide toggle options\r\n * @memberof SlideToggleComponent\r\n * @usageNotes const slideToggleOption = [{ id: 1, label: 'Change toggle', checked: true, disabled: false}]\r\n */\r\n @Input()\r\n set slideToggle(value: SlideToggleOption) {\r\n this.slideToggleOption = value;\r\n }\r\n get slideToggle(): SlideToggleOption {\r\n return this.slideToggleOption;\r\n }\r\n @Input() isDisabled = false;\r\n @Input() canShowIcon = false;\r\n @Output() slideToggleChange: EventEmitter<SlideToggleOption> =\r\n new EventEmitter<SlideToggleOption>();\r\n @ViewChild('slideToggle', { read: ElementRef })\r\n matSlideToggleElement!: ElementRef;\r\n crossIconSVG =\r\n 'M10.333 3.205L9.62801 2.5L6.83301 5.295L4.03801 2.5L3.33301 3.205L6.12801 6L3.33301 8.795L4.03801 9.5L6.83301 6.705L9.62801 9.5L10.333 8.795L7.53801 6L10.333 3.205Z';\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n /**\r\n * On slide toggle sets slideToggleOption checked and emit slideToggleChange event emitter.\r\n * @param {MatSlideToggleChange} toggle\r\n * @memberof SlideToggleComponent\r\n */\r\n onSlideToggleChange(toggle: MatSlideToggleChange) {\r\n if (this.slideToggleOption) {\r\n this.slideToggleOption.checked = toggle?.checked;\r\n this.slideToggleChange.emit(this.slideToggleOption);\r\n }\r\n }\r\n\r\n /**\r\n * Initiates component and set slideToggleOption.\r\n * @memberof SlideToggleComponent\r\n */\r\n ngOnInit(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'slideToggle',\r\n FormControlType.SLIDE_TOGGLE\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup('slideToggle');\r\n this.slideToggleOption =\r\n this.config?.slideToggleOption ?? this.slideToggleOption;\r\n this.isDisabled = this.config?.disabled ?? this.isDisabled;\r\n }\r\n /**\r\n * Updates the cross icon path for the off state of the slide toggle button.\r\n * @memberof SlideToggleComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.matSlideToggleElement && this.canShowIcon) {\r\n this.matSlideToggleElement?.nativeElement\r\n ?.querySelector('.mdc-switch__icon--off')\r\n .firstChild.setAttribute('d', this.crossIconSVG);\r\n }\r\n }\r\n}\r\n","<div [formGroup]=\"group\" class=\"ieeesa-slide-toggle-field\" *ngIf=\"group\">\r\n <mat-slide-toggle\r\n [formControlName]=\"config.controlName\"\r\n [aria-label]=\"config.ariaLabel ?? slideToggleOption.ariaLabel ?? ''\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n [checked]=\"slideToggleOption.checked\"\r\n [disabled]=\"isDisabled\"\r\n [(ngModel)]=\"slideToggleOption.checked\"\r\n (change)=\"onSlideToggleChange($event)\"\r\n [hideIcon]=\"!canShowIcon\"\r\n #slideToggle\r\n >{{ slideToggleOption?.label }}</mat-slide-toggle\r\n >\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Directive,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Directive, enables to drag and drop files on the predefined area and emits the event with dropped files to upload.\r\n * @export\r\n * @class FileUploadDirective\r\n */\r\n@Directive({\r\n selector: '[ieeesaFileUpload]',\r\n standalone: true,\r\n})\r\nexport class FileUploadDirective {\r\n @Input() allowedFileTypes: string[] = [];\r\n @Input() isMultiFileUpload = false;\r\n @Output() fileDropped = new EventEmitter<File | FileList>();\r\n\r\n /**\r\n * Binds the 'multiple' attribute based on the value of allowMultiple property.\r\n * @readonly\r\n * @type {(string | null)}\r\n * @memberof FileUploadDirective\r\n */\r\n @HostBinding('attr.multiple') get isMultiple(): string | null {\r\n return this.isMultiFileUpload ? 'multiple' : null;\r\n }\r\n /**\r\n * Host listener for 'dragover' event.\r\n * Prevents default behavior and stops event propagation.\r\n * @param {DragEvent} event\r\n * @memberof FileUploadDirective\r\n */\r\n @HostListener('dragover', ['$event']) onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /**\r\n * Host listener for 'dragleave' event.\r\n * Prevents default behavior and stops event propagation.\r\n * @param {DragEvent} event\r\n * @memberof FileUploadDirective\r\n */\r\n @HostListener('dragleave', ['$event']) onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /**\r\n * Host listener for 'drop' event.\r\n * Prevents default behavior, stops event propagation, and emits dropped files.\r\n * @param {DragEvent} event -DragEvent object.\r\n * @memberof FileUploadDirective\r\n */\r\n @HostListener('drop', ['$event']) onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const files = event.dataTransfer?.files;\r\n if (files && files.length > 0) {\r\n this.fileDropped.emit(files);\r\n }\r\n }\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum AlignBrowsedFiles {\r\n DEFAULT = 'default',\r\n BOTTOM = 'bottom',\r\n}\r\n","import {\r\n HttpBackend,\r\n HttpClient,\r\n HttpEvent,\r\n HttpEventType,\r\n HttpHeaders,\r\n} from '@angular/common/http';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport {\r\n AlertsService,\r\n HttpService,\r\n LoaderNotificationService,\r\n} from '@ieeesa-npm/utility';\r\nimport { AlertType } from '@ieeesa-npm/models';\r\nimport {\r\n FileUploadPresignedUrl,\r\n GetFileDownloadPresignedUrlByAttachmentIdPayload,\r\n GetFileDownloadPresignedUrlByAttachmentIdResponse,\r\n GetFileDownloadPresignedUrlPayload,\r\n GetFileUploadPresignedUrlPayload,\r\n} from '../models/file-upload-presigned-url-res.model';\r\nimport {\r\n catchError,\r\n concatMap,\r\n from,\r\n last,\r\n map,\r\n Observable,\r\n Subject,\r\n take,\r\n takeUntil,\r\n tap,\r\n} from 'rxjs';\r\nimport * as constants from '../assets/constants.json';\r\nimport { FileUploadPayload } from '../models/file-upload-payload-model';\r\nimport {\r\n FileAttachmentInfo,\r\n GetFileUploadPresignedUrlsResponse,\r\n} from '../models/file-upload-response.model';\r\nimport { DeleteFileResponse } from '../models/file-info.model';\r\nimport { DownloadAttachment } from '../models/download-file.model';\r\n\r\n/**\r\n * This service interacts with the server to obtain pre-signed URLs for file upload and uploads files to Amazon S3.\r\n * @class FileUploadService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileUploadService implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n constants = constants;\r\n apiBaseUrl!: string;\r\n fileByteArray: Uint8Array | undefined;\r\n httpClient: HttpClient;\r\n isFileUploading = false;\r\n filesNameOfUploadFailed!: string[];\r\n noOfFilesUploadedSuccessfully = 0;\r\n uploadedFileName = '';\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public httpService: HttpService,\r\n handler: HttpBackend,\r\n // eslint-disable-next-line no-unused-vars\r\n public alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n public loaderNotificationService: LoaderNotificationService\r\n ) {\r\n this.httpClient = new HttpClient(handler);\r\n }\r\n\r\n /**\r\n * Sets the base URL for API requests.\r\n * @param {string} apiBaseUrl -API base URL.\r\n * @memberof FileUploadService\r\n */\r\n setApiBaseUrl(apiBaseUrl: string) {\r\n this.apiBaseUrl = apiBaseUrl;\r\n }\r\n /**\r\n * Gets API base URL for API requests.\r\n * @return {*} {string}\r\n * @memberof FileUploadService\r\n */\r\n getApiBaseUrl(): string {\r\n return this.apiBaseUrl;\r\n }\r\n /**\r\n * Retrieves presigned URL for uploading files to Amazon S3 bucket.\r\n * @param {(File | FileList)} file\r\n * @return {Observable<FileUploadPresignedUrl>}\r\n * @memberof FileUploadService\r\n */\r\n getFileUploadPresignedUrl(\r\n file: File | FileList,\r\n appId: string\r\n ): Observable<FileUploadPresignedUrl> {\r\n let fileName = '';\r\n if (Object.values(file).length) fileName = Object.values(file)[0].name;\r\n else fileName = (file as File).name;\r\n const fileUploadPresignedUrlPayload: GetFileUploadPresignedUrlPayload = {\r\n payload: {\r\n fileName: fileName,\r\n tenantAppId: appId as string,\r\n },\r\n };\r\n return this.httpService\r\n .postData(\r\n `${this.apiBaseUrl}/configurations/s3/uploadFileUrl`,\r\n fileUploadPresignedUrlPayload\r\n )\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n /**\r\n * Gets pre-signed URL for the files to be uploaded in S3 bucket\r\n * @param {FileUploadPayload} fileUploadPayload\r\n * @param {string} fileUploadAPIPath\r\n * @return {Observable<GetFileUploadPresignedUrlsResponse>}\r\n * @memberof FileUploadService\r\n */\r\n getPreSignedURL(\r\n fileUploadPayload: FileUploadPayload,\r\n fileUploadAPIPath: string\r\n ): Observable<GetFileUploadPresignedUrlsResponse> {\r\n return this.httpService\r\n .postData(`${this.apiBaseUrl}/${fileUploadAPIPath}`, fileUploadPayload)\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Uploads file to AWS S3 using a pre-signed URL.\r\n * @param {string} preSignedUrl\r\n * @param files\r\n * @param isMultipleFileUpload\r\n * @return {Observable<any>} -Returns an observable that emits the response after uploading the file to S3.\r\n * @memberof FileUploadService\r\n */\r\n uploadFileToS3(\r\n preSignedUrl: FileAttachmentInfo[] | string,\r\n files: File | FileList,\r\n isMultipleFileUpload = false\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): Observable<any> {\r\n this.loaderNotificationService.show();\r\n const filesArray = [];\r\n this.filesNameOfUploadFailed = [];\r\n this.uploadedFileName = '';\r\n if (isMultipleFileUpload) {\r\n Object.values(files).forEach((file: File) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filesArray.push({\r\n preSignedUrl: (preSignedUrl as FileAttachmentInfo[]).find(\r\n (fileInfo: FileAttachmentInfo) =>\r\n fileInfo.fileName === (file as File).name &&\r\n fileInfo.errorMessage === null\r\n )?.preSignedUrl,\r\n fileObj: file as File,\r\n fileType: (file as File).type,\r\n fileSize: (file as File).size,\r\n });\r\n });\r\n } else {\r\n filesArray.push({\r\n preSignedUrl: preSignedUrl as string,\r\n fileObj: files as File,\r\n fileType: (files as File).type,\r\n fileSize: (files as File).size,\r\n });\r\n }\r\n return from(filesArray).pipe(\r\n concatMap((file) =>\r\n this.httpCallToAWS(\r\n file.preSignedUrl,\r\n file.fileObj,\r\n file.fileType,\r\n file.fileSize\r\n )\r\n ),\r\n take(filesArray.length)\r\n );\r\n }\r\n /**\r\n * Makes http call to AWS to upload file in S3 bucket\r\n * @param {string} preSignedUrl\r\n * @param {File} file\r\n * @param {string} fileType\r\n * @param {number} fileSize\r\n * @return {*} {Observable<any>}\r\n * @memberof FileUploadService\r\n */\r\n httpCallToAWS(\r\n preSignedUrl: string,\r\n file: File,\r\n fileType: string,\r\n fileSize: number\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): Observable<any> {\r\n const headers = new HttpHeaders();\r\n headers.append('Content-Type', fileType?.toString());\r\n headers.append('Content-Length', fileSize?.toString());\r\n return this.httpClient\r\n .put(preSignedUrl, file, {\r\n reportProgress: true,\r\n observe: 'events',\r\n headers: headers,\r\n })\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n map((event) => this.getEventMessage(event, file)),\r\n tap((message) => this.showProgress(message)),\r\n last(),\r\n catchError((errorRes) => {\r\n this.loaderNotificationService.hide();\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Gets file upload progress.\r\n * @param {*} message\r\n * @memberof FileUploadService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars, no-unused-vars, no-empty-function, @typescript-eslint/no-empty-function\r\n showProgress(message: any) {}\r\n\r\n /**\r\n * Return distinct message for sent, upload progress, & response events.\r\n * @param {HttpEvent<any>} event\r\n * @param {(File | FileList)} file\r\n * @return {*}\r\n * @memberof FileUploadService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getEventMessage(event: HttpEvent<any>, file: File) {\r\n let fileName = '';\r\n let fileSize: number | string = 0;\r\n fileName = (file as File).name;\r\n fileSize = (file as File).size;\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n return `Uploading file \"${fileName}\" of size ${fileSize}.`;\r\n case HttpEventType.UploadProgress:\r\n // eslint-disable-next-line no-case-declarations\r\n const percentDone = event?.total\r\n ? Math.round((100 * event.loaded) / event.total)\r\n : 0;\r\n return `File \"${fileName}\" is ${percentDone}% uploaded.`;\r\n case HttpEventType.Response:\r\n this.loaderNotificationService.hide();\r\n if (event.status === 200) {\r\n this.noOfFilesUploadedSuccessfully++;\r\n this.uploadedFileName = fileName;\r\n return true;\r\n }\r\n this.filesNameOfUploadFailed.push(fileName);\r\n return false;\r\n\r\n default:\r\n return `File \"${fileName}\" surprising upload event: ${event.type}.`;\r\n }\r\n }\r\n\r\n /**\r\n * Converts file to byte array.\r\n * @param {File} file\r\n * @memberof FileUploadService\r\n */\r\n convertFileToByteArray(file: File): void {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const arrayBuffer = reader?.result as ArrayBuffer;\r\n this.fileByteArray = new Uint8Array(arrayBuffer);\r\n };\r\n reader.onerror = () => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: this.constants?.fileUpload?.message?.error?.ER1002,\r\n alertType: AlertType?.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n };\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n /**\r\n * Resets file byte array format to undefined.\r\n * @memberof FileUploadService\r\n */\r\n clearFileByteArray(): void {\r\n this.fileByteArray = undefined;\r\n }\r\n\r\n /**\r\n * Sets file upload status.\r\n * @param {boolean} status\r\n * @memberof FileUploadService\r\n */\r\n setFileUploadStatus(status: boolean): void {\r\n this.isFileUploading = status;\r\n }\r\n\r\n /**\r\n * Returns file upload status.\r\n * @return {boolean}\r\n * @memberof FileUploadService\r\n */\r\n getFileUploadStatus(): boolean {\r\n return this.isFileUploading;\r\n }\r\n\r\n /**\r\n * Retrieves presigned URL for downloading files to Amazon S3 bucket.\r\n * @param {(File | FileList)} file\r\n * @return {Observable<string>}\r\n * @memberof FileUploadService\r\n */\r\n getFileDownloadPresignedUrls(\r\n file: File | FileList | string | DownloadAttachment,\r\n isPublicAPI?: boolean,\r\n domainUrl?: string,\r\n presignedApiUrl?: string\r\n ): Observable<string | GetFileDownloadPresignedUrlByAttachmentIdResponse> {\r\n let fileName = '';\r\n if (typeof file === 'string') fileName = file;\r\n else if (Object?.values(file)?.length)\r\n fileName = Object?.values(file)?.[0]?.name;\r\n else fileName = (file as File).name;\r\n let httpRequest!: Observable<\r\n string | GetFileDownloadPresignedUrlByAttachmentIdResponse\r\n >;\r\n if (isPublicAPI) {\r\n const fileDownloadPresignedUrlPayload: GetFileDownloadPresignedUrlPayload =\r\n {\r\n payload: {\r\n fileName: fileName,\r\n domain: domainUrl as string,\r\n },\r\n };\r\n httpRequest = this.httpService.postData(\r\n `${this.apiBaseUrl}/configurations/public/downloadFileUrl`,\r\n fileDownloadPresignedUrlPayload\r\n );\r\n } else if (presignedApiUrl) {\r\n const fileDownloadPresignedUrlByAttachmentIdPayload: GetFileDownloadPresignedUrlByAttachmentIdPayload =\r\n {\r\n payload: {\r\n attachmentId: (file as DownloadAttachment).attachmentId,\r\n preSignedDuration: this.constants?.fileDownload?.preSignedDuration,\r\n },\r\n };\r\n httpRequest = this.httpService.postData(\r\n `${this.apiBaseUrl}${presignedApiUrl}`,\r\n fileDownloadPresignedUrlByAttachmentIdPayload\r\n );\r\n } else {\r\n httpRequest = this.httpService.getData(\r\n `${this.apiBaseUrl}/configurations/s3/downloadFileUrl/${fileName}`\r\n );\r\n }\r\n return httpRequest.pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Downloads file to AWS S3 using a presigned URL.\r\n * @return {Observable<any>}\r\n * @memberof FileUploadService\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n downloadFile(fileDownloadPresignedUrl: string): Observable<any> {\r\n return this.httpClient.get(fileDownloadPresignedUrl).pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((errorRes) => {\r\n throw errorRes;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Validates the total size of the files uploaded.\r\n * @param {(File | FileList)} files -The files to be validated.\r\n * @param {number} maxFileSize\r\n * @param {boolean} isMultiFileUpload\r\n * @return {boolean} -Returns true if the total size of files is within the specified limit, otherwise false.\r\n * @memberof FileUploadService\r\n */\r\n validateFileSize(\r\n files: File | FileList,\r\n maxFileSize: number,\r\n isMultiFileUpload: boolean\r\n ): boolean {\r\n if (isMultiFileUpload) {\r\n let totalSize = 0;\r\n Object.values(files).forEach((file: File) => {\r\n totalSize += file.size;\r\n });\r\n return totalSize / (1024 * 1024) <= maxFileSize;\r\n }\r\n return (files as File).size / (1024 * 1024) <= maxFileSize;\r\n }\r\n\r\n /**\r\n * Validates the file types of the uploaded files.\r\n * @param {(File | FileList)} files\r\n * @param {string[]} allowedFileTypes\r\n * @param {boolean} isMultiFileUpload\r\n * @return {boolean} -Returns true if all files have valid extensions, otherwise false.\r\n * @memberof FileUploadService\r\n */\r\n validateFileTypes(\r\n files: File | FileList,\r\n allowedFileTypes: string[],\r\n isMultiFileUpload: boolean\r\n ): boolean {\r\n const validateSingleFile = (file: File): boolean => {\r\n const fileExtension = this.getFileExtension(file.name);\r\n return allowedFileTypes?.includes(fileExtension);\r\n };\r\n if (isMultiFileUpload) {\r\n let allFilesValid = true;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Object.values(files)?.forEach((fileItem: any) => {\r\n if (!validateSingleFile(fileItem)) {\r\n allFilesValid = false;\r\n }\r\n });\r\n return allFilesValid;\r\n }\r\n return validateSingleFile(files as File);\r\n }\r\n\r\n /**\r\n * Extracts and returns the extension of a file from its name.\r\n * @private\r\n * @param {string} fileName\r\n * @return {string} -The file extension in lowercase.\r\n * @memberof FileUploadService\r\n */\r\n private getFileExtension(fileName: string): string {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n return fileName?.split('.').pop()!.toLowerCase();\r\n }\r\n /**\r\n * Delete the file from AWS S3 based on the given fileId along with deleteFileApiPath.\r\n * @return {Observable<DeleteFileResponse>}\r\n * @memberof FileUploadService\r\n */\r\n deleteFile(deleteFileApiPath: string): Observable<DeleteFileResponse> {\r\n return this.httpService\r\n .putData(`${this.apiBaseUrl}/${deleteFileApiPath}`, {})\r\n .pipe(\r\n map((response) => {\r\n return response;\r\n }),\r\n catchError((error) => {\r\n throw error;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof FileUploadService\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FileUploadService } from '../../services/file-upload.service';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\nimport { DownloadAttachment } from '../../models/download-file.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { saveAs } from 'file-saver';\r\nimport { AlertsService } from '@ieeesa-npm/utility';\r\nimport { AlertType, AlignType } from '@ieeesa-npm/models';\r\n\r\n@Component({\r\n selector: 'ieeesa-file-download',\r\n standalone: true,\r\n imports: [CommonModule, MatListModule, MatIconModule, IconButtonComponent],\r\n templateUrl: './file-download.component.html',\r\n styleUrls: ['./file-download.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FileDownloadComponent implements OnInit, OnDestroy {\r\n constants = constants;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n preSignedUrl!: string;\r\n fileName!: string;\r\n alignType = AlignType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() downloadFiles: File | FileList | any | DownloadAttachment[] = [];\r\n @Input() fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input() isPublicAPI?: boolean;\r\n @Input() domainUrl?: string;\r\n @Output() downloadSelectedFile = new EventEmitter<\r\n File | DownloadAttachment\r\n >();\r\n @Output() deleteSelectedFile = new EventEmitter<File | DownloadAttachment>();\r\n fileDeleteBtn = this.constants?.fileDownload?.buttons[0];\r\n @Input() apiBaseUrl!: string;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n private fileUploadService: FileUploadService,\r\n // eslint-disable-next-line no-unused-vars\r\n private alertService: AlertsService\r\n ) {}\r\n\r\n /**\r\n * Sets API base URL to file upload service\r\n * @memberof FileDownloadComponent\r\n */\r\n ngOnInit(): void {\r\n if (this.apiBaseUrl) {\r\n this.fileUploadService.setApiBaseUrl(this.apiBaseUrl);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the download AWS pre-signed URL from API on button click or emit the downloadSelectedFile if canDownloadFileInternally flg is true.\r\n * @param {File } file\r\n * @memberof FileDownloadedComponent\r\n */\r\n onDownloadFile(file: File | DownloadAttachment): void {\r\n if (this.fileDownloadAndDeleteConfig?.canDownloadFileInternally) {\r\n this.getFileDownloadPresignedUrls(file);\r\n } else {\r\n this.downloadSelectedFile.emit(file);\r\n }\r\n }\r\n /**\r\n * Retrieves pre-signed URL for downloading the selected file from Amazon S3 bucket.\r\n * @memberof FileDownloadedComponent\r\n */\r\n getFileDownloadPresignedUrls(file: File | DownloadAttachment): void {\r\n this.fileUploadService\r\n .getFileDownloadPresignedUrls(\r\n file,\r\n this.isPublicAPI,\r\n this.domainUrl,\r\n this.fileDownloadAndDeleteConfig?.downloadFileAPIUrl\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (response: any) => {\r\n if (response.body === 'string') {\r\n this.preSignedUrl = response.body;\r\n this.fileName = (file as File).name;\r\n } else {\r\n this.preSignedUrl = response.body.preSignedUrl;\r\n this.fileName = response.body.fileName;\r\n }\r\n this.downloadFileFromS3(this.preSignedUrl);\r\n },\r\n error: (error: Error) => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: error?.message || this.constants?.fileDownload?.message?.errors?.['ER1002'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Emits deleteSelectedFile event or deletes the selected file by calling deleteFile() if the file can be deleted internally.\r\n * @param {number} index\r\n * @param {File } file\r\n * @memberof FileDownloadedComponent\r\n */\r\n onDeleteFile(file: File | DownloadAttachment, index: number): void {\r\n if (this.fileDownloadAndDeleteConfig?.canDeleteFileInternally) {\r\n this.deleteFile(this.downloadFiles[index]?.attachmentId, index);\r\n } else {\r\n this.deleteSelectedFile.emit(file);\r\n }\r\n }\r\n /**\r\n * Deletes the file by given attachmentId, index.\r\n * @param {string} attachmentId\r\n * @param {number} index\r\n * @memberof UploadAttachmentsComponent\r\n */\r\n deleteFile(attachmentId: string, index: number): void {\r\n this.fileUploadService\r\n .deleteFile(\r\n `${this.fileDownloadAndDeleteConfig.deleteFileAPIUrl}${attachmentId}`\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line no-empty-function, @typescript-eslint/no-empty-function\r\n next: () => {\r\n this.downloadFiles.splice(index, 1);\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: any) => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: error?.message || this.constants?.fileDownload?.message?.errors?.['ER1002'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n });\r\n }\r\n /**\r\n * Returns unique identifier for the file list.\r\n * @param {number} index\r\n * @return {(number | string)}\r\n * @memberof FileDownloadComponent\r\n */\r\n trackByFn(index: number): number | string {\r\n return index;\r\n }\r\n /**\r\n * Cleans up resources when the component is destroyed.\r\n * @memberof FileDownloadComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * Download the file using generated presigned Url.\r\n * @param {string} fileDownloadPresignedUrl\r\n * @param {string} fileName\r\n * @memberof FileDownloadComponent\r\n */\r\n downloadFileFromS3(fileDownloadPresignedUrl: string): void {\r\n saveAs(fileDownloadPresignedUrl);\r\n }\r\n}\r\n","<div class=\"ieeesa-file-download\">\r\n <mat-list\r\n [ngClass]=\"\r\n fileDownloadAndDeleteConfig?.alignType === alignType.VERTICAL\r\n ? ''\r\n : 'ieeesa-file-download__align-horizontal'\r\n \"\r\n >\r\n <ng-container\r\n *ngFor=\"let item of downloadFiles; let index = index; trackBy: trackByFn\"\r\n >\r\n <mat-list-item\r\n [ngClass]=\"\r\n fileDownloadAndDeleteConfig?.alignType === alignType.VERTICAL\r\n ? ''\r\n : 'ieeesa-list-file-by-horizontal'\r\n \"\r\n >\r\n <button\r\n mat-button\r\n type=\"button\"\r\n [disabled]=\"!fileDownloadAndDeleteConfig?.isDownloadNeeded\"\r\n (click)=\"onDownloadFile(item)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-file-download__file-download-button\"\r\n >\r\n {{ item.fileName }}\r\n </button>\r\n <ieeesa-icon-button\r\n *ngIf=\"fileDownloadAndDeleteConfig?.isDeleteNeeded\"\r\n class=\"ieeesa-file-download--file-delete-button\"\r\n [iconButton]=\"fileDeleteBtn\"\r\n [isLabelNeeded]=\"false\"\r\n (iconButtonClick)=\"onDeleteFile(item, index)\"\r\n >\r\n </ieeesa-icon-button>\r\n </mat-list-item>\r\n </ng-container>\r\n </mat-list>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { FileUploadDirective } from '../../directives/file-upload/file-upload.directive';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { AllowedFileTypes } from '../../models/allowed-file-types.model';\r\nimport { FileUploadService } from '../../services/file-upload.service';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { AlignBrowsedFiles } from '../../models/align-browsed-files.model';\r\nimport { AlignType } from '@ieeesa-npm/models';\r\nimport { FileUploadStatus } from '../../models/file-upload-status.model';\r\nimport { FileDownloadComponent } from '../file-download/file-download.component';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\nimport { DownloadAttachment } from '../../models/download-file.model';\r\n/**\r\n * Provides functionality for uploading files to aws s3 bucket.\r\n * @export\r\n * @class FileUploadComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-file-upload',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n FormSupportTextComponent,\r\n MatProgressBarModule,\r\n FileUploadDirective,\r\n IconButtonComponent,\r\n FileDownloadComponent,\r\n ],\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FileUploadComponent implements OnInit {\r\n @ViewChild('fileField') fileField!: ElementRef;\r\n constants = constants;\r\n fileUploadLabel = this.constants?.fileUpload?.label;\r\n fileUploadAriaLabel = this.constants?.fileUpload?.ariaLabel;\r\n fileUploadIconUrl = this.constants?.fileUpload?.iconUrl;\r\n fileUploadBtn = this.constants?.fileUpload?.buttons[0];\r\n allowedFileTypeErrorMessage =\r\n this.constants?.fileUpload?.message?.error?.invalidFileFormat;\r\n @Input() maxFileSizeErrorMessage =\r\n this.constants?.fileUpload?.message?.error?.invalidFileSize;\r\n allowedFileTypesAndSizeText = '';\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n isValidFileType = false;\r\n isValidFileSize = false;\r\n isValidMaxFileUploadLimit = false;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n selectedFiles: FileList | File | any = [];\r\n selectedFileNames = '';\r\n isFormField = false;\r\n totalSize = 0;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n uploadedFiles: FileList | File | any = [];\r\n @Input() actionButtonAlign!: AlignType;\r\n alignmentType = AlignType;\r\n isUploadButtonDisabled = false;\r\n @Input() formControlName = 'fileUpload';\r\n @Input() isFileSelected = false;\r\n @Input() supportMessage!: string;\r\n @Input() allowedFileTypes: AllowedFileTypes[] = [];\r\n @Input() isMultiFileUpload = false;\r\n @Input() isUploadInProgress = false;\r\n @Input() fileUploadHeading!: string;\r\n @Input() isAllowAnyFileType = false;\r\n @Input() alignBrowsedFiles = AlignBrowsedFiles.DEFAULT;\r\n @Input() isUploadButtonNeeded = false;\r\n // Default maximum allowed upload file size is 2mb.\r\n @Input() maxUploadFileSize = 2;\r\n private uploadedSizeValue = 0;\r\n @Input() alignFileUploadErrorMessageTo = AlignType.BOTTOM;\r\n @Input() maxFilesUploadedOnce: number =\r\n this.constants?.fileUpload?.limit?.maxFilesUploadedOnce;\r\n @Input() maxFilesUploadLimitErrorMessage = '';\r\n private _fileUploadStatus!: FileUploadStatus;\r\n\r\n @Input() get fileUploadStatus(): FileUploadStatus {\r\n return this._fileUploadStatus;\r\n }\r\n set fileUploadStatus(value: FileUploadStatus) {\r\n this._fileUploadStatus = value;\r\n }\r\n\r\n @Input()\r\n get uploadedSize(): number {\r\n return this.uploadedSizeValue;\r\n }\r\n\r\n set uploadedSize(value: number) {\r\n this.uploadedSizeValue = value;\r\n }\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n @Output() uploadSelectedFiles = new EventEmitter<File | FileList>();\r\n @Output() downloadSelectedFile = new EventEmitter<\r\n File | DownloadAttachment\r\n >();\r\n apiBaseUrl!: string;\r\n selectedFileNamesCount = 0;\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n public fileUploadService: FileUploadService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n /**\r\n * Initializes component properties and retrieves configuration.\r\n * @memberof FileUploadComponent\r\n */\r\n ngOnInit(): void {\r\n this.isFormField = !!this.config;\r\n this.apiBaseUrl = this.fileUploadService.getApiBaseUrl();\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'fileUpload',\r\n FormControlType.FILE_UPLOAD\r\n );\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup('fileUpload');\r\n this.config.supportMessage =\r\n this.config?.supportMessage ?? this.supportMessage;\r\n this.isMultiFileUpload =\r\n this.config?.isMultiFileUpload ?? this.isMultiFileUpload;\r\n this.maxUploadFileSize =\r\n this.config?.maxUploadFileSize ?? this.maxUploadFileSize;\r\n this.allowedFileTypes =\r\n this.config?.allowedFileTypes ?? this.allowedFileTypes;\r\n this.isAllowAnyFileType =\r\n this.config?.isAllowAnyFileType ?? this.isAllowAnyFileType;\r\n this.alignBrowsedFiles =\r\n this.config?.alignBrowsedFiles ?? this.alignBrowsedFiles;\r\n this.isUploadButtonNeeded =\r\n this.config?.isUploadButtonNeeded ?? this.isUploadButtonNeeded;\r\n this.actionButtonAlign =\r\n this.config?.actionButtonAlign ?? this.actionButtonAlign;\r\n this.alignFileUploadErrorMessageTo =\r\n this.config?.alignFileUploadErrorMessageTo ??\r\n this.alignFileUploadErrorMessageTo;\r\n this.getAllowedFileFormatSizeMessage();\r\n this.fileUploadHeading =\r\n this.config?.fileUploadHeading ??\r\n this.fileUploadHeading ??\r\n this.fileUploadLabel.fileUpload;\r\n this.config.allowedFileTypeErrorMessage =\r\n this.config?.allowedFileTypeErrorMessage ??\r\n this.allowedFileTypeErrorMessage;\r\n this.config.maxFileSizeErrorMessage =\r\n this.config?.maxFileSizeErrorMessage ?? this.maxFileSizeErrorMessage;\r\n this.isFileSelected = this.config?.isFileSelected ?? this.isFileSelected;\r\n this.maxFilesUploadedOnce =\r\n this.config?.maxFilesUploadedOnce ?? this.maxFilesUploadedOnce;\r\n this.maxFilesUploadLimitErrorMessage =\r\n this.config?.maxFilesUploadLimitErrorMessage ??\r\n this.maxFilesUploadLimitErrorMessage;\r\n }\r\n /**\r\n * Formats allowed file format and size message in required format.\r\n * @memberof FileUploadComponent\r\n */\r\n getAllowedFileFormatSizeMessage(): void {\r\n const supportedFileFormatText = this.allowedFileTypes.join(', ');\r\n this.allowedFileTypesAndSizeText = `${this.fileUploadLabel?.allowedFileSize1}\r\n ${this.maxUploadFileSize}`;\r\n if (this.isMultiFileUpload) {\r\n this.allowedFileTypesAndSizeText += ` ${this.constants?.fileUpload?.label?.mb}`;\r\n }\r\n if (!this.isAllowAnyFileType) {\r\n this.allowedFileTypesAndSizeText += `${this.fileUploadLabel?.allowedFileSize2} ${this.fileUploadLabel?.allowedFileFormat} ${supportedFileFormatText}.`;\r\n }\r\n }\r\n /**\r\n * Handles the selected file(s) and emits FileUpload event emitter for uploading the file(s).\r\n * @param {(File | FileList)} file\r\n * @memberof FileUploadComponent\r\n */\r\n getFile(file: File | FileList): void {\r\n this.selectedFiles = [];\r\n this.selectedFileNames = '';\r\n this.fileUploadStatus = {\r\n alreadyExistsFiles: [],\r\n filesNameOfUploadFailed: [],\r\n noOfFilesUploadedSuccessfully: 0,\r\n isUploadingStart: false,\r\n uploadedFiles: this.fileUploadStatus?.uploadedFiles ?? [],\r\n };\r\n this.selectedFileNamesCount = 0;\r\n const fileUploadFormControl = this.group?.get(\r\n this.config?.controlName ?? 'fileUpload'\r\n );\r\n if (fileUploadFormControl) {\r\n fileUploadFormControl.markAsDirty();\r\n }\r\n if (this.isMultiFileUpload) {\r\n const isValid = this.validateFile(file);\r\n this.isFileSelected = isValid;\r\n if (isValid) {\r\n if (file) {\r\n Object.values(file).forEach((fileItem: File) => {\r\n this.selectedFiles?.push(fileItem);\r\n this.totalSize += fileItem.size;\r\n });\r\n }\r\n }\r\n\r\n if (this.selectedFiles?.length) {\r\n this.selectedFileNamesCount = this.selectedFiles.length;\r\n const selectedFilesNames: string[] = [];\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\r\n this.selectedFiles?.forEach((file: File, index: number) => {\r\n selectedFilesNames.push(file.name);\r\n });\r\n this.selectedFileNames = selectedFilesNames?.join(', ').toString();\r\n this.group\r\n .get(this.config?.controlName)\r\n ?.setValue(this.selectedFileNames);\r\n this.fileUploadBtn.disabled = false;\r\n if (this.isFormField)\r\n this.uploadSelectedFiles?.emit(this.selectedFiles);\r\n }\r\n } else {\r\n const fileItem = Object.values(file)[0];\r\n const isValid = this.validateFile(fileItem);\r\n if (isValid) {\r\n this.isFileSelected = isValid;\r\n this.selectedFileNames = fileItem.name;\r\n this.totalSize = fileItem.size;\r\n this.fileUploadService?.convertFileToByteArray(fileItem);\r\n this.group\r\n .get(this.config.controlName)\r\n ?.setValue(this.selectedFileNames);\r\n if (this.isFormField) this.uploadSelectedFiles.emit(fileItem);\r\n this.selectedFiles = file;\r\n this.fileUploadBtn.disabled = false;\r\n }\r\n }\r\n }\r\n /**\r\n * Validates the selected file(s) format and size.\r\n * @param {(File | FileList)} file\r\n * @return {boolean}\r\n * @memberof FileUploadComponent\r\n */\r\n validateFile(file: File | FileList): boolean {\r\n this.isValidFileType = !this.isAllowAnyFileType\r\n ? this.fileUploadService.validateFileTypes(\r\n file,\r\n this.allowedFileTypes,\r\n this.isMultiFileUpload\r\n )\r\n : true;\r\n if (this.isMultiFileUpload) {\r\n this.isValidMaxFileUploadLimit =\r\n Object.values(file).length <=\r\n this.constants?.fileUpload?.limit?.maxFilesUploadedOnce;\r\n if (!this.isValidMaxFileUploadLimit) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n maxFilesUploadLimitReached: true,\r\n });\r\n return false;\r\n }\r\n }\r\n if (!this.isValidFileType) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n invalidFileType: true,\r\n });\r\n return false;\r\n }\r\n this.isValidFileSize = this.fileUploadService.validateFileSize(\r\n file,\r\n this.maxUploadFileSize,\r\n this.isMultiFileUpload\r\n );\r\n if (!this.isValidFileSize) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n maxFileSize: true,\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Initiates the file upload process for independent file upload component.\r\n * @memberof FileUploadComponent\r\n */\r\n onUpload(): void {\r\n this.uploadSelectedFiles.emit(this.selectedFiles);\r\n if (this.fileUploadService?.getFileUploadStatus()) {\r\n this.uploadedFiles = this.selectedFiles;\r\n }\r\n }\r\n /**\r\n * Clears the form group control value of type input and resets other file upload properties.\r\n * @memberof FileUploadComponent\r\n */\r\n resetUpload(): void {\r\n this.fileUploadService.clearFileByteArray();\r\n this.uploadedFiles = [];\r\n this.isUploadInProgress = false;\r\n this.selectedFileNames = '';\r\n this.selectedFiles = [];\r\n this.isFileSelected = false;\r\n this.group.get(this.config?.controlName)?.setValue('');\r\n this.fileUploadBtn.disabled = true;\r\n this.selectedFileNamesCount = 0;\r\n }\r\n /**\r\n * Removes the selected file from the uploaded files list.\r\n * @param {number} index\r\n * @memberof FileUploadComponent\r\n */\r\n onDeleteFile(file: File, index: number): void {\r\n this.totalSize = 0;\r\n this.uploadedFiles.splice(index, 1);\r\n }\r\n /**\r\n * For tab key keydown event it passes event and restricts other keys from keyboard.\r\n * @param {KeyboardEvent} event -Keydown event object.\r\n * @memberof FileUploadComponent\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (event.key !== 'Tab') event.preventDefault();\r\n }\r\n /**\r\n * Emits downloadSelectedFile event.\r\n * @memberof FileUploadComponent\r\n */\r\n downloadFile(file: File | DownloadAttachment): void {\r\n this.downloadSelectedFile.emit(file);\r\n }\r\n /**\r\n * Returns unique identifier for the file list.\r\n * @param {number} index\r\n * @return {(number | string)}\r\n * @memberof FileUploadComponent\r\n */\r\n trackByFn(index: number): number | string {\r\n return index;\r\n }\r\n /**\r\n * Triggers and opens the file browse window when the Browse button is clicked.\r\n * @memberof FileUploadComponent\r\n */\r\n fileClick(): void {\r\n this.fileField.nativeElement.click();\r\n }\r\n /**\r\n * Returns the failed file names with comma separation.\r\n * @param {string[]} fileNames\r\n * @return {*} {string}\r\n * @memberof FileUploadComponent\r\n */\r\n displayFileNames(fileNames: string[]): string {\r\n return fileNames.length ? fileNames.join(',') : '';\r\n }\r\n /**\r\n * Removes the unselected file from the browsed or selected files and emits uploadSelectedFiles event with the selected files.\r\n * @param {number} index\r\n * @memberof FileUploadComponent\r\n */\r\n removeFile(index: number): void {\r\n this.selectedFiles.splice(index, 1);\r\n const fileNames: string[] = this.selectedFileNames.split(',');\r\n fileNames.splice(index, 1);\r\n this.selectedFileNames = fileNames.join(',');\r\n this.uploadSelectedFiles.emit(this.selectedFiles);\r\n this.selectedFileNamesCount--;\r\n if (this.selectedFiles.length === 0) {\r\n this.resetUpload();\r\n this.fileUploadStatus.noOfFilesUploadedSuccessfully = 0;\r\n this.fileUploadStatus.filesNameOfUploadFailed = [];\r\n this.fileUploadStatus.alreadyExistsFiles = [];\r\n }\r\n }\r\n /**\r\n * Enables or disables the file upload button.\r\n * @param {boolean} enable\r\n * @memberof FileUploadComponent\r\n */\r\n canEnableUploadButton(enable: boolean): void {\r\n this.isUploadButtonDisabled = enable;\r\n }\r\n /**\r\n * Based on isMultiFileUpload flag return files to download.\r\n * @memberof FileUploadComponent\r\n */\r\n getFilesToDownload(): DownloadAttachment[] {\r\n if (this.isMultiFileUpload) {\r\n return this.fileUploadStatus.uploadedFiles;\r\n }\r\n return this.uploadedFiles;\r\n }\r\n /**\r\n * TrackByFunction is called for each file in the collection and return a unique identifier for that file.\r\n * @param {number} index\r\n * @param {File} file\r\n * @return {File}\r\n * @memberof FileUploadComponent\r\n */\r\n trackByFunc(index: number, file: File): File {\r\n return file;\r\n }\r\n /**\r\n * Sets empty value to file form control once it is clicked.\r\n * @param {Event} event\r\n * @memberof FileUploadComponent\r\n */\r\n setEmptyValue(event: Event) {\r\n (event.target as HTMLInputElement).value = '';\r\n }\r\n /**\r\n * Removes the file from selectedFiles once the file uploaded successfully to AWS S3.\r\n * @param {File} file\r\n * @memberof FileUploadComponent\r\n */\r\n removeSelectedFileInUploadedFiles(fileName: string): void {\r\n const index = this.selectedFiles.findIndex(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (selectedFile: any) => selectedFile.name === fileName\r\n );\r\n this.selectedFiles.splice(index, 1);\r\n }\r\n /**\r\n * Returns the count of files selected for the upload.\r\n * @return {number}\r\n * @memberof FileUploadComponent\r\n */\r\n getSelectedFileCount(): number {\r\n return this.selectedFileNamesCount;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n class=\"ieeesa-file-upload\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-file-upload__label-left'\r\n : 'ieeesa-file-upload__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-file-upload__label\">{{\r\n config.label\r\n }}</mat-label>\r\n <ieeesa-file-download\r\n [fileDownloadAndDeleteConfig]=\"fileDownloadAndDeleteConfig\"\r\n [apiBaseUrl]=\"apiBaseUrl\"\r\n [downloadFiles]=\"getFilesToDownload()\"\r\n (downloadSelectedFile)=\"downloadFile($event)\"\r\n ></ieeesa-file-download>\r\n <div\r\n class=\"ieeesa-file-upload__upload p-4\"\r\n ieeesaFileUpload\r\n (fileDropped)=\"getFile($event)\"\r\n >\r\n <p class=\"ieeesa-file-upload__upload__heading m-0 ieeesa-label-lg-bold-16\">\r\n {{ fileUploadHeading }}\r\n </p>\r\n <div class=\"ieeesa-file-upload__upload__browse-files\">\r\n <button\r\n mat-button\r\n (click)=\"fileClick()\"\r\n class=\"ieeesa-file-upload__browse-btn mat-tertiary-button\"\r\n [attr.aria-label]=\"fileUploadAriaLabel.browseFiles\"\r\n type=\"button\"\r\n [disabled]=\"fileUploadStatus?.isUploadingStart\"\r\n >\r\n {{ fileUploadLabel.browseFiles }}\r\n </button>\r\n <ng-container *ngIf=\"isMultiFileUpload\">\r\n <input\r\n type=\"file\"\r\n #fileField\r\n (change)=\"getFile($any($event).target.files)\"\r\n hidden\r\n [accept]=\"allowedFileTypes\"\r\n [multiple]=\"true\"\r\n [disabled]=\"fileUploadStatus?.isUploadingStart\"\r\n (click)=\"setEmptyValue($event)\"\r\n [ngClass]=\"'ieeesa-file-input'\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isMultiFileUpload\">\r\n <input\r\n type=\"file\"\r\n #fileField\r\n (change)=\"getFile($any($event).target.files)\"\r\n hidden\r\n [accept]=\"allowedFileTypes\"\r\n [disabled]=\"fileUploadStatus?.isUploadingStart\"\r\n (click)=\"setEmptyValue($event)\"\r\n [ngClass]=\"'ieeesa-file-input'\"\r\n />\r\n </ng-container>\r\n\r\n <p\r\n class=\"ieeesa-file-upload__allowed-file-text m-0 ieeesa-label-md-14\"\r\n [attr.aria-label]=\"allowedFileTypesAndSizeText\"\r\n >\r\n {{ allowedFileTypesAndSizeText }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-file-upload__upload-wrapper d-flex\"\r\n *ngIf=\"isFileSelected\"\r\n >\r\n <ng-container [ngSwitch]=\"alignBrowsedFiles\">\r\n <ng-container *ngSwitchCase=\"'default'\">\r\n <mat-form-field>\r\n <input\r\n class=\"ieeesa-file-upload__upload-wrapper__input-field ieeesa-body-lg-16\"\r\n type=\"text\"\r\n value=\"selectedFileNames\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n [attr.aria-label]=\"\r\n config.ariaLabel ?? fileUploadAriaLabel.fileUploadInput\r\n \"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n autocomplete=\"off\"\r\n (keydown)=\"onKeyDown($event)\"\r\n matInput\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-file-upload__upload-wrapper--clear-icon-btn\"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"fileUploadAriaLabel.removeFileIcon\"\r\n (click)=\"resetUpload()\"\r\n >\r\n <i\r\n class=\"fa-regular fa-circle-xmark ieeesa-input-field-upload__icon--clear\"\r\n ></i>\r\n </button>\r\n </mat-form-field>\r\n <ieeesa-icon-button\r\n class=\"ieeesa-file-upload__upload-wrapper--upload-btn d-flex align-items-center\"\r\n [iconButton]=\"fileUploadBtn\"\r\n [isLabelNeeded]=\"false\"\r\n (iconButtonClick)=\"onUpload()\"\r\n *ngIf=\"!isFormField\"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'bottom'\">\r\n <div class=\"ieeesa-display-browsed-files-bottom\">\r\n <p class=\"ieeesa-file-upload__progress__text\">\r\n {{\r\n fileUploadStatus.noOfFilesUploadedSuccessfully +\r\n \" \" +\r\n fileUploadLabel?.of +\r\n \" \" +\r\n getSelectedFileCount() +\r\n \" \" +\r\n fileUploadLabel?.filesUploaded\r\n }}\r\n </p>\r\n <ng-container>\r\n <p\r\n class=\"d-flex pt-1 m-0 ieeesa-label-md-14 align-items-center ieeesa-display-selected-files\"\r\n *ngFor=\"\r\n let file of selectedFiles;\r\n let i = index;\r\n trackBy: trackByFunc\r\n \"\r\n >\r\n {{ file?.name }}\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-file-upload__upload-wrapper--clear-icon-btn\"\r\n matSuffix\r\n mat-icon-button\r\n [attr.aria-label]=\"fileUploadAriaLabel.removeFileIcon\"\r\n (click)=\"removeFile(i)\"\r\n >\r\n <i\r\n class=\"fa-regular fa-circle-xmark ieeesa-input-field-upload__icon--clear\"\r\n ></i>\r\n </button>\r\n </p>\r\n </ng-container>\r\n <p\r\n *ngIf=\"fileUploadStatus?.filesNameOfUploadFailed?.length\"\r\n class=\"ieeesa-file-upload__error__text\"\r\n >\r\n {{\r\n fileUploadLabel?.uploadFor +\r\n \" \" +\r\n displayFileNames(fileUploadStatus.filesNameOfUploadFailed) +\r\n \" \" +\r\n fileUploadLabel?.uploadErrorMsg\r\n }}\r\n </p>\r\n <p\r\n *ngIf=\"fileUploadStatus?.alreadyExistsFiles?.length\"\r\n class=\"ieeesa-file-upload__error__text\"\r\n >\r\n {{\r\n displayFileNames(fileUploadStatus.alreadyExistsFiles) +\r\n \" \" +\r\n fileUploadLabel?.fileAlreadyExists\r\n }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"!isFormField\">\r\n <div class=\"ieeesa-file-upload__progress\" *ngIf=\"isUploadInProgress\">\r\n <p class=\"ieeesa-file-upload__progress__text\">\r\n {{ fileUploadLabel?.uploadProgress }}\r\n </p>\r\n <mat-progress-bar\r\n class=\"ieeesa-file-upload__progress--bar\"\r\n mode=\"determinate\"\r\n [value]=\"uploadedSize\"\r\n ></mat-progress-bar>\r\n </div>\r\n </ng-container>\r\n <ieeesa-form-error\r\n *ngIf=\"alignFileUploadErrorMessageTo === alignmentType.MIDDLE\"\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-error>\r\n <div\r\n *ngIf=\"isUploadButtonNeeded && isFileSelected\"\r\n [ngClass]=\"{\r\n 'justify-content-end': actionButtonAlign === alignmentType.LEFT,\r\n 'justify-content-center': actionButtonAlign === alignmentType.MIDDLE,\r\n 'justify-content-start': actionButtonAlign === alignmentType.RIGHT,\r\n }\"\r\n >\r\n <button\r\n type=\"submit\"\r\n mat-button\r\n class=\"mat-primary-button ieeesa-dynamic-form__actions--right-btn\"\r\n [disabled]=\"\r\n !isFileSelected ||\r\n fileUploadStatus.isUploadingStart ||\r\n fileUploadStatus.noOfFilesUploadedSuccessfully > 0\r\n \"\r\n >\r\n {{ fileUploadLabel?.upload }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<ieeesa-form-error\r\n *ngIf=\"alignFileUploadErrorMessageTo === alignmentType.BOTTOM\"\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n></ieeesa-form-error>\r\n<ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n></ieeesa-form-support-text>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum ColorFormat {\r\n hex = 'hex',\r\n rgba = 'rgba',\r\n hsla = 'hsla'\r\n}\r\nexport enum ColorsAnimation {\r\n popup = 'popup',\r\n slidein = 'slide-in'\r\n}\r\nexport interface PaletteColor {\r\n name: string;\r\n hexCode: string;\r\n}","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxColorsModule, NgxColorsTriggerDirective } from 'ngx-colors';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport {\r\n ColorFormat,\r\n ColorsAnimation,\r\n PaletteColor,\r\n} from '../../models/color-format.model';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport * as constants from '../../assets/constants.json';\r\n@Component({\r\n selector: 'ieeesa-color-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n NgxColorsModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n ],\r\n templateUrl: './color-picker.component.html',\r\n styleUrls: ['./color-picker.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ColorPickerComponent implements OnInit, OnDestroy {\r\n @ViewChild(NgxColorsTriggerDirective, { static: true })\r\n colorPickerDirective!: NgxColorsTriggerDirective;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n colorPickerTexts: any = constants?.colorPicker;\r\n paletteColors: PaletteColor[] = this.colorPickerTexts?.paletteColors;\r\n paletteContainer!: HTMLElement;\r\n group!: FormGroup;\r\n config!: FieldConfig;\r\n @Output() colorPickerChange = new EventEmitter<string>();\r\n @Output() colorPickerSliderChange = new EventEmitter<string>();\r\n @Input() defaultColor!: string;\r\n canShowPalette = false;\r\n @Input() palette: string[] = this.paletteColors?.map(\r\n (color: PaletteColor) => color.hexCode\r\n );\r\n @Input() overlayClassName = 'ieeesa-color-picker__overlay';\r\n @Input() colorFormat = ColorFormat.hex;\r\n @Input() colorAnimation = ColorsAnimation.popup;\r\n @Input() formControlName = 'colorPicker';\r\n @Input() paletteSelectLabel = this.colorPickerTexts?.label?.select;\r\n @Input() paletteCancelLabel = this.colorPickerTexts?.label?.cancel;\r\n @Input() colorPickerLabel!: string;\r\n @Input() isColorCodeLabelNeeded = true;\r\n @Input() isArrowIconNeeded = true;\r\n @Input() canHideTextInput = false;\r\n @Input() canHideColorPicker = false;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private elementRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n ngOnInit() {\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.COLOR_PICKER\r\n );\r\n if (this.config) {\r\n this.colorPickerLabel = this.config?.label ?? this.colorPickerLabel;\r\n this.palette = this.config?.palette ?? this.palette;\r\n this.defaultColor = this.config?.defaultColor ?? this.defaultColor;\r\n this.colorFormat = this.config?.colorFormat ?? this.colorFormat;\r\n this.overlayClassName =\r\n this.config?.overlayClassName ?? this.overlayClassName;\r\n this.isColorCodeLabelNeeded =\r\n this.config?.isColorCodeLabelNeeded ?? this.isColorCodeLabelNeeded;\r\n this.isArrowIconNeeded =\r\n this.config?.isArrowIconNeeded ?? this.isArrowIconNeeded;\r\n this.canHideTextInput =\r\n this.config?.canHideTextInput ?? this.canHideTextInput;\r\n this.canHideColorPicker =\r\n this.config?.canHideColorPicker ?? this.canHideColorPicker;\r\n }\r\n this.group.get(this.config.controlName)?.setValue(this.defaultColor);\r\n }\r\n /**\r\n * Sets the color to form group control.\r\n * @memberof ColorPickerComponent\r\n * @param {string} color\r\n * @returns {void}\r\n */\r\n inputChange(color: string): void {\r\n this.defaultColor = color;\r\n this.group?.get(this.config?.controlName)?.setValue(color);\r\n this.colorPickerChange.emit(color);\r\n }\r\n /**\r\n * Sets canShowPalette to true when the palette is opened.\r\n * @memberof ColorPickerComponent\r\n * @returns {void}\r\n */\r\n onOpenPalette(): void {\r\n this.canShowPalette = true;\r\n this.colorPickerEventHandlers(true);\r\n }\r\n /**\r\n * Sets canShowPalette to false when the palette is closed.\r\n * @memberof ColorPickerComponent\r\n * @returns {void}\r\n */\r\n onClosePalette(): void {\r\n this.canShowPalette = false;\r\n this.elementRef?.nativeElement\r\n ?.querySelector('.ieeesa-color-picker__toggle-icon')\r\n ?.focus();\r\n }\r\n /**\r\n * Gets triggered when the the alpha, hue or Lightness sliders are changed\r\n * @param {string} color\r\n */\r\n onSliderChange(color: string) {\r\n this.colorPickerSliderChange.emit(color);\r\n }\r\n /**\r\n * Toggles the palette panel.\r\n * @memberof ColorPickerComponent\r\n * @returns {void}\r\n */\r\n togglePalette(): void {\r\n this.canShowPalette = !this.canShowPalette;\r\n if (this.canShowPalette) this.colorPickerDirective?.openPanel();\r\n else this.colorPickerDirective?.closePanel();\r\n }\r\n /**\r\n * Listening the color picker events to achieve the accessibility for color palette.\r\n * canAddListener false remove the event listeners which we calls in ngDestroy,\r\n * canAddListener true adding the event listeners while opening the color palette.\r\n * @memberof ColorPickerComponent\r\n * @param {boolean} canAddListener\r\n * @returns {void}\r\n */\r\n colorPickerEventHandlers(canAddListener: boolean): void {\r\n this.paletteContainer =\r\n this.colorPickerDirective?.panelRef?.location?.nativeElement?.querySelector(\r\n 'ngx-colors-panel .opened'\r\n ) as HTMLElement;\r\n setTimeout(() => {\r\n if (this.paletteContainer) {\r\n this.paletteContainer.role = 'application';\r\n this.paletteContainer.tabIndex = 0;\r\n this.paletteContainer.ariaLabel = this.colorPickerTexts?.ariaLabel?.palette;\r\n const colorPallettes = this.paletteContainer.querySelectorAll(\r\n '.colors .circle.wrapper.color'\r\n );\r\n const moreColorsArrowButton = this.paletteContainer.querySelector(\r\n '.colors .circle.button'\r\n ) as HTMLElement;\r\n const lastElement = this.paletteContainer.querySelector(\r\n '.g-input input'\r\n ) as HTMLElement;\r\n if (colorPallettes?.length) {\r\n const colorPallettesList = Array.from(\r\n colorPallettes\r\n ) as HTMLElement[];\r\n colorPallettesList.push(moreColorsArrowButton);\r\n colorPallettesList.push(lastElement);\r\n const keyDownHandlerForColorPalettes = (event: KeyboardEvent) => {\r\n this.colorPickerKeyDownHandler(colorPallettesList, event);\r\n };\r\n colorPallettesList?.forEach((element: HTMLElement, index) => {\r\n if (index !== colorPallettesList?.length - 1) {\r\n element.tabIndex = 0;\r\n element.role = 'button';\r\n element.ariaLabel = this.paletteColors[index]?.name;\r\n } else {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.hexCodeInput;\r\n }\r\n if (index === 0) element.focus();\r\n if (index === colorPallettesList?.length - 2) {\r\n element.ariaLabel = this.colorPickerTexts?.ariaLabel?.next;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const clickHandlerForMoreColorsButton = (event: any) => {\r\n setTimeout(() => {\r\n const list =\r\n this.paletteContainer?.querySelector('.nav-wrapper')?.childNodes;\r\n const gradientButtons: HTMLElement[] = [];\r\n list?.forEach((element) =>\r\n gradientButtons.push(element as HTMLElement)\r\n );\r\n if (gradientButtons?.length) {\r\n const lastElement = this.paletteContainer.querySelector(\r\n '.g-input input'\r\n ) as HTMLElement;\r\n gradientButtons.push(lastElement);\r\n gradientButtons?.forEach(\r\n (element: HTMLElement, index: number) => {\r\n if (index === 0) {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.back;\r\n element.focus();\r\n const clickHandlerForGradientPreviousButton = (\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n event: any\r\n ) => {\r\n this.onOpenPalette();\r\n event.preventDefault();\r\n };\r\n const keyDownHandlerForGradientButtons = (\r\n event: KeyboardEvent\r\n ) => {\r\n this.colorPickerKeyDownHandler(\r\n gradientButtons,\r\n event\r\n );\r\n };\r\n element?.removeEventListener(\r\n 'click',\r\n clickHandlerForGradientPreviousButton\r\n );\r\n element?.removeEventListener(\r\n 'keydown',\r\n clickHandlerForGradientPreviousButton\r\n );\r\n if (canAddListener) {\r\n element?.addEventListener(\r\n 'click',\r\n clickHandlerForGradientPreviousButton\r\n );\r\n element?.addEventListener(\r\n 'keydown',\r\n keyDownHandlerForGradientButtons\r\n );\r\n }\r\n }\r\n element.role = 'button';\r\n element.tabIndex = 0;\r\n if (\r\n element?.innerText?.trim() ===\r\n this.colorPickerTexts?.label?.select\r\n ) {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.select;\r\n element?.classList?.add('select');\r\n } else if (\r\n element?.innerText?.trim() ===\r\n this.colorPickerTexts?.label?.cancel\r\n ) {\r\n element.ariaLabel =\r\n this.colorPickerTexts?.ariaLabel?.cancel;\r\n element?.classList?.add('cancel');\r\n }\r\n if (index === gradientButtons?.length - 1) {\r\n element.role = '';\r\n }\r\n }\r\n );\r\n }\r\n event.preventDefault();\r\n }, 250);\r\n };\r\n element.removeEventListener(\r\n 'click',\r\n clickHandlerForMoreColorsButton\r\n );\r\n if (canAddListener) {\r\n element.addEventListener(\r\n 'click',\r\n clickHandlerForMoreColorsButton\r\n );\r\n }\r\n }\r\n element.removeEventListener(\r\n 'keydown',\r\n keyDownHandlerForColorPalettes\r\n );\r\n if (canAddListener) {\r\n element.addEventListener(\r\n 'keydown',\r\n keyDownHandlerForColorPalettes\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }, 250);\r\n }\r\n /**\r\n * Listens keydown event handles to make the palette focusable.\r\n * @memberof ColorPickerComponent\r\n * @param {HTMLElement[]} colorPallettesList\r\n * @param {KeyboardEvent} event\r\n * @returns {void}\r\n */\r\n colorPickerKeyDownHandler(\r\n colorPallettesList: HTMLElement[],\r\n event: KeyboardEvent\r\n ): void {\r\n const firstElement = colorPallettesList[0];\r\n const lastElement = colorPallettesList[colorPallettesList.length - 1];\r\n if (event.code === 'Tab') {\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstElement) {\r\n lastElement.focus();\r\n event.preventDefault();\r\n }\r\n } else if (document.activeElement === lastElement) {\r\n if (this.paletteContainer?.querySelector('.nav-wrapper')) {\r\n (\r\n this.paletteContainer?.querySelector('.nav-wrapper')\r\n ?.childNodes[0] as HTMLElement\r\n ).focus();\r\n } else firstElement.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n if (event.code === 'Space' || event.code === 'Enter') {\r\n const targetElement = event.target as HTMLElement;\r\n if (targetElement?.classList?.contains('button'))\r\n targetElement?.dispatchEvent(new Event('click'));\r\n else targetElement?.firstChild?.dispatchEvent(new Event('click'));\r\n event.preventDefault();\r\n }\r\n }\r\n /**\r\n * Removing the active listeners while component get destroyed.\r\n */\r\n ngOnDestroy() {\r\n this.colorPickerEventHandlers(false);\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [ariaDescription]=\"colorPickerTexts?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.ariaLabel?.colorPicker\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n/**\r\n * Checks the text is truncated\r\n * @export\r\n * @class TextTruncatedDirective\r\n */\r\n@Directive({\r\n selector: '[matTooltip][ieeesaTextTruncated]',\r\n standalone: true,\r\n})\r\nexport class TextTruncatedDirective {\r\n @Input() elementClassNameToAddTooltip!: string;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public tooltip: MatTooltip,\r\n // eslint-disable-next-line no-unused-vars\r\n public elementRef: ElementRef<HTMLElement> // eslint-disable-next-line no-empty-function\r\n ) {}\r\n @HostListener('mouseenter') mouseOver() {\r\n this.showTooltip();\r\n }\r\n @HostListener('mouseleave') mouseOut() {\r\n this.hideTooltip();\r\n }\r\n @HostListener('touchstart') touchStart() {\r\n this.showTooltip();\r\n }\r\n @HostListener('touchend') touchEnd() {\r\n this.hideTooltip();\r\n }\r\n /**\r\n * Shows the tooltip based on text overflow exists or not\r\n * @memberof TextTruncatedDirective\r\n */\r\n showTooltip() {\r\n const element = this.elementClassNameToAddTooltip\r\n ? (this.elementRef?.nativeElement.querySelector(\r\n this.elementClassNameToAddTooltip\r\n ) as HTMLElement)\r\n : this.elementRef?.nativeElement;\r\n this.tooltip.disabled = element?.scrollWidth <= element?.clientWidth;\r\n }\r\n /**\r\n * Disables the tooltip\r\n * @memberof TextTruncatedDirective\r\n */\r\n hideTooltip() {\r\n this.tooltip.disabled = true;\r\n }\r\n}\r\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatAutocompleteModule,\r\n MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n MatAutocompleteTrigger,\r\n} from '@angular/material/autocomplete';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { map, takeUntil, debounceTime } from 'rxjs/operators';\r\nimport * as autocompleteConstInfo from '../../assets/constants.json';\r\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { SelectOption } from '@ieeesa-npm/models';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { TextTruncatedDirective } from '../../directives/text-truncated/text-truncated.directive';\r\n/**\r\n * MultiSelectAutocompleteComponent allows to search the option(s) from the list and select the option(s) from the autocomplete search results.\r\n * @class MultiSelectAutocompleteComponent\r\n * @implements {OnInit}\r\n * @implements {FormField}\r\n * @implements {OnDestroy}\r\n * @implements {AfterViewInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-multi-select-autocomplete',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n MatOptionModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatChipsModule,\r\n MatTooltipModule,\r\n TextTruncatedDirective,\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n useValue: {\r\n overlayPanelClass: 'ieeesa-multi-select-autocomplete-overlay-panel',\r\n },\r\n },\r\n ],\r\n templateUrl: './multi-select-autocomplete.component.html',\r\n styleUrls: ['./multi-select-autocomplete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MultiSelectAutocompleteComponent\r\n implements OnInit, FormField, OnDestroy, AfterViewInit\r\n{\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n config!: FieldConfig;\r\n group!: FormGroup;\r\n selectedOptions: SelectOption[] = [];\r\n autoCompleteOptionList!: AutoCompleteOption[];\r\n /**\r\n * Sets the options for multi select autocomplete.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n @Input()\r\n set multiSelectAutoCompleteOptions(value: AutoCompleteOption[]) {\r\n this.autoCompleteOptionList = value;\r\n }\r\n /**\r\n * Returns the autocomplete options list.\r\n * @readonly\r\n * @type {AutoCompleteOption[]}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n get multiSelectAutoCompleteOptions(): AutoCompleteOption[] {\r\n return this.autoCompleteOptionList;\r\n }\r\n @Output() multiSelectAutoCompleteSearchValue = new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteClearSearchValue =\r\n new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteOptionsSelected = new EventEmitter<\r\n AutoCompleteOption[]\r\n >();\r\n @ViewChild('multiSelectAutoComplete') multiSelectAutoComplete!: ElementRef;\r\n @ViewChild('autocompleteTrigger') matACTrigger!: MatAutocompleteTrigger;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n autocompleteConstInfo: any = autocompleteConstInfo;\r\n removeIconURL =\r\n this.autocompleteConstInfo?.multiSelectAutoComplete?.icons?.remove;\r\n clearAllIconURL =\r\n this.autocompleteConstInfo?.multiSelectAutoComplete?.icons?.clearAll;\r\n clearAll =\r\n this.autocompleteConstInfo?.multiSelectAutoComplete?.label.clearAll;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService,\r\n // eslint-disable-next-line no-unused-vars\r\n private readonly changeDetectorRef: ChangeDetectorRef // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to initialize components instance properties.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n ngOnInit(): void {\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n 'multiSelectAutocomplete',\r\n FormControlType.AUTO_COMPLETE\r\n );\r\n this.group =\r\n this.group ??\r\n this.formUtilityService.getFormGroup('multiSelectAutocomplete');\r\n this.multiSelectAutoCompleteOptions =\r\n this.config?.multiSelectAutoCompleteOptions ??\r\n this.multiSelectAutoCompleteOptions;\r\n if (this.config?.value) this.selectedOptions = this.config?.value;\r\n }\r\n\r\n /**\r\n * Initialize the form control change event once the form control is ready on ngAfterViewInit by calling onValueChanges method.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.selectedOptions?.length)\r\n this.group?.get(this.config?.controlName)?.setErrors(null);\r\n this.onValueChanges();\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Emits an multiSelectAutoCompleteSearchValue change event when the value is changed and value is greater than minCharToSearch or equal to zero.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n onValueChanges(): void {\r\n // Search is driven off the raw keyup stream (not the reactive control's\r\n // valueChanges) so type-ahead keeps working even when the control uses\r\n // updateOn: 'blur' (which defers valueChanges until blur). Below the min\r\n // character count we emit the clear-search event; at/above it we emit the\r\n // search value so the parent fetches options.\r\n fromEvent(this.multiSelectAutoComplete?.nativeElement, 'keyup')\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n map((event: any) => event?.target?.value ?? ''),\r\n debounceTime(this.autocompleteConstInfo?.autocomplete?.debounceTime)\r\n )\r\n .subscribe((text: string) => {\r\n const minChar =\r\n this.autocompleteConstInfo?.autocomplete?.minCharToSearch;\r\n if (text === '') {\r\n this.handleFieldError();\r\n this.multiSelectAutoCompleteClearSearchValue.emit(text);\r\n } else if (text.length < minChar) {\r\n this.multiSelectAutoCompleteClearSearchValue.emit(text);\r\n } else {\r\n this.multiSelectAutoCompleteSearchValue.emit(text);\r\n }\r\n });\r\n\r\n // valueChanges still handles the empty-reset case (e.g. programmatic clears\r\n // and the blur-flushed control value) to re-sync field validity.\r\n this.group?.controls[this.config?.controlName]?.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((value: string | SelectOption[]) => {\r\n // Only react to the empty-string transition (user cleared the typed\r\n // text). Do NOT also match an empty array: handleFieldError() itself\r\n // calls setValue(this.selectedOptions) — which is [] when empty — and\r\n // would re-enter this branch and recurse until a stack overflow. The\r\n // validators already handle the empty-array case.\r\n if (value === '') {\r\n this.handleFieldError();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handles field error by setting the appropriate form control errors.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n handleFieldError(): void {\r\n this.group?.controls[this.config?.controlName]?.setValue(\r\n this.selectedOptions\r\n );\r\n if (this.selectedOptions?.length) {\r\n this.group?.get(this.config?.controlName)?.setErrors({\r\n required: false,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Adds a newly entered option to the selectedOptions array.\r\n * @param {*} event -The event containing the input and value.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n add(event: MatChipInputEvent): void {\r\n if (this.autoCompleteOptionList.length) return;\r\n const control = this.group?.get(this.config?.controlName);\r\n const input = event?.chipInput?.inputElement;\r\n const value = (event?.value || '').trim();\r\n if (value.length === 0) return;\r\n // Validate the raw token before accepting it. With updateOn: 'blur' the\r\n // control's errors are not computed while the input is focused, so we must\r\n // flush validation against the typed value (rather than read stale/absent\r\n // control.errors) — otherwise out-of-bounds free text would be added and\r\n // then skipped by skipWhenArray once it becomes a selection.\r\n control?.setValue(value, { emitEvent: false });\r\n control?.updateValueAndValidity({ emitEvent: false });\r\n const minLength = control?.errors?.['minlength']?.requiredLength;\r\n const maxLength = control?.errors?.['maxlength']?.requiredLength;\r\n if (\r\n (value.length >= minLength && value.length <= maxLength) ||\r\n (minLength === undefined && maxLength === undefined)\r\n ) {\r\n this.selectedOptions.push({ id: '', name: value });\r\n if (input) input.value = '';\r\n // Also reset the reactive control so the search text is fully cleared\r\n // after an Enter-added org (parity with the dropdown-select path).\r\n this.clearSearchInput();\r\n this.formatSelectedOption(this.selectedOptions);\r\n }\r\n }\r\n /**\r\n * Removes a selected option from the selectedOptions array.\r\n * @param {SelectOption} removedOption -The option to remove.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n onOptionRemoved(removedOption: SelectOption): void {\r\n const index = this.selectedOptions?.findIndex(\r\n (option: SelectOption) => option.id === removedOption.id\r\n );\r\n if (index >= 0) {\r\n this.selectedOptions?.splice(index, 1);\r\n }\r\n if (this.selectedOptions?.length === 0) {\r\n this.group.value[this.config?.controlName] = '';\r\n this.group?.controls[this.config?.controlName].setValue('');\r\n this.selectedOptions = [];\r\n this.autoCompleteOptionList = [];\r\n this.handleFieldError();\r\n }\r\n this.formatSelectedOption(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * Handles the selection of an autocomplete option.\r\n * @param {AutoCompleteOption} option -The selected autocomplete option.\r\n * @return {AutoCompleteOption}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange(option: any): AutoCompleteOption {\r\n const value = option?.value;\r\n if (this.isCheckboxSelected(value)) {\r\n this.onOptionRemoved(value);\r\n } else {\r\n this.selectedOptions.push(value);\r\n }\r\n this.formatSelectedOption(this.selectedOptions);\r\n requestAnimationFrame(() => {\r\n // Clear the typed search term after selection so the input is empty and\r\n // ready for the next search, while the selection remains as a chip.\r\n // Done here (inside rAF) so it runs after Material's [displayWith] writes\r\n // the option's display value back into the input on optionSelected.\r\n this.clearSearchInput();\r\n this.multiSelectAutoComplete?.nativeElement.focus();\r\n });\r\n // Drop the previously fetched options so the dropdown does not re-open with\r\n // stale results when the user clicks back into the now-empty input. Deferred\r\n // to a macrotask so it runs AFTER Material has fully finished processing this\r\n // selection (clearing it earlier desyncs the option/checkbox state and drops\r\n // the chip). The list repopulates from the parent search on the next keystroke.\r\n setTimeout(() => {\r\n this.autoCompleteOptionList = [];\r\n });\r\n return value;\r\n }\r\n\r\n /**\r\n * Clears the typeahead search text from both the reactive form control and the\r\n * native input element without touching the selected chips. Uses\r\n * `emitEvent: false` so the valueChanges search stream is not re-triggered.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n private clearSearchInput(): void {\r\n // Clear only the visible search text in the native input. The reactive\r\n // control's value must stay bound to the selected options (chips), so we do\r\n // NOT set it to '' here — that would drop the selection and re-trigger the\r\n // required validator. handleFieldError() re-syncs the control value to\r\n // selectedOptions and clears the required error when chips exist.\r\n if (this.multiSelectAutoComplete?.nativeElement) {\r\n this.multiSelectAutoComplete.nativeElement.value = '';\r\n }\r\n this.handleFieldError();\r\n }\r\n\r\n /**\r\n * Fires when focus leaves the search input (click outside / tab away). If text\r\n * was typed but never committed as a chip (i.e. nothing was picked from the\r\n * dropdown), clear it so stale search text is not left behind. Deferred with a\r\n * short timeout so that if the blur was caused by clicking a dropdown option,\r\n * onChange commits the selection first (and has already cleared the text),\r\n * making this a no-op in that case. Clicking back into the same field does not\r\n * blur it, so the text is preserved while the user is still editing.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n onInputBlur(): void {\r\n setTimeout(() => {\r\n const hasLeftoverText =\r\n !!this.multiSelectAutoComplete?.nativeElement?.value?.trim();\r\n if (hasLeftoverText) {\r\n this.clearSearchInput();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Formats the selected options and emits the multiSelectAutoCompleteOptionSelected event.\r\n * @param {SelectOption[]} selectedOptions -Array of selected options.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n formatSelectedOption(selectedOptions: SelectOption[]) {\r\n const formattedOptions = selectedOptions?.map((option) => {\r\n return {\r\n id: option.id,\r\n name: option.name,\r\n };\r\n });\r\n this.multiSelectAutoCompleteOptionsSelected?.emit(formattedOptions);\r\n }\r\n\r\n /**\r\n * Displays the name of the option\r\n * @param {AutoCompleteOption} option\r\n * @return {*} {string}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n displayOptionName(option: AutoCompleteOption): string {\r\n return option?.name ? option.name : '';\r\n }\r\n\r\n /**\r\n * Tracks the option by its index or id.\r\n * @param {number} index\r\n * @param {SelectOption} option\r\n * @return {*} {(number | string)}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n trackByFn(index: number, option: SelectOption): number | string {\r\n return option.id;\r\n }\r\n\r\n /**\r\n * Checks if the checkbox is selected.\r\n * @param {AutoCompleteOption} option\r\n * @return {*} {boolean}\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n isCheckboxSelected(option: AutoCompleteOption): boolean {\r\n return this.selectedOptions?.some((item) => item.id === option.id);\r\n }\r\n\r\n /**\r\n * Clears all selected options.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n clearSelections(): void {\r\n this.group.value[this.config?.controlName] = '';\r\n this.group?.controls[this.config?.controlName].setValue('');\r\n this.selectedOptions = [];\r\n this.autoCompleteOptionList = [];\r\n this.formatSelectedOption(this.selectedOptions);\r\n this.handleFieldError();\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof MultiSelectAutocompleteComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-multi-select-autocomplete\"\r\n [formGroup]=\"group\"\r\n *ngIf=\"group\"\r\n [ngClass]=\"\r\n config.isLabelAlignedLeft\r\n ? 'ieeesa-multi-select-autocomplete-field__label-left'\r\n : 'ieeesa-multi-select-autocomplete-field__label-top'\r\n \"\r\n>\r\n <mat-label class=\"ieeesa-body-sm-14 ieeesa-multi-select-autocomplete__label\"\r\n >{{ config.label }}</mat-label\r\n >\r\n <mat-form-field\r\n class=\"ieeesa-multi-select-autocomplete__mat-form-field\"\r\n appearance=\"outline\"\r\n >\r\n <mat-chip-grid\r\n #chipGrid\r\n [attr.aria-label]=\"autocompleteConstInfo?.multiSelectAutoComplete?.ariaLabel?.selectedOptions\"\r\n >\r\n <mat-chip-row\r\n *ngFor=\"let option of selectedOptions; trackBy: trackByFn\"\r\n [attr.aria-label]=\"option?.name\"\r\n [removable]=\"true\"\r\n (removed)=\"onOptionRemoved(option)\"\r\n >\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"option.name\"\r\n class=\"ieeesa-label-lg-bold-16 m-0\"\r\n >\r\n {{ option.name }}\r\n </p>\r\n <button\r\n matChipRemove\r\n [attr.aria-label]=\"autocompleteConstInfo?.multiSelectAutoComplete?.ariaLabel?.removeOption + option.name\"\r\n >\r\n <svg class=\"ieeesa-chip__svg-avatar\" matChipAvatar>\r\n <use [attr.xlink:href]=\"removeIconURL\"></use>\r\n </svg>\r\n </button>\r\n </mat-chip-row>\r\n </mat-chip-grid>\r\n <input\r\n matInput\r\n class=\"ieeesa-multi-select-autocomplete__input ieeesa-title-sm-16\"\r\n [matAutocomplete]=\"matAutocomplete\"\r\n [placeholder]=\"config.placeholder ?? ''\"\r\n [formControlName]=\"config.controlName\"\r\n [name]=\"config.controlName\"\r\n [attr.aria-label]=\"config.ariaLabel\"\r\n [aria-describedby]=\"config.ariaDescribedById ?? ''\"\r\n #multiSelectAutoComplete\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n (blur)=\"onInputBlur()\"\r\n [matChipInputFor]=\"chipGrid\"\r\n />\r\n <mat-autocomplete\r\n #matAutocomplete=\"matAutocomplete\"\r\n (optionSelected)=\"onChange($event.option)\"\r\n [displayWith]=\"displayOptionName\"\r\n class=\"ieeesa-multi-select-autocomplete__autocomplete-list\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of autoCompleteOptionList; trackBy: trackByFn\"\r\n [value]=\"option\"\r\n >\r\n <mat-checkbox color=\"primary\" [checked]=\"isCheckboxSelected(option)\">\r\n </mat-checkbox>\r\n {{ option.name }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n [matTooltip]=\"clearAll\"\r\n [attr.aria-label]=\"autocompleteConstInfo.ariaLabel.clear\"\r\n *ngIf=\"selectedOptions.length > 0\"\r\n (click)=\"clearSelections()\"\r\n >\r\n <svg class=\"ieeesa-multi-select-autocomplete__svg-clear-all\">\r\n <use [attr.xlink:href]=\"clearAllIconURL\"></use>\r\n </svg>\r\n </button>\r\n </mat-form-field>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ieeesaObserveDomChange]',\r\n standalone: true,\r\n})\r\nexport class ObserveDomChangeDirective implements OnInit, OnDestroy {\r\n observer!: MutationObserver;\r\n @Input() isSubTreeAttributeNeeded = false;\r\n @Input() observedElementClassName!: string;\r\n @Output()\r\n public domChange = new EventEmitter();\r\n @Output() domNodesChange = new EventEmitter<MutationRecord[]>();\r\n\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * Observes the dom changes and emits dom change event.\r\n * @memberof ObserveDomChangeDirective\r\n */\r\n ngOnInit(): void {\r\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations?.forEach((mutation: MutationRecord) =>\r\n this.domChange?.emit(mutation)\r\n );\r\n this.domNodesChange.emit(mutations);\r\n });\r\n this.observer?.observe(\r\n this.observedElementClassName\r\n ? this.elementRef?.nativeElement.querySelector(\r\n this.observedElementClassName\r\n )\r\n : this.elementRef?.nativeElement,\r\n {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: this.isSubTreeAttributeNeeded,\r\n }\r\n );\r\n }\r\n /**\r\n * Disconnects the observer when the directive is destroyed.\r\n * @memberof ObserveDomChangeDirective\r\n */\r\n ngOnDestroy(): void {\r\n this.observer?.disconnect();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport {\r\n EditorConfig,\r\n NgxSimpleTextEditorModule,\r\n ST_BUTTONS,\r\n} from 'ngx-simple-text-editor';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { FormUtilityService } from '../../services/form-utility.service';\r\nimport { FormErrorComponent } from '../form-error/form-error.component';\r\nimport { FormSupportTextComponent } from '../form-support-text/form-support-text.component';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { ObserveDomChangeDirective } from '../../directives/observe-dom-change/observe-dom-change.directive';\r\n\r\n@Component({\r\n selector: 'ieeesa-rich-text-editor',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NgxSimpleTextEditorModule,\r\n MatFormFieldModule,\r\n ReactiveFormsModule,\r\n FormErrorComponent,\r\n FormSupportTextComponent,\r\n ObserveDomChangeDirective,\r\n ],\r\n templateUrl: './rich-text-editor.component.html',\r\n styleUrls: ['./rich-text-editor.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class RichTextEditorComponent implements OnInit, AfterViewInit {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n richTextEditorTexts: any = constants?.richTextEditor;\r\n group!: FormGroup;\r\n config!: FieldConfig;\r\n contentElementClassName = '.st-area';\r\n @ViewChild('editor') rtEditor!: ElementRef;\r\n private editorContentValue = '';\r\n @Input() set value(value: string) {\r\n this.editorContentValue = value;\r\n if (this.group)\r\n this.group.get(this.config.controlName)?.setValue(this.value);\r\n }\r\n get value(): string {\r\n return this.editorContentValue;\r\n }\r\n @Input() editorLabel = this.richTextEditorTexts?.label?.editor;\r\n @Input() formControlName = 'richTextEditor';\r\n @Input() isEditorLabelNeeded = true;\r\n private editorConfigInfo: EditorConfig = {\r\n placeholder: '',\r\n buttons: [],\r\n };\r\n /**\r\n * Sets the editor config info.\r\n * @param {EditorConfig} editorConfig\r\n * @memberof RichTextEditorComponent\r\n */\r\n @Input() set editorConfig(editorConfig: EditorConfig) {\r\n this.editorConfigInfo = editorConfig;\r\n if (editorConfig?.buttons?.length) {\r\n this.editorConfigInfo.buttons = editorConfig?.buttons;\r\n this.setToolbarButtonType();\r\n } else {\r\n this.editorConfigInfo.buttons = ST_BUTTONS;\r\n }\r\n }\r\n /**\r\n * Returns the editor config info.\r\n * @returns {EditorConfig}\r\n * @memberof RichTextEditorComponent\r\n */\r\n get editorConfig(): EditorConfig {\r\n return this.editorConfigInfo;\r\n }\r\n @Output() richTextEditorContentChange = new EventEmitter<string>();\r\n colorPickerInput!: HTMLInputElement;\r\n colorPickerButton!: HTMLElement;\r\n operatingSystemName!: string;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private elementRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private renderer: Renderer2,\r\n // eslint-disable-next-line no-unused-vars\r\n private formUtilityService: FormUtilityService // eslint-disable-next-line no-empty-function\r\n ) {}\r\n /**\r\n * Initializes the form group and config details.\r\n * @memberof RichTextEditorComponent\r\n */\r\n ngOnInit(): void {\r\n this.group =\r\n this.group ?? this.formUtilityService.getFormGroup(this.formControlName);\r\n this.config =\r\n this.config ??\r\n this.formUtilityService.getFormFieldConfig(\r\n this.formControlName,\r\n FormControlType.RICH_TEXT_EDITOR\r\n );\r\n if (this.config) {\r\n this.editorLabel = this.config?.label ?? this.editorLabel;\r\n this.value = this.config?.value ?? this.value;\r\n this.editorConfig.buttons = this.config.editorConfig?.buttons?.length\r\n ? this.config.editorConfig?.buttons\r\n : this.editorConfig?.buttons;\r\n }\r\n this.group.get(this.config.controlName)?.setValue(this.value);\r\n this.operatingSystemName = this.getOperatingSystemName();\r\n }\r\n /**\r\n * Sets RTE toolbar buttons button type to button.\r\n * @returns {void}\r\n * @memberof RichTextEditorComponent\r\n */\r\n ngAfterViewInit(): void {\r\n this.setToolbarButtonType();\r\n if (['Mac OS', 'iOS']?.includes(this.operatingSystemName)) {\r\n this.setColorPickerInputStyle();\r\n }\r\n }\r\n\r\n /**\r\n * Sets the height and width of the input field color to open the color picker in Safari.\r\n * @memberof RichTextEditorComponent\r\n * @returns {void}\r\n */\r\n setColorPickerInputStyle(): void {\r\n this.colorPickerInput?.removeAttribute('onmousedown');\r\n this.colorPickerInput?.removeAttribute('onselectstart');\r\n this.colorPickerButton = this.elementRef?.nativeElement?.querySelector(\r\n 'st-color-picker button'\r\n ) as HTMLButtonElement;\r\n if (this.colorPickerButton) {\r\n this.renderer?.setStyle(this.colorPickerButton, 'position', 'relative');\r\n this.renderer?.setStyle(this.colorPickerButton, 'width', '130px');\r\n }\r\n if (this.colorPickerInput) {\r\n this.renderer?.setStyle(this.colorPickerInput, 'width', '130px');\r\n this.renderer?.setStyle(this.colorPickerInput, 'height', '34px');\r\n this.renderer?.setStyle(this.colorPickerInput, 'opacity', '0');\r\n this.renderer?.setStyle(this.colorPickerInput, 'position', 'absolute');\r\n this.renderer?.setStyle(this.colorPickerInput, 'left', '0');\r\n this.renderer?.setStyle(this.colorPickerInput, 'top', '0');\r\n }\r\n const paletteIcon =\r\n this.elementRef?.nativeElement?.querySelector('st-color-picker i');\r\n if (paletteIcon) {\r\n this.renderer?.setStyle(paletteIcon, 'position', 'absolute');\r\n this.renderer?.setStyle(paletteIcon, 'left', '90px');\r\n this.renderer?.setStyle(paletteIcon, 'top', '12px');\r\n this.renderer?.setStyle(paletteIcon, 'padding-left', '10px');\r\n }\r\n }\r\n\r\n /**\r\n * Sets RTE toolbar buttons button type to button to prevent form submit event when the toolbar buttons clicked.\r\n */\r\n setToolbarButtonType(): void {\r\n const editorToolbar = this.elementRef?.nativeElement?.querySelectorAll(\r\n '.st-toolbar button'\r\n ) as HTMLElement[];\r\n editorToolbar?.forEach((toolBarButton: HTMLElement) => {\r\n this.renderer?.setAttribute(toolBarButton, 'type', 'button');\r\n });\r\n this.colorPickerInput = this.elementRef?.nativeElement?.querySelector(\r\n '.st-toolbar input.st-color-picker'\r\n ) as HTMLInputElement;\r\n if (this.colorPickerInput)\r\n this.renderer?.setAttribute(\r\n this.colorPickerInput,\r\n 'aria-label',\r\n this.richTextEditorTexts?.ariaLabel?.colorPicker\r\n );\r\n }\r\n /**\r\n * Emits the typed editor content to consuming components.\r\n * @returns {void}\r\n * @memberof RichTextEditorComponent\r\n */\r\n onRichTextEditorContentChange(): void {\r\n const richTextEditorElement = this.elementRef?.nativeElement.querySelector(\r\n this.contentElementClassName\r\n ) as HTMLElement;\r\n if (richTextEditorElement)\r\n this.richTextEditorContentChange.emit(richTextEditorElement.innerHTML);\r\n }\r\n /**\r\n * Gets the operating system name of the client machine.\r\n * @memberof RichTextEditorComponent\r\n * @returns {string}\r\n */\r\n getOperatingSystemName(): string {\r\n const userAgent = window.navigator.userAgent,\r\n platform =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window.navigator as any)?.userAgentData?.platform ||\r\n window.navigator.platform,\r\n macosPlatforms = ['macOS', 'Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\r\n let os = '';\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (/Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n return os;\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-rich-text-editor__label-left'\r\n : 'ieeesa-rich-text-editor__label-top'\r\n \"\r\n class=\"ieeesa-rich-text-editor\"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-rich-text-editor__label\"\r\n *ngIf=\"isEditorLabelNeeded\"\r\n >{{ editorLabel }}</mat-label\r\n >\r\n <st-editor\r\n [config]=\"editorConfig\"\r\n [ariaLabel]=\"richTextEditorTexts?.ariaLabel.editor\"\r\n [formControlName]=\"config.controlName\"\r\n ieeesaObserveDomChange \r\n [observedElementClassName]=\"contentElementClassName\" \r\n [isSubTreeAttributeNeeded]=\"true\"\r\n (domNodesChange)=\"onRichTextEditorContentChange()\"\r\n ></st-editor>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"></ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n","import {\r\n ComponentRef,\r\n Directive,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormField } from '../../models/form-field.model';\r\nimport { InputComponent } from '../../components/input/input.component';\r\nimport { AutocompleteComponent } from '../../components/autocomplete/autocomplete.component';\r\nimport { CheckboxComponent } from '../../components/checkbox/checkbox.component';\r\nimport { DatePickerComponent } from '../../components/date-picker/date-picker.component';\r\nimport { RadioComponent } from '../../components/radio/radio.component';\r\nimport { SearchComponent } from '../../components/search/search.component';\r\nimport { SelectComponent } from '../../components/select/select.component';\r\nimport { TextAreaComponent } from '../../components/text-area/text-area.component';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { CheckboxOption } from '@ieeesa-npm/models';\r\nimport { AddFormGroupComponent } from '../../components/add-form-group/add-form-group.component';\r\nimport { TimePickerComponent } from '../../components/time-picker/time-picker.component';\r\nimport { SelectedDate } from '../../models/selected-date.model';\r\nimport { SelectedTime } from '../../models/selected-time.model';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\nimport { SlideToggleComponent } from '../../components/slide-toggle/slide-toggle.component';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\nimport { FileUploadComponent } from '../../components/file-upload/file-upload.component';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\nimport { ColorPickerComponent } from '../../components/color-picker/color-picker.component';\r\nimport { RadioOption } from '../../models/radio-option.model';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\nimport { MultiSelectAutocompleteComponent } from '../../components/multi-select-autocomplete/multi-select-autocomplete.component';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { RichTextEditorComponent } from '../../components/rich-text-editor/rich-text-editor.component';\r\nimport { FileUploadStatus } from '../../models/file-upload-status.model';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\n\r\nconst components: { [type: string]: Type<FormField> } = {\r\n [FormControlType.INPUT]: InputComponent,\r\n [FormControlType.TEXT_AREA]: TextAreaComponent,\r\n [FormControlType.SELECT]: SelectComponent,\r\n [FormControlType.SEARCH]: SearchComponent,\r\n [FormControlType.DATE]: DatePickerComponent,\r\n [FormControlType.CHECKBOX]: CheckboxComponent,\r\n [FormControlType.RADIO]: RadioComponent,\r\n [FormControlType.AUTO_COMPLETE]: AutocompleteComponent,\r\n [FormControlType.ADD_FORM_GROUP]: AddFormGroupComponent,\r\n [FormControlType.TIME_PICKER]: TimePickerComponent,\r\n [FormControlType.SLIDE_TOGGLE]: SlideToggleComponent,\r\n [FormControlType.COLOR_PICKER]: ColorPickerComponent,\r\n [FormControlType.FILE_UPLOAD]: FileUploadComponent,\r\n [FormControlType.MULTI_SELECT_AUTO_COMPLETE]:\r\n MultiSelectAutocompleteComponent,\r\n [FormControlType.RICH_TEXT_EDITOR]: RichTextEditorComponent,\r\n};\r\n\r\n/**\r\n * Provides the implementation of DynamicFormFieldDirective which hosts and creates the form fields components dynamically.\r\n * @export\r\n * @class DynamicFormFieldDirective\r\n * @implements {FormField}\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Directive({\r\n selector: '[ieeesaDynamicFormField]',\r\n standalone: true,\r\n})\r\nexport class DynamicFormFieldDirective implements FormField, OnInit, OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n private _config!: FieldConfig;\r\n private _group!: FormGroup;\r\n /**\r\n * Sets the form field configuration\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n set config(value: FieldConfig) {\r\n this._config = value;\r\n if (this.component) {\r\n this.loadComponent();\r\n }\r\n }\r\n get config(): FieldConfig {\r\n return this._config;\r\n }\r\n\r\n /**\r\n * Sets the form group\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n set group(value: FormGroup) {\r\n if (this.component?.instance) {\r\n this.component.instance.group = value;\r\n }\r\n this._group = value;\r\n }\r\n get group(): FormGroup {\r\n return this._group;\r\n }\r\n private _fileUploadStatus!: FileUploadStatus;\r\n\r\n @Input() get fileUploadStatus(): FileUploadStatus {\r\n return this._fileUploadStatus;\r\n }\r\n set fileUploadStatus(value: FileUploadStatus) {\r\n if (this.component?.instance) {\r\n this.component.instance.fileUploadStatus = value;\r\n }\r\n this._fileUploadStatus = value;\r\n }\r\n\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n if (this.component?.instance) {\r\n this.component.instance.fileUploadStatus = value;\r\n }\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _submitResponse!: any;\r\n /**\r\n * Sets the submit response of form submit event\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set submitResponse(value: any) {\r\n if (this.component?.instance) {\r\n this.component.instance.submitResponse = value;\r\n }\r\n this._submitResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get submitResponse(): any {\r\n return this._submitResponse;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _searchResponse!: any;\r\n /**\r\n * Sets the form search response of form search apply.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set searchResponse(value: any) {\r\n if (this.component?.instance) {\r\n this.component.instance.searchResponse = value;\r\n }\r\n this._searchResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get searchResponse(): any {\r\n return this._searchResponse;\r\n }\r\n\r\n @Output() formSearchApply = new EventEmitter<Event>();\r\n @Output() formDropdownSelected = new EventEmitter<Event>();\r\n @Output() formDateSelected = new EventEmitter<SelectedDate>();\r\n @Output() formTimeSelected = new EventEmitter<SelectedTime>();\r\n @Output() formSelectedDateRange = new EventEmitter<{\r\n startDate: string;\r\n endDate: string;\r\n }>();\r\n @Output() formSelectSearch = new EventEmitter<{\r\n searchEvent: Event;\r\n controlName: string;\r\n }>();\r\n @Output() formAutoCompleteSearch = new EventEmitter<string>();\r\n @Output() autoCompleteClearSearchValue = new EventEmitter<string>();\r\n @Output() autoCompleteOptionSelected = new EventEmitter<Event>();\r\n @Output() formCheckboxSelection = new EventEmitter<CheckboxOption>();\r\n @Output() formInputValue = new EventEmitter<string | number>();\r\n @Output() addFormGroup = new EventEmitter<Event>();\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n @Output() formSlideToggleChange = new EventEmitter<SlideToggleOption>();\r\n @Output() dropdownOpenedChange = new EventEmitter<SelectOpenedState>();\r\n @Output() formColorPickerChange = new EventEmitter<string>();\r\n @Output() formFileUpload = new EventEmitter<File | FileList>();\r\n @Output() formRadioOptionSelected = new EventEmitter<RadioOption>();\r\n @Output() ctaButtonClick = new EventEmitter<IconButton>();\r\n @Output() formMultiSelectAutoCompleteSearch = new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteClearSearchValue =\r\n new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteOptionsSelected = new EventEmitter<\r\n AutoCompleteOption[]\r\n >();\r\n @Output() formRichTextEditorContentChange = new EventEmitter<string>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n component!: ComponentRef<any>;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public container: ViewContainerRef) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to call loadComponents method.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n ngOnInit(): void {\r\n this.loadComponent();\r\n }\r\n\r\n /**\r\n * Creates the component dynamically and initializes the instance properties of created component, also handles the created component events.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n loadComponent(): void {\r\n if (!components[this.config?.type]) {\r\n const supportedTypes = Object.keys(components).join(', ');\r\n throw new Error(\r\n `Trying to use an unsupported type (${this.config.type}).\r\n Supported types: ${supportedTypes}`\r\n );\r\n }\r\n this.component = this.container.createComponent(\r\n components[this.config?.type]\r\n );\r\n if (this.component?.instance) {\r\n this.component.instance.config = this.config;\r\n this.component.instance.group = this.group;\r\n this.component.instance.submitResponse = this.submitResponse;\r\n this.component.instance.searchResponse = this.searchResponse;\r\n if (this.config.type === FormControlType.FILE_UPLOAD) {\r\n this.component.instance.fileUploadStatus = this.fileUploadStatus;\r\n this.component.instance.fileDownloadAndDeleteConfig = this.fileDownloadAndDeleteConfig;\r\n }\r\n if (this.config.type === FormControlType.SEARCH) {\r\n this.component.instance.searchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.formSearchApply.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.CHECKBOX) {\r\n this.component.instance.checkboxSelection\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: CheckboxOption) => {\r\n this.formCheckboxSelection.emit(event);\r\n });\r\n this.component.instance.ctaButtonClick\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: IconButton) => {\r\n this.ctaButtonClick.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.SELECT) {\r\n this.component.instance.optionSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.formDropdownSelected.emit(event);\r\n });\r\n this.component.instance.optionSearched\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.formSelectSearch.emit({\r\n searchEvent: event,\r\n controlName: this.config.controlName,\r\n });\r\n });\r\n this.component.instance.dropdownOpenedChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: SelectOpenedState) => {\r\n this.dropdownOpenedChange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.DATE) {\r\n this.component.instance.selectedDate\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formDateSelected.emit({\r\n date: event,\r\n controlName: this.config.controlName,\r\n });\r\n });\r\n this.component.instance.selectedDateRange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: { startDate: string; endDate: string }) => {\r\n this.formSelectedDateRange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.AUTO_COMPLETE) {\r\n this.component.instance.autoCompleteSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formAutoCompleteSearch.emit(event);\r\n });\r\n this.component.instance.autoCompleteClearSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.autoCompleteClearSearchValue.emit(event);\r\n });\r\n this.component.instance.autoCompleteOptionSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: Event) => {\r\n this.autoCompleteOptionSelected.emit(event);\r\n });\r\n } else if (\r\n this.config.type === FormControlType.MULTI_SELECT_AUTO_COMPLETE\r\n ) {\r\n this.component.instance.multiSelectAutoCompleteSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formMultiSelectAutoCompleteSearch.emit(event);\r\n });\r\n this.component.instance.multiSelectAutoCompleteClearSearchValue\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.multiSelectAutoCompleteClearSearchValue.emit(event);\r\n });\r\n this.component.instance.multiSelectAutoCompleteOptionsSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: AutoCompleteOption[]) => {\r\n this.multiSelectAutoCompleteOptionsSelected.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.TIME_PICKER) {\r\n this.component.instance.formTimeSelected\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formTimeSelected.emit({\r\n time: event,\r\n controlName: this.component.instance.config.controlName,\r\n });\r\n });\r\n } else if (this.config.type === FormControlType.INPUT) {\r\n this.component.instance.inputValueChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string | number) => {\r\n this.formInputValue.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.ADD_FORM_GROUP) {\r\n this.component.instance.addFormGroup\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((event: Event) => {\r\n this.addFormGroup.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.TEXT_AREA) {\r\n this.component?.instance?.supportTextLinkClick\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: LinkEventEmitType) => {\r\n this.supportTextLinkClick.emit(event);\r\n });\r\n this.component?.instance?.inputValueChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formInputValue.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.SLIDE_TOGGLE) {\r\n this.component.instance.slideToggleChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: SlideToggleOption) => {\r\n this.formSlideToggleChange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.COLOR_PICKER) {\r\n this.component.instance.colorPickerChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formColorPickerChange.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.FILE_UPLOAD) {\r\n this.component.instance.uploadSelectedFiles\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: File | FileList) => {\r\n this.formFileUpload.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.RADIO) {\r\n this.component.instance.selectedRadioOption\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: RadioOption) => {\r\n this.formRadioOptionSelected.emit(event);\r\n });\r\n } else if (this.config.type === FormControlType.RICH_TEXT_EDITOR) {\r\n this.component.instance.richTextEditorContentChange\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((event: string) => {\r\n this.formRichTextEditorContentChange.emit(event);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.\r\n * @memberof DynamicFormFieldDirective\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n/**\r\n * Directive used to set the focus of first invalid field of the form when the form is submitted\r\n * @export\r\n * @class FocusInvalidFormFieldDirective\r\n */\r\n@Directive({\r\n selector: '[ieeesaFocusInvalidFormField]',\r\n standalone: true,\r\n})\r\nexport class FocusInvalidFormFieldDirective {\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n constructor(private el: ElementRef) {}\r\n /**\r\n * Listens to the ngSubmit event and apply focus to first invalid form field\r\n * @memberof FocusInvalidFormFieldDirective\r\n */\r\n @HostListener('ngSubmit') submitForm() {\r\n const invalidElement = this.el.nativeElement.querySelector(\r\n '.ieeesa-dynamic-form__form-field input.ng-invalid,.ieeesa-dynamic-form__form-field mat-select.ng-invalid, .ieeesa-dynamic-form__form-field text-area.ng-invalid, .ieeesa-dynamic-form__form-field mat-checkbox.ng-invalid, .ieeesa-dynamic-form__form-field mat-radio-button.ng-invalid'\r\n ) as HTMLElement;\r\n invalidElement?.focus();\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n ViewChildren,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {\r\n FormArray,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { FormModel } from '../../models/form.model';\r\nimport { FieldConfig } from '../../models/field-config.model';\r\nimport { FormGrid } from '../../models/form-grid.model';\r\nimport { DynamicFormFieldDirective } from '../../directives/dynamic-form-field/dynamic-form-field.directive';\r\nimport { AlignType, IconButton, CheckboxOption } from '@ieeesa-npm/models';\r\nimport { FocusInvalidFormFieldDirective } from '../../directives/focus-invalid-form-field/focus-invalid-form-field.directive';\r\nimport { FormControlType } from '../../models/form-control-types.model';\r\nimport { SelectedDate } from '../../models/selected-date.model';\r\nimport { SelectedTime } from '../../models/selected-time.model';\r\nimport { LinkEventEmitType } from '../../models/event-emit-type.model';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\nimport { RadioOption } from '../../models/radio-option.model';\r\nimport { AutoCompleteOption } from '../../models/autocomplete-option.model';\r\nimport { TextTruncatedDirective } from '../../directives/text-truncated/text-truncated.directive';\r\nimport { FileUploadStatus } from '../../models/file-upload-status.model';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\n\r\n/**\r\n * Creates a reactive form dynamically based on the passed form field configuration and handles the form events.\r\n * @export\r\n * @class DynamicFormComponent\r\n * @implements {OnInit}\r\n * @implements {AfterContentInit}\r\n */\r\n@Component({\r\n exportAs: 'dynamicForm',\r\n selector: 'ieeesa-dynamic-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n DynamicFormFieldDirective,\r\n MatButtonModule,\r\n ScrollingModule,\r\n FocusInvalidFormFieldDirective,\r\n TextTruncatedDirective,\r\n ],\r\n templateUrl: './dynamic-form.component.html',\r\n styleUrls: ['./dynamic-form.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DynamicFormComponent\r\n implements OnInit, AfterContentInit, AfterViewInit\r\n{\r\n @ViewChildren(DynamicFormFieldDirective)\r\n formFields!: QueryList<DynamicFormFieldDirective>;\r\n private _formGroups!: FormModel;\r\n /**\r\n * FormGroups passed an an input and which contains configuration information of every form fields.\r\n * @memberof DynamicFormComponent\r\n */\r\n @Input()\r\n set formGroups(value: FormModel) {\r\n this._formGroups = value;\r\n this.createFormGroupArray();\r\n }\r\n get formGroups(): FormModel {\r\n return this._formGroups;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _submitResponse!: any;\r\n /**\r\n * Sets submit response on form submit\r\n * @memberof DynamicFormComponent\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set submitResponse(value: any) {\r\n this._submitResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get submitResponse(): any {\r\n return this._submitResponse;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private _searchResponse!: any;\r\n /**\r\n * Sets search response on form search event\r\n * @memberof DynamicFormComponent\r\n */\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set searchResponse(value: any) {\r\n this._searchResponse = value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get searchResponse(): any {\r\n return this._searchResponse;\r\n }\r\n private _fileUploadStatus!: FileUploadStatus;\r\n\r\n @Input() get fileUploadStatus(): FileUploadStatus {\r\n return this._fileUploadStatus;\r\n }\r\n set fileUploadStatus(value: FileUploadStatus) {\r\n this._fileUploadStatus = value;\r\n }\r\n @Input() colWidth!: FormGrid;\r\n @Input() isLegendVisible!: boolean;\r\n @Input() rightButtonLabel!: string;\r\n @Input() leftButtonLabel!: string;\r\n @Input() isSubmitButtonDisabled = false;\r\n @Input() isLeftButtonDisabled = false;\r\n @Input() isLeftButtonNeeded = false;\r\n @Input() isRightButtonNeeded = true;\r\n @Input() actionButtonAlign!: AlignType;\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n alignmentType = AlignType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formSubmit: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formChange: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formInput: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formLeftButtonClicked: EventEmitter<any> = new EventEmitter<any>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formSearchApply: EventEmitter<any> = new EventEmitter<Event>();\r\n @Output() formGroupsReference = new EventEmitter<FormGroup[]>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() dropdownChange: EventEmitter<any> = new EventEmitter<Event>();\r\n @Output() formCheckboxSelection = new EventEmitter<CheckboxOption>();\r\n @Output() formDateSelected = new EventEmitter<SelectedDate>();\r\n @Output() formSelectSearch = new EventEmitter<{\r\n searchEvent: Event;\r\n controlName: string;\r\n }>();\r\n @Output() formControlChange = new EventEmitter<Event>();\r\n @Output() formAutoCompleteSearch: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() formAutoCompleteClearSearchValue: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() autoCompleteOptionSelected = new EventEmitter<FormGroup[]>();\r\n @Output() formAfterContentInit = new EventEmitter<FormGroup[]>();\r\n @Output() formSelectedDateRange = new EventEmitter<{\r\n startDate: string;\r\n endDate: string;\r\n }>();\r\n @Output() addFormGroup = new EventEmitter<Event>();\r\n @Output() formTimeSelected = new EventEmitter<SelectedTime>();\r\n @Output() supportTextLinkClick = new EventEmitter<LinkEventEmitType>();\r\n @Output() formSlideToggleChange = new EventEmitter<SlideToggleOption>();\r\n @Output() formFileUpload = new EventEmitter<File | FileList>();\r\n @Output() dropdownOpenedChange = new EventEmitter<SelectOpenedState>();\r\n @Output() formColorPickerChange = new EventEmitter<string>();\r\n @Output() formRadioOptionSelected = new EventEmitter<RadioOption>();\r\n @Output() ctaButtonClick = new EventEmitter<IconButton>();\r\n @Output() formMultiSelectAutoCompleteSearch: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() formMultiSelectAutoCompleteClearSearchValue: EventEmitter<string> =\r\n new EventEmitter<string>();\r\n @Output() multiSelectAutoCompleteOptionsSelected = new EventEmitter<\r\n AutoCompleteOption[]\r\n >();\r\n @Output() formRichTextEditorContentChange = new EventEmitter<string>();\r\n form!: FormGroup;\r\n formGroupArray: FormGroup[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formControlArray: any[] = [];\r\n legendsArray: string[] = [];\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private fb: FormBuilder, private elementRef: ElementRef) {}\r\n\r\n /**\r\n * Implementation of ngOnInit lifecycle hook method to create form group\r\n * @memberof DynamicFormComponent\r\n */\r\n ngOnInit(): void {\r\n this.createFormGroupArray();\r\n }\r\n\r\n /**\r\n * Emit generated form reference on ngAfterContentInit lifecycle hook.\r\n * @memberof DynamicFormComponent\r\n */\r\n ngAfterContentInit(): void {\r\n this.formAfterContentInit.emit(this.formGroupArray);\r\n }\r\n /**\r\n * Sets the focus to the first field.\r\n * @memberof DynamicFormComponent\r\n */\r\n ngAfterViewInit(): void {\r\n const firstFocusableElement = this.elementRef.nativeElement.querySelector(\r\n 'input, mat-select, textarea, mat-checkbox, mat-radio-button'\r\n ) as HTMLElement;\r\n setTimeout(() => firstFocusableElement?.focus(), 0);\r\n }\r\n /**\r\n * Creates form group on the basis of formGroups configuration input\r\n * @return {void}\r\n * @memberof DynamicFormComponent\r\n */\r\n createFormGroupArray(): void {\r\n this.formGroupArray = [];\r\n this.formControlArray = [];\r\n this.legendsArray = [];\r\n if (!this.formGroups) {\r\n return;\r\n }\r\n this.formGroups?.formGroup?.forEach((element) => {\r\n const controls = element.controls.filter(\r\n (control) => control.type !== 'button'\r\n );\r\n this.formGroupArray.push(this.createGroup(controls));\r\n this.formControlArray.push(controls);\r\n this.legendsArray.push(element.legend);\r\n });\r\n this.form = this.fb.group({\r\n children: this.formGroupArray,\r\n });\r\n\r\n this.formGroupsReference.emit(this.formGroupArray);\r\n }\r\n /**\r\n * Incrementally adds a single control to an existing form group at the given\r\n * group index WITHOUT rebuilding the whole form. This preserves every other\r\n * live control (including controls that are not part of the static config,\r\n * e.g. dynamically-populated dropdowns) along with their current values and\r\n * options.\r\n * @param {number} groupIndex - Index of the target form group.\r\n * @param {FieldConfig} control - Field configuration of the control to add.\r\n * @param {number} [position] - Optional position within the group's controls;\r\n * defaults to appending at the end.\r\n * @return {void}\r\n * @memberof DynamicFormComponent\r\n */\r\n addControlToGroup(\r\n groupIndex: number,\r\n control: FieldConfig,\r\n position?: number\r\n ): void {\r\n const group = this.formGroupArray?.[groupIndex];\r\n const controls = this.formControlArray?.[groupIndex];\r\n if (!group || !controls) {\r\n return;\r\n }\r\n // Avoid duplicates if the control is already present.\r\n if (group.get(control.controlName)) {\r\n return;\r\n }\r\n if (control.type === FormControlType.CHECKBOX) {\r\n group.addControl(control.controlName, this.createFormArray(control));\r\n } else {\r\n group.addControl(control.controlName, this.createControl(control));\r\n }\r\n if (position === undefined || position < 0 || position >= controls.length) {\r\n controls.push(control);\r\n } else {\r\n controls.splice(position, 0, control);\r\n }\r\n }\r\n /**\r\n * Incrementally removes a single control from an existing form group by its\r\n * control name WITHOUT rebuilding the whole form. Other live controls and\r\n * their values/options are left untouched.\r\n * @param {number} groupIndex - Index of the target form group.\r\n * @param {string} controlName - Name of the control to remove.\r\n * @return {void}\r\n * @memberof DynamicFormComponent\r\n */\r\n removeControlFromGroup(groupIndex: number, controlName: string): void {\r\n const group = this.formGroupArray?.[groupIndex];\r\n const controls = this.formControlArray?.[groupIndex];\r\n if (!group || !controls) {\r\n return;\r\n }\r\n if (group.get(controlName)) {\r\n group.removeControl(controlName);\r\n }\r\n const configIndex = controls.findIndex(\r\n (config: FieldConfig) => config.controlName === controlName\r\n );\r\n if (configIndex > -1) {\r\n controls.splice(configIndex, 1);\r\n }\r\n }\r\n /**\r\n * Returns true when the live form group at the given index currently contains\r\n * a control with the given name. Reflects the rendered form state (including\r\n * controls added/removed incrementally), not the static config.\r\n * @param {number} groupIndex - Index of the target form group.\r\n * @param {string} controlName - Name of the control to look for.\r\n * @return {boolean} Whether the control exists in the rendered group.\r\n * @memberof DynamicFormComponent\r\n */\r\n hasControlInGroup(groupIndex: number, controlName: string): boolean {\r\n return !!this.formGroupArray?.[groupIndex]?.get(controlName);\r\n }\r\n /**\r\n * Creates form group using form builder\r\n * @param {any[]} controls\r\n * @return {FormGroup}\r\n * @memberof DynamicFormComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createGroup(controls: any[]): FormGroup {\r\n const group = this.fb.group({});\r\n controls.forEach((control: FieldConfig) => {\r\n if (control.type === FormControlType.CHECKBOX) {\r\n group.addControl(control.controlName, this.createFormArray(control));\r\n } else {\r\n group.addControl(control.controlName, this.createControl(control));\r\n }\r\n });\r\n return group;\r\n }\r\n /**\r\n * Creates form array for Checkbox group and returns.\r\n * @param {FieldConfig} controls\r\n * @return {FormArray<any>}\r\n * @memberof DynamicFormComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n createFormArray(controls: FieldConfig): FormArray<any> {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let formArray: FormArray<any>;\r\n const group = this.fb.group({});\r\n group.addControl(controls.controlName, this.createControl(controls));\r\n const isRequiredValidator = group\r\n ?.get(controls.controlName)\r\n ?.hasValidator(Validators.required);\r\n if (isRequiredValidator)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formArray = new FormArray<any>(\r\n [],\r\n this.checkboxSelectionRequiredValidator(controls?.minSelectionRequired)\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n else formArray = new FormArray<any>([]);\r\n controls?.checkboxOptions?.forEach((control) => {\r\n formArray.push(\r\n new FormControl({ value: control.checked, disabled: control.disabled })\r\n );\r\n });\r\n return formArray;\r\n }\r\n\r\n /**\r\n * Custom validator to set required filed validation error for the checkbox field type based on the number of configured minimum checkbox options to be selected whenever the filed configured with required.\r\n * @param {number} [minSelectionRequired=1]\r\n * @return {*}\r\n * @memberof DynamicFormComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n checkboxSelectionRequiredValidator(minSelectionRequired = 1): any {\r\n return function validate(formGroup: FormGroup) {\r\n let checked = 0;\r\n Object.keys(formGroup.controls).forEach((key) => {\r\n const control = formGroup.controls[key];\r\n if (control.value) {\r\n checked++;\r\n }\r\n });\r\n if (checked < minSelectionRequired) {\r\n return {\r\n checkboxSelectionRequired: true,\r\n };\r\n }\r\n return false;\r\n };\r\n }\r\n /**\r\n * Creates form control based on form field configuration\r\n * @param {FieldConfig} control\r\n * @return {FormControl}\r\n * @memberof DynamicFormComponent\r\n */\r\n createControl(control: FieldConfig): FormControl {\r\n const { disabled, validation, value, updateOn } = control;\r\n return this.fb.control(\r\n { disabled, value },\r\n updateOn ? { validators: validation, updateOn } : validation\r\n );\r\n }\r\n\r\n /**\r\n * Emits formGroupArray\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormSubmit(): void {\r\n this.formSubmit.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Emits formGroupArray\r\n * @memberof DynamicFormComponent\r\n */\r\n onLeftButtonClicked(): void {\r\n this.formLeftButtonClicked.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Emits formGroupArray\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormChange(): void {\r\n this.formChange.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Handles form field select type drop down selection event\r\n * @memberof DynamicFormComponent\r\n */\r\n onDropdownChange(): void {\r\n this.dropdownChange.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Handles form input change event\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n formInputChange(event: Event): void {\r\n this.formControlChange.emit(event);\r\n this.formInput.emit(this.formGroupArray);\r\n }\r\n\r\n /**\r\n * Handles form field search apply event\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onSearchApply(event: Event): void {\r\n this.formSearchApply.emit(event);\r\n }\r\n\r\n /**\r\n * Handles search event inside form field select\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onSelectSearch(event: { searchEvent: Event; controlName: string }): void {\r\n this.formSelectSearch.emit(event);\r\n }\r\n\r\n /**\r\n * Takes the index and the formGroup as arguments and needs to return the unique identifier for this formGroup.\r\n * @param {number} index\r\n * @param {FormGroup} formGroup\r\n * @memberof DynamicFormComponent\r\n */\r\n trackByFormGroup(index: number, formGroup: FormGroup) {\r\n return formGroup.controls;\r\n }\r\n\r\n /**\r\n * Handles form date selection event\r\n * @param {SelectedDate} selectedDate\r\n * @memberof DynamicFormComponent\r\n */\r\n onDateSelected(selectedDate: SelectedDate): void {\r\n this.formDateSelected.emit(selectedDate);\r\n }\r\n /**\r\n * Handles form time selection event\r\n * @param {SelectedTime} selectedTime\r\n * @memberof DynamicFormComponent\r\n */\r\n onTimeSelected(selectedTime: SelectedTime): void {\r\n this.formTimeSelected.emit(selectedTime);\r\n }\r\n /**\r\n * Emits selected form date range\r\n * @param {{startDate: string, endDate: string}} dateRange\r\n * @memberof DynamicFormComponent\r\n */\r\n onSelectedDateRange(dateRange: { startDate: string; endDate: string }) {\r\n this.formSelectedDateRange.emit(dateRange);\r\n }\r\n\r\n /**\r\n * Handles form field auto complete search event\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAutoCompleteSearch(event: string): void {\r\n this.formAutoCompleteSearch.emit(event);\r\n }\r\n /**\r\n * Handles form field auto complete search clear event\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAutoCompleteClearSearchValue(event: string): void {\r\n this.formAutoCompleteClearSearchValue.emit(event);\r\n }\r\n\r\n /**\r\n * Handles form field checkbox selection event\r\n * @param {CheckboxOption} option\r\n * @memberof DynamicFormComponent\r\n */\r\n onCheckboxSelection(option: CheckboxOption): void {\r\n this.formCheckboxSelection.emit(option);\r\n }\r\n\r\n /**\r\n * Handles form field auto complete option selection event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAutoCompleteOptionSelected(): void {\r\n this.autoCompleteOptionSelected.emit(this.formGroupArray);\r\n }\r\n /**\r\n *\r\n * Listens form field multi select auto complete search event and emits formMultiSelectAutoCompleteSearch event.\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onMultiSelectAutoCompleteSearch(event: string): void {\r\n this.formMultiSelectAutoCompleteSearch.emit(event);\r\n }\r\n\r\n /**\r\n * Listens form field multi select auto complete search clear event and emits formMultiSelectAutoCompleteClearSearchValue event.\r\n * @param {string} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onMultiSelectAutoCompleteClearSearchValue(event: string): void {\r\n this.formMultiSelectAutoCompleteClearSearchValue.emit(event);\r\n }\r\n /**\r\n * Listens form field multi select auto complete option selection event and emits multiSelectAutoCompleteOptionSelected event.\r\n * @param {AutoCompleteOption[]} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onMultiSelectAutoCompleteOptionsSelected(event: AutoCompleteOption[]): void {\r\n this.multiSelectAutoCompleteOptionsSelected.emit(event);\r\n }\r\n\r\n /**\r\n * Handles form slide toggle event and emits formSlideToggleChange event.\r\n * @param {SlideToggleOption} toggle\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormSlideToggleChange(toggle: SlideToggleOption): void {\r\n this.formSlideToggleChange.emit(toggle);\r\n }\r\n\r\n /**\r\n * Handles form color picker event and emits formColorPickerChange event.\r\n * @param {string} colorCode\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormColorPickerChange(colorCode: string): void {\r\n this.formColorPickerChange.emit(colorCode);\r\n }\r\n\r\n /**\r\n * Handles form rich text editor event and emits formRichTextEditorContentChange event.\r\n * @param {string} htmlMarkupText\r\n * @memberof DynamicFormComponent\r\n */\r\n onFormRichTextEditorContentChange(htmlMarkupText: string): void {\r\n this.formRichTextEditorContentChange.emit(htmlMarkupText);\r\n }\r\n\r\n /**\r\n * Handles file upload event and emits formFileUpload event\r\n * @param {(File | FileList)} file\r\n * @memberof DynamicFormComponent\r\n */\r\n onFileUpload(file: File | FileList): void {\r\n this.formFileUpload.emit(file);\r\n }\r\n\r\n /**\r\n * Handles form field radio button selection event\r\n * @param {RadioOption} option\r\n * @memberof DynamicFormComponent\r\n */\r\n onRadioOptionSelection(option: RadioOption): void {\r\n this.formRadioOptionSelected.emit(option);\r\n }\r\n\r\n /**\r\n * Converts passed control name in hyphenated css class name\r\n * @param {string} className\r\n * @return {string}\r\n * @memberof DynamicFormComponent\r\n */\r\n getRowClassName(className: string): string {\r\n return className\r\n .replace(/([A-Z])/g, ' $1')\r\n .toLowerCase()\r\n .split(' ')\r\n .join('-');\r\n }\r\n /**\r\n * Emits the addFormGroup event\r\n * @param {Event} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onAddFormGroup(event: Event): void {\r\n this.addFormGroup.emit(event);\r\n }\r\n /**\r\n * Emits supportTextLinkClick event on click of form support text link\r\n * @param {LinkEventEmitType} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onSupportTextLinkClick(event: LinkEventEmitType): void {\r\n this.supportTextLinkClick.emit(event);\r\n }\r\n /**\r\n * Listens select form field dropdownOpenedChange event and emits dropdownOpenedChange event.\r\n * @memberof DynamicFormComponent\r\n * @param {SelectOpenedState} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onDropdownOpenedChange(event: SelectOpenedState): void {\r\n this.dropdownOpenedChange.emit(event);\r\n }\r\n\r\n /**\r\n * Emits ctaButtonClick event along with clicked button information.\r\n * @param {IconButton} event\r\n * @memberof DynamicFormComponent\r\n */\r\n onCheckboxCTAButtonClick(event: IconButton): void {\r\n this.ctaButtonClick.emit(event);\r\n }\r\n}\r\n","<form\r\n class=\"ieeesa-dynamic-form\"\r\n [formGroup]=\"form\"\r\n (change)=\"onFormChange()\"\r\n (ngSubmit)=\"onFormSubmit()\"\r\n (input)=\"formInputChange($event)\"\r\n ieeesaFocusInvalidFormField\r\n>\r\n <div class=\"ieeesa-dynamic-form__body\" cdkScrollable>\r\n <fieldset\r\n class=\"ieeesa-dynamic-form__fieldset\"\r\n *ngFor=\"\r\n let formGrp of formGroupArray;\r\n let i = index;\r\n trackBy: trackByFormGroup\r\n \"\r\n [attr.aria-label]=\"(!legendsArray[i] && isLegendVisible) ? 'Form section ' + (i + 1) : null\"\r\n >\r\n <legend\r\n class=\"float-none w-auto p-2 ieeesa-dynamic-form__legend\"\r\n *ngIf=\"isLegendVisible && legendsArray[i]\"\r\n >\r\n {{ legendsArray[i] }}\r\n </legend>\r\n <div class=\"row\">\r\n <div\r\n class=\"col-{{ colWidth.xs }} col-sm-{{ colWidth.sm }} col-md-{{\r\n colWidth.md\r\n }} col-lg-{{ colWidth.lg }} col-xl-{{ colWidth.xl }}\r\n ieeesa-dynamic-form__form-field\"\r\n [ngClass]=\"getRowClassName(formControlArray[i][j].controlName)\"\r\n *ngFor=\"let control of formControlArray[i]; let j = index\"\r\n >\r\n <ng-template\r\n ieeesaDynamicFormField\r\n [config]=\"formControlArray[i][j]\"\r\n [group]=\"formGrp\"\r\n [submitResponse]=\"submitResponse\"\r\n [searchResponse]=\"searchResponse\"\r\n [fileUploadStatus]=\"fileUploadStatus\"\r\n [fileDownloadAndDeleteConfig]=\"fileDownloadAndDeleteConfig\"\r\n (formSearchApply)=\"onSearchApply($event)\"\r\n (formDropdownSelected)=\"onFormChange(); onDropdownChange()\"\r\n (formDateSelected)=\"onFormChange(); onDateSelected($event)\"\r\n (formSelectedDateRange)=\"onSelectedDateRange($event)\"\r\n (formSelectSearch)=\"onSelectSearch($event)\"\r\n (formAutoCompleteSearch)=\"onAutoCompleteSearch($event)\"\r\n (autoCompleteClearSearchValue)=\"\r\n onAutoCompleteClearSearchValue($event)\r\n \"\r\n (autoCompleteOptionSelected)=\"\r\n onFormChange(); onAutoCompleteOptionSelected()\r\n \"\r\n (formCheckboxSelection)=\"onCheckboxSelection($event)\"\r\n (ctaButtonClick)=\"onCheckboxCTAButtonClick($event)\"\r\n (formInputValue)=\"onFormChange()\"\r\n (addFormGroup)=\"onAddFormGroup($event)\"\r\n (formTimeSelected)=\"onFormChange(); onTimeSelected($event)\"\r\n (supportTextLinkClick)=\"onSupportTextLinkClick($event)\"\r\n (formSlideToggleChange)=\"onFormSlideToggleChange($event)\"\r\n (formFileUpload)=\"onFileUpload($event)\"\r\n (dropdownOpenedChange)=\"onDropdownOpenedChange($event)\"\r\n (formColorPickerChange)=\"onFormColorPickerChange($event)\"\r\n (formRadioOptionSelected)=\"onRadioOptionSelection($event)\"\r\n (formMultiSelectAutoCompleteSearch)=\"\r\n onMultiSelectAutoCompleteSearch($event)\r\n \"\r\n (multiSelectAutoCompleteClearSearchValue)=\"\r\n onMultiSelectAutoCompleteClearSearchValue($event)\r\n \"\r\n (multiSelectAutoCompleteOptionsSelected)=\"\r\n onFormChange(); onMultiSelectAutoCompleteOptionsSelected($event)\r\n \"\r\n (formRichTextEditorContentChange)=\"\r\n onFormRichTextEditorContentChange($event)\r\n \"\r\n >\r\n </ng-template>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <ng-content select=\"[component]\"></ng-content>\r\n </div>\r\n <div class=\"row ieeesa-dynamic-form__actions-row\">\r\n <div\r\n class=\"col-12 ieeesa-dynamic-form__actions\"\r\n [ngClass]=\"{\r\n 'justify-content-end': actionButtonAlign === alignmentType.LEFT,\r\n 'justify-content-center': actionButtonAlign === alignmentType.MIDDLE,\r\n 'justify-content-start': actionButtonAlign === alignmentType.RIGHT\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"isRightButtonNeeded\"\r\n type=\"submit\"\r\n mat-button\r\n class=\"mat-primary-button ieeesa-dynamic-form__actions--right-btn\"\r\n [disabled]=\"isSubmitButtonDisabled\"\r\n >\r\n {{ rightButtonLabel }}\r\n </button>\r\n <button\r\n *ngIf=\"isLeftButtonNeeded\"\r\n type=\"button\"\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-dynamic-form__actions--left-btn\"\r\n (click)=\"onLeftButtonClicked()\"\r\n [disabled]=\"isLeftButtonDisabled\"\r\n >\r\n {{ leftButtonLabel }}\r\n </button>\r\n </div>\r\n </div>\r\n</form>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FooterConfig, FooterLink } from '../../models/footer-config.model';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\n/**\r\n * Implements & displays copyright information and IEEE quick access links.\r\n * @class FooterComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-footer',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, MatDividerModule],\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss'],\r\n})\r\nexport class FooterComponent implements OnInit {\r\n /**\r\n * Input property to get the configuration information of footer copyright text and quick access links.\r\n * @type {FooterConfig}\r\n * @memberof FooterComponent\r\n */\r\n private footerConfigInfo!: FooterConfig;\r\n @Input()\r\n set footerConfig(value: FooterConfig) {\r\n this.footerConfigInfo = value;\r\n }\r\n get footerConfig(): FooterConfig {\r\n return this.footerConfigInfo;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n screenTexts: any = screenTexts;\r\n currentYear = new Date().getFullYear();\r\n\r\n /**\r\n * Initializes the component with default values if not provided.\r\n * It should hide the the dashboard link if the user is not signed in.\r\n * @return -returns nothing\r\n * @memberof FooterComponent\r\n */\r\n ngOnInit(): void {\r\n this.footerConfig = this.footerConfig ?? this.screenTexts['footer'];\r\n }\r\n\r\n /**\r\n * TrackByFunction is called for each item in the collection and return a unique identifier for that item.\r\n * @param {number} index -The index of the current item in the collection.\r\n * @param {FooterLink} link -Link object with required properties.\r\n * @return {string} -returns link label as an unique identifier.\r\n * @memberof FooterComponent\r\n */\r\n trackByFunc(index: number, link: FooterLink): string {\r\n return link.label;\r\n }\r\n}\r\n","<footer class=\"sa-footer\">\r\n <section class=\"sa-footer__links flex-align-center text-center\">\r\n <ul class=\"list-unstyled flex-align-center flex-wrap\">\r\n <li\r\n class=\"d-flex align-items-center ieeesa-title-sm-14\"\r\n *ngFor=\"\r\n let link of footerConfig.links;\r\n let i = index;\r\n trackBy: trackByFunc\r\n \"\r\n >\r\n <ng-container\r\n *ngIf=\"link?.isRouterLink; then routerLink; else redirectUrl\"\r\n >\r\n </ng-container>\r\n <ng-template #routerLink>\r\n <a\r\n [routerLink]=\"link.redirectUrl\"\r\n [attr.aria-label]=\"link.ariaLabel\"\r\n class=\"sa-footer__links-section__link\"\r\n >{{ link.label }}</a\r\n >\r\n </ng-template>\r\n <ng-template #redirectUrl>\r\n <a\r\n [attr.href]=\"link.redirectUrl\"\r\n target=\"_blank\"\r\n [attr.aria-label]=\"link.ariaLabel\"\r\n class=\"sa-footer__links-section__link\"\r\n >{{ link.label }}</a\r\n >\r\n </ng-template>\r\n <mat-divider [vertical]=\"true\"></mat-divider>\r\n </li>\r\n </ul>\r\n <img\r\n class=\"sa-footer__links__logo\"\r\n src=\"{{ footerConfig.ieeeLogo }}\"\r\n alt=\"{{ screenTexts?.footer?.alt?.logo }}\"\r\n />\r\n </section>\r\n <section class=\"sa-footer__copyright text-center\">\r\n <p class=\"ieeesa-label-md-14 sa-footer__copyright__content\">\r\n {{ footerConfig.copyright.textPart1 }} {{ currentYear }}\r\n {{ footerConfig.copyright.textPart2 }}\r\n <a\r\n [attr.href]=\"footerConfig.copyright.link\"\r\n target=\"_blank\"\r\n class=\"sa-footer__copyright__hyperlink\"\r\n >{{ footerConfig.copyright.hyperLinkPart3 }}</a\r\n >\r\n <br />\r\n {{ footerConfig.copyright.textPart4 }}\r\n </p>\r\n </section>\r\n</footer>\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule, NgClass } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Menu } from '../../models/menu.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * Creates menu and the menu items are icon based buttons\r\n * @export\r\n * @class MenuComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n NgClass,\r\n ],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MenuComponent {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n @Input() menuItems!: Menu[];\r\n @Input() button!: IconButton;\r\n @Input() defaultIconSize = '';\r\n @Input() isMarginBottomZero = false;\r\n @Output() menuToggleButtonElement: EventEmitter<HTMLElement> =\r\n new EventEmitter<HTMLElement>();\r\n @Output() menuItemClick: EventEmitter<Menu> = new EventEmitter<Menu>();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * Emits the clicked menu item and emits menu button element event when its not triggered through mouse.\r\n * @param {Menu} menu\r\n * @memberof MenuComponent\r\n */\r\n onMenuItemClick(menu: Menu) {\r\n this.menuItemClick.emit(menu);\r\n const menuElement = this.elementRef.nativeElement.querySelector(\r\n 'button.mdc-icon-button'\r\n );\r\n this.menuToggleButtonElement.emit(menuElement);\r\n }\r\n /**\r\n * Takes the index and the menu item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @param {Menu} menu\r\n * @return {number}\r\n * @memberof MenuComponent\r\n */\r\n trackByFn(index: number, menu: Menu): number {\r\n return menu.id;\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n mat-icon-button\r\n [ngClass]=\"{ 'ieeesa-menu__trigger': button?.iconURL }\"\r\n [matMenuTriggerFor]=\"menu\"\r\n [attr.aria-label]=\"constants?.ariaLabel?.menuIcon\"\r\n>\r\n <svg\r\n class=\"ieeesa-menu__button mt-md-2\"\r\n *ngIf=\"button?.iconURL; else defaultIcon\"\r\n >\r\n <use [attr.xlink:href]=\"button.iconURL\"></use>\r\n </svg>\r\n <ng-template #defaultIcon\r\n ><i class=\"fa-solid fa-ellipsis-vertical\" [ngClass]=\"defaultIconSize\"></i\r\n ></ng-template>\r\n</button>\r\n<mat-menu\r\n #menu=\"matMenu\"\r\n class=\"ieeesa-menu\"\r\n backdropClass=\"ieeesa-menu-overlay\"\r\n [ngClass]=\"{ 'ieeesa-menu__pd-1': menuItems && menuItems.length > 0 }\"\r\n>\r\n <ng-container *ngIf=\"menuItems && menuItems.length > 0\">\r\n <ng-container *ngFor=\"let item of menuItems; trackBy: trackByFn\">\r\n <button\r\n mat-menu-item\r\n class=\"ieeesa-menu__item\"\r\n [ngClass]=\"{\r\n 'ieeesa-menu__item__mb-0': isMarginBottomZero\r\n }\"\r\n (click)=\"onMenuItemClick(item)\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n [matTooltip]=\"item.toolTip\"\r\n [matTooltipDisabled]=\"!item.isToolTipNeeded\"\r\n [disabled]=\"item?.isDisabled\"\r\n >\r\n <svg class=\"ieeesa-menu__item__icon\" *ngIf=\"item.iconURL\">\r\n <use [attr.xlink:href]=\"item.iconURL\"></use>\r\n </svg>\r\n <span class=\"ieeesa-menu__item__label ieeesa-label-md-14\"\r\n >{{ item.label }}</span\r\n >\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n</mat-menu>\r\n","export enum UserProfileMenu {\r\n // eslint-disable-next-line no-unused-vars\r\n USER_PROFILE = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n SIGN_OUT = 2,\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ieeesa-image-preview',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './image-preview.component.html',\r\n styleUrls: ['./image-preview.component.scss'],\r\n})\r\nexport class ImagePreviewComponent implements OnInit {\r\n isSvg = false;\r\n imageURL!: string;\r\n @Input() imageAltText!: string;\r\n @Input() set imageUrl(value: string) {\r\n this.imageURL = value;\r\n }\r\n\r\n ngOnInit(): void {\r\n const imageNameWithExtension = this.imageUrl?.substring(\r\n this.imageUrl?.lastIndexOf('/') + 1,\r\n this.imageUrl?.indexOf('?')\r\n );\r\n if (imageNameWithExtension) {\r\n const [imageName, imageExtension] = imageNameWithExtension.split('.');\r\n this.imageAltText = this.imageAltText ?? imageName;\r\n this.isSvg = imageExtension.includes('svg');\r\n }\r\n }\r\n}\r\n","<div class=\"ieeesa-image-preview\">\r\n <img\r\n class=\"ieeesa-image-preview__image\"\r\n alt=\"{{ imageAltText }}\"\r\n [src]=\"imageURL\"\r\n />\r\n</div>\r\n","import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport * as constants from '../assets/constants.json';\r\n\r\n/**\r\n * BreakpointObserver utility service helps us to get the mobile view based on the configured breakpoint.\r\n * @export\r\n * @class BreakpointObserverService\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BreakpointObserverService {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserver: BreakpointObserver // eslint-disable-next-line no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Based on break point max-width it returns the Observable of BreakpointState\r\n * @return {Observable<BreakpointState>}\r\n * @memberof BreakpointObserverService\r\n */\r\n getBreakpoint(): Observable<BreakpointState> {\r\n return this.breakpointObserver.observe(\r\n '(max-width: ' + this.constants.breakPointMaxWidth + ')'\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HeaderConfig } from '../../models/header-config.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport {\r\n AuthService,\r\n StorageService,\r\n AlertsService,\r\n} from '@ieeesa-npm/utility';\r\nimport { IconButton, AlertType } from '@ieeesa-npm/models';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MenuComponent } from '../menu/menu.component';\r\nimport { Menu } from '../../models/menu.model';\r\nimport { UserProfileMenu } from '../../models/profile-menu.model';\r\nimport { ImagePreviewComponent } from '../image-preview/image-preview.component';\r\nimport { FileUploadService } from '../../services/file-upload.service';\r\n/**\r\n * Implements & displays application logo, title, signed in user information, sign-out link, and hamburger link for mobile view.\r\n * @class HeaderComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-header',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n MatMenuModule,\r\n ImagePreviewComponent,\r\n ],\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HeaderComponent implements OnInit, OnDestroy {\r\n private headerConfigInfo!: HeaderConfig;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n screenTexts: any = constants;\r\n private profileMenuOptions: Menu[] =\r\n this.screenTexts?.header?.userProfileMenuOptions;\r\n menuItems!: Menu[];\r\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\r\n isMobileView = false;\r\n imageUrl!: string;\r\n logo!: string;\r\n imageAltText!: string;\r\n /**\r\n * HeaderConfig represents the configurable properties required for header component.\r\n * Input property of the component to get the configurable values such as logo, app title, signed in user name and logout redirect URL.\r\n * @type {HeaderConfig}\r\n * @memberof HeaderComponent\r\n */\r\n @Input()\r\n set headerConfig(value: HeaderConfig) {\r\n this.headerConfigInfo = value;\r\n this.getImageUrl();\r\n }\r\n get headerConfig(): HeaderConfig {\r\n return this.headerConfigInfo;\r\n }\r\n @Input()\r\n set menuConfig(value: Menu[]) {\r\n this.profileMenuOptions = value;\r\n this.getMenuItems();\r\n }\r\n get menuConfig(): Menu[] {\r\n return this.profileMenuOptions;\r\n }\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n\r\n @Output() toggleNavMenuClick = new EventEmitter<Event>();\r\n @Output() profileMenuClick = new EventEmitter<Menu>();\r\n userProfileIconButton: IconButton = this.screenTexts?.header?.buttons[0];\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakPointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private authService: AuthService,\r\n // eslint-disable-next-line no-unused-vars\r\n private storageService: StorageService,\r\n // eslint-disable-next-line no-unused-vars\r\n private alertService: AlertsService,\r\n // eslint-disable-next-line no-unused-vars\r\n private fileUploadService: FileUploadService\r\n ) {\r\n breakPointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n this.getMenuItems();\r\n });\r\n }\r\n\r\n /**\r\n * Sets the appBaseUrl and gets the logo download AWS pre-signed URL from API.\r\n */\r\n ngOnInit(): void {\r\n this.getImageUrl();\r\n this.imageAltText = this.screenTexts?.header?.alt?.logo;\r\n }\r\n\r\n /**\r\n * Gets the logo download AWS pre-signed URL from API when isLogoFromAwsS3 is true.\r\n */\r\n getImageUrl(): void {\r\n if (this.headerConfigInfo?.apiBaseUrl)\r\n this.fileUploadService.setApiBaseUrl(this.headerConfigInfo.apiBaseUrl);\r\n if (this.headerConfigInfo?.isLogoFromAwsS3) {\r\n this.getFileDownloadPresignedUrls(this.headerConfigInfo?.logoUrl);\r\n } else {\r\n this.imageUrl = this.headerConfigInfo?.logoUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Desktop event to navigate to logout page.\r\n * Deletes the application specific and SSO related cookies.\r\n * @memberof HeaderComponent\r\n */\r\n logout(): void {\r\n this.authService?.deleteCookie(this.headerConfig?.cookieName);\r\n this.storageService?.clearStorage();\r\n window.location.href = this.headerConfig?.ssoSignOutUrl;\r\n }\r\n /**\r\n * Emits toggleNavMenuClick event once hamburger icon is clicked.\r\n * @param {Event} event\r\n * @memberof HeaderComponent\r\n */\r\n toggleNavMenu(event: Event): void {\r\n this.toggleNavMenuClick.emit(event);\r\n }\r\n /**\r\n * Handles the profile menu item click event and calls the logout\r\n * method when Sign Out button is clicked..\r\n * @param {Menu} menu\r\n * @memberof HeaderComponent\r\n */\r\n onUserProfileMenuClick(menu: Menu): void {\r\n if (menu?.id === UserProfileMenu.SIGN_OUT) {\r\n this.logout();\r\n } else if (menu?.id === UserProfileMenu.USER_PROFILE) {\r\n this.profileMenuClick.emit(menu);\r\n }\r\n }\r\n /**\r\n * Retrieves pre-signed URL for downloading the logo from Amazon S3 bucket.\r\n * @memberof HeaderComponent\r\n */\r\n getFileDownloadPresignedUrls(fileName: string): void {\r\n this.fileUploadService\r\n .getFileDownloadPresignedUrls(\r\n fileName,\r\n this.headerConfigInfo?.isPublicAPI,\r\n this.headerConfigInfo?.domainUrl\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n next: (response: any) => {\r\n this.imageUrl = response?.body;\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error: (error: Error) => {\r\n this.alertService?.showMessage({\r\n status: 'custom',\r\n message: error?.message || this.screenTexts?.header?.errors?.['2029'],\r\n alertType: AlertType.ERROR,\r\n isCloseNeeded: true,\r\n });\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Modifies the menu items based on mobile or desktop.\r\n */\r\n getMenuItems(): void {\r\n if (this.isMobileView) {\r\n this.menuItems = this.profileMenuOptions;\r\n } else {\r\n this.menuItems = this.profileMenuOptions?.slice(\r\n 0,\r\n this.profileMenuOptions?.length - 1\r\n );\r\n }\r\n }\r\n /**\r\n * Cleans up resources when the component is destroyed.\r\n * @memberof HeaderComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<header\r\n class=\"ieeesa-header container-fluid d-flex align-items-center justify-content-between flex-wrap\"\r\n>\r\n <div class=\"order-0 order-sm-0\">\r\n <ieeesa-image-preview\r\n class=\"ieeesa-header__logo\"\r\n [imageUrl]=\"imageUrl\"\r\n [imageAltText]=\"imageAltText\"\r\n ></ieeesa-image-preview>\r\n </div>\r\n <div\r\n class=\"order-2 order-sm-1 ieeesa-header__heading-container flex-align-center justify-content-start justify-content-sm-center\"\r\n >\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleNavMenu($event)\"\r\n *ngIf=\"headerConfig?.isSignedIn && isMobileView\"\r\n [attr.aria-label]=\"screenTexts?.header?.ariaLabel?.hamburgerMenu\"\r\n class=\"ieeesa-text-button d-block d-sm-none\"\r\n >\r\n <i class=\"fa-solid fa-bars ieeesa-header__hamburger-menu\"></i>\r\n </button>\r\n <h2 class=\"ieeesa-header__heading ieeesa-title-inter-lg-bold-24\">\r\n {{ headerConfig.applicationName }}\r\n </h2>\r\n </div>\r\n <div\r\n class=\"order-1 order-sm-2 ieeesa-header__profile-container px-0 d-flex align-items-start align-items-sm-center justify-content-end\"\r\n >\r\n <a\r\n class=\"ieeesa-header__help-icon-link\"\r\n [attr.aria-label]=\"screenTexts?.header?.ariaLabel?.helpLink\"\r\n href=\"{{ headerConfig.helpLink }}\"\r\n target=\"_blank\"\r\n >\r\n <i class=\"fa-regular fa-circle-question ieeesa-header__help-icon\"></i>\r\n </a>\r\n <p\r\n *ngIf=\"headerConfig.isSignedIn\"\r\n class=\"ieeesa-header__user-name ieeesa-title-sm-16 m-0 d-none d-md-block\"\r\n >\r\n {{ headerConfig.userName }}\r\n </p>\r\n <div\r\n *ngIf=\"headerConfig.isSignedIn\"\r\n class=\"ieeesa-header__user-profile-wrapper\"\r\n >\r\n <ng-container>\r\n <ieeesa-menu\r\n [button]=\"userProfileIconButton\"\r\n (menuItemClick)=\"onUserProfileMenuClick($event)\"\r\n [isMarginBottomZero]=\"true\"\r\n [menuItems]=\"menuItems\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </div>\r\n <button\r\n *ngIf=\"headerConfig.isSignedIn\"\r\n class=\"ieeesa-text-button ieeesa-header__sign-out ieeesa-label-md-14 d-none d-md-block\"\r\n (click)=\"logout()\"\r\n >\r\n {{ screenTexts?.header?.label?.signOut }}\r\n </button>\r\n </div>\r\n</header>\r\n","import {\r\n Directive,\r\n HostBinding,\r\n Input,\r\n OnInit,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { SafeStyle } from '@angular/platform-browser';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * Sets background color and image for the attached element.\r\n * @export\r\n * @class SetBackgroundDirective\r\n * @implements {OnInit}\r\n */\r\n@Directive({\r\n selector: '[ieeesaSetBackground]',\r\n providers: [forwardRef(() => SafePipe)],\r\n standalone: true,\r\n})\r\nexport class SetBackgroundDirective implements OnInit {\r\n @Input() background!: { color?: string; imgURL?: string };\r\n @HostBinding('style.background') bg!: SafeStyle;\r\n @HostBinding('style.background-size') bgSize = 'cover';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private safePipe: SafePipe) {}\r\n\r\n /**\r\n * Sets the elements background color and image.\r\n * @memberof SetBackgroundDirective\r\n */\r\n ngOnInit(): void {\r\n const bgColor =\r\n this.background?.color !== ''\r\n ? this.background?.color\r\n : this.constants.defaultWelcomeBgColor;\r\n const bgValue =\r\n this.background?.imgURL !== ''\r\n ? `url('${this.background?.imgURL}') no-repeat center center`\r\n : bgColor;\r\n this.bg = this.safePipe.transform(bgValue, SafeType.STYLE);\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Legend } from '../../models/legend.model';\r\nimport { SetBackgroundDirective } from '../../directives/set-background/set-background.directive';\r\n\r\n@Component({\r\n selector: 'ieeesa-legend',\r\n standalone: true,\r\n imports: [CommonModule, SetBackgroundDirective],\r\n templateUrl: './legend.component.html',\r\n styleUrls: ['./legend.component.scss'],\r\n})\r\nexport class LegendComponent implements OnInit {\r\n @Input() legends!: Legend[];\r\n private isSortingNeeded = false;\r\n\r\n @Input()\r\n set isSorting(value: boolean) {\r\n this.isSortingNeeded = value;\r\n }\r\n get isSorting(): boolean {\r\n return this.isSortingNeeded;\r\n }\r\n\r\n ngOnInit(): void {\r\n if(this.isSortingNeeded){\r\n this.legends?.sort((a, b) => {\r\n return a?.hierarchy - b?.hierarchy\r\n })\r\n }\r\n }\r\n\r\n trackByFn(index: number, item: Legend): string {\r\n return item.label;\r\n }\r\n}\r\n","<div class=\"ieeesa-legend d-flex flex-column flex-wrap flex-sm-row\">\r\n <div\r\n *ngFor=\"let item of legends; trackBy: trackByFn\"\r\n class=\"ieeesa-legend__indicator d-flex\"\r\n >\r\n <div\r\n *ngIf=\"!item.iconUrl\"\r\n class=\"ieeesa-legend__square\"\r\n [ngClass]=\"item.color\"\r\n ieeesaSetBackground\r\n [background]=\"{ imgURL: '', color: item.color }\"\r\n ></div>\r\n <svg *ngIf=\"item.iconUrl\" class=\"ieeesa-legend__icon\" aria-hidden=\"true\">\r\n <use [attr.xlink:href]=\"item.iconUrl\"></use>\r\n </svg>\r\n <p class=\"ieeesa-body-md-16 px-2\">{{ item.label }}</p>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewEncapsulation,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ListHeader, ListItem } from '../../models/list-item.model';\r\nimport { MenuComponent } from '../menu/menu.component';\r\nimport { Menu } from '../../models/menu.model';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType, IconButton } from '@ieeesa-npm/models';\r\nimport { ObserveDomChangeDirective } from '../../directives/observe-dom-change/observe-dom-change.directive';\r\nimport { FileDownloadAndDeleteConfig } from '../../models/file-download-config.model';\r\nimport { FileDownloadComponent } from '../file-download/file-download.component';\r\nimport { DownloadAttachment } from '../../models/download-file.model';\r\nimport {\r\n CdkDragDrop,\r\n DragDropModule,\r\n moveItemInArray,\r\n} from '@angular/cdk/drag-drop';\r\n@Component({\r\n selector: 'ieeesa-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatListModule,\r\n MatButtonModule,\r\n MenuComponent,\r\n IconButtonComponent,\r\n FileDownloadComponent,\r\n forwardRef(() => SafePipe),\r\n ObserveDomChangeDirective,\r\n DragDropModule,\r\n ],\r\n templateUrl: './list.component.html',\r\n styleUrls: ['./list.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ListComponent implements OnDestroy {\r\n listItems!: ListItem[];\r\n listHeader!: ListHeader;\r\n @Output() selectedItemAndAction = new EventEmitter<{\r\n selectedMenu: Menu;\r\n selectedItem: ListItem;\r\n }>();\r\n @Output() reorderedList = new EventEmitter<ListItem[]>();\r\n @Input()\r\n set listDataItems(listItem: ListItem[]) {\r\n this.listItems = listItem;\r\n this.getListItemsPositionAndLevel(this.listItems, 0);\r\n }\r\n get listDataItems(): ListItem[] {\r\n return this.listItems;\r\n }\r\n @Input()\r\n set listHeaderConfig(listHeaderDetail: ListHeader) {\r\n this.listHeader = listHeaderDetail;\r\n }\r\n get listHeaderConfig(): ListHeader {\r\n return this.listHeader;\r\n }\r\n @Output() hyperLinkAndButtonClick = new EventEmitter<Event>();\r\n @Output() downloadSelectedFile = new EventEmitter<\r\n File | DownloadAttachment\r\n >();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n @Input() indentation = this.constants?.list?.defaultIndentation;\r\n dragAndDropIconUrl = this.constants?.list?.dragAndDropIconUrl;\r\n addListButton!: IconButton;\r\n safeType: string = SafeType.HTML;\r\n @Input()\r\n set addListButtonConfig(addListButton: IconButton) {\r\n this.addListButton = addListButton;\r\n }\r\n get addListButtonConfig(): IconButton {\r\n return this.addListButton;\r\n }\r\n @Output() domChangeEvent = new EventEmitter<MutationRecord>();\r\n private _fileDownloadAndDeleteConfig!: FileDownloadAndDeleteConfig;\r\n @Input()\r\n set fileDownloadAndDeleteConfig(value: FileDownloadAndDeleteConfig) {\r\n this._fileDownloadAndDeleteConfig = value;\r\n }\r\n get fileDownloadAndDeleteConfig(): FileDownloadAndDeleteConfig {\r\n return this._fileDownloadAndDeleteConfig;\r\n }\r\n @Input() isReorderRequired = false;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public elementRef: ElementRef) {}\r\n /**\r\n * Emits hyperLinkAndButtonClick event on click of hyper link.\r\n * @param {Event} event\r\n * @memberof ListComponent\r\n */\r\n onAnchorElementClick(event: Event): void {\r\n event.preventDefault();\r\n this.hyperLinkAndButtonClick.emit(event);\r\n }\r\n /**\r\n * Constructs the index position/number and itemLevel for each list item.\r\n * @param {ListItem[]} items\r\n * @param {number} itemLevel\r\n * @param {string} [parentIndex]\r\n * @memberof ListComponent\r\n */\r\n getListItemsPositionAndLevel(\r\n items: ListItem[],\r\n itemLevel: number,\r\n parentIndex?: string\r\n ): void {\r\n items?.forEach((item, index) => {\r\n const position = parentIndex ? parentIndex.slice(-1) === '.' ? `${parentIndex}${index + 1}` : `${parentIndex}.${index + 1}` : `${index + 1}.`;\r\n item.position = position;\r\n item.itemLevel = itemLevel;\r\n const reorderedRank = isNaN(+position.slice(position.length - 1))\r\n ? +position.slice(0, position?.length - 1)\r\n : +position.slice(position?.lastIndexOf('.') + 1);\r\n item.reorderedRank = reorderedRank;\r\n if (item.subItems)\r\n this.getListItemsPositionAndLevel(\r\n item.subItems,\r\n itemLevel + 1,\r\n position\r\n );\r\n });\r\n }\r\n /**\r\n * Emits the selected menu action and the item.\r\n * @param {Menu} event\r\n * @param {ListItem} item\r\n * @memberof ListComponent\r\n */\r\n selectedMenuAction(event: Menu, item: ListItem): void {\r\n this.selectedItemAndAction.emit({\r\n selectedMenu: event,\r\n selectedItem: item,\r\n });\r\n }\r\n /**\r\n * Returns unique identifier for the list.\r\n * @param {number} index\r\n * @param {ListItem} item\r\n * @return {(number | string)}\r\n * @memberof ListComponent\r\n */\r\n trackByFn(index: number, item: ListItem): number | string {\r\n return item.id;\r\n }\r\n /**\r\n * Emits hyperLinkAndButtonClick event on click of button.\r\n * @memberof ListComponent\r\n */\r\n onClickAddItem(): void {\r\n this.hyperLinkAndButtonClick.emit();\r\n }\r\n /**\r\n * Adds click event to the anchor tags whenever dom changes.\r\n * @memberof ListComponent\r\n */\r\n onDomChange(event: MutationRecord) {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.addEventListener('click', this.onAnchorElementClick.bind(this));\r\n });\r\n this.domChangeEvent.emit(event);\r\n }\r\n /**\r\n * Emits downloadSelectedFile event.\r\n * @memberof ListComponent\r\n */\r\n downloadFile(file: File | DownloadAttachment): void {\r\n this.downloadSelectedFile.emit(file);\r\n }\r\n /**\r\n * Triggers when the item is dropped.\r\n * @param {CdkDragDrop} event\r\n * @param {ListItem[]} items\r\n * @param {number} nestingLevel\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n drop(event: CdkDragDrop<any>, items: ListItem[], nestingLevel: number) {\r\n if (event?.previousContainer === event?.container) {\r\n moveItemInArray(items, event.previousIndex, event.currentIndex);\r\n }\r\n if (event.currentIndex !== event.previousIndex) {\r\n this.getListItemsPositionAndLevel(this.listItems, nestingLevel);\r\n this.reorderedList.emit(items);\r\n }\r\n }\r\n /**\r\n * Removing the event listeners on destroy.\r\n * @memberof ListComponent\r\n */\r\n ngOnDestroy(): void {\r\n const anchorTags = this.elementRef?.nativeElement?.querySelectorAll('a');\r\n anchorTags?.forEach((anchor: HTMLAnchorElement) => {\r\n anchor.removeEventListener('click', this.onAnchorElementClick);\r\n });\r\n }\r\n}\r\n","<div class=\"ieeesa-list-container\">\r\n <div class=\"d-flex\">\r\n <div>\r\n <p *ngIf=\"listHeader?.title\" class=\"ieeesa-title-lg-24 mb-0\">\r\n {{ listHeader.title }}\r\n </p>\r\n <p\r\n *ngIf=\"listHeader?.description\"\r\n class=\"ieeesa-body-md-14 ieeesa-list-description\"\r\n [innerHTML]=\"listHeader.description | safe : safeType\"\r\n ieeesaObserveDomChange\r\n (domChange)=\"onDomChange($event)\"\r\n ></p>\r\n </div>\r\n <ieeesa-icon-button\r\n class=\"ieeesa-add-icon-button\"\r\n *ngIf=\"listHeader?.canShowAddList\"\r\n [iconButton]=\"addListButton\"\r\n (iconButtonClick)=\"onClickAddItem()\"\r\n [ngClass]=\"\r\n addListButton?.disabled\r\n ? 'ieeesa-list-container__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n </div>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveList;\r\n context: { $implicit: listItems, itemLevel: 0 }\r\n \"\r\n >\r\n </ng-container>\r\n</div>\r\n<ng-template #recursiveList let-items let-itemLevel=\"itemLevel\">\r\n <ng-container *ngIf=\"isReorderRequired\">\r\n <mat-list\r\n class=\"ieeesa-list-item\"\r\n cdkDropList\r\n cdkDropListData=\"items\"\r\n (cdkDropListDropped)=\"drop($event, items, itemLevel)\"\r\n >\r\n <ng-container\r\n *ngFor=\"let item of items; let index = index; trackBy: trackByFn\"\r\n >\r\n <div\r\n class=\"ieeesa-list-item-container d-flex\"\r\n [style.marginLeft.px]=\"itemLevel * indentation\"\r\n >\r\n <mat-list-item\r\n [ngClass]=\"{\r\n 'ieeesa-list-item__root-level-item': itemLevel === 0,\r\n 'ieeesa-list-item__subitem': itemLevel > 0\r\n }\"\r\n [cdkDragData]=\"item\"\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"agendaItem; context: { $implicit: item }\"\r\n ></ng-container>\r\n </mat-list-item>\r\n </div>\r\n <ng-container *ngIf=\"item?.subItems\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveList;\r\n context: {\r\n $implicit: item.subItems,\r\n itemLevel: itemLevel + 1\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-list>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isReorderRequired\">\r\n <mat-list class=\"ieeesa-list-item\">\r\n <ng-container\r\n *ngFor=\"let item of items; let index = index; trackBy: trackByFn\"\r\n >\r\n <div\r\n class=\"ieeesa-list-item-container d-flex\"\r\n [style.marginLeft.px]=\"itemLevel * indentation\"\r\n >\r\n <mat-list-item\r\n [ngClass]=\"{\r\n 'ieeesa-list-item__root-level-item': itemLevel === 0,\r\n 'ieeesa-list-item__subitem': itemLevel > 0\r\n }\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"agendaItem; context: { $implicit: item }\"\r\n ></ng-container>\r\n </mat-list-item>\r\n </div>\r\n <ng-container *ngIf=\"item?.subItems\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveList;\r\n context: {\r\n $implicit: item.subItems,\r\n itemLevel: itemLevel + 1\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-list>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #agendaItem let-item>\r\n <div class=\"ieeesa-list-item-child d-flex\">\r\n <span class=\"ieeesa-list-item__item d-flex\">\r\n <svg class=\"drag-icon\" *ngIf=\"isReorderRequired\">\r\n <use [attr.xlink:href]=\"dragAndDropIconUrl\"></use>\r\n </svg>\r\n <span class=\"list-number\">\r\n {{ item?.position }}\r\n </span>\r\n <span>\r\n <span class=\"item-name d-block\">{{ item?.title }}</span>\r\n <span class=\"ieeesa-list-item__desc d-block\" *ngIf=\"item?.description\">\r\n {{ item?.description }}\r\n </span>\r\n <ieeesa-file-download\r\n class=\"ieeesa-list-item__list-file-download\"\r\n *ngIf=\"item?.attachments?.length\"\r\n [fileDownloadAndDeleteConfig]=\"fileDownloadAndDeleteConfig\"\r\n [downloadFiles]=\"item?.attachments\"\r\n (downloadSelectedFile)=\"downloadFile($event)\"\r\n ></ieeesa-file-download>\r\n </span>\r\n </span>\r\n <span class=\"ieeesa-menu__action\">\r\n <ieeesa-menu\r\n *ngIf=\"item?.actionMenus\"\r\n class=\"ieeesa-menu__icon\"\r\n [button]=\"item?.actionIcon\"\r\n [menuItems]=\"item?.actionMenus\"\r\n (menuItemClick)=\"selectedMenuAction($event, item)\"\r\n ></ieeesa-menu>\r\n </span>\r\n </div>\r\n</ng-template>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { ToggleButton } from '../../models/toggle-button.model';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * ToggleButtonComponent allows users to select toggle between group of buttons.\r\n * The component takes an array of ToggleButton objects as an input, where each object contains id, label and isDisabled property. Default the first button is selected when selectedLabel is not provided.\r\n * @class ToggleButtonComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-toggle-button',\r\n standalone: true,\r\n imports: [CommonModule, MatButtonToggleModule],\r\n templateUrl: './toggle-button.component.html',\r\n styleUrls: ['./toggle-button.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ToggleButtonComponent implements OnInit {\r\n /**\r\n * Label of the selected button. Default is an empty string.\r\n * @type {string}\r\n */\r\n @Input() selectedLabel = '';\r\n /**\r\n * An array of ToggleButton objects that represent the buttons in the toggle group.\r\n * Each ToggleButton object must have properties: id, label, and isDisabled.\r\n * @type {ToggleButton[]}\r\n */\r\n @Input() buttons!: ToggleButton[];\r\n /**\r\n * Event emitter that emits the selected ToggleButton object when a button is clicked.\r\n * @type {EventEmitter<ToggleButton>}\r\n */\r\n @Output() toggleSelected: EventEmitter<ToggleButton> =\r\n new EventEmitter<ToggleButton>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n defaultTickIconURL = this.constants?.chips?.icons?.check?.iconURL;\r\n @Input() canShowLabel = true;\r\n selectedId = 0;\r\n\r\n /**\r\n * By default, the first button in a group is selected when selectedLabel is not provided.\r\n * @return -returns nothing\r\n */\r\n ngOnInit(): void {\r\n this.selectedLabel = !this.selectedLabel\r\n ? this.buttons[0]?.label\r\n : this.selectedLabel;\r\n this.selectedId = this.buttons[0]?.id;\r\n }\r\n /**\r\n * Updates the selectedLabel with the clicked button label and emits the toggleSelected event with the selected ToggleButton object.\r\n * @param {ToggleButton} button -Selected ToggleButton object.\r\n * @return -returns nothing\r\n */\r\n toggleButtonClicked(button: ToggleButton): void {\r\n this.selectedLabel = button.label;\r\n this.selectedId = button.id;\r\n this.toggleSelected.emit(button);\r\n }\r\n\r\n /**\r\n * TrackByFunction is called for each item in the collection and return a unique identifier for that item.\r\n * @param {number} index -The index of the current item in the collection.\r\n * @param {ToggleButton} button -The current button object from the collection being iterated.\r\n * @return {number} -returns number\r\n */\r\n trackByFn(index: number, button: ToggleButton): number {\r\n return button.id;\r\n }\r\n}\r\n","<mat-button-toggle-group\r\n class=\"ieeesa-toggle-btn-group\"\r\n [value]=\"selectedLabel\"\r\n>\r\n <mat-button-toggle\r\n class=\"ieeesa-toggle-btn-group__button\"\r\n *ngFor=\"let button of buttons; trackBy: trackByFn\"\r\n [value]=\"button.label\"\r\n [disabled]=\"button?.isDisabled ? button.isDisabled : false\"\r\n (change)=\"toggleButtonClicked(button)\"\r\n >\r\n <ng-container\r\n *ngIf=\"button?.canShowTickSelection && button?.id === selectedId\"\r\n >\r\n <svg\r\n class=\"ieeesa-toggle-btn-group__button__icon me-1\"\r\n *ngIf=\"button?.tickIconURL; else defaultTickIcon\"\r\n >\r\n <use [attr.xlink:href]=\"button?.tickIconURL\"></use>\r\n </svg>\r\n <ng-template #defaultTickIcon>\r\n <svg class=\"ieeesa-toggle-btn-group__button__icon me-1\">\r\n <use [attr.xlink:href]=\"defaultTickIconURL\"></use>\r\n </svg>\r\n </ng-template>\r\n </ng-container>\r\n <svg\r\n class=\"ieeesa-toggle-btn-group__button__icon me-1\"\r\n *ngIf=\"button?.isIconNeeded ?? false\"\r\n >\r\n <use [attr.xlink:href]=\"button?.iconURL\"></use>\r\n </svg>\r\n\r\n <span *ngIf=\"canShowLabel\" class=\"ieeesa-toggle-btn-group__button__label\">\r\n {{ button.label }}</span\r\n >\r\n </mat-button-toggle>\r\n</mat-button-toggle-group>\r\n","import {\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Inject,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogModule,\r\n MatDialogRef,\r\n} from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { ModalType } from '@ieeesa-npm/models';\r\nimport { ToggleButtonComponent } from '../../components/toggle-button/toggle-button.component';\r\nimport { ToggleButton } from '../../models/toggle-button.model';\r\nimport * as modalInfo from '../../assets/constants.json';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n/**\r\n * This component encapsulates the functionality of a modal dialog and implements reusable contents part of the modal components such as text content, loading another component into the modal and emitting modal events to consumed component.\r\n * It utilizes Angular Material's MatDialog module to display the modal dialog.\r\n * @usageNotes -Pass ModalComponent and data options as parameters to MatDialog open method as given below\r\n this.dialog.open(ConfirmationDialogComponent, {data: {}})\r\n * @class ModalComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-modal',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n ToggleButtonComponent,\r\n MatDialogModule,\r\n ],\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalComponent implements OnInit, OnDestroy {\r\n @ViewChild('componentContainer', { read: ViewContainerRef, static: true })\r\n componentContainer!: ViewContainerRef;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentRef!: ComponentRef<any>;\r\n formSubmit = new EventEmitter();\r\n submitFormResponse = new EventEmitter();\r\n formCancel = new EventEmitter();\r\n toggleButtonClicked = new EventEmitter();\r\n isComponentLoaded = false;\r\n heading = '';\r\n subHeading = '';\r\n promptMessage = '';\r\n leftButtonLabel = '';\r\n rightButtonLabel = '';\r\n closeAriaLabel = modalInfo?.ariaLabel?.close;\r\n toggleButtons!: ToggleButton[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentReference: any;\r\n modalType!: ModalType;\r\n isCloseNeeded = false;\r\n modalConfirm = new EventEmitter();\r\n canCloseModal = true;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentData: any;\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public dialogRef: MatDialogRef<ModalComponent>,\r\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-explicit-any\r\n @Inject(MAT_DIALOG_DATA) public modalData: any // eslint-disable-next-line no-empty-function, @typescript-eslint/no-empty-function\r\n ) {}\r\n\r\n /**\r\n * Initializes the component.\r\n * @return -returns nothing\r\n */\r\n ngOnInit(): void {\r\n this.heading = this.modalData?.heading;\r\n this.subHeading = this.modalData?.subHeading;\r\n this.promptMessage = this.modalData?.promptMessage;\r\n this.leftButtonLabel = this.modalData?.leftButtonLabel;\r\n this.rightButtonLabel = this.modalData?.rightButtonLabel;\r\n this.toggleButtons = this.modalData?.toggleButtons;\r\n this.componentReference = this.modalData?.componentReference;\r\n this.modalType = this.modalData?.modalType;\r\n this.isCloseNeeded = this.modalData?.isCloseNeeded;\r\n this.canCloseModal = this.modalData?.canCloseModal ?? true;\r\n this.componentData = this.modalData?.componentData;\r\n if (this.componentReference) {\r\n this.loadComponent();\r\n }\r\n }\r\n\r\n /**\r\n * Emit onToggleButtonClicked event when a toggle button is selected.\r\n * @param {ToggleButton} selected -Selected toggle button object.\r\n */\r\n onToggleButtonSelect(selected: ToggleButton) {\r\n if (this.toggleButtons.length > 0) {\r\n this.heading = selected?.label;\r\n }\r\n this.toggleButtonClicked.emit(selected);\r\n }\r\n\r\n /**\r\n * Loads the component into the view container.\r\n */\r\n loadComponent() {\r\n if (this.isComponentLoaded) {\r\n this.componentRef.destroy();\r\n this.componentContainer.clear();\r\n }\r\n this.componentRef = this.componentContainer.createComponent(\r\n this.componentReference\r\n );\r\n // Generic data passing — pass data to dynamic component via the input name specified in modalData\r\n if (this.modalData?.data2DynamicComponent !== null && this.modalData?.data2DynamicComponent !== undefined) {\r\n const inputName = this.modalData?.dataInputName || 'personalizedUserIdleSessionInfo';\r\n if (inputName in this.componentRef.instance) {\r\n this.componentRef.instance[inputName] = this.modalData.data2DynamicComponent;\r\n }\r\n }\r\n this.isComponentLoaded = true;\r\n if (\r\n this.modalType === ModalType.FORM ||\r\n this.modalType === ModalType.FORM_AND_CONTENT\r\n ) {\r\n this.componentRef?.instance?.submitFormResponse\r\n ?.pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (result: any) => {\r\n this.submitFormResponse.emit(result);\r\n }\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.componentRef?.instance?.formCancel\r\n ?.pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .subscribe((result: any) => {\r\n this.formCancel.emit(result);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handles the confirmation event.\r\n * @param {boolean} value - The confirmation value.\r\n */\r\n onConfirm(value: boolean) {\r\n this.modalConfirm.emit(value);\r\n this.dialogRef.close();\r\n }\r\n /**\r\n * Closes modal based on canCloseModal and emits an event.\r\n * @param {boolean} value\r\n * @memberof ModalComponent\r\n */\r\n onModalClose(value: boolean): void {\r\n if (this.canCloseModal) this.dialogRef.close();\r\n this.modalConfirm.emit(value);\r\n }\r\n /**\r\n * Returns dialog type\r\n * @return {number} value-Dialog type enum\r\n */\r\n getModalType(): boolean {\r\n return (\r\n this.modalType === ModalType.DIALOG ||\r\n this.modalType === ModalType.CONTENT\r\n );\r\n }\r\n\r\n /**\r\n * Cleans up resources when the component is destroyed.\r\n */\r\n ngOnDestroy() {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.componentRef = null as any;\r\n }\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-modal\">\r\n <div mat-dialog-title class=\"ieeesa-modal-title px-0 m-0\">\r\n <h4\r\n class=\"ieeesa-modal-title__heading ieeesa-headline-lg-32 my-0\"\r\n *ngIf=\"heading\"\r\n >\r\n <span>{{ heading }}</span>\r\n </h4>\r\n <p\r\n class=\"ieeesa-modal-title__prompt-message ieeesa-headline-sm-26 m-0\"\r\n *ngIf=\"promptMessage\"\r\n >\r\n <span>{{ promptMessage }}</span>\r\n </p>\r\n <p\r\n class=\"ieeesa-modal-title__sub-heading ieeesa-body-md-14 text-left m-0\"\r\n *ngIf=\"subHeading\"\r\n >\r\n {{ subHeading }}\r\n </p>\r\n <ieeesa-toggle-button\r\n *ngIf=\"toggleButtons && toggleButtons.length > 0\"\r\n class=\"float-end\"\r\n [buttons]=\"toggleButtons\"\r\n (toggleSelected)=\"onToggleButtonSelect($event)\"\r\n ></ieeesa-toggle-button>\r\n </div>\r\n <div mat-dialog-content class=\"ieeesa-label-lg-16 px-0\">\r\n <ng-container #componentContainer></ng-container>\r\n </div>\r\n <div\r\n mat-dialog-actions\r\n class=\"d-flex justify-content-end p-0 flex-nowrap\"\r\n *ngIf=\"getModalType()\"\r\n >\r\n <button\r\n mat-button\r\n class=\"mat-secondary-button align-self-stretch\"\r\n (click)=\"onConfirm(false)\"\r\n >\r\n {{ leftButtonLabel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-primary-button align-self-stretch\"\r\n (click)=\"onConfirm(true)\"\r\n >\r\n {{ rightButtonLabel }}\r\n </button>\r\n </div>\r\n <button\r\n *ngIf=\"isCloseNeeded\"\r\n [attr.aria-label]=\"closeAriaLabel\"\r\n (click)=\"onModalClose(false)\"\r\n class=\"ieeesa-modal__close-button\"\r\n >\r\n <i class=\"ieeesa-modal__close-icon fa fa-close\"></i>\r\n </button>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogRef,\r\n MatDialogModule,\r\n} from \"@angular/material/dialog\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { AlignType, ConfirmationModalData } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * ModalConfirmationComponent is used to get user confirmation and this component should be invoked by using Angular material MatDialog open method.\r\n * @usageNotes -Pass ModalConfirmationComponent and data options as parameters to MatDialog open method as given below\r\n this.dialog.open(ModalConfirmationComponent, {data: {}})\r\n * @class ModalConfirmationComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-modal-confirmation',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './modal-confirmation.component.html',\r\n styleUrls: ['./modal-confirmation.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalConfirmationComponent {\r\n alignmentType = AlignType;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public confirmationModalData: ConfirmationModalData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<ModalConfirmationComponent> // eslint-disable-next-line no-empty-function\r\n ) {\r\n dialogRef.disableClose = true;\r\n }\r\n\r\n /**\r\n * Handles the user confirmation and emits the confirmation value using the confirmationEvent.\r\n * @param {boolean} confirmation -A boolean value indicating whether the user confirmed (true) or canceled (false) the action.\r\n * @memberof ModalConfirmationComponent\r\n * @returns - returns nothing\r\n */\r\n onConfirm(confirmation: boolean): void {\r\n this.dialogRef.close(confirmation);\r\n }\r\n}\r\n","<div class=\"ieeesa-confirmation\">\r\n <div mat-dialog-content class=\"ieeesa-headline-sm-26 row\">\r\n <span class=\"ieeesa-body-md-14 ieeesa-confirmation__content col px-0\">\r\n <ng-container *ngIf=\"confirmationModalData.messageParts?.length; else plainMessage\">\r\n <ng-container *ngFor=\"let part of confirmationModalData.messageParts\">\r\n <strong *ngIf=\"part.bold\">{{ part.text }}</strong>\r\n <ng-container *ngIf=\"!part.bold\">{{ part.text }}</ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #plainMessage>{{ confirmationModalData.promptMessage }}</ng-template>\r\n </span>\r\n </div>\r\n <div\r\n mat-dialog-actions\r\n class=\"d-flex p-2 row flex-nowrap\"\r\n [ngClass]=\"{\r\n 'justify-content-start': confirmationModalData.actionButtonAlign === alignmentType.LEFT,\r\n 'justify-content-center': confirmationModalData.actionButtonAlign === alignmentType.MIDDLE,\r\n 'justify-content-end': confirmationModalData.actionButtonAlign === alignmentType.RIGHT,\r\n \r\n }\"\r\n >\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button col-sm-6\"\r\n (click)=\"onConfirm(false)\"\r\n >\r\n {{ confirmationModalData.leftButtonLabel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-primary-button col-sm-6\"\r\n (click)=\"onConfirm(true)\"\r\n >\r\n {{ confirmationModalData.rightButtonLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogModule,\r\n MatDialogRef,\r\n} from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { InfoModalData } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * ModalInfoComponent is a simple informational dialog that displays a centered message\r\n * with a single dismissal button. \r\n *\r\n * @usageNotes - Pass ModalInfoComponent and data options as parameters to MatDialog open method:\r\n * this.dialog.open(ModalInfoComponent, { data: { message: '...', buttonLabel: 'OK' } })\r\n * @class ModalInfoComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-modal-info',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './modal-info.component.html',\r\n styleUrls: ['./modal-info.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalInfoComponent {\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public data: InfoModalData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<ModalInfoComponent>\r\n ) {\r\n dialogRef.disableClose = true;\r\n }\r\n\r\n /**\r\n * Closes the info dialog.\r\n * @memberof ModalInfoComponent\r\n */\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div class=\"ieeesa-modal-info\">\r\n <div mat-dialog-content class=\"ieeesa-headline-sm-26 row\">\r\n <span class=\"ieeesa-body-md-16\r\n ieeesa-modal-info__content col px-0\">\r\n {{ data.message }}\r\n </span>\r\n </div>\r\n <div\r\n mat-dialog-actions\r\n class=\"d-flex p-2 row flex-nowrap justify-content-center\"\r\n >\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button\"\r\n (click)=\"onClose()\"\r\n [attr.aria-label]=\"data.buttonLabel\"\r\n >\r\n {{ data.buttonLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MediaMatcher } from '@angular/cdk/layout';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SideMenuItem } from '../../models/navigation-menu.model';\r\nimport { provideAnimations } from '@angular/platform-browser/animations';\r\n/**\r\n * The component accepts menu items data as configurable input parameter and the menus are populated based on it.\r\n * The component checks the defined mobile device resolution and accordingly updates the side navigation menu view.\r\n * The component accepts menu opened/closed state as an input parameter. By default, the side menu is configured to open state.\r\n * @export\r\n * @class NavigationMenuComponent\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-navigation-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatSidenavModule,\r\n MatListModule,\r\n MatExpansionModule,\r\n MatButtonModule,\r\n RouterModule,\r\n ],\r\n providers: [provideAnimations()],\r\n templateUrl: './navigation-menu.component.html',\r\n styleUrls: ['./navigation-menu.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NavigationMenuComponent implements OnDestroy {\r\n @Input() isMenuOpen = true;\r\n @Input() sideMenu!: SideMenuItem[];\r\n @ViewChild('navMenu') navMenu!: MatSidenav;\r\n mobileQuery: MediaQueryList;\r\n mobileQueryListener: () => void;\r\n\r\n constructor(\r\n public changeDetectorRef: ChangeDetectorRef,\r\n public media: MediaMatcher\r\n ) {\r\n this.mobileQuery = media.matchMedia('(max-width: 576px)');\r\n this.mobileQueryListener = () => changeDetectorRef.detectChanges();\r\n this.mobileQuery.addEventListener('change', () => {\r\n this.mobileQueryListener();\r\n });\r\n }\r\n /**\r\n * Takes the index and the current item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @param {array} menuItems\r\n * @return {number}\r\n * @memberof NavigationMenuComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n trackByFn(index: number, menuItems: any): number {\r\n return menuItems.id;\r\n }\r\n /**\r\n * This method returns the status for menu to be opened or closed by default, basis on device resolution\r\n * @return {boolean}\r\n * @memberof NavigationMenuComponent\r\n */\r\n isMenuOpened(): boolean {\r\n return this.mobileQuery.matches ? false : this.isMenuOpen;\r\n }\r\n\r\n /**\r\n * Toggles the navigation menu state.\r\n * @memberof NavigationMenuComponent\r\n */\r\n toggleNavMenu(): void {\r\n if (this.mobileQuery?.matches) {\r\n this.navMenu?.toggle();\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n this.mobileQuery.removeEventListener('change', () => {\r\n this.mobileQueryListener();\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"ieeesa-sidenav\"\r\n [ngClass]=\"mobileQuery?.matches ? 'ieeesa-sidenav--mobile' : ''\"\r\n>\r\n <mat-sidenav-container class=\"ieeesa-sidenav__container\">\r\n <mat-sidenav\r\n role=\"navigation\"\r\n #navMenu\r\n [opened]=\"isMenuOpened()\"\r\n [mode]=\"mobileQuery.matches ? 'over' : 'side'\"\r\n [fixedInViewport]=\"mobileQuery.matches\"\r\n [ngClass]=\"{ 'ieeesa-sidenav__container__mobile': mobileQuery.matches }\"\r\n >\r\n <mat-nav-list>\r\n <ng-template #recursiveMenuList let-menuItems>\r\n <ng-container\r\n *ngFor=\"let item of menuItems; let i = index; trackBy: trackByFn\"\r\n >\r\n <ng-container *ngIf=\"item?.subMenuItems?.length; else subMenu\">\r\n <mat-accordion>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div\r\n class=\"d-flex align-items-center ieeesa-label-lg-16 ieeesa-sidenav__container__menu-item\"\r\n >\r\n <svg\r\n *ngIf=\"item?.iconURL\"\r\n class=\"ieeesa-sidenav__container__menu-item-icon\"\r\n aria-label=\"\"\r\n >\r\n <use [attr.xlink:href]=\"item.iconURL\"></use>\r\n </svg>\r\n {{ item.displayName }}\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveMenuList;\r\n context: { $implicit: item.subMenuItems }\r\n \"\r\n ></ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-template #subMenu>\r\n <a\r\n mat-list-item\r\n [routerLink]=\"[item.routeURL]\"\r\n (click)=\"toggleNavMenu()\"\r\n routerLinkActive=\"active-item\"\r\n >\r\n <div\r\n class=\"ieeesa-label-lg-16 d-flex align-items-center ieeesa-sidenav__container__menu-item\"\r\n >\r\n <svg\r\n *ngIf=\"item?.iconURL\"\r\n class=\"ieeesa-sidenav__container__menu-item-icon\"\r\n aria-label=\"\"\r\n >\r\n <use [attr.xlink:href]=\"item.iconURL\"></use>\r\n </svg>\r\n {{ item.displayName }}\r\n </div>\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n recursiveMenuList;\r\n context: { $implicit: sideMenu }\r\n \"\r\n ></ng-container>\r\n </mat-nav-list>\r\n </mat-sidenav>\r\n </mat-sidenav-container>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType } from '@ieeesa-npm/models';\r\n/**\r\n * The NotificationComponent displays a notification with a heading, title, content, and an optional button.\r\n * Component can be reused in page not found, access denied, session expired notification, logged out pages.\r\n * @class NotificationComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-notification',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n forwardRef(() => SafePipe),\r\n ],\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n})\r\nexport class NotificationComponent {\r\n @Input() heading!: string;\r\n @Input() title!: string;\r\n @Input() content!: string;\r\n @Input() buttonLabel!: string;\r\n @Input() buttonIcon = true;\r\n @Input() headingIconURL!:string;\r\n @Input() buttonIconURL!:string;\r\n @Output() notify = new EventEmitter();\r\n safeType: string = SafeType.HTML;\r\n\r\n /**\r\n * Emits the notify event on clicking notify button.\r\n */\r\n onClick() {\r\n this.notify.emit();\r\n }\r\n}\r\n","<div class=\"ieeesa-notification flex-align-center row\">\r\n <div class=\"ieeesa-notification__body col-md-4 col-lg-4 p-4\">\r\n <svg class=\"ieeesa-notification__header-icon\" *ngIf=\"headingIconURL\">\r\n <use [attr.xlink:href]=\"headingIconURL\"></use>\r\n </svg>\r\n <h1\r\n class=\"ieeesa-notification__heading ieeesa-display-lg-57 text-capitalize\"\r\n *ngIf=\"heading\"\r\n >\r\n {{ heading }}\r\n </h1>\r\n <p class=\"ieeesa-notification__title ieeesa-title-lg-bold-24\">\r\n {{ title }}\r\n </p>\r\n <p\r\n class=\"ieeesa-notification__message ieeesa-title-md-18\"\r\n [innerHTML]=\"content | safe : safeType\"\r\n ></p>\r\n <button *ngIf=\"buttonLabel\"\r\n mat-button\r\n color=\"primary\"\r\n class=\"ieeesa-notification__button ieeesa-label-lg-bold-16 mat-primary-button\"\r\n (click)=\"onClick()\"\r\n >\r\n <svg class=\"ieeesa-notification__button__icon me-2\" *ngIf=\"buttonIconURL\">\r\n <use [attr.xlink:href]=\"buttonIconURL\"></use>\r\n </svg> \r\n <i\r\n *ngIf=\"buttonIcon && !buttonIconURL\"\r\n class=\"fa-solid fa-arrow-left\"\r\n ></i>\r\n {{ buttonLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SetBackgroundDirective } from '../../directives/set-background/set-background.directive';\r\nimport { AppConfigInfo } from '../../models/app-config-info.model';\r\nimport { Router } from '@angular/router';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * Provides reusable implementation to pre-login page by getting the application config information as an input to the component.\r\n * @export\r\n * @class WelcomeComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-welcome',\r\n standalone: true,\r\n imports: [CommonModule, MatButtonModule, SetBackgroundDirective],\r\n templateUrl: './welcome.component.html',\r\n styleUrls: ['./welcome.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class WelcomeComponent implements OnInit {\r\n /**\r\n * AppConfigInfo data can be passed as input while calling this component using selector and it can also be passed as a route data.\r\n * @usage <nesc-welcome [appConfigInfo]=\"appConfigInfo\"></nesc-welcome> or routes: Route[]=[{ path: 'landing', component: WelcomeComponent, data:{appConfigInfo:appConfigInfo} }]\r\n * @type {AppConfigInfo}\r\n * @memberof WelcomeComponent\r\n */\r\n @Input() appConfigInfo: AppConfigInfo = {\r\n appTitle: '',\r\n appDescription: '',\r\n cookieName: '',\r\n ssoSignOutUrl: '',\r\n domainUrl: '',\r\n createAccountUrl: '',\r\n };\r\n @Output() signInClick: EventEmitter<Event> = new EventEmitter<Event>();\r\n @Output() signUpClick: EventEmitter<Event> = new EventEmitter<Event>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n url: string = constants?.welcome?.buttons?.[0]?.url;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(private router: Router) {}\r\n\r\n ngOnInit(): void {\r\n this.appConfigInfo.createAccountUrl =\r\n this.appConfigInfo.createAccountUrl ?? this.url;\r\n }\r\n\r\n /**\r\n * Navigates to passed sign up route url or emits the click event in case route url is not there.\r\n * @param {Event} event\r\n * @memberof WelcomeComponent\r\n */\r\n onCreateAccountClick(event: Event): void {\r\n if (this.appConfigInfo?.domainUrl) {\r\n const createAccountUrl = `${this.appConfigInfo?.createAccountUrl}?url=${this.appConfigInfo?.domainUrl}/&signinurl=${this.appConfigInfo?.domainUrl}${this.appConfigInfo?.signInRouteUrl}`;\r\n window.open(createAccountUrl, '_blank');\r\n } else {\r\n this.signUpClick.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to passed sign in route url or emits the click event in case route url is not there.\r\n * @param {Event} event\r\n * @memberof WelcomeComponent\r\n */\r\n onSignInClick(event: Event): void {\r\n if (this.appConfigInfo?.signInRouteUrl) {\r\n this.router.navigate([this.appConfigInfo?.signInRouteUrl]);\r\n } else {\r\n this.signInClick.emit(event);\r\n }\r\n }\r\n}\r\n","<div\r\n *ngIf=\"appConfigInfo\"\r\n class=\"ieeesa-welcome d-flex justify-content-center\"\r\n ieeesaSetBackground\r\n [background]=\"appConfigInfo.background ?? { color: '', imgURL: '' }\"\r\n>\r\n <div\r\n class=\"jumbotron ieeesa-welcome__note d-flex flex-column justify-content-between px-4 px-sm-5 px-md-5 px-lg-5 py-4 mx-2 mx-sm-4 mx-md-4 mx-lg-4 my-5\"\r\n >\r\n <ng-container>\r\n <h1 class=\"ieeesa-display-md-47 ieeesa-welcome__note--heading\">\r\n {{ appConfigInfo.appTitle }}\r\n </h1>\r\n <p class=\"ieeesa-title-lg-24 ieeesa-welcome__note--description\">\r\n {{ appConfigInfo.appDescription }}\r\n </p>\r\n </ng-container>\r\n <div\r\n class=\"ieeesa-welcome__action d-flex align-items-center justify-content-between justify-content-sm-center justify-content-md-center justify-content-lg-center justify-content-xl-center flex-column flex-sm-row flex-md-row flex-lg-row flex-xl-row\"\r\n >\r\n <button\r\n class=\"my-4 my-sm-5 my-md-5 my-lg-5 no-bg-color-btn btn ieeesa-welcome__action--register d-flex align-items-center justify-content-center ieeesa-label-lg-bold-16 order-2 order-sm-1 order-md-1 order-lg-1 order-xl-1\"\r\n (click)=\"onCreateAccountClick($event)\"\r\n rel=\"noopener noreferrer\"\r\n [attr.ariaLabel]=\"constants?.welcome?.buttons?.[0]?.ariaLabel\"\r\n target=\"_blank\"\r\n >\r\n {{ constants?.welcome?.buttons?.[0]?.label }}\r\n </button>\r\n <button\r\n mat-raised-button\r\n mat-button\r\n class=\"mx-0 my-3 mx-sm-5 mx-md-5 mx-lg-5 mat-primary-button ieeesa-welcome__action--sign-in ieeesa-label-lg-bold-16 order-1 order-sm-2 order-md-2 order-lg-2 order-xl-2\"\r\n (click)=\"onSignInClick($event)\"\r\n >\r\n {{ constants?.welcome?.buttons?.[1]?.label }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum ChipOrientation {\r\n HORIZONTAL = 'HORIZONTAL',\r\n VERTICAL = 'VERTICAL',\r\n}\r\nexport enum ChipsType {\r\n STATIC = ' STATIC',\r\n TOGGLE = 'TOGGLE',\r\n INPUT = 'INPUT',\r\n AUTOCOMPLETE = 'AUTOCOMPLETE',\r\n FORM_CONTROL = 'FORM_CONTROL',\r\n AVATAR = 'AVATAR',\r\n}\r\nexport enum FilterOptionType {\r\n CHECKBOX = 'CHECKBOX',\r\n DROPDOWN = 'DROPDOWN',\r\n}\r\n\r\nexport interface ChipOption {\r\n id: number | string;\r\n name: string;\r\n checked: boolean;\r\n disabled?: boolean;\r\n chipType: ChipsType;\r\n optionType?: FilterOptionType;\r\n canShowSelection?: boolean;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatChipListbox,\r\n MatChipOption,\r\n MatChipsModule,\r\n} from '@angular/material/chips';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport {\r\n ChipOption,\r\n ChipOrientation,\r\n ChipsType,\r\n} from '../../models/chip-option.model';\r\nimport { IconButton } from '@ieeesa-npm/models';\r\nimport * as constants from '../../assets/constants.json';\r\n\r\n/**\r\n * Chips component allow users to view information, make selections, filter content.\r\n * @export\r\n * @class ChipComponent\r\n * @implements {OnInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-chips',\r\n standalone: true,\r\n imports: [CommonModule, MatChipsModule],\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n})\r\nexport class ChipsComponent implements OnInit, OnDestroy {\r\n defaultVisibleChips!: ChipOption[];\r\n isMobileView = false;\r\n labelViewAllOrLess!: string;\r\n constants = constants;\r\n chipsType = ChipsType;\r\n orientations = ChipOrientation;\r\n activeLabel: string = this.constants?.chips?.label?.viewLess;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n private chips!: ChipOption[];\r\n @Input()\r\n set chipGroup(value: ChipOption[]) {\r\n this.chips = value;\r\n this.viewChips(this.activeLabel);\r\n }\r\n get chipGroup(): ChipOption[] {\r\n return this.chips;\r\n }\r\n @Input() chipOrientation: ChipOrientation = this.orientations.HORIZONTAL;\r\n @Input() noOfDefaultVisibleChips: number =\r\n this.constants?.chips?.noOfDefaultVisibleChips;\r\n @Input() hasViewMoreForDesktop = false;\r\n @Input() hasViewMoreForMobile = false;\r\n @Input() avatar!: IconButton;\r\n @Input() arrow!: IconButton;\r\n @Input() check!: IconButton;\r\n @ViewChild(MatChipListbox) chipListBox!: MatChipListbox;\r\n @Input() isViewMoreNeeded = false;\r\n private hasChipToggledInfo!: boolean;\r\n @Input()\r\n get hasChipToggled() {\r\n return this.hasChipToggledInfo;\r\n }\r\n set hasChipToggled(value: boolean) {\r\n this.hasChipToggledInfo = value;\r\n if (value) {\r\n const lastSelectedChip = this.chipListBox?.selected as MatChipOption;\r\n if (lastSelectedChip) lastSelectedChip.selected = false;\r\n }\r\n }\r\n @Input() viewAllLabel: string = this.constants?.chips?.label?.viewAll;\r\n @Input() viewLessLabel: string = this.constants?.chips?.label?.viewLess;\r\n @Output() selectedChip = new EventEmitter();\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(public breakpointObserverService: BreakpointObserverService) {}\r\n ngOnInit(): void {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n this.getViewMore();\r\n this.viewChips(this.activeLabel);\r\n });\r\n }\r\n /**\r\n * Onclick the chip, it emits selectedChip event with selected chip.\r\n * @param {ChipOption} chip\r\n * @memberof ChipComponent\r\n */\r\n onChipClick(chip: ChipOption): void {\r\n chip.checked = !chip.checked;\r\n this.selectedChip.emit(chip);\r\n this.chipGroup.forEach((chipOption) => {\r\n if (chipOption.id !== chip.id) chipOption.checked = false;\r\n });\r\n }\r\n /**\r\n * Shows list of chips on the basis of view more/less button state.\r\n * @memberof ChipComponent\r\n */\r\n viewChips(clickedLabel: string): void {\r\n if (this.isViewMoreNeeded) {\r\n if (clickedLabel === this.constants?.chips?.label?.viewLess) {\r\n this.activeLabel = this.constants?.chips?.label?.viewLess;\r\n this.defaultVisibleChips = this.chips?.slice(\r\n 0,\r\n this.constants?.chips?.noOfDefaultVisibleChips\r\n );\r\n this.labelViewAllOrLess = this.constants?.chips?.label?.viewAll;\r\n } else {\r\n this.defaultVisibleChips = this.chips;\r\n this.labelViewAllOrLess = this.constants?.chips?.label?.viewLess;\r\n this.activeLabel = this.constants?.chips?.label?.viewAll;\r\n }\r\n } else {\r\n this.defaultVisibleChips = this.chips;\r\n }\r\n }\r\n /**\r\n * Sets the isViewMoreNeeded value based on hasViewMore and isMobileView values.\r\n * @memberof ChipsComponent\r\n */\r\n getViewMore(): void {\r\n this.isViewMoreNeeded =\r\n (this.hasViewMoreForDesktop && !this.isMobileView) ||\r\n (this.hasViewMoreForMobile && this.isMobileView);\r\n }\r\n /**\r\n * Allows Angular to detect the specific chip option that needs to change or be added by tracking option unique Id.\r\n * @param {number} index\r\n * @param {ChipOption} option\r\n * @return {*} {(number | string)}\r\n * @memberof ChipComponent\r\n */\r\n trackById(index: number, option: ChipOption): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof GroupsComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-chip\">\r\n <mat-chip-listbox\r\n [attr.aria-label]=\"constants?.chips?.ariaLabel?.chipsList\"\r\n [ngClass]=\"\r\n chipOrientation === orientations.VERTICAL\r\n ? 'mat-mdc-chip-set-stacked'\r\n : ''\r\n \"\r\n >\r\n <mat-chip-option\r\n *ngFor=\"let chip of defaultVisibleChips; trackBy: trackById\"\r\n (selectionChange)=\"onChipClick(chip)\"\r\n [attr.aria-label]=\"chip?.name\"\r\n [ngClass]=\"\r\n chip?.checked && chip?.canShowSelection ? 'selected-checked-state' : ''\r\n \"\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <ng-container *ngIf=\"chip?.chipType === chipsType.AVATAR\">\r\n <svg\r\n class=\"ieeesa-chip__svg-avatar\"\r\n *ngIf=\"avatar?.iconURL\"\r\n matChipAvatar\r\n >\r\n <use [attr.xlink:href]=\"avatar?.iconURL\"></use>\r\n </svg>\r\n </ng-container>\r\n <ng-container *ngIf=\"chip?.canShowSelection\">\r\n <svg class=\"ieeesa-chip__svg-check-icon\" *ngIf=\"check?.iconURL\">\r\n <use [attr.xlink:href]=\"check?.iconURL\"></use>\r\n </svg>\r\n </ng-container>\r\n <p class=\"ieeesa-label-lg-bold-16 m-0\">{{ chip?.name }}</p>\r\n <ng-container *ngIf=\"chip?.chipType === chipsType.TOGGLE\">\r\n <svg\r\n [ngClass]=\"\r\n hasChipToggled && chip?.checked\r\n ? 'ieeesa-chip__selected-state'\r\n : 'ieeesa-chip__unselected-state'\r\n \"\r\n class=\"ieeesa-chip__svg-trailing-icon\"\r\n *ngIf=\"arrow?.iconURL\"\r\n matChipTrailingIcon\r\n >\r\n <use [attr.xlink:href]=\"arrow?.iconURL\"></use>\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </mat-chip-option>\r\n </mat-chip-listbox>\r\n <button\r\n *ngIf=\"isViewMoreNeeded && chipGroup.length > noOfDefaultVisibleChips\"\r\n (click)=\"viewChips(labelViewAllOrLess)\"\r\n class=\"ieeesa-view-more-or-less-button ieeesa-label-lg-bold-16\"\r\n >\r\n {{ labelViewAllOrLess }}\r\n </button>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n ViewEncapsulation,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { CheckboxOption, IconButton, SelectOption } from '@ieeesa-npm/models';\r\nimport { ChipOption, FilterOptionType } from '../../models/chip-option.model';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { FiltersAndOptions } from '../../models/filters-options.model';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SelectComponent } from '../../components/select/select.component';\r\nimport { SelectOpenedState } from '../../models/select-opened-state.model';\r\n\r\n/**\r\n * Provides an implementation for group of filter.\r\n * @export\r\n * @class FilterComponent\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-filter',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatCheckboxModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n ChipsComponent,\r\n CheckboxComponent,\r\n IconButtonComponent,\r\n ReactiveFormsModule,\r\n MatSelectModule,\r\n SelectComponent,\r\n ],\r\n templateUrl: './filter.component.html',\r\n styleUrls: ['./filter.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FilterComponent implements OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n arrow: IconButton = this.constants?.chips?.icons?.arrow;\r\n check: IconButton = this.constants?.chips?.icons?.check;\r\n removeIcon: IconButton = this.constants?.chips?.icons?.remove;\r\n isFilterOpened = false;\r\n selectedCheckboxes!: CheckboxOption[];\r\n onFilterToggle = false;\r\n isFilterActive = false;\r\n isMobileView = false;\r\n isApplyButtonDisabled = true;\r\n filtersAndOptions = new Map<number | string, CheckboxOption[]>();\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n recreateCheckboxOptionsControl!: CheckboxOption[];\r\n @ViewChild(SelectComponent) selectComponent!: SelectComponent;\r\n private filteredTypeOptionsInfo!: ChipOption[];\r\n private selectedFilterOptionType: FilterOptionType =\r\n FilterOptionType.CHECKBOX;\r\n @Input() set filterOptionType(optionType: FilterOptionType) {\r\n this.selectedFilterOptionType = optionType;\r\n }\r\n get filterOptionType() {\r\n return this.selectedFilterOptionType;\r\n }\r\n optionsType = FilterOptionType;\r\n @Input()\r\n set appliedFilterOptions(options: ChipOption[]) {\r\n this.filteredTypeOptionsInfo = options;\r\n }\r\n get appliedFilterOptions() {\r\n return this.filteredTypeOptionsInfo;\r\n }\r\n @Input() filterButton: IconButton = this.constants?.filter?.buttons[0];\r\n @Input() filters!: ChipOption[];\r\n @Input() canShowSelection = false;\r\n private selectedFilterOptionsList!: CheckboxOption[];\r\n selectedFilterDropDownList: SelectOption[] = [];\r\n defaultSelectedFilterDropDownOptions: SelectOption[] = [];\r\n selectedFilterId!: string | number;\r\n prevSelectedFilterOptionsList: CheckboxOption[] = [];\r\n @Input()\r\n set selectedFilterOptions(options: CheckboxOption[]) {\r\n if (options && this.selectedFilterId) {\r\n this.filtersAndOptions.set(this.selectedFilterId, options);\r\n this.setFilterSelectionOnOptionChange();\r\n this.selectedFilterOptionsList = options;\r\n if (\r\n this.prevSelectedFilterOptionsList.length &&\r\n this.prevSelectedFilterOptionsList[0].name !==\r\n this.selectedFilterOptionsList?.[0]?.name\r\n )\r\n this.recreateCheckboxOptionsControl = options;\r\n this.prevSelectedFilterOptionsList = this.selectedFilterOptionsList;\r\n }\r\n if (this.filterOptionType === this.optionsType.DROPDOWN) {\r\n this.selectedFilterDropDownList = this.selectedFilterOptionsList.map(\r\n (selectOption: CheckboxOption) => {\r\n return { id: selectOption.id, name: selectOption.name ?? '' };\r\n }\r\n );\r\n }\r\n }\r\n get selectedFilterOptions() {\r\n return this.selectedFilterOptionsList;\r\n }\r\n @Output() selectedFilter = new EventEmitter<ChipOption>();\r\n @Output() filteredOptions = new EventEmitter<FiltersAndOptions[]>();\r\n @Output() removeFilteredOption = new EventEmitter();\r\n @Output() filterDropdownSearch = new EventEmitter<string>();\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private changeDetectorReference: ChangeDetectorRef\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n this.filterButton.disabled = !this.isMobileView;\r\n });\r\n }\r\n /**\r\n * OnFilterSelected receives the selected filter from chip component, emits the selected filter and toggle the isFilterByOptionsVisible state.\r\n * @param {ChipOption} type\r\n * @memberof FilterComponent\r\n */\r\n onFilterSelected(type: ChipOption): void {\r\n this.selectedFilterId = type.id;\r\n if (type.checked) {\r\n this.selectedFilter.emit(type);\r\n }\r\n this.isFilterOpened = type?.checked;\r\n this.filterOptionType = type.optionType ?? this.optionsType.CHECKBOX;\r\n this.onFilterToggle = false;\r\n }\r\n /**\r\n * OnRemovalOfFilteredOption method receives removed chip from chip component and emits the event with removed chip.\r\n * @param {ChipOption} option\r\n * @memberof FilterComponent\r\n */\r\n onRemovalOfFilteredOption(option: ChipOption): void {\r\n if (option?.name === this.constants?.filter?.label?.clearAll) {\r\n this.appliedFilterOptions = [];\r\n this.filtersAndOptions.forEach((options: CheckboxOption[]) => {\r\n options?.forEach((option: CheckboxOption) => (option.checked = false));\r\n });\r\n this.removeFilteredOption.emit([]);\r\n } else {\r\n this.appliedFilterOptions = this.appliedFilterOptions.filter(\r\n (res: ChipOption) => res.id !== option.id\r\n );\r\n this.appliedFilterOptions =\r\n this.appliedFilterOptions.length === 1 ? [] : this.appliedFilterOptions;\r\n this.filtersAndOptions.forEach((options: CheckboxOption[]) => {\r\n options?.forEach((checkBoxOption: CheckboxOption) => {\r\n if (checkBoxOption.id === option.id) checkBoxOption.checked = false;\r\n });\r\n });\r\n this.removeFilteredOption.emit(this.getListOfSelectedCheckboxes());\r\n }\r\n this.setFilterSelectionOnOptionChange();\r\n }\r\n getListOfSelectedCheckboxes() {\r\n const selectedFiltersAndOptions: FiltersAndOptions[] = [];\r\n this.filtersAndOptions.forEach(\r\n (value: CheckboxOption[], key: string | number) => {\r\n const selectedOptions: CheckboxOption[] = [];\r\n value?.forEach((option) => {\r\n if (option.checked) selectedOptions.push(option);\r\n });\r\n if (selectedOptions.length)\r\n selectedFiltersAndOptions.push({ [key]: selectedOptions });\r\n }\r\n );\r\n return selectedFiltersAndOptions;\r\n }\r\n /**\r\n * OnFilterApply toggles the isFilterByOptionsVisible state, emits the selected filter options and toggles the filter stateO\r\n * @memberof FilterComponent\r\n */\r\n onFilterApply(): void {\r\n this.isFilterOpened = !this.isFilterOpened;\r\n this.filteredOptions.emit(this.getListOfSelectedCheckboxes());\r\n this.onFilterToggle = true;\r\n this.isApplyButtonDisabled = true;\r\n this.changeDetectorReference.detectChanges();\r\n }\r\n /**\r\n * SelectedFilterOptions method is called for every selection and deselection of filter option and stores the selected filter options.\r\n * @param {FiltersAndOptions[]} values\r\n * @memberof FilterComponent\r\n */\r\n selectedFilterOptionsInfo(values: CheckboxOption[]): void {\r\n if (this.getListOfSelectedCheckboxes().length === 0)\r\n this.isApplyButtonDisabled = true;\r\n else this.isApplyButtonDisabled = false;\r\n if (values && this.selectedFilterId) {\r\n this.filtersAndOptions.set(this.selectedFilterId, values);\r\n this.setFilterSelectionOnOptionChange();\r\n }\r\n }\r\n /**\r\n * OnFilterByIconClick method toggles the isFilterActive value.\r\n * @memberof FilterComponent\r\n */\r\n onFilterByIconClick(): void {\r\n this.isFilterActive = !this.isFilterActive;\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof FilterComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n\r\n /**\r\n * OnDropdownSelectionChange() is called for every drop down selection changes and sets selectedFilterOptionsList.\r\n * @memberof FilterComponent\r\n */\r\n onDropdownSelectionChange(option: SelectOption): void {\r\n if (option && this.selectedFilterId) {\r\n const selectedOption: CheckboxOption[] = [\r\n {\r\n id: option.id,\r\n name: option.name,\r\n checked: true,\r\n disabled: false,\r\n },\r\n ];\r\n this.selectedFilterOptionsList?.map((option) => {\r\n if (option.id === selectedOption[0].id) {\r\n option.checked = true;\r\n } else {\r\n option.checked = false;\r\n }\r\n });\r\n this.isApplyButtonDisabled = false;\r\n this.filtersAndOptions.set(this.selectedFilterId, selectedOption);\r\n this.setFilterSelectionOnOptionChange();\r\n }\r\n }\r\n\r\n /**\r\n * SetFilterSelectionOnOptionChange() called on every selection and deselection of filter option and sets canShowSelection flag to show or hide the tick mark of selected filter option.\r\n * @memberof FilterComponent\r\n */\r\n setFilterSelectionOnOptionChange(): void {\r\n if (this.canShowSelection) {\r\n for (const [key, options] of this.filtersAndOptions) {\r\n const filterOption = this.filters.find((chipOption) => {\r\n return chipOption.name === key;\r\n });\r\n if (filterOption) {\r\n filterOption.canShowSelection = options.some(\r\n (option) => option.checked === true\r\n );\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Emits the filterDropdownSearch event with the searched text value.\r\n * @param {string} searchText\r\n * @memberof FilterComponent\r\n */\r\n onDropdownSearch(searchText: string): void {\r\n this.filterDropdownSearch.emit(searchText);\r\n }\r\n /**\r\n * Emits filterDropdownSearch event to reset the dropdown options to default when the dropdown is closed and sets search term empty.\r\n * @param {SelectOpenedState} event\r\n * @memberof FilterComponent\r\n */\r\n onDropdownOpenedChange(event: SelectOpenedState): void {\r\n if (this.defaultSelectedFilterDropDownOptions?.length === 0) {\r\n this.defaultSelectedFilterDropDownOptions =\r\n this.selectedFilterDropDownList;\r\n }\r\n if (!event?.opened) {\r\n this.selectedFilterDropDownList =\r\n this.defaultSelectedFilterDropDownOptions;\r\n }\r\n if (\r\n !event?.opened &&\r\n this.selectComponent?.formFields?.toArray()?.[0]?.searchTerm\r\n ) {\r\n this.selectComponent.formFields.toArray()[0].searchTerm = '';\r\n }\r\n }\r\n}\r\n","<div class=\"ieeesa-filter\" *ngIf=\"filters && filters.length > 0\">\r\n <div\r\n class=\"d-flex flex-column flex-sm-column flex-md-column flex-lg-row flex-xl-row\"\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"filterButton\"\r\n (click)=\"onFilterByIconClick()\"\r\n ></ieeesa-icon-button>\r\n <p\r\n class=\"ieeesa-label-lg-bold-16 m-0\"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n {{ constants?.filter?.label?.filterBy }}\r\n </p>\r\n </div>\r\n <div\r\n [ngClass]=\"\r\n !isMobileView\r\n ? 'd-flex align-items-center'\r\n : 'd-flex align-self-stretch flex-wrap align-items-center pt-sm-2 pt-md-2 pt-2'\r\n \"\r\n *ngIf=\"!isMobileView || isFilterActive\"\r\n >\r\n <ieeesa-chips\r\n [chipGroup]=\"filters\"\r\n [arrow]=\"arrow\"\r\n [check]=\"check\"\r\n [hasChipToggled]=\"onFilterToggle\"\r\n (selectedChip)=\"onFilterSelected($event)\"\r\n ></ieeesa-chips>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!isMobileView || isFilterActive\">\r\n <ieeesa-checkbox\r\n [checkboxes]=\"selectedFilterOptions\"\r\n [recreateCheckboxOptionsControl]=\"recreateCheckboxOptionsControl\"\r\n (checkboxOptionsAndSelection)=\"selectedFilterOptionsInfo($event)\"\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.CHECKBOX\"\r\n class=\"d-flex gap-2 ieeesa-filter__filter-options\"\r\n ></ieeesa-checkbox>\r\n <ieeesa-select\r\n *ngIf=\"isFilterOpened && filterOptionType === optionsType.DROPDOWN\"\r\n [isSortNeeded]=\"false\"\r\n [dropdownOptions]=\"selectedFilterDropDownList\"\r\n [isLabelAlignedLeft]=\"true\"\r\n [selectLabel]=\"constants?.viewGroups?.filterByLabel\"\r\n (optionSelected)=\"onDropdownSelectionChange($event)\"\r\n (optionSearched)=\"onDropdownSearch($event)\"\r\n (dropdownOpenedChange)=\"onDropdownOpenedChange($event)\"\r\n [isSearch]=\"true\"\r\n ></ieeesa-select>\r\n <button\r\n mat-button\r\n *ngIf=\"isFilterOpened\"\r\n class=\"mat-tertiary-button m-2\"\r\n [disabled]=\"isApplyButtonDisabled\"\r\n (click)=\"onFilterApply()\"\r\n >\r\n {{ constants?.filter?.label?.applyButton }}\r\n </button>\r\n <ieeesa-chips\r\n [chipGroup]=\"appliedFilterOptions\"\r\n [isViewMoreNeeded]=\"true\"\r\n *ngIf=\"appliedFilterOptions\"\r\n [arrow]=\"removeIcon\"\r\n (selectedChip)=\"onRemovalOfFilteredOption($event)\"\r\n class=\"d-flex gap-2 mt-2\"\r\n [hasViewMoreForDesktop]=\"false\"\r\n [hasViewMoreForMobile]=\"true\"\r\n ></ieeesa-chips>\r\n </ng-container>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport * as constants from '../../assets/constants.json';\r\n@Component({\r\n selector: 'ieeesa-loader',\r\n standalone: true,\r\n imports: [CommonModule, MatProgressSpinnerModule],\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss'],\r\n})\r\nexport class LoaderComponent {\r\n @Input() diameter = 48;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n loader: any = constants;\r\n}\r\n","<div class=\"ieeesa-loader\">\r\n <mat-progress-spinner\r\n class=\"ieeesa-loader__progress-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"diameter\"\r\n [attr.aria-label]=\"loader.ariaLabel.spinner\"\r\n ></mat-progress-spinner>\r\n <div class=\"ieeesa-loader__overlay\"></div>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum TableColumnType {\r\n TEXT = 'TEXT',\r\n LINK = 'LINK',\r\n SELECT = 'SELECT',\r\n ADD = 'ADD',\r\n EDIT = 'EDIT',\r\n DELETE = 'DELETE',\r\n ACTIONS = 'ACTIONS',\r\n NESTED_TABLE = 'NESTED_TABLE',\r\n SLIDE_TOGGLE = 'SLIDE_TOGGLE',\r\n}\r\n\r\nexport enum TableColumnSortDirection {\r\n ASCENDING = 'asc',\r\n DESCENDING = 'desc',\r\n NO_SORT = '',\r\n}\r\n\r\nexport interface TableColumnSchema {\r\n id: number;\r\n columnDef: string;\r\n heading: string;\r\n columnType: TableColumnType;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cellData: any;\r\n isDateColumn?: boolean;\r\n isStickyColumn?: boolean;\r\n isStickyEndColumn?: boolean;\r\n isSortableColumn?: boolean;\r\n isHTMLCellData?: boolean;\r\n isContentUnderLink?: boolean;\r\n hasColumnActions?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n showIconFlag?: (row: any) => boolean;\r\n iconFlagUrl?: string;\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n AfterViewInit,\r\n ViewEncapsulation,\r\n OnDestroy,\r\n forwardRef,\r\n ElementRef,\r\n HostListener,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport {\r\n MatPaginator,\r\n MatPaginatorModule,\r\n PageEvent,\r\n} from '@angular/material/paginator';\r\nimport {\r\n MatSort,\r\n MatSortModule,\r\n Sort,\r\n SortDirection,\r\n} from '@angular/material/sort';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { SafePipe } from '../../pipes/safe.pipe';\r\nimport { SafeType, IconButton, CheckboxOption } from '@ieeesa-npm/models';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\nimport {\r\n TableColumnSchema,\r\n TableColumnSortDirection,\r\n TableColumnType,\r\n} from '../../models/table-schema.model';\r\nimport { PaginatorConfig } from '../../models/paginator-config.model';\r\nimport { SearchComponent } from '../search/search.component';\r\nimport { FilterComponent } from '../filter/filter.component';\r\nimport { TableActions } from '../../models/table-actions.model';\r\nimport { ChipOption, ChipsType } from '../../models/chip-option.model';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { SearchType } from '../../models/search.model';\r\nimport { FiltersAndOptions } from '../../models/filters-options.model';\r\nimport { TextTruncatedDirective } from '../../directives/text-truncated/text-truncated.directive';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MenuComponent } from '../menu/menu.component';\r\nimport { Menu } from '../../models/menu.model';\r\nimport {\r\n animate,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n} from '@angular/animations';\r\nimport { LegendComponent } from '../legend/legend.component';\r\nimport { Legend } from '../../models/legend.model';\r\nimport { TableColumnMenuInfo } from '../../models/table-column-menu-info.model';\r\nimport { SlideToggleComponent } from '../slide-toggle/slide-toggle.component';\r\nimport { SlideToggleOption } from '../../models/slide-toggle-options.model';\r\n\r\n/**\r\n * Provides a Material Design styled data-table that can be used to display rows of data with sortBy, filterBy, add/edit/delete table row data, pagination, search table data.\r\n * @export\r\n * @class DataTableComponent\r\n * @implements {OnInit}\r\n * @implements {AfterViewInit}\r\n * @implements {OnDestroy}\r\n */\r\n@Component({\r\n selector: 'ieeesa-data-table',\r\n standalone: true,\r\n imports: [\r\n forwardRef(() => SafePipe),\r\n CommonModule,\r\n MatIconModule,\r\n MatSortModule,\r\n SlideToggleComponent,\r\n MatSlideToggleModule,\r\n MatTableModule,\r\n MatPaginatorModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n CheckboxComponent,\r\n IconButtonComponent,\r\n SearchComponent,\r\n FilterComponent,\r\n TextTruncatedDirective,\r\n MenuComponent,\r\n MatTooltipModule,\r\n MenuComponent,\r\n MatTooltipModule,\r\n MenuComponent,\r\n LegendComponent,\r\n ],\r\n templateUrl: './data-table.component.html',\r\n styleUrls: ['./data-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('detailExpand', [\r\n state(\r\n 'collapsed',\r\n style({ height: '0px', minHeight: '0', display: 'none' })\r\n ),\r\n state('expanded', style({ height: '*' })),\r\n transition(\r\n 'expanded <=> collapsed',\r\n animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ),\r\n ]),\r\n ],\r\n})\r\nexport class DataTableComponent implements OnInit, AfterViewInit, OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private tableData!: any[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private nestedTableData!: any[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n expandedElement: any;\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set tableDataInfo(value: any[]) {\r\n this.tableData = value;\r\n this.tableDataChanges();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get tableDataInfo(): any[] {\r\n return this.tableData;\r\n }\r\n\r\n @Input()\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n set nestedTableDataInfo(value: any[]) {\r\n this.nestedTableData = value;\r\n this.tableDataChanges();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get nestedTableDataInfo(): any[] {\r\n return this.nestedTableData;\r\n }\r\n private columnSchema!: TableColumnSchema[];\r\n @Input()\r\n set columnSchemaInfo(value: TableColumnSchema[]) {\r\n this.columnSchema = value;\r\n if (this.columnSchema)\r\n this.displayedColumns = this.columnSchema?.map((c) => c?.columnDef);\r\n }\r\n get columnSchemaInfo(): TableColumnSchema[] {\r\n return this.columnSchema;\r\n }\r\n private nestedTableColumnSchema!: TableColumnSchema[];\r\n @Input()\r\n set nestedTableColumnSchemaInfo(value: TableColumnSchema[]) {\r\n this.nestedTableColumnSchema = value;\r\n this.nestedTableDisplayedColumns = this.nestedTableColumnSchema?.map(\r\n (c) => c?.columnDef\r\n );\r\n this.nestedTableDataSource = new MatTableDataSource(this.nestedTableData);\r\n }\r\n get nestedTableColumnSchemaInfo(): TableColumnSchema[] {\r\n return this.nestedTableColumnSchema;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n @Input() tableActions!: TableActions;\r\n @Input() hasNestedTable = false;\r\n @Input() tableColumnActions!: Menu[];\r\n @Input() tableColumnActionMenuSize = '';\r\n @Input() tableRowActions!: Menu[];\r\n @Input() nestedTableRowActions!: Menu[];\r\n @Input() caption!: string;\r\n @Input() viewAll!: string;\r\n private paginatorConfiguration!: PaginatorConfig;\r\n @Input()\r\n set paginatorConfig(value: PaginatorConfig) {\r\n this.paginatorConfiguration = value;\r\n }\r\n get paginatorConfig(): PaginatorConfig {\r\n return this.paginatorConfiguration;\r\n }\r\n private nestedPaginatorConfiguration!: PaginatorConfig;\r\n @Input()\r\n set nestedPaginatorConfig(value: PaginatorConfig) {\r\n this.nestedPaginatorConfiguration = value;\r\n this.showNestedTablePaginationInfo =\r\n '1 - ' +\r\n +`${this.nestedPaginatorConfig.recordsPerPage}` +\r\n ' of ' +\r\n +`${this.nestedPaginatorConfig.totalRecords}`;\r\n }\r\n get nestedPaginatorConfig(): PaginatorConfig {\r\n return this.nestedPaginatorConfiguration;\r\n }\r\n private legendsInfo!: Legend[];\r\n @Input()\r\n set legends(value: Legend[]) {\r\n this.legendsInfo = value;\r\n }\r\n get legends(): Legend[] {\r\n return this.legendsInfo;\r\n }\r\n private currentPageIndex = 0;\r\n @Input()\r\n set pageIndex(value: number) {\r\n this.currentPageIndex = value;\r\n if (this.paginator) {\r\n this.paginator.pageIndex = value;\r\n }\r\n }\r\n get pageIndex(): number {\r\n return this.currentPageIndex;\r\n }\r\n private currentPageSize = 0;\r\n @Input()\r\n set pageSize(value: number) {\r\n this.currentPageSize = value;\r\n if (this.paginator) {\r\n this.paginator.pageSize = value;\r\n }\r\n }\r\n get pageSize(): number {\r\n return this.currentPageSize;\r\n }\r\n @Input() searchPlaceHolderText!: string;\r\n @Input() rowEditButton!: IconButton;\r\n @Input() rowDeleteButton!: IconButton;\r\n @Input() tableEditButton!: IconButton;\r\n @Input() tableDeleteButton!: IconButton;\r\n @Input() rowExpandButton!: IconButton;\r\n @Input() rowCollapseButton!: IconButton;\r\n @Input() isNestedTableHeaderNeeded = false;\r\n @Input() addButton!: IconButton;\r\n @Input() defaultColumnSortDirection: SortDirection =\r\n TableColumnSortDirection.ASCENDING;\r\n @Input() defaultSortedColumn!: string;\r\n @Input() isClearSortNeeded = true;\r\n @Input() filters!: ChipOption[];\r\n @Input() selectedFilterOptions!: CheckboxOption[];\r\n @Input() appliedFilterOptions!: ChipOption[];\r\n @Input() searchType: SearchType = SearchType.ON_CLICK;\r\n @Input() className!: string;\r\n @Input() searchSupportMessage!: string;\r\n @Input() inbuiltSortingNeeded = false;\r\n @Input() isCellTextOverflowEllipsis = false;\r\n @Input() isTableHeaderNeeded = true;\r\n @Input() tableColumnsHeaderText = '';\r\n @Input() verticalColumnHeaderNumber = 0;\r\n @Input() scrollbarSupportMessage = '';\r\n @Input() isScrollSupportMessageNeeded = false;\r\n @Input() isStickyHeaderNeeded = false;\r\n @Input() customStickyHeaderNeeded = false;\r\n @Input() headerElementClassName = '';\r\n @Input() minCharToSearch = this.constants?.search?.minCharToSearch;\r\n @Output() rowSelected = new EventEmitter();\r\n @Output() selectedRowToEdit = new EventEmitter();\r\n @Output() selectedRowToDelete = new EventEmitter();\r\n @Output() selectedRowsToDelete = new EventEmitter<TableColumnSchema[]>();\r\n @Output() rowLink = new EventEmitter();\r\n @Output() addRow = new EventEmitter();\r\n @Output() columnDataOnRowLinkClick = new EventEmitter();\r\n @Output() menuActionClick = new EventEmitter();\r\n @Output() selectActionMenu = new EventEmitter();\r\n @Output() paginationChange = new EventEmitter<PageEvent>();\r\n @Output() selectedFilter = new EventEmitter<ChipOption>();\r\n @Output() removeFilteredOption = new EventEmitter();\r\n @Output() filteredOptions = new EventEmitter<FiltersAndOptions[]>();\r\n @Output() searchedValue = new EventEmitter<string>();\r\n @Output() sortChange = new EventEmitter<Sort>();\r\n @Output() selectedRowsInfo = new EventEmitter<TableColumnSchema[]>();\r\n @Output() rowExpansionClick = new EventEmitter();\r\n @Output() tableColumnMenuActionClick =\r\n new EventEmitter<TableColumnMenuInfo>();\r\n @Output() tableColumnMenuToggleButton = new EventEmitter<HTMLElement>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() rowSlideToggle = new EventEmitter<{\r\n slideToggle: SlideToggleOption;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rowData: any;\r\n }>();\r\n @ViewChild(MatSort) sort!: MatSort;\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n headerCellElement!: HTMLElement;\r\n headerHeight!: DOMRect;\r\n @ViewChild('tableContent') tableContent!: ElementRef<HTMLElement>;\r\n @HostListener('document:scroll') setStickyTableHeader() {\r\n if (this.elRef.nativeElement && this.customStickyHeaderNeeded) {\r\n const dataTableContent = this.elRef.nativeElement\r\n .querySelector('.ieeesa-data-table__content')\r\n .getBoundingClientRect();\r\n if (this.headerElementClassName)\r\n this.headerHeight = document\r\n ?.querySelector(this.headerElementClassName)\r\n ?.getBoundingClientRect() as DOMRect;\r\n if (dataTableContent) {\r\n this.elRef.nativeElement\r\n .querySelectorAll(' .mat-mdc-header-cell')\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .forEach((column: any) => {\r\n if (\r\n dataTableContent.top <\r\n (this.headerHeight ? this.headerHeight.bottom : 0) &&\r\n dataTableContent.bottom > 0\r\n ) {\r\n this.renderer.setStyle(\r\n column,\r\n 'top',\r\n dataTableContent.top * -1 +\r\n (this.headerHeight ? this.headerHeight.height : 0) -\r\n 1 +\r\n 'px'\r\n );\r\n if (column.classList.contains('mat-mdc-table-sticky')) {\r\n this.renderer.setStyle(column, 'zIndex', 2);\r\n } else {\r\n this.renderer.setStyle(column, 'position', 'sticky');\r\n this.renderer.setStyle(column, 'zIndex', 1);\r\n }\r\n } else {\r\n this.renderer.setStyle(column, 'top', 0 + 'px');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n displayedColumns!: string[];\r\n nestedTableDisplayedColumns!: string[];\r\n isMobileView = false;\r\n isScrollingEnabled = false;\r\n resizeObserverForTableContent!: ResizeObserver;\r\n resizeObserverForTableCell!: ResizeObserver;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n dataSource!: MatTableDataSource<any>;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n nestedTableDataSource!: MatTableDataSource<any>;\r\n selectedRows = new SelectionModel<TableColumnSchema>(true, []);\r\n pageLimit!: number;\r\n pageOffset!: number;\r\n columnType = TableColumnType;\r\n isSearchActive = false;\r\n clearAll = this.constants?.dataTable?.label?.clearAll;\r\n noRecordFound = this.constants?.dataTable?.message?.noRecordFound;\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n showNestedTablePaginationInfo!: string;\r\n private _searchResultMessage!: string;\r\n @Input()\r\n set searchResultMessage(value: string) {\r\n this._searchResultMessage = value;\r\n }\r\n get searchResultMessage(): string {\r\n return this._searchResultMessage;\r\n }\r\n safeType: SafeType = SafeType.HTML;\r\n @Input() rowMenuActionIcon!: IconButton;\r\n @Input() canDisableCheckbox = false;\r\n @Input() isEllipsisRequiredForLink = false;\r\n // eslint-disable-next-line no-unused-vars, no-empty-function\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakpointObserverService: BreakpointObserverService,\r\n // eslint-disable-next-line no-unused-vars\r\n private elRef: ElementRef,\r\n // eslint-disable-next-line no-unused-vars\r\n private renderer: Renderer2\r\n ) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n\r\n /**\r\n * Initializes the data table component and sets the table action buttons.\r\n * @memberof DataTableComponent\r\n */\r\n ngOnInit(): void {\r\n this.displayedColumns = this.columnSchema?.map((c) => c?.columnDef);\r\n const tableActionButtons: IconButton[] = this.constants?.dataTable?.buttons;\r\n this.rowEditButton = this.rowEditButton ?? tableActionButtons[3];\r\n this.rowDeleteButton = this.rowDeleteButton ?? tableActionButtons[4];\r\n this.addButton = this.addButton ?? tableActionButtons[2];\r\n this.tableEditButton = this.tableEditButton ?? tableActionButtons[0];\r\n this.tableEditButton.disabled = true;\r\n this.tableDeleteButton = this.tableDeleteButton ?? tableActionButtons[1];\r\n this.rowExpandButton = this.rowExpandButton ?? tableActionButtons[5];\r\n this.rowCollapseButton =\r\n this.rowCollapseButton ?? this.rowCollapseButton ?? tableActionButtons[6];\r\n this.tableDeleteButton.disabled = true;\r\n this.selectedRows.changed\r\n .pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .subscribe((result: any) => {\r\n this.tableEditButton.disabled = false;\r\n this.tableDeleteButton.disabled = false;\r\n if (result?.source?.selected?.length === 0) {\r\n this.tableEditButton.disabled = true;\r\n this.tableDeleteButton.disabled = true;\r\n } else if (\r\n result?.source?.selected?.length === 1 &&\r\n !result?.source?.selected?.[0]?.canDelete\r\n ) {\r\n this.tableDeleteButton.disabled = true;\r\n } else if (result?.source?.selected?.length > 1) {\r\n this.tableDeleteButton.disabled = false;\r\n this.tableEditButton.disabled = true;\r\n }\r\n });\r\n this.dataSource = new MatTableDataSource(this.tableData);\r\n if (this.scrollbarSupportMessage) {\r\n this.resizeObserverForTableContent = new ResizeObserver(\r\n (element: ResizeObserverEntry[]) => {\r\n this.isScrollingEnabled =\r\n element[0]?.target?.scrollWidth > element[0]?.target?.clientWidth;\r\n }\r\n );\r\n }\r\n if (this.tableColumnsHeaderText && this.verticalColumnHeaderNumber)\r\n this.resizeObserverForTableCell = new ResizeObserver(() => {\r\n this.setMarginLeftForHeaderText();\r\n });\r\n this.tableDataChanges();\r\n }\r\n\r\n /**\r\n * Initializes the sort feature of dataSource and set margin left for tableColumnsHeaderText if it isn't empty.\r\n * @memberof DataTableComponent\r\n */\r\n ngAfterViewInit(): void {\r\n if (this.inbuiltSortingNeeded) {\r\n this.dataSource.sort = this.sort;\r\n this.sort.disableClear = true;\r\n }\r\n this.headerCellElement = this.tableContent.nativeElement.querySelector(\r\n '.mat-mdc-header-cell'\r\n ) as HTMLElement;\r\n this.resizeObserverForTableCell?.observe(this.headerCellElement);\r\n this.resizeObserverForTableContent?.observe(\r\n this.tableContent.nativeElement\r\n );\r\n }\r\n /**\r\n * Set margin left for table column header text based on width of columns.\r\n * @memberof DataTableComponent\r\n */\r\n setMarginLeftForHeaderText(): void {\r\n let columnsWidth = 0;\r\n for (let column = 0; column < this.verticalColumnHeaderNumber; column++) {\r\n const verticalColumnHeaderClassName =\r\n '.mat-column-' + this.columnSchema[column].columnDef;\r\n const columnElement = this.elRef?.nativeElement?.querySelector(\r\n verticalColumnHeaderClassName\r\n ) as HTMLElement;\r\n if (columnElement) columnsWidth += columnElement?.offsetWidth;\r\n }\r\n const columnsHeaderElement = this.elRef?.nativeElement?.querySelector(\r\n '.ieeesa-data-table__columns-header-text'\r\n ) as HTMLElement;\r\n if (columnsHeaderElement)\r\n columnsHeaderElement.style.marginLeft = columnsWidth + 'px';\r\n }\r\n /**\r\n * Sets the dataSource whenever the table data changes.\r\n * @memberof DataTableComponent\r\n */\r\n tableDataChanges(): void {\r\n if (this.dataSource) {\r\n this.dataSource.data = this.tableData;\r\n if (this.inbuiltSortingNeeded) this.dataSource.sort = this.sort;\r\n this.selectedRows.clear();\r\n }\r\n if (this.nestedTableDataSource) {\r\n this.nestedTableDataSource.data = this.nestedTableData;\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n /**\r\n * SortTableData method emits the clicked table column name and sorting direction\r\n * @param {Sort} sort\r\n * @memberof DataTableComponent\r\n */\r\n sortTableData(sort: Sort): void {\r\n this.sortChange.emit(sort);\r\n }\r\n /**\r\n * Handle edit actions method emits the clicked row data\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onRowActionClick(row: any) {\r\n this.selectActionMenu.emit(row);\r\n }\r\n /**\r\n * Emits the slide toggle option along with the selected row info.\r\n * @param {SlideToggleOption} slideToggleOption\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rowSlideToggleChange(slideToggleOption: SlideToggleOption, row: any) {\r\n this.rowSlideToggle.emit({ slideToggle: slideToggleOption, rowData: row });\r\n }\r\n /**\r\n * Menu item action method emits the clicked menu options\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n menuItemAction(row: any): void {\r\n this.menuActionClick.emit(row);\r\n }\r\n /**\r\n * OnSelectClick method emits the rowSelected event with selected row data.\r\n * @param {*} row\r\n * @param {boolean} checked\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSelectClick(row: any): void {\r\n this.selectedRows.toggle(row);\r\n row.checked = !row.checked;\r\n this.rowSelected.emit(row);\r\n this.selectedRowsInfo.emit(this.selectedRows.selected);\r\n }\r\n /**\r\n * Emits tableColumnActionInfo event with tableColumnInfo and menuActionInfo.\r\n * @param {TableColumnSchema} column\r\n * @param {Menu} menuAction\r\n * @memberof DataTableComponent\r\n */\r\n tableColumnActionClick(column: TableColumnSchema, menuAction: Menu): void {\r\n this.tableColumnMenuActionClick.emit({\r\n tableColumnInfo: column,\r\n menuActionInfo: menuAction,\r\n });\r\n }\r\n /**\r\n * Emits tableColumnActionElement event with the selected HTML Element.\r\n * @param {HTMLElement} element\r\n * @memberof DataTableComponent\r\n */\r\n tableColumnActionElement(element: HTMLElement): void {\r\n this.tableColumnMenuToggleButton.emit(element);\r\n }\r\n /**\r\n * OnEditClick method emits the selectedRowToEdit event with the selected row data.\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onEditClick(row: any): void {\r\n this.selectedRowToEdit.emit(row);\r\n }\r\n\r\n /**\r\n * OnDeleteClick method emits the selectedRowToDelete event with the selected row data.\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onDeleteClick(row: any): void {\r\n this.selectedRowToDelete.emit(row);\r\n }\r\n\r\n /**\r\n *OnLinkClick method emits the event with row and column.\r\n * @param {*} row\r\n * @param {TableColumnSchema} [column]\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onLinkClick(row: any, column?: TableColumnSchema): void {\r\n this.rowLink.emit(row);\r\n this.columnDataOnRowLinkClick.emit({ row, column });\r\n }\r\n\r\n /**\r\n * OnTableEditClick method emits event with selected rows data when edit button clicked.\r\n * @memberof DataTableComponent\r\n */\r\n onTableEditClick(): void {\r\n this.selectedRowToEdit.emit(this.selectedRows.selected);\r\n }\r\n\r\n /**\r\n * OnDeleteTableClick method emits event with selected row data when delete button clicked.\r\n * @memberof DataTableComponent\r\n */\r\n onDeleteTableClick(): void {\r\n this.selectedRowsToDelete.emit(this.selectedRows.selected);\r\n }\r\n\r\n /**\r\n * OnAddClick method emits the add event when add button clicked.\r\n * @memberof DataTableComponent\r\n */\r\n onAddClick(): void {\r\n this.addRow.emit();\r\n }\r\n\r\n /**\r\n * OnTableSearchClick method toggles the isSearchActive state when the search icon is clicked for the mobile view.\r\n * @memberof DataTableComponent\r\n */\r\n onTableSearchClick(): void {\r\n this.isSearchActive = !this.isSearchActive;\r\n }\r\n\r\n /**\r\n * SelectedFilterInfo method emits the selectedFilter event with selected filter information.\r\n * @param {ChipOption} option\r\n * @memberof DataTableComponent\r\n */\r\n selectedFilterTypeInfo(option: ChipOption): void {\r\n this.selectedFilter.emit(option);\r\n }\r\n\r\n /**\r\n * Emits the rowExpansionClick event with the selected row data when the row is expanded.\r\n * @param {*} row\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onTableRowExpansionClick(row: any): void {\r\n this.nestedTableDataSource.data = [];\r\n if (this.expandedElement === row) this.rowExpansionClick.emit(row);\r\n }\r\n\r\n /**\r\n * OnSelectedFilterOptions method emits the filteredOptions event with the selected options and adds \"Clear all\" option to clear the all selections.\r\n * @param {CheckboxOption[]} options\r\n * @memberof DataTableComponent\r\n */\r\n onSelectedFilterOptions(selectedOptions: FiltersAndOptions[]): void {\r\n this.filteredOptions.emit(selectedOptions);\r\n this.appliedFilterOptions = [];\r\n selectedOptions?.forEach((options) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\r\n for (const [key, value] of Object.entries(options)) {\r\n value?.forEach((option) => {\r\n if (option.checked) {\r\n this.appliedFilterOptions.push({\r\n id: option.id,\r\n name: option.name as string,\r\n checked: option.checked,\r\n disabled: option.disabled,\r\n chipType: ChipsType.TOGGLE,\r\n });\r\n }\r\n });\r\n }\r\n });\r\n this.appliedFilterOptions.push({\r\n id: this.clearAll,\r\n name: this.clearAll,\r\n disabled: false,\r\n checked: false,\r\n chipType: ChipsType.STATIC,\r\n });\r\n }\r\n /**\r\n * OnRemovalOfFilteredOption method emits the removeFilteredOption event with removed option.\r\n * @param {ChipOption} option\r\n * @memberof DataTableComponent\r\n */\r\n onRemovalOfFilteredOption(options: FiltersAndOptions[]): void {\r\n this.removeFilteredOption.emit(options);\r\n }\r\n\r\n /**\r\n * SearchValue method emits the searched value and resets page index to zero.\r\n * @param {string} value\r\n * @memberof DataTableComponent\r\n */\r\n searchValue(value: string): void {\r\n this.searchedValue.emit(value);\r\n if (\r\n this.paginator &&\r\n (value?.length === 0 || value.trim()?.length >= this.minCharToSearch)\r\n ) {\r\n this.paginator.pageIndex = 0;\r\n }\r\n }\r\n /**\r\n * Handles the pagination for every page.\r\n * @param {PageEvent} event\r\n * @memberof DataTableComponent\r\n */\r\n handlePagination(event: PageEvent): void {\r\n this.paginationChange.emit(event);\r\n }\r\n /**\r\n * IsAllRowSelected method returns the boolean value by checking selectedRows and totalRows length.\r\n * @return {*} {boolean}\r\n * @memberof DataTableComponent\r\n */\r\n isAllRowsSelected(): boolean {\r\n if (this.canDisableCheckbox)\r\n return (\r\n this.selectedRows.selected.length ===\r\n this.dataSource.data.filter((item) => !item?.disable)?.length\r\n );\r\n return this.selectedRows.selected.length === this.dataSource.data.length;\r\n }\r\n\r\n /**\r\n * ToggleAllRowsSelection method clears selectedRows when all rows are selected else selects the all rows.\r\n * @return {*} {void}\r\n * @memberof DataTableComponent\r\n */\r\n toggleAllRowsSelection(): void {\r\n if (this.isAllRowsSelected()) this.selectedRows.clear();\r\n else if (this.canDisableCheckbox)\r\n this.selectedRows.select(\r\n ...this.dataSource.data.filter((item) => !item?.disable)\r\n );\r\n else this.selectedRows.select(...this.dataSource.data);\r\n\r\n this.selectedRowsInfo.emit(this.selectedRows.selected);\r\n }\r\n\r\n /**\r\n * Allows Angular to detect the specific table row that needs to change or be added by tracking row unique Id.\r\n * @param {number} index\r\n * @param {TableColumnSchema} column\r\n * @return {*} {number}\r\n * @memberof DataTableComponent\r\n */\r\n trackById(index: number, column: TableColumnSchema): number {\r\n return column.id;\r\n }\r\n /**\r\n * Sets the table row left border as per the legend color\r\n * @param {string} color\r\n * @return {*}\r\n * @memberof DataTableComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getRowBorderLeftColor(color: string): any {\r\n return {\r\n borderLeft: '5px solid ' + color,\r\n };\r\n }\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof DataTableComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.resizeObserverForTableCell?.unobserve(this.headerCellElement);\r\n this.resizeObserverForTableContent?.unobserve(\r\n this.tableContent.nativeElement\r\n );\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <div\r\n class=\"d-flex\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'flex-column ms-4'\r\n : 'justify-content-center position-relative'\r\n \"\r\n >\r\n <caption\r\n class=\"ieeesa-data-table--caption\"\r\n *ngIf=\"caption\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-title-md-18'\"\r\n >\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <p\r\n *ngIf=\"isScrollingEnabled && isScrollSupportMessageNeeded\"\r\n class=\"m-0 mb-2\"\r\n [ngClass]=\"{ 'position-absolute bottom-0 end-0': !isMobileView }\"\r\n >\r\n {{ scrollbarSupportMessage }}\r\n </p>\r\n </div>\r\n <div\r\n *ngIf=\"tableActions\"\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-between align-items-lg-baseline p-sm-0\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7 col-lg-6' }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex align-items-center gap-lg-4 gap-md-3 gap-sm-3 gap-3 col-md-5 col-lg-6 justify-content-end ps-0\"\r\n [ngClass]=\"!tableActions?.isFilterNeeded ? 'col-md-12 col-lg-12' : ''\"\r\n >\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n [ngClass]=\"\r\n addButton?.disabled ? 'ieeesa-data-table__actions--disabled' : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0 || tableDeleteButton.disabled\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }} p-0\"\r\n [filters]=\"filters\"\r\n *ngIf=\"tableActions?.isFilterNeeded\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2 mt-2 md-2\"\r\n [supportMessage]=\"searchSupportMessage\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <p\r\n class=\"ieeesa-data-table__search_result_label\"\r\n *ngIf=\"searchResultMessage\"\r\n [innerHTML]=\"searchResultMessage | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-data-table__columns-header-text mb-0 ieeesa-title-md-18 text-center\"\r\n *ngIf=\"tableColumnsHeaderText\"\r\n [innerHTML]=\"tableColumnsHeaderText | safe : safeType\"\r\n ></p>\r\n <div\r\n class=\"ieeesa-data-table__content\"\r\n [ngClass]=\"\r\n tableDataInfo && tableDataInfo.length === 0\r\n ? 'ieeesa-data-table__no-table-data'\r\n : ''\r\n \"\r\n #tableContent\r\n >\r\n <table\r\n mat-table\r\n [ngClass]=\"className\"\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortDisableClear]=\"isClearSortNeeded\"\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n (matSortChange)=\"sortTableData($event)\"\r\n [trackBy]=\"trackById\"\r\n multiTemplateDataRows\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span [ngClass]=\"{ 'me-2': column.hasColumnActions }\">{{\r\n column.heading\r\n }}</span>\r\n <ng-container *ngIf=\"column.hasColumnActions\">\r\n <ieeesa-menu\r\n [menuItems]=\"tableColumnActions\"\r\n [defaultIconSize]=\"tableColumnActionMenuSize\"\r\n (menuItemClick)=\"tableColumnActionClick(column, $event)\"\r\n (menuToggleButtonElement)=\"tableColumnActionElement($event)\"\r\n class=\"ieeesa-data-table__column-menu\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: tableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n [attr.colspan]=\"displayedColumns?.length\"\r\n >\r\n <div\r\n class=\"ieeesa-expanded-row\"\r\n [@detailExpand]=\"row === expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"ieeesa-nested-data-table\">\r\n <table\r\n #nestedTable\r\n mat-table\r\n [trackBy]=\"trackById\"\r\n [dataSource]=\"nestedTableDataSource\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of nestedTableColumnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: nestedTableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNestedTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"\r\n nestedTableDisplayedColumns;\r\n sticky: false\r\n \"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-nested-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: nestedTableDisplayedColumns\"\r\n [ngStyle]=\"\r\n row?.legendColor\r\n ? getRowBorderLeftColor(row?.legendColor)\r\n : ''\r\n \"\r\n ></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"row === expandedElement\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center ieeesa-expanded-row__footer\"\r\n *ngIf=\"\r\n nestedPaginatorConfig.totalRecords >\r\n nestedPaginatorConfig.recordsPerPage &&\r\n nestedPaginatorConfig.recordsPerPage > 0\r\n \"\r\n >\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ viewAll ?? \"\" }}\r\n </button>\r\n <span class=\"nested-element-detail__footer--detail\">{{\r\n showNestedTablePaginationInfo\r\n }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: false\"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n [ngClass]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\r\n [ngStyle]=\"\r\n row?.legendColor ? getRowBorderLeftColor(row?.legendColor) : ''\r\n \"\r\n *matRowDef=\"let row; columns: displayedColumns; let i = dataIndex\"\r\n ></tr>\r\n <ng-container *ngIf=\"hasNestedTable\">\r\n <tr\r\n mat-row\r\n *matRowDef=\"let details; columns: ['expandedDetail']\"\r\n class=\"ieeesa-row-expanded-table-detail\"\r\n ></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n<p\r\n class=\"ieeesa-data-table__message ieeesa-title-lg-bold-24 text-center p-5\"\r\n *ngIf=\"tableDataInfo && tableDataInfo.length === 0\"\r\n>\r\n {{ noRecordFound }}\r\n</p>\r\n<div class=\"row ieeesa-data-table__pagination-container\">\r\n <ieeesa-legend\r\n class=\"col-sm-12 col-md-5 d-flex align-items-end px-4\"\r\n *ngIf=\"legends?.length\"\r\n [ngClass]=\"!tableActions?.isPaginationNeeded ? 'col-md-12' : ''\"\r\n [legends]=\"legends\"\r\n [isSorting]=\"true\"\r\n ></ieeesa-legend>\r\n <div\r\n *ngIf=\"tableActions?.isPaginationNeeded\"\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse col-sm-12 col-md-7\"\r\n [ngClass]=\"!legends?.length ? 'col-md-12' : ''\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n #paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</div>\r\n<ng-template\r\n #tableData\r\n let-column=\"column\"\r\n let-row=\"row\"\r\n let-tableRowActions=\"tableRowActions\"\r\n>\r\n <ng-container [ngSwitch]=\"column?.columnType\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngIf=\"isCellTextOverflowEllipsis; then ellipsisCell; else textWrapCell\"\r\n >\r\n </ng-container>\r\n <ng-template #textWrapCell>\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"column?.cellData(row) | safe : safeType\"\r\n ></p>\r\n <ng-container *ngIf=\"!column?.isHTMLCellData\">\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p></ng-container\r\n >\r\n </ng-template>\r\n <ng-template #ellipsisCell>\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"column?.cellData(row)\"\r\n class=\"ieeesa-data-table__cell-content--ellipsis ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <div class=\"ieeesa-cell-data\">\r\n <div class=\"ieeesa-cell-data__link-row\">\r\n <ng-container\r\n *ngIf=\"\r\n isEllipsisRequiredForLink;\r\n then ellipsisCell;\r\n else textWrapCell\r\n \"\r\n >\r\n </ng-container>\r\n <ng-template #ellipsisCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n ieeesaTextTruncated\r\n [elementClassNameToAddTooltip]=\"'.mdc-button .mdc-button__label'\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link ieeesa-data-table__cell-content-link--ellipsis\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText ?? column?.cellData(row)\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <ng-template #textWrapCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <svg\r\n *ngIf=\"column?.showIconFlag && column?.showIconFlag(row)\"\r\n class=\"ieeesa-data-table__attendance-flag-icon\"\r\n [attr.aria-label]=\"'Has attendance records'\"\r\n >\r\n <use [attr.xlink:href]=\"column?.iconFlagUrl ?? '/assets/images/sprites/sprites.svg#icon-attendance-flag'\"></use>\r\n </svg>\r\n </div>\r\n\r\n <ng-container *ngIf=\"column?.isContentUnderLink\">\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"row?.contentUnderLink | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"!column?.isHTMLCellData\"\r\n >\r\n {{ row?.contentUnderLink }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.NESTED_TABLE\">\r\n <ieeesa-icon-button\r\n mat-button\r\n *ngIf=\"row?.hasChildren\"\r\n (iconButtonClick)=\"\r\n expandedElement = expandedElement === row ? null : row;\r\n onTableRowExpansionClick(row)\r\n \"\r\n [iconButton]=\"\r\n expandedElement === row ? rowExpandButton : rowCollapseButton\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n [disabled]=\"row?.disable && canDisableCheckbox\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType.SLIDE_TOGGLE\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"column?.cellData(row)\"\r\n (slideToggleChange)=\"rowSlideToggleChange($event, row)\"\r\n [canShowIcon]=\"true\"\r\n ></ieeesa-slide-toggle>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.ACTIONS\">\r\n <ieeesa-menu\r\n [button]=\"rowMenuActionIcon\"\r\n [menuItems]=\"tableRowActions ?? row.menuAction\"\r\n (click)=\"menuItemAction(row)\"\r\n (menuItemClick)=\"onRowActionClick($event)\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n","import { Component, Input, OnDestroy, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\nimport {\r\n ActivatedRoute,\r\n Data,\r\n NavigationEnd,\r\n Router,\r\n RouterModule,\r\n} from '@angular/router';\r\nimport * as screenTexts from '../../assets/constants.json';\r\nimport { Breadcrumb } from '../../models/breadcrumb.model';\r\n\r\n/**\r\n * Reusable breadcrumb component for displaying and navigating through a hierarchy of pages.\r\n * @class BreadcrumbComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-breadcrumb',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class BreadcrumbComponent implements OnDestroy {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n breadcrumbTexts: any = screenTexts;\r\n /**\r\n * Initial route for the breadcrumb component.\r\n * @type {string}\r\n * @default '/'\r\n * @memberof BreadcrumbComponent\r\n */\r\n @Input() breadcrumbInitialRoute = '/';\r\n /**\r\n * Initial label for the breadcrumb component.\r\n * @type {string}\r\n * @default breadcrumbTexts?.breadcrumb?.label?.initial\r\n * @memberof BreadcrumbComponent\r\n */\r\n @Input() breadcrumbInitialRouteLabel =\r\n this.breadcrumbTexts?.breadcrumb?.label?.initial;\r\n breadcrumbs!: Breadcrumb[];\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n static readonly ROUTE_DATA_BREADCRUMB = 'breadcrumb';\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n public activatedRoute: ActivatedRoute,\r\n // eslint-disable-next-line no-unused-vars\r\n private router: Router\r\n ) {\r\n this.breadcrumbs = [];\r\n this.setRouteData();\r\n }\r\n\r\n /**\r\n * Sets up the subscription to router events to update breadcrumbs.\r\n * @memberof BreadcrumbComponent\r\n */\r\n setRouteData() {\r\n this.router.events\r\n .pipe(\r\n filter((event) => event instanceof NavigationEnd),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe(() => {\r\n this.breadcrumbs = this.createBreadcrumbs(this.activatedRoute.root);\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * Recursively gets the breadcrumb items for the given route.\r\n * @param {ActivatedRoute} route - The activated route.\r\n * @param {string} [url=''] - The current URL.\r\n * @param {Breadcrumb[]} [breadcrumbs=[]] - The current breadcrumb items.\r\n * @return {Breadcrumb[]} - The array of breadcrumb items.\r\n * @memberof BreadcrumbComponent\r\n */\r\n createBreadcrumbs(\r\n route: ActivatedRoute,\r\n url = '',\r\n breadcrumbs: Breadcrumb[] = []\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ): any {\r\n const children: ActivatedRoute[] = route.children;\r\n\r\n if (children.length === 0) {\r\n return breadcrumbs;\r\n }\r\n\r\n for (const child of children) {\r\n const routeURL: string = child.snapshot.url\r\n .map((segment) => segment.path)\r\n .join('/');\r\n if (routeURL !== '') {\r\n url += `/${routeURL}`;\r\n }\r\n\r\n const routeData: Data = child.snapshot.data;\r\n const label =\r\n child.snapshot.data[BreadcrumbComponent.ROUTE_DATA_BREADCRUMB];\r\n // Capture query params from the route snapshot so breadcrumb links preserve them\r\n const snapshotQueryParams = child.snapshot.queryParams ?? {};\r\n const queryParams = Object.keys(snapshotQueryParams).length > 0\r\n ? snapshotQueryParams\r\n : undefined;\r\n if (\r\n routeData['breadcrumbData'] &&\r\n routeData['breadcrumbData'].breadcrumb &&\r\n label\r\n ) {\r\n const newLabel = routeData['breadcrumbData'].breadcrumb;\r\n const actionLabel = routeData['breadcrumbData'].actionBreadcrumb;\r\n const breadcrumbUrl = routeData['breadcrumbData'].breadcrumbUrl ?? url;\r\n const actionBreadcrumbUrl =\r\n routeData['breadcrumbData'].actionBreadcrumbUrl ?? url;\r\n const breadcrumbParams =\r\n routeData['breadcrumbData'].queryParam ?? queryParams;\r\n const actionBreadcrumbParams =\r\n routeData['breadcrumbData'].actionBreadcrumbParams ?? breadcrumbParams;\r\n breadcrumbs.push({\r\n label: newLabel,\r\n url: breadcrumbUrl,\r\n params: breadcrumbParams,\r\n });\r\n if (actionLabel) {\r\n breadcrumbs.push({\r\n label: actionLabel,\r\n url: actionBreadcrumbUrl,\r\n params: actionBreadcrumbParams,\r\n });\r\n }\r\n } else if (label) {\r\n breadcrumbs.push({ label, url, params: queryParams });\r\n }\r\n return this.createBreadcrumbs(child, url, breadcrumbs);\r\n }\r\n }\r\n\r\n /**\r\n * Takes the index and the current item as arguments and needs to return the unique identifier for this item.\r\n * @param {number} index\r\n * @return {number}\r\n * @memberof BreadcrumbComponent\r\n */\r\n trackByFn(index: number): number {\r\n return index;\r\n }\r\n\r\n /**\r\n * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof BreadcrumbComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.unsubscribe();\r\n }\r\n}\r\n","<ul class=\"ieeesa-breadcrumb breadcrumb\">\r\n <li>\r\n <a\r\n [routerLink]=\"breadcrumbInitialRoute\"\r\n class=\"ieeesa-body-sm-14 text-decoration-none\"\r\n >{{ breadcrumbInitialRouteLabel }}\r\n </a>\r\n </li>\r\n\r\n <li\r\n *ngFor=\"\r\n let breadcrumb of breadcrumbs;\r\n let last = last;\r\n let i = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container *ngIf=\"!last; else disableLink\">\r\n <a\r\n [routerLink]=\"breadcrumb?.url\"\r\n [queryParams]=\"breadcrumb?.params\"\r\n class=\"ieeesa-body-sm-14 text-decoration-none\"\r\n >{{ breadcrumb.label }}</a\r\n >\r\n </ng-container>\r\n <ng-template #disableLink>\r\n <span class=\"ieeesa-body-sm-14\">{{ breadcrumb.label }}</span>\r\n </ng-template>\r\n </li>\r\n</ul>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Button, Tile } from '../../models/tile.model';\r\nimport { AlignType } from '@ieeesa-npm/models';\r\n\r\n/**\r\n * Creates tile component.\r\n * @export\r\n * @class TileComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-tile',\r\n standalone: true,\r\n imports: [CommonModule, MatCardModule, MatButtonModule],\r\n templateUrl: './tile.component.html',\r\n styleUrls: ['./tile.component.scss'],\r\n})\r\nexport class TileComponent {\r\n alignmentType = AlignType;\r\n private tilesInfo!: Tile[];\r\n /**\r\n * Input property to get the tiles info.\r\n * @type {Tile}\r\n * @memberof TileComponent\r\n */\r\n @Input() set tiles(value: Tile[]) {\r\n this.tilesInfo = value;\r\n }\r\n\r\n get tiles(): Tile[] {\r\n return this.tilesInfo;\r\n }\r\n /**\r\n * Emits the click event\r\n * @type {EventEmitter}\r\n * @memberof TileComponent\r\n */\r\n @Output() tileClicked = new EventEmitter<Tile>();\r\n\r\n private buttonAlignment = AlignType.RIGHT;\r\n\r\n /**\r\n * Sets tile buttons alignment type..\r\n * @type {string} accepts Left, Right and Middle as values\r\n * @memberof TileComponent\r\n */\r\n @Input() set buttonAlignmentInfo(value: AlignType) {\r\n this.buttonAlignment = value;\r\n }\r\n\r\n get buttonAlignmentInfo(): AlignType {\r\n return this.buttonAlignment;\r\n }\r\n\r\n trackByFn(index: number, item: Tile): string {\r\n return item?.title;\r\n }\r\n\r\n trackByButtonFn(index: number, item: Button): string {\r\n return item?.id;\r\n }\r\n\r\n onTileButtonClicked(tile: Tile): void {\r\n this.tileClicked?.emit(tile);\r\n }\r\n}\r\n","<div class=\"d-flex flex-column flex-wrap flex-sm-row flex-container\">\r\n <mat-card\r\n *ngFor=\"let tile of tiles; trackBy: trackByFn\"\r\n class=\"ieeesa-tile d-flex\"\r\n [ngClass]=\"{ 'ieeesa-tile--inactive': !tile?.isActive }\"\r\n >\r\n <mat-card-header class=\"ieeesa-tile__header ieeesa-headline-sm-24\">\r\n <mat-card-title>{{ tile?.title }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content class=\"ieeesa-tile__content ieeesa-body-color-sm-14\">\r\n <p>{{ tile?.description }}</p>\r\n </mat-card-content>\r\n <mat-card-actions\r\n class=\"ieeesa-tile__actions d-flex flex-nowrap\"\r\n [ngClass]=\"{\r\n 'justify-content-start':\r\n buttonAlignmentInfo === alignmentType.LEFT,\r\n 'justify-content-end':\r\n buttonAlignmentInfo === alignmentType.RIGHT,\r\n 'justify-content-center':\r\n buttonAlignmentInfo === alignmentType.MIDDLE\r\n }\"\r\n >\r\n <button\r\n *ngFor=\"let button of tile?.buttons; trackBy: trackByButtonFn\"\r\n mat-button\r\n [disabled]=\"button?.isDisabled\"\r\n class=\"mat-tertiary-button ieeesa-tile__actions__button\"\r\n (click)=\"onTileButtonClicked(tile)\"\r\n >\r\n <span\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-tile__actions__button__label\"\r\n >{{ button?.label }}\r\n <i\r\n *ngIf=\"button?.isRightArrowNeeded\"\r\n class=\"fa fa-arrow-right\"\r\n aria-hidden=\"true\"\r\n ></i\r\n ></span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum CustomProperties {\r\n EVENT_ID = 'eventId',\r\n MEETING_ID = 'meetingId',\r\n ROUTE_PATHS = 'routePaths',\r\n API_BASE_URL = 'apiBaseURL',\r\n API_DOMAIN_URL = 'apiDomainURL',\r\n USER_PERMISSIONS = 'userPermissions',\r\n ACTION_TYPE = 'actionType',\r\n IS_VIEW_ONLY = 'isViewOnly',\r\n IS_MEMBER_OF_GROUP = 'isMemberOfGroup',\r\n TENANT_FEATURES = 'tenantFeatures',\r\n}\r\n","/* eslint-disable no-empty-function */\r\nimport {\r\n Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatTabChangeEvent,\r\n MatTabGroup,\r\n MatTabsModule,\r\n} from '@angular/material/tabs';\r\nimport { Tab } from '../../models/tab.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ModalConfirmationComponent } from '../modal-confirmation/modal-confirmation.component';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport * as constants from '../../assets/constants.json';\r\nimport { FormGroup } from '@angular/forms';\r\nimport {\r\n EventsAndMeetingRouteConfig,\r\n UserPermission,\r\n ConfirmationModalData\r\n} from '@ieeesa-npm/models';\r\nimport { CustomProperties } from '../../models/custom-properties.model';\r\n\r\n@Component({\r\n selector: 'ieeesa-tabs',\r\n standalone: true,\r\n imports: [CommonModule, MatTabsModule],\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TabsComponent implements OnInit, OnDestroy {\r\n @ViewChild('componentContainer', { read: ViewContainerRef, static: true })\r\n componentContainer!: ViewContainerRef;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n componentRef!: ComponentRef<any>;\r\n isComponentLoaded = false;\r\n previousTabIndex = 0;\r\n private isFormValuesChanged = false;\r\n @Input() selectedTabIndex = 0;\r\n private _tabs: Tab[] = [];\r\n @Input()\r\n set tabs(tab: Tab[]) {\r\n this._tabs = tab;\r\n }\r\n get tabs(): Tab[] {\r\n return this._tabs;\r\n }\r\n @Input()\r\n set isFormChanged(status: boolean) {\r\n this.isFormValuesChanged = status;\r\n }\r\n get isFormChanged(): boolean {\r\n return this.isFormValuesChanged;\r\n }\r\n @Input() confirmationModalConfig!: ConfirmationModalData;\r\n @Output() selectedIndexChange = new EventEmitter<MatTabChangeEvent>();\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n formCancel = new EventEmitter<any>();\r\n formSubmit = new EventEmitter<FormGroup[]>();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n constants: any = constants;\r\n modalConfigTexts = this.constants?.modalConfig;\r\n @Input() isViewOnly!: string | boolean;\r\n @Input() isMemberOfGroup!: string | boolean;\r\n @Input() eventId!: string;\r\n @Input() meetingId!: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() actionType!: any;\r\n @Input() routePaths!: EventsAndMeetingRouteConfig;\r\n @Input() apiBaseURL!: string;\r\n @Input() apiDomainURL!: string;\r\n @Input() userPermissions!: UserPermission[];\r\n @Input() isInlineMode = false;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Input() tenantFeatures: any[] | undefined;\r\n customProperties = [\r\n CustomProperties.EVENT_ID,\r\n CustomProperties.MEETING_ID,\r\n CustomProperties.ROUTE_PATHS,\r\n CustomProperties.API_BASE_URL,\r\n CustomProperties.API_DOMAIN_URL,\r\n CustomProperties.USER_PERMISSIONS,\r\n CustomProperties.ACTION_TYPE,\r\n CustomProperties.IS_VIEW_ONLY,\r\n CustomProperties.IS_MEMBER_OF_GROUP,\r\n CustomProperties.TENANT_FEATURES,\r\n ];\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(public dialog: MatDialog) {}\r\n /**\r\n * Verifies tabs count and calls createComponent() to load selected component.\r\n * @memberof TabsComponent\r\n */\r\n ngOnInit(): void {\r\n this.previousTabIndex = this.selectedTabIndex ?? 0;\r\n if (\r\n this.tabs?.length > 0 &&\r\n this.tabs?.[this.selectedTabIndex]?.componentRef\r\n ) {\r\n this.createComponent(this.tabs?.[this.selectedTabIndex]);\r\n }\r\n }\r\n /**\r\n * Opens confirmation modal on tab change event when leaving with unsaved changes.\r\n * @param {MatTabGroup} tab\r\n * @param event\r\n * @memberof TabsComponent\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onTabChange(tab: MatTabGroup, event: MatTabChangeEvent): void {\r\n if (tab?.selectedIndex !== this.previousTabIndex && this.isFormChanged) {\r\n const dialogRef = this.dialog?.open(ModalConfirmationComponent, {\r\n data: this.confirmationModalConfig,\r\n width: this.modalConfigTexts?.width,\r\n autoFocus: this.modalConfigTexts?.autoFocus,\r\n ariaLabel: this.modalConfigTexts?.ariaLabel,\r\n panelClass: [\r\n 'ieeesa-modal-confirm-dialog',\r\n 'ieeesa-cancel-modal-confirm-dialog',\r\n ],\r\n });\r\n dialogRef\r\n ?.afterClosed()\r\n ?.pipe(takeUntil(this.destroy$))\r\n ?.subscribe((result) => {\r\n if (result) {\r\n this.previousTabIndex = event.index;\r\n this.loadSelectedTabContent(event);\r\n } else {\r\n tab.selectedIndex = this.previousTabIndex;\r\n }\r\n });\r\n } else if (tab?.selectedIndex !== this.previousTabIndex) {\r\n this.previousTabIndex = event.index;\r\n this.loadSelectedTabContent(event);\r\n }\r\n }\r\n /**\r\n * Loads the respective component on tab change event when componentRef is available.\r\n * @param {MatTabChangeEvent} event\r\n * @memberof TabsComponent\r\n */\r\n loadSelectedTabContent(event: MatTabChangeEvent): void {\r\n this.isFormChanged = false;\r\n this.selectedIndexChange.emit(event);\r\n if (this.tabs?.[event.index]?.componentRef)\r\n this.createComponent(this.tabs?.[event.index]);\r\n }\r\n /**\r\n * Dynamically loads the component in the DOM container based on the passed tab and clears the previously loaded component before loading the new one.\r\n * @param {Tab} tab\r\n * @memberof TabsComponent\r\n */\r\n createComponent(tab: Tab): void {\r\n if (this.isComponentLoaded) {\r\n this.componentRef.destroy();\r\n this.componentContainer.clear();\r\n }\r\n this.componentRef = this.componentContainer?.createComponent(\r\n tab.componentRef\r\n );\r\n this.setCustomComponentProperties(this.customProperties as []);\r\n // Set isInlineMode only if the component supports it (e.g., CreateModifyMeetingComponent)\r\n if (this.isInlineMode && this.componentRef?.instance && 'isInlineMode' in this.componentRef.instance) {\r\n this.componentRef.setInput('isInlineMode', this.isInlineMode);\r\n }\r\n this.componentRef?.instance?.formCancel\r\n ?.pipe(takeUntil(this.destroy$))\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .subscribe((result: any) => {\r\n this.formCancel.emit(result);\r\n });\r\n this.componentRef?.instance?.formSubmit\r\n ?.pipe(takeUntil(this.destroy$))\r\n .subscribe((result: FormGroup[]) => {\r\n this.formSubmit.emit(result);\r\n });\r\n this.isComponentLoaded = true;\r\n }\r\n /**\r\n * Sets dynamic input property which is being sent by the consumer component and its value is not undefined for the component loaded by the tab component.\r\n * @param {[]} properties\r\n * @memberof TabsComponent\r\n */\r\n setCustomComponentProperties(properties: []): void {\r\n const thisObj = this as object;\r\n // Tab components declare different subsets of these inputs; setting an undeclared one throws NG0303.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const declaredInputs =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (this.componentRef?.componentType as any)?.['ɵcmp']?.inputs ?? {};\r\n properties.forEach((property) => {\r\n if (\r\n property in thisObj &&\r\n thisObj[property] !== undefined &&\r\n property in declaredInputs\r\n ) {\r\n this.componentRef?.setInput(property, thisObj[property]);\r\n }\r\n });\r\n }\r\n /**\r\n * Returns unique identifier for the tab.\r\n * @param {number} index\r\n * @param {Tab} option\r\n * @return {*} {(number | string)}\r\n * @memberof TabsComponent\r\n */\r\n trackByFn(index: number, option: Tab): number | string {\r\n return option.id;\r\n }\r\n /**\r\n * Cleans up resources when the component is destroyed\r\n * @memberof TabsComponent\r\n */\r\n ngOnDestroy() {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.componentRef = null as any;\r\n }\r\n }\r\n}\r\n","<mat-tab-group\r\n #tabGroup\r\n class=\"ieeesa-tab-group\"\r\n (selectedTabChange)=\"onTabChange(tabGroup, $event)\"\r\n [selectedIndex]=\"selectedTabIndex\"\r\n>\r\n <mat-tab\r\n *ngFor=\"let tab of tabs; trackBy: trackByFn\"\r\n [label]=\"tab?.label ?? ''\"\r\n [disabled]=\"tab?.disabled\"\r\n >\r\n </mat-tab>\r\n</mat-tab-group>\r\n<ng-container #componentContainer></ng-container>\r\n","/* eslint-disable no-unused-vars */\r\nexport enum ButtonType {\r\n NORMAL = 'NORMAL',\r\n ICON = 'ICON'\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { ButtonType } from '../../models/button-type.model';\r\nimport { CardButton } from '../../models/card-button.model';\r\nimport { CardInfo } from '../../models/card-info.model';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { IconButtonComponent } from '../icon-button/icon-button.component';\r\nimport { AlignType } from '@ieeesa-npm/models';\r\n\r\n@Component({\r\n selector: 'ieeesa-card',\r\n standalone: true,\r\n imports: [CommonModule, MatCardModule, MatButtonModule, IconButtonComponent],\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CardComponent implements OnDestroy {\r\n isMobileView = false;\r\n destroy$ = new Subject<boolean>();\r\n alignmentType = AlignType;\r\n buttonType = ButtonType;\r\n @Input() buttonAlignmentInfo = AlignType.LEFT;\r\n @Output() actionButtonClicked = new EventEmitter<CardButton>();\r\n\r\n private cardDetails!: CardInfo;\r\n @Input() set cardInfo(value: CardInfo) {\r\n this.cardDetails = value;\r\n }\r\n get cardInfo(): CardInfo {\r\n return this.cardDetails;\r\n }\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n private breakPointObserverService: BreakpointObserverService\r\n ) {\r\n this.breakPointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n this.isMobileView = result.matches;\r\n });\r\n }\r\n /**\r\n * Emits the action button click event.\r\n * @type {Button}\r\n * @memberof CardComponent\r\n */\r\n onActionButtonClicked(button: CardButton): void {\r\n this.actionButtonClicked.emit(button);\r\n }\r\n /**\r\n * Keep tracks the button based on the ID in the DOM tree.\r\n * @memberof CardComponent\r\n */\r\n trackByButtonFn(index: number, item: CardButton): number {\r\n return item?.id;\r\n }\r\n /**\r\n * Performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof CardComponent\r\n */\r\n ngOnDestroy() {\r\n this.destroy$?.next(true);\r\n this.destroy$?.unsubscribe();\r\n }\r\n}\r\n","<mat-card\r\n *ngIf=\"cardInfo\"\r\n class=\"ieeesa-card mt-3 d-flex\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-card__min-height' : ''\"\r\n>\r\n <mat-card-header class=\"ieeesa-card__header p-0\">\r\n <mat-card-title-group>\r\n <mat-card-title\r\n class=\"ieeesa-card__header--title ieeesa-headline-sm-24 p-0\"\r\n >\r\n {{ cardInfo?.title }}\r\n </mat-card-title>\r\n <mat-card-subtitle\r\n class=\"ieeesa-card__header--sub-title ieeesa-body-md-14\"\r\n *ngIf=\"cardInfo?.subTitle\"\r\n >\r\n {{ cardInfo?.subTitle }}\r\n </mat-card-subtitle>\r\n </mat-card-title-group>\r\n </mat-card-header>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardActions;\r\n context: { $implicit: cardInfo?.headerActions }\r\n \"\r\n ></ng-container>\r\n <mat-card-content class=\"ieeesa-card__content p-0\">\r\n <ng-content select=\"[component]\"></ng-content>\r\n <ng-content select=\"[description]\"></ng-content>\r\n </mat-card-content>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardActions;\r\n context: { $implicit: cardInfo?.footerActions }\r\n \"\r\n ></ng-container>\r\n <ng-template #cardActions let-actions>\r\n <mat-card-actions\r\n class=\"ieeesa-card--actions d-flex flex-nowrap p-0\"\r\n [ngClass]=\"{\r\n 'justify-content-start': buttonAlignmentInfo === alignmentType.LEFT,\r\n 'justify-content-end': buttonAlignmentInfo === alignmentType.RIGHT,\r\n 'justify-content-center': buttonAlignmentInfo === alignmentType.MIDDLE\r\n }\"\r\n *ngIf=\"actions?.length\"\r\n >\r\n <ng-container *ngFor=\"let button of actions; trackBy: trackByButtonFn\">\r\n <ng-container\r\n *ngIf=\"button?.buttonType === buttonType.ICON; else normalButton\"\r\n >\r\n <ieeesa-icon-button\r\n [iconButton]=\"button\"\r\n (iconButtonClick)=\"onActionButtonClicked(button)\"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-template #normalButton>\r\n <button\r\n mat-button\r\n (click)=\"onActionButtonClicked(button)\"\r\n class=\"mat-tertiary-button\"\r\n *ngIf=\"button?.isVisible\"\r\n >\r\n <span\r\n class=\"ieeesa-card--actions__label ieeesa-btn-label-lg-bold-16\"\r\n >\r\n {{ button?.label }}\r\n </span>\r\n </button>\r\n </ng-template>\r\n </ng-container>\r\n </mat-card-actions>\r\n </ng-template>\r\n</mat-card>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatAccordion, MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { AccordionInfo } from '../../models/accordion-info.model';\r\nimport { BreakpointObserverService } from '../../services/break-point-observer.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ieeesa-accordion',\r\n standalone: true,\r\n templateUrl: './accordion.component.html',\r\n styleUrls: ['./accordion.component.scss'],\r\n imports: [CommonModule, MatExpansionModule, MatButtonModule, MatIconModule],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AccordionComponent implements OnDestroy {\r\n destroy$: Subject<boolean> = new Subject<boolean>();\r\n @ViewChild(MatAccordion)\r\n accordion!: MatAccordion;\r\n isMobileView = false;\r\n private accordionDetails!: AccordionInfo;\r\n @Input() set accordionInfo(value: AccordionInfo) {\r\n this.accordionDetails = value;\r\n }\r\n get accordionInfo(): AccordionInfo {\r\n return this.accordionDetails;\r\n }\r\n @Output() accordionOpened = new EventEmitter<boolean>();\r\n // eslint-disable-next-line no-unused-vars\r\n constructor(private breakpointObserverService: BreakpointObserverService) {\r\n this.breakpointObserverService\r\n .getBreakpoint()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result: { matches: boolean }) => {\r\n this.isMobileView = result?.matches;\r\n });\r\n }\r\n /**\r\n * Emits accordionOpened event with true when accordion is expanded or false if accordion is collapsed.\r\n * @param {boolean} isExpanded\r\n * @memberof AccordionComponent\r\n */\r\n setOpenedStatus(isExpanded: boolean): void {\r\n this.accordionOpened.emit(isExpanded);\r\n }\r\n /**\r\n * Performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.\r\n * @memberof AccordionComponent\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$?.next(true);\r\n this.destroy$?.unsubscribe();\r\n }\r\n}\r\n","<div class=\"ieeesa-accordion\" *ngIf=\"accordionInfo\">\r\n <mat-accordion class=\"ieeesa-accordion__mat-accordion\">\r\n <mat-expansion-panel\r\n [disabled]=\"accordionInfo?.isDisabled\"\r\n (opened)=\"setOpenedStatus(true)\"\r\n (closed)=\"setOpenedStatus(false)\"\r\n >\r\n <mat-expansion-panel-header\r\n class=\"ieeesa-accordion__panel-header\"\r\n [ngClass]=\"{ 'accordion-header': isMobileView }\"\r\n >\r\n <mat-panel-title\r\n class=\"ieeesa-accordion__header--title ieeesa-title-lg-24\"\r\n >{{ accordionInfo?.title }}</mat-panel-title\r\n >\r\n </mat-expansion-panel-header>\r\n <ng-content select=\"[actions]\"></ng-content>\r\n <ng-content select=\"[component]\"></ng-content>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { InactiveTenantDisplay } from '../../models/inactive-tenant.model';\r\nimport { SetBackgroundDirective } from '../../directives/set-background/set-background.directive';\r\nimport { AppConfigInfo } from '../../models/app-config-info.model';\r\n/**\r\n * Provides reusable implementation to Inactive tenant error page by getting the application config and display contents information as an input to the component.\r\n * @export\r\n * @class InactiveTenantComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-inactive-tenant',\r\n templateUrl: './inactive-tenant.component.html',\r\n styleUrls: ['./inactive-tenant.component.scss'],\r\n imports: [CommonModule, SetBackgroundDirective],\r\n standalone: true,\r\n})\r\nexport class InactiveTenantComponent {\r\n /**\r\n * AppConfigInfo data can be passed as input while calling this component using selector.\r\n * @usage <nesc-inactive-tenant [appConfigInfo]=\"appConfigInfo\" [inactiveTenantDisplay]=\"inactiveTenantDisplay\"></nesc-inactive-tenant> or routes: Route[]=[{ path: 'landing', component: InactiveTenantComponent, data:{appConfigInfo:appConfigInfo} }]\r\n * @type {AppConfigInfo}\r\n * @type {InactiveTenantDisplay}\r\n * @memberof InactiveTenantComponent\r\n */\r\n @Input() appConfigInfo: AppConfigInfo = {\r\n appTitle: '',\r\n appDescription: '',\r\n cookieName: '',\r\n ssoSignOutUrl: '',\r\n domainUrl: '',\r\n createAccountUrl: '',\r\n };\r\n @Input() inactiveTenantDisplay: InactiveTenantDisplay = {\r\n helpLink: '',\r\n errorMessage: '',\r\n supportText: '',\r\n };\r\n}\r\n","<div\r\n class=\"ieeesa-inactive-tenant d-flex justify-content-center\"\r\n ieeesaSetBackground\r\n [background]=\"appConfigInfo.background ?? { color: '', imgURL: '' }\"\r\n>\r\n <div\r\n class=\"jumbotron ieeesa-inactive-tenant__note d-flex flex-column justify-content-between text-center px-4 py-4 my-5\"\r\n >\r\n <div\r\n class=\"mb-0 ieeesa-title-lg-24 ieeesa-inactive-tenant__note--description\"\r\n >\r\n <p class=\"mb-0\">\r\n {{ inactiveTenantDisplay?.errorMessage }}\r\n </p>\r\n <p class=\"mb-0\">\r\n {{ inactiveTenantDisplay?.supportText }}\r\n </p>\r\n <a\r\n class=\"pointer\"\r\n href=\"mailto:{{ inactiveTenantDisplay?.helpLink }}\"\r\n rel=\"noopener noreferrer\"\r\n >{{ inactiveTenantDisplay?.helpLink }}</a\r\n >\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExportFormat, ExportFormatOption } from '../../models/export-format-popover.model';\r\n\r\n/**\r\n * ExportFormatPopoverComponent renders a popover presenting format selection\r\n * cards (CSV / Excel). Positioned via CSS absolute below the trigger element.\r\n *\r\n * @export\r\n * @class ExportFormatPopoverComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-export-format-popover',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './export-format-popover.component.html',\r\n styleUrls: ['./export-format-popover.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ExportFormatPopoverComponent {\r\n /** Array of format options to display in the popover */\r\n @Input() formatOptions: ExportFormatOption[] = [];\r\n\r\n /**\r\n * @deprecated No longer used for positioning; kept for backwards compatibility.\r\n */\r\n @Input() origin?: unknown;\r\n\r\n /** Controls visibility */\r\n private _isOpen = false;\r\n @Input()\r\n set isOpen(value: boolean) {\r\n // Clear any previously highlighted format each time the popover opens, so it\r\n // always opens with no pre-selected format.\r\n if (value && !this._isOpen) {\r\n this.selectedFormat = null;\r\n }\r\n this._isOpen = value;\r\n }\r\n get isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n\r\n /** Title text displayed at the top of the popover */\r\n @Input() popoverTitle = 'Select the file format for attendance export.';\r\n\r\n /** Subtitle map for format options (keyed by ExportFormat value) */\r\n @Input() formatSubtitles: Record<string, string> = {\r\n csv: 'Comma separated file',\r\n xls: 'Spreadsheet File',\r\n };\r\n\r\n /** Tracks the currently selected format for visual highlight */\r\n selectedFormat: ExportFormat | null = null;\r\n\r\n /** Emits when user selects a format */\r\n @Output() formatSelected = new EventEmitter<ExportFormat>();\r\n\r\n /** Emits when the popover should be closed (backdrop click or after selection). */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * Handles format option selection via click or Enter key.\r\n * @param {ExportFormat} format\r\n */\r\n onFormatSelect(format: ExportFormat): void {\r\n this.selectedFormat = format;\r\n this.formatSelected.emit(format);\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Closes the popover via backdrop click.\r\n */\r\n onBackdropClick(): void {\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * TrackBy function for *ngFor on format options.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n trackByFormat(index: number, option: ExportFormatOption): string {\r\n return option.value;\r\n }\r\n}\r\n\r\n","<!-- Backdrop -->\r\n<div\r\n *ngIf=\"isOpen\"\r\n class=\"ieeesa-export-format-popover__backdrop\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n (click)=\"onBackdropClick()\"\r\n (document:keydown.escape)=\"onBackdropClick()\"\r\n></div>\r\n\r\n<!-- Popover -->\r\n<div *ngIf=\"isOpen\" class=\"ieeesa-export-format-popover\" role=\"listbox\">\r\n <p class=\"ieeesa-export-format-popover__title\">{{ popoverTitle }}</p>\r\n <div class=\"ieeesa-export-format-popover__options\">\r\n <button\r\n *ngFor=\"let option of formatOptions; trackBy: trackByFormat\"\r\n class=\"ieeesa-export-format-popover__option\"\r\n [class.ieeesa-export-format-popover__option--selected]=\"selectedFormat === option.value\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"selectedFormat === option.value\"\r\n [attr.aria-label]=\"option.ariaLabel\"\r\n (click)=\"onFormatSelect(option.value)\"\r\n (keydown.enter)=\"onFormatSelect(option.value)\"\r\n >\r\n <span class=\"ieeesa-export-format-popover__option-label\">{{ option.label }}</span>\r\n <span class=\"ieeesa-export-format-popover__option-subtitle\">\r\n {{ formatSubtitles[option.value] }}\r\n </span>\r\n </button>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport {\r\n FilterPopoverCategory,\r\n FilterPopoverOption,\r\n FilterPopoverSelection,\r\n} from '../../models/filter-popover.model';\r\n\r\n/**\r\n * FilterPopoverComponent renders a configurable multi-category filter popup.\r\n * Positioned via CSS absolute — parent must wrap trigger + this component\r\n * in a `position: relative` container.\r\n *\r\n * Supports single or multi-category mode:\r\n * - Single category: left nav is hidden, only checkbox list shown.\r\n * - Multi-category: left nav with category selection + right panel.\r\n *\r\n * @export\r\n * @class FilterPopoverComponent\r\n * @implements {OnChanges}\r\n */\r\n@Component({\r\n selector: 'ieeesa-filter-popover',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatCheckboxModule],\r\n templateUrl: './filter-popover.component.html',\r\n styleUrls: ['./filter-popover.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FilterPopoverComponent implements OnChanges {\r\n /** Controls visibility */\r\n @Input() isOpen = false;\r\n\r\n /** Filter categories with their options — parent defines what to show */\r\n @Input() categories: FilterPopoverCategory[] = [];\r\n\r\n /** Header title text */\r\n @Input() title = 'Filters';\r\n\r\n /** Clear all button text */\r\n @Input() clearAllLabel = 'Clear all';\r\n\r\n /** Select all link text */\r\n @Input() selectAllLabel = 'Select all';\r\n\r\n /** Deselect all link text */\r\n @Input() deselectAllLabel = 'Deselect all';\r\n\r\n /** Reset button text */\r\n @Input() resetLabel = 'Reset';\r\n\r\n /** Apply button text */\r\n @Input() applyLabel = 'Apply';\r\n\r\n /** No results message */\r\n @Input() noResultsMessage = 'No results found';\r\n\r\n /** Search placeholder prefix (appended with category label) */\r\n @Input() searchPlaceholderPrefix = 'Search';\r\n\r\n /** Emits the current selection when user clicks Apply */\r\n @Output() filterApplied = new EventEmitter<FilterPopoverSelection>();\r\n\r\n /** Emits when user clicks Reset */\r\n @Output() filterReset = new EventEmitter<void>();\r\n\r\n /** Emits when the popover should be closed (backdrop click or after Apply). */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /** Currently active category index */\r\n activeCategoryIndex = 0;\r\n\r\n /** Search term for filtering options */\r\n searchTerm = '';\r\n\r\n /** Internal working copy of categories */\r\n workingCategories: FilterPopoverCategory[] = [];\r\n\r\n /**\r\n * Refreshes working copy when opening or categories change.\r\n */\r\nngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOpen'] && this.isOpen) {\r\n this.initWorkingCopy();\r\n return;\r\n }\r\n\r\n // Only refresh categories while closed so we don't clobber in-progress user selections.\r\n if (changes['categories'] && !this.isOpen) {\r\n this.initWorkingCopy();\r\n }\r\n}\r\n\r\n /** Whether this is a single-category filter (hides left nav) */\r\n get isSingleCategory(): boolean {\r\n return this.workingCategories.length === 1;\r\n }\r\n\r\n /** Total number of selected options across all categories */\r\n get totalSelectedCount(): number {\r\n return this.workingCategories.reduce(\r\n (sum, cat) => sum + (cat.selectedCount ?? 0), 0\r\n );\r\n }\r\n\r\n /** Currently active category */\r\n get activeCategory(): FilterPopoverCategory | undefined {\r\n return this.workingCategories[this.activeCategoryIndex];\r\n }\r\n\r\n /** Options filtered by search term for the active category */\r\n get filteredOptions(): FilterPopoverOption[] {\r\n if (!this.activeCategory) return [];\r\n if (!this.searchTerm.trim()) return this.activeCategory.options;\r\n const term = this.searchTerm.toLowerCase();\r\n return this.activeCategory.options.filter((opt) =>\r\n opt.label.toLowerCase().includes(term)\r\n );\r\n }\r\n\r\n /** Whether all visible options are checked */\r\n get isAllVisibleSelected(): boolean {\r\n const visible = this.filteredOptions;\r\n return visible.length > 0 && visible.every((opt) => opt.checked);\r\n }\r\n\r\n /** Selects a category from the left nav */\r\n onCategorySelect(index: number): void {\r\n this.activeCategoryIndex = index;\r\n this.searchTerm = '';\r\n }\r\n\r\n /** Toggles a single checkbox option */\r\n onOptionToggle(option: FilterPopoverOption): void {\r\n option.checked = !option.checked;\r\n this.recalculateSelectedCount(this.activeCategoryIndex);\r\n }\r\n\r\n /** Toggles all visible options */\r\n onSelectAll(): void {\r\n const shouldSelect = !this.isAllVisibleSelected;\r\n this.filteredOptions.forEach((opt) => (opt.checked = shouldSelect));\r\n this.recalculateSelectedCount(this.activeCategoryIndex);\r\n }\r\n\r\n /** Applies filter and emits selection */\r\n onApply(): void {\r\n const selection: FilterPopoverSelection = {};\r\n this.workingCategories.forEach((cat) => {\r\n const selected = cat.options.filter((opt) => opt.checked).map((opt) => opt.label);\r\n if (selected.length > 0) {\r\n selection[cat.id] = selected;\r\n }\r\n });\r\n this.filterApplied.emit(selection);\r\n this.closed.emit();\r\n }\r\n\r\n /** Resets all selections */\r\n onReset(): void {\r\n this.workingCategories.forEach((cat) => {\r\n cat.options.forEach((opt) => (opt.checked = false));\r\n cat.selectedCount = 0;\r\n });\r\n this.searchTerm = '';\r\n this.filterReset.emit();\r\n }\r\n\r\n /** Clears all (same as reset) */\r\n onClearAll(): void {\r\n this.onReset();\r\n }\r\n\r\n /** Closes via backdrop click */\r\n onBackdropClick(): void {\r\n this.closed.emit();\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n trackByCategory(index: number): number {\r\n return index;\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n trackByOption(_index: number, option: FilterPopoverOption): string {\r\n return option.id;\r\n }\r\n\r\n // --- Private ---\r\n\r\n private initWorkingCopy(): void {\r\n this.workingCategories = this.categories.map((cat) => ({\r\n ...cat,\r\n options: cat.options.map((opt) => ({ ...opt })),\r\n selectedCount: cat.options.filter((opt) => opt.checked).length,\r\n }));\r\n this.activeCategoryIndex = 0;\r\n this.searchTerm = '';\r\n }\r\n\r\n private recalculateSelectedCount(categoryIndex: number): void {\r\n const cat = this.workingCategories[categoryIndex];\r\n if (cat) {\r\n cat.selectedCount = cat.options.filter((opt) => opt.checked).length;\r\n }\r\n }\r\n}\r\n","<!-- Backdrop -->\r\n<div\r\n *ngIf=\"isOpen\"\r\n class=\"ieeesa-filter-popover__backdrop\"\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n (click)=\"onBackdropClick()\"\r\n (document:keydown.escape)=\"onBackdropClick()\"\r\n></div>\r\n\r\n<!-- Filter Panel -->\r\n<div *ngIf=\"isOpen\" class=\"ieeesa-filter-popover\" role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"title\">\r\n <!-- Header -->\r\n <div class=\"ieeesa-filter-popover__header\">\r\n <div class=\"ieeesa-filter-popover__header-left\">\r\n <svg class=\"ieeesa-filter-popover__header-icon\">\r\n <use xlink:href=\"/assets/images/sprites/sprites.svg#icon-filter-attendees\"></use>\r\n </svg>\r\n <span class=\"ieeesa-filter-popover__header-title\">{{ title }}</span>\r\n <span\r\n *ngIf=\"totalSelectedCount > 0\"\r\n class=\"ieeesa-filter-popover__badge ieeesa-filter-popover__badge--header\"\r\n >\r\n {{ totalSelectedCount }}\r\n </span>\r\n </div>\r\n <button\r\n *ngIf=\"totalSelectedCount > 0\"\r\n class=\"ieeesa-filter-popover__clear-all\"\r\n (click)=\"onClearAll()\"\r\n type=\"button\"\r\n >\r\n {{ clearAllLabel }}\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"ieeesa-filter-popover__body\">\r\n <!-- Left Nav (hidden for single category) -->\r\n <div *ngIf=\"!isSingleCategory\" class=\"ieeesa-filter-popover__nav\">\r\n <button\r\n *ngFor=\"let category of workingCategories; let i = index; trackBy: trackByCategory\"\r\n class=\"ieeesa-filter-popover__nav-item\"\r\n [class.ieeesa-filter-popover__nav-item--active]=\"i === activeCategoryIndex\"\r\n (click)=\"onCategorySelect(i)\"\r\n type=\"button\"\r\n >\r\n <span class=\"ieeesa-filter-popover__nav-label\">{{ category.label }}</span>\r\n <span\r\n *ngIf=\"category.selectedCount && category.selectedCount > 0\"\r\n class=\"ieeesa-filter-popover__badge ieeesa-filter-popover__badge--nav\"\r\n >\r\n {{ category.selectedCount }}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <!-- Right Content -->\r\n <div class=\"ieeesa-filter-popover__content\">\r\n <!-- Search -->\r\n <div class=\"ieeesa-filter-popover__search-wrapper\">\r\n <svg class=\"ieeesa-filter-popover__search-icon\">\r\n <use xlink:href=\"/assets/images/sprites/sprites.svg#icon-search\"></use>\r\n </svg>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-filter-popover__search-input\"\r\n [placeholder]=\"searchPlaceholderPrefix + ' ' + (activeCategory?.label ?? '') + '...'\"\r\n [(ngModel)]=\"searchTerm\"\r\n [attr.aria-label]=\"searchPlaceholderPrefix + ' ' + (activeCategory?.label ?? '')\"\r\n />\r\n </div>\r\n\r\n <!-- Select All -->\r\n <button\r\n class=\"ieeesa-filter-popover__select-all\"\r\n (click)=\"onSelectAll()\"\r\n type=\"button\"\r\n >\r\n {{ isAllVisibleSelected ? deselectAllLabel : selectAllLabel }}\r\n </button>\r\n\r\n <!-- Options List -->\r\n <div class=\"ieeesa-filter-popover__options-list\">\r\n <div\r\n *ngFor=\"let option of filteredOptions; trackBy: trackByOption\"\r\n class=\"ieeesa-filter-popover__option\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"option.checked\"\r\n (change)=\"onOptionToggle(option)\"\r\n [attr.aria-label]=\"option.label\"\r\n color=\"primary\"\r\n >\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </div>\r\n <div\r\n *ngIf=\"filteredOptions.length === 0\"\r\n class=\"ieeesa-filter-popover__no-results\"\r\n >\r\n {{ noResultsMessage }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ieeesa-filter-popover__footer\">\r\n <button\r\n class=\"ieeesa-filter-popover__btn-reset\"\r\n (click)=\"onReset()\"\r\n type=\"button\"\r\n >\r\n {{ resetLabel }}\r\n </button>\r\n <button\r\n class=\"ieeesa-filter-popover__btn-apply\"\r\n (click)=\"onApply()\"\r\n type=\"button\"\r\n >\r\n {{ applyLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogRef,\r\n MatDialogModule,\r\n} from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { PolicyConfirmationDialogData } from '../../models/policy-confirmation-dialog.model';\r\n\r\n/**\r\n * PolicyConfirmationDialogComponent is a reusable confirmation dialog that displays\r\n * a configurable title, body text, and Cancel/Confirm action buttons.\r\n * Used for the IEEE Data Access and Use Policy confirmation in the attendance export flow.\r\n *\r\n * Opens via `MatDialog.open(PolicyConfirmationDialogComponent, { data: PolicyConfirmationDialogData })`.\r\n * Returns `true` on confirm, `false` on cancel or close.\r\n *\r\n * @export\r\n * @class PolicyConfirmationDialogComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-policy-confirmation-dialog',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './policy-confirmation-dialog.component.html',\r\n styleUrls: ['./policy-confirmation-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PolicyConfirmationDialogComponent {\r\n /** Text before the hyperlink */\r\n bodyTextBefore = '';\r\n /** Text after the hyperlink */\r\n bodyTextAfter = '';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public data: PolicyConfirmationDialogData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<PolicyConfirmationDialogComponent>\r\n ) {\r\n dialogRef.disableClose = true;\r\n this.splitBodyText();\r\n }\r\n\r\n /**\r\n * Splits the bodyText around the policyLinkText so the template can render\r\n * the link portion as a hyperlink.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n private splitBodyText(): void {\r\n if (this.data.policyUrl && this.data.policyLinkText) {\r\n const index = this.data.bodyText.indexOf(this.data.policyLinkText);\r\n if (index > -1) {\r\n this.bodyTextBefore = this.data.bodyText.substring(0, index);\r\n this.bodyTextAfter = this.data.bodyText.substring(\r\n index + this.data.policyLinkText.length\r\n );\r\n return;\r\n }\r\n }\r\n this.bodyTextBefore = this.data.bodyText;\r\n this.bodyTextAfter = '';\r\n }\r\n\r\n /**\r\n * Handles the Confirm button click — closes the dialog returning `true`.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n onConfirm(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n /**\r\n * Handles the Cancel button click — closes the dialog returning `false`.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n onCancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n /**\r\n * Handles the X (close) button click — closes the dialog returning `false`.\r\n * @memberof PolicyConfirmationDialogComponent\r\n */\r\n onClose(): void {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","<div class=\"ieeesa-policy-confirmation-dialog\">\r\n <div class=\"ieeesa-policy-confirmation-dialog__header\">\r\n <h2 class=\"ieeesa-policy-confirmation-dialog__title\">{{ data.title }}</h2>\r\n <button\r\n class=\"ieeesa-policy-confirmation-dialog__close-btn\"\r\n [attr.aria-label]=\"'Close ' + data.title + ' dialog'\"\r\n (click)=\"onClose()\"\r\n >\r\n <i class=\"fa-solid fa-xmark\"></i>\r\n </button>\r\n </div>\r\n <hr class=\"ieeesa-policy-confirmation-dialog__divider\" />\r\n <div class=\"ieeesa-policy-confirmation-dialog__body\">\r\n <ng-container *ngIf=\"data.policyUrl && data.policyLinkText && bodyTextBefore !== data.bodyText; else plainText\">\r\n {{ bodyTextBefore }}<a\r\n [href]=\"data.policyUrl\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"ieeesa-policy-confirmation-dialog__policy-link\"\r\n [attr.aria-label]=\"data.policyLinkText + ' (opens in new tab)'\"\r\n >{{ data.policyLinkText }}</a>{{ bodyTextAfter }}\r\n </ng-container>\r\n <ng-template #plainText>{{ data.bodyText }}</ng-template>\r\n </div>\r\n <hr class=\"ieeesa-policy-confirmation-dialog__divider\" />\r\n <div class=\"ieeesa-policy-confirmation-dialog__footer\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-policy-confirmation-dialog__btn-cancel\"\r\n [attr.aria-label]=\"data.cancelLabel\"\r\n (click)=\"onCancel()\"\r\n >\r\n {{ data.cancelLabel }}\r\n </button>\r\n <button\r\n mat-button\r\n class=\"mat-primary-button ieeesa-policy-confirmation-dialog__btn-confirm\"\r\n [attr.aria-label]=\"data.confirmLabel\"\r\n (click)=\"onConfirm()\"\r\n >\r\n {{ data.confirmLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MAT_DIALOG_DATA,\r\n MatDialogRef,\r\n MatDialogModule,\r\n} from '@angular/material/dialog';\r\nimport { ExportSuccessDialogData } from '../../models/export-success-dialog.model';\r\n\r\n/**\r\n * ExportSuccessDialogComponent displays a centered success message after\r\n * a file export completes. Shows the filename in bold and a single \"Close\" button.\r\n *\r\n * Opens via `MatDialog.open(ExportSuccessDialogComponent, { data: ExportSuccessDialogData })`.\r\n *\r\n * @export\r\n * @class ExportSuccessDialogComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-export-success-dialog',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule],\r\n templateUrl: './export-success-dialog.component.html',\r\n styleUrls: ['./export-success-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ExportSuccessDialogComponent {\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA)\r\n // eslint-disable-next-line no-unused-vars\r\n public data: ExportSuccessDialogData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<ExportSuccessDialogComponent>\r\n ) {}\r\n\r\n /**\r\n * Handles the Close button click — closes the dialog.\r\n * @memberof ExportSuccessDialogComponent\r\n */\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div class=\"ieeesa-export-success-dialog\">\r\n <div class=\"ieeesa-export-success-dialog__content\">\r\n <span class=\"ieeesa-export-success-dialog__message\">{{ data.message }}</span>\r\n <span class=\"ieeesa-export-success-dialog__filename\">{{ data.filename }}</span>\r\n </div>\r\n <div class=\"ieeesa-export-success-dialog__actions\">\r\n <button\r\n class=\"ieeesa-export-success-dialog__btn-close\"\r\n [attr.aria-label]=\"data.closeLabel\"\r\n (click)=\"onClose()\"\r\n >\r\n {{ data.closeLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport {\r\n HomeGroupSelectionData,\r\n HomeGroupSelectionResult,\r\n QualifyingGroup,\r\n} from '../../models/home-group-selection.model';\r\n\r\n/**\r\n * HomeGroupSelectionComponent is a generic, reusable dialog for selecting a\r\n * home Working Group to receive reciprocal attendance credit (SP3M-18).\r\n *\r\n * It is shown when an attendee (or an admin acting on their behalf) qualifies\r\n * for reciprocal credit in more than one home Working Group and must choose\r\n * which one should receive the credit. The first qualifying group is\r\n * pre-selected so Submit is enabled immediately; Submit is disabled only if no\r\n * group is selected.\r\n *\r\n * This component is feature-agnostic — all display text is supplied by the\r\n * caller via MAT_DIALOG_DATA (HomeGroupSelectionData). It performs no API calls;\r\n * it collects the selection and returns it so the caller can re-submit.\r\n *\r\n * Footer:\r\n * - Submit → closes with { homeGroupId }\r\n * - Cancel → closes with null (caller aborts)\r\n *\r\n * @export\r\n * @class HomeGroupSelectionComponent\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n selector: 'ieeesa-home-group-selection',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, MatDialogModule, MatButtonModule],\r\n templateUrl: './home-group-selection.component.html',\r\n styleUrls: ['./home-group-selection.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class HomeGroupSelectionComponent implements OnInit {\r\n /** Qualifying home groups the user must choose between. */\r\n qualifyingGroups: QualifyingGroup[] = [];\r\n /** The currently selected home group id. */\r\n selectedGroupId = '';\r\n\r\n constructor(\r\n // eslint-disable-next-line no-unused-vars\r\n @Inject(MAT_DIALOG_DATA) public data: HomeGroupSelectionData,\r\n // eslint-disable-next-line no-unused-vars\r\n private dialogRef: MatDialogRef<HomeGroupSelectionComponent>\r\n ) {\r\n // Non-dismissable: user must explicitly choose Submit or Cancel.\r\n this.dialogRef.disableClose = true;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.qualifyingGroups = this.data?.qualifyingGroups ?? [];\r\n\r\n // Pre-select the first qualifying group (matches the design + enables Submit).\r\n if (this.qualifyingGroups.length > 0) {\r\n this.selectedGroupId = this.qualifyingGroups[0].groupId;\r\n }\r\n }\r\n\r\n /**\r\n * trackBy for the qualifying groups list.\r\n * @param {number} _index\r\n * @param {QualifyingGroup} group\r\n * @return {string}\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n trackByGroupId(_index: number, group: QualifyingGroup): string {\r\n return group.groupId;\r\n }\r\n\r\n /**\r\n * Whether Submit should be enabled — true once a group is selected.\r\n * @return {boolean}\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n get canSubmit(): boolean {\r\n return !!this.selectedGroupId;\r\n }\r\n\r\n /**\r\n * Cancel handler — closes with null so the caller aborts.\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n onCancel(): void {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n /**\r\n * Submit handler — closes with the selected home group id.\r\n * No-ops if no group is selected.\r\n * @memberof HomeGroupSelectionComponent\r\n */\r\n onSubmit(): void {\r\n if (!this.canSubmit) {\r\n return;\r\n }\r\n const result: HomeGroupSelectionResult = { homeGroupId: this.selectedGroupId };\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","<div class=\"ieeesa-home-group-selection\">\r\n\r\n <!-- Header -->\r\n <div class=\"ieeesa-home-group-selection__header\" *ngIf=\"data?.title\">\r\n <h2 mat-dialog-title class=\"ieeesa-home-group-selection__title ieeesa-headline-sm-24\">\r\n {{ data.title }}\r\n </h2>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-home-group-selection__close-btn\"\r\n aria-label=\"Close\"\r\n (click)=\"onCancel()\"\r\n >\r\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"ieeesa-home-group-selection__body\">\r\n\r\n <p class=\"ieeesa-home-group-selection__message ieeesa-body-lg-16\" *ngIf=\"data?.messageLine1\">\r\n {{ data.messageLine1 }}\r\n </p>\r\n <p\r\n class=\"ieeesa-home-group-selection__message ieeesa-body-lg-16\"\r\n *ngIf=\"data?.messageLine2\"\r\n >\r\n {{ data.messageLine2 }}\r\n </p>\r\n\r\n <!-- Qualifying home groups radio list -->\r\n <div\r\n class=\"ieeesa-home-group-selection__options\"\r\n role=\"radiogroup\"\r\n [attr.aria-label]=\"data?.groupOptionAriaLabel\"\r\n >\r\n <label\r\n *ngFor=\"let group of qualifyingGroups; trackBy: trackByGroupId\"\r\n class=\"ieeesa-home-group-selection__option\"\r\n [class.ieeesa-home-group-selection__option--selected]=\"selectedGroupId === group.groupId\"\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"homeGroup\"\r\n class=\"ieeesa-home-group-selection__radio\"\r\n [value]=\"group.groupId\"\r\n [(ngModel)]=\"selectedGroupId\"\r\n />\r\n <span class=\"ieeesa-home-group-selection__option-label ieeesa-body-lg-16-bold\">\r\n {{ group.groupName }}\r\n </span>\r\n </label>\r\n </div>\r\n\r\n <!-- Info banner -->\r\n <div class=\"ieeesa-home-group-selection__info\" *ngIf=\"data?.infoText\">\r\n <span class=\"ieeesa-home-group-selection__info-icon\" aria-hidden=\"true\">ⓘ</span>\r\n <span class=\"ieeesa-home-group-selection__info-text ieeesa-body-sm-14\">\r\n {{ data.infoText }}\r\n </span>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"ieeesa-home-group-selection__footer\">\r\n <button\r\n type=\"button\"\r\n class=\"mat-mdc-button mat-mdc-button-base mat-tertiary-button\"\r\n (click)=\"onCancel()\"\r\n >\r\n {{ data?.cancelLabel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"mat-mdc-button mat-mdc-button-base mat-primary-button\"\r\n [disabled]=\"!canSubmit\"\r\n (click)=\"onSubmit()\"\r\n >\r\n {{ data?.submitLabel }}\r\n </button>\r\n </div>\r\n\r\n</div>\r\n","export interface AccordionInfo {\r\n id: number | string;\r\n title: string;\r\n isDisabled: boolean;\r\n}\r\nexport enum AccordionDetails {\r\n // eslint-disable-next-line no-unused-vars\r\n BASIC_DETAILS = 1,\r\n // eslint-disable-next-line no-unused-vars\r\n ROLES_AND_PERMISSIONS = 2,\r\n // eslint-disable-next-line no-unused-vars\r\n GROUP_TYPES = 3,\r\n // eslint-disable-next-line no-unused-vars\r\n MEETINGS_AND_EVENTS = 4,\r\n // eslint-disable-next-line no-unused-vars\r\n BALLOTS = 5,\r\n}\r\n","/* eslint-disable no-unused-vars */\r\nexport enum AllowedFileTypes {\r\n JPG = 'jpg',\r\n PNG = 'png',\r\n SVG = 'svg',\r\n}","export enum LinkType {\r\n // eslint-disable-next-line no-unused-vars\r\n ADD_MEETING = 'ADD_MEETING',\r\n}\r\n","/**\r\n * Available export file formats for attendance data\r\n */\r\n/* eslint-disable no-unused-vars */\r\nexport enum ExportFormat {\r\n CSV = 'csv',\r\n EXCEL = 'xls',\r\n}\r\n\r\n/**\r\n * Configuration option for a format selection card in the export format popover\r\n */\r\nexport interface ExportFormatOption {\r\n label: string;\r\n value: ExportFormat;\r\n ariaLabel: string;\r\n}\r\n","/**\r\n * Shared models for the reusable Home Group Selection dialog (SP3M-18).\r\n *\r\n * The dialog is generic and feature-agnostic: all display text is supplied by\r\n * the calling feature library (e.g. attendance, attendees) via MAT_DIALOG_DATA,\r\n * so this presentation-layer component never depends on any feature's constants.\r\n */\r\n\r\n/**\r\n * A single selectable Working Group in the home-group selection dialog.\r\n * Mirrors the backend HomeGroupOption ({ groupId, groupName }).\r\n */\r\nexport interface QualifyingGroup {\r\n groupId: string;\r\n groupName: string;\r\n}\r\n\r\n/**\r\n * The homeGroupSelectionPrompt object returned by the attendance log-in APIs\r\n * when the user qualifies for reciprocal credit in more than one home group.\r\n * Mirrors HomeGroupSelectionPromptResponse from the attendee-api.\r\n */\r\nexport interface HomeGroupSelectionPrompt {\r\n eventId: string;\r\n qualifyingGroups: QualifyingGroup[];\r\n}\r\n\r\n/**\r\n * Data passed to the HomeGroupSelectionComponent via MAT_DIALOG_DATA.\r\n * All text is provided by the caller so the component stays generic.\r\n */\r\nexport interface HomeGroupSelectionData {\r\n /** Qualifying home groups the user must choose between. */\r\n qualifyingGroups: QualifyingGroup[];\r\n /** Dialog title. */\r\n title: string;\r\n /** First instruction paragraph (context). */\r\n messageLine1: string;\r\n /** Second instruction paragraph (the \"please select\" prompt). */\r\n messageLine2: string;\r\n /** Informational note shown in the footer banner. */\r\n infoText: string;\r\n /** Submit button label. */\r\n submitLabel: string;\r\n /** Cancel button label. */\r\n cancelLabel: string;\r\n /** Accessibility label for the radio group. */\r\n groupOptionAriaLabel: string;\r\n}\r\n\r\n/**\r\n * Result returned by HomeGroupSelectionComponent when the user clicks Submit.\r\n * `null` is returned when the user cancels.\r\n */\r\nexport interface HomeGroupSelectionResult {\r\n homeGroupId: string;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * TimezoneFormatPipe formats a time zone string for display by replacing every\r\n * underscore in the raw IANA identifier with a space. This is a display-only\r\n * transform: for example `(UTC-04:00) America/New_York` is shown as\r\n * `(UTC-04:00) America/New York`. The underlying stored value (which the backend\r\n * expects with underscores) is never modified. Null, undefined, or empty inputs\r\n * return an empty string so templates can apply their own fallback.\r\n * @export\r\n * @class TimezoneFormatPipe\r\n * @implements {PipeTransform}\r\n */\r\n@Pipe({\r\n name: 'timezoneFormat',\r\n standalone: true,\r\n})\r\nexport class TimezoneFormatPipe implements PipeTransform {\r\n /**\r\n * Replaces underscores with spaces in a time zone string for display.\r\n * @param {(string | null | undefined)} value - The raw time zone string, e.g. `(UTC-04:00) America/New_York`.\r\n * @return {string} The display-friendly time zone with spaces instead of underscores, or an empty string.\r\n * @memberof TimezoneFormatPipe\r\n */\r\n transform(value: string | null | undefined): string {\r\n return (value ?? '').replace(/_/g, ' ');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { FormUtilityService } from './services/form-utility.service';\r\nimport { DatepickerService } from './services/datepicker.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [DatepickerService, FormUtilityService],\r\n})\r\nexport class PresentationModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\nexport interface StepConfig {\r\n id: number;\r\n label: string;\r\n isVisible: boolean;\r\n isCompleted: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\n/**\r\n * StepperComponent is a reusable horizontal stepper for multi-step workflows.\r\n * Displays numbered step indicators and emits step change events.\r\n * @export\r\n * @class StepperComponent\r\n */\r\n@Component({\r\n selector: 'ieeesa-stepper',\r\n standalone: true,\r\n imports: [CommonModule, ScrollingModule],\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class StepperComponent {\r\n @Input() steps: StepConfig[] = [];\r\n @Input() activeStepIndex = 0;\r\n @Output() stepChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Returns only the visible steps.\r\n * @readonly\r\n * @type {StepConfig[]}\r\n * @memberof StepperComponent\r\n */\r\n get visibleSteps(): StepConfig[] {\r\n return this.steps.filter((step) => step.isVisible);\r\n }\r\n\r\n /**\r\n * Navigates to a step if it's not disabled.\r\n * Emits stepChange to let the parent update activeStepIndex (parent is source of truth).\r\n * @param {number} index - index within visible steps\r\n * @memberof StepperComponent\r\n */\r\n goToStep(index: number): void {\r\n const step = this.visibleSteps[index];\r\n if (step && !step.isDisabled) {\r\n this.stepChange.emit(index);\r\n }\r\n }\r\n\r\n /**\r\n * Moves to the next step.\r\n * @memberof StepperComponent\r\n */\r\n nextStep(): void {\r\n if (this.activeStepIndex < this.visibleSteps.length - 1) {\r\n this.goToStep(this.activeStepIndex + 1);\r\n }\r\n }\r\n\r\n /**\r\n * Moves to the previous step.\r\n * @memberof StepperComponent\r\n */\r\n previousStep(): void {\r\n if (this.activeStepIndex > 0) {\r\n this.goToStep(this.activeStepIndex - 1);\r\n }\r\n }\r\n}\r\n","<div class=\"ieeesa-stepper\">\r\n <div class=\"ieeesa-stepper__header\">\r\n <ng-container *ngFor=\"let step of visibleSteps; let i = index; let last = last\">\r\n <div\r\n class=\"ieeesa-stepper__step\"\r\n [class.ieeesa-stepper__step--active]=\"i === activeStepIndex\"\r\n [class.ieeesa-stepper__step--completed]=\"step.isCompleted\"\r\n [class.ieeesa-stepper__step--disabled]=\"step.isDisabled\"\r\n [attr.aria-label]=\"step.label\"\r\n role=\"presentation\"\r\n >\r\n <span class=\"ieeesa-stepper__step-number\">{{ i + 1 }}</span>\r\n <span class=\"ieeesa-stepper__step-label\">{{ step.label }}</span>\r\n </div>\r\n <div *ngIf=\"!last\" class=\"ieeesa-stepper__connector\"></div>\r\n </ng-container>\r\n </div>\r\n <div class=\"ieeesa-stepper__content\" cdkScrollable>\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of presentation\r\n */\r\nexport * from './lib/components/autocomplete/autocomplete.component';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/date-picker/date-picker.component';\r\nexport * from './lib/components/date-picker-header/date-picker-header.component';\r\nexport * from './lib/components/dynamic-form/dynamic-form.component';\r\nexport * from './lib/components/footer/footer.component';\r\nexport * from './lib/components/form-error/form-error.component';\r\nexport * from './lib/components/form-support-text/form-support-text.component';\r\nexport * from './lib/components/header/header.component';\r\nexport * from './lib/components/icon-button/icon-button.component';\r\nexport * from './lib/components/input/input.component';\r\nexport * from './lib/components/legend/legend.component';\r\nexport * from './lib/components/list/list.component';\r\nexport * from './lib/components/menu/menu.component';\r\nexport * from './lib/components/modal/modal.component';\r\nexport * from './lib/components/modal-confirmation/modal-confirmation.component';\r\nexport * from './lib/components/modal-info/modal-info.component';\r\nexport * from './lib/components/navigation-menu/navigation-menu.component';\r\nexport * from './lib/components/notification/notification.component';\r\nexport * from './lib/components/radio/radio.component';\r\nexport * from './lib/components/search/search.component';\r\nexport * from './lib/components/select/select.component';\r\nexport * from './lib/components/text-area/text-area.component';\r\nexport * from './lib/components/toggle-button/toggle-button.component';\r\nexport * from './lib/components/welcome/welcome.component';\r\nexport * from './lib/components/chips/chips.component';\r\nexport * from './lib/components/filter/filter.component';\r\nexport * from './lib/components/loader/loader.component';\r\nexport * from './lib/components/data-table/data-table.component';\r\nexport * from './lib/components/breadcrumb/breadcrumb.component';\r\nexport * from './lib/components/tile/tile.component';\r\nexport * from './lib/components/time-picker/time-picker.component';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/slide-toggle/slide-toggle.component';\r\nexport * from './lib/components/card/card.component';\r\nexport * from './lib/components/color-picker/color-picker.component';\r\nexport * from './lib/components/file-upload/file-upload.component';\r\nexport * from './lib/components/file-download/file-download.component';\r\nexport * from './lib/components/accordion/accordion.component';\r\nexport * from './lib/components/inactive-tenant/inactive-tenant.component';\r\nexport * from './lib/components/image-preview/image-preview.component';\r\nexport * from './lib/components/rich-text-editor/rich-text-editor.component';\r\nexport * from './lib/components/multi-select-autocomplete/multi-select-autocomplete.component';\r\nexport * from './lib/components/export-format-popover/export-format-popover.component';\r\nexport * from './lib/components/filter-popover/filter-popover.component';\r\nexport * from './lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component';\r\nexport * from './lib/components/export-success-dialog/export-success-dialog.component';\r\nexport * from './lib/components/home-group-selection/home-group-selection.component';\r\n\r\nexport * from './lib/directives/dynamic-form-field/dynamic-form-field.directive';\r\nexport * from './lib/directives/set-background/set-background.directive';\r\nexport * from './lib/directives/text-truncated/text-truncated.directive';\r\nexport * from './lib/directives/file-upload/file-upload.directive';\r\nexport * from './lib/directives/observe-dom-change/observe-dom-change.directive';\r\n\r\nexport * from './lib/models/accordion-info.model';\r\nexport * from './lib/models/align-browsed-files.model';\r\nexport * from './lib/models/allowed-file-types.model';\r\nexport * from './lib/models/app-config-info.model';\r\nexport * from './lib/models/autocomplete-option.model';\r\nexport * from './lib/models/calendar.model';\r\nexport * from './lib/models/custom-properties.model';\r\nexport * from './lib/models/date-picker.model';\r\nexport * from './lib/models/download-file.model';\r\nexport * from './lib/models/event-emit-type.model';\r\nexport * from './lib/models/field-config.model';\r\nexport * from './lib/models/footer-config.model';\r\nexport * from './lib/models/form-control-types.model';\r\nexport * from './lib/models/form-field.model';\r\nexport * from './lib/models/form-grid.model';\r\nexport * from './lib/models/form.model';\r\nexport * from './lib/models/header-config.model';\r\nexport * from './lib/models/legend.model';\r\nexport * from './lib/models/link-type.model';\r\nexport * from './lib/models/list-item.model';\r\nexport * from './lib/models/menu.model';\r\nexport * from './lib/models/navigation-menu.model';\r\nexport * from './lib/models/radio-option.model';\r\nexport * from './lib/models/search.model';\r\nexport * from './lib/models/select-opened-state.model';\r\nexport * from './lib/models/selected-date.model';\r\nexport * from './lib/models/selected-time.model';\r\nexport * from './lib/models/tab.model';\r\nexport * from './lib/models/toggle-button.model';\r\nexport * from './lib/models/chip-option.model';\r\nexport * from './lib/models/paginator-config.model';\r\nexport * from './lib/models/table-actions.model';\r\nexport * from './lib/models/table-schema.model';\r\nexport * from './lib/models/breadcrumb.model';\r\nexport * from './lib/models/tile.model';\r\nexport * from './lib/models/file-upload-response.model';\r\nexport * from './lib/models/file-upload-status.model';\r\nexport * from './lib/models/filters-options.model';\r\nexport * from './lib/models/profile-menu.model';\r\nexport * from './lib/models/slide-toggle-options.model';\r\nexport * from './lib/models/button-type.model';\r\nexport * from './lib/models/card-button.model';\r\nexport * from './lib/models/card-info.model';\r\nexport * from './lib/models/color-format.model';\r\nexport * from './lib/models/file-download-config.model';\r\nexport * from './lib/models/file-info.model';\r\nexport * from './lib/models/file-upload-payload-model';\r\nexport * from './lib/models/file-upload-presigned-url-res.model';\r\nexport * from './lib/models/file-upload-response.model';\r\nexport * from './lib/models/inactive-tenant.model';\r\nexport * from './lib/models/table-column-menu-info.model';\r\nexport * from './lib/models/export-format-popover.model';\r\nexport * from './lib/models/filter-popover.model';\r\nexport * from './lib/models/policy-confirmation-dialog.model';\r\nexport * from './lib/models/export-success-dialog.model';\r\nexport * from './lib/models/home-group-selection.model';\r\n\r\nexport * from './lib/services/datepicker.service';\r\nexport * from './lib/services/form-utility.service';\r\nexport * from './lib/services/file-upload.service';\r\nexport * from './lib/services/break-point-observer.service';\r\nexport * from './lib/pipes/safe.pipe';\r\nexport * from './lib/pipes/timezone-format.pipe';\r\n\r\nexport * from './lib/presentation.module';\r\n\r\n// Re-export from @ieeesa-npm/models (needed because dist/presentation is used by other library builds)\r\nexport { SelectOption, CheckboxOption, IconButton, AlignType, ConfirmationModalData, MessagePart, InfoModalData } from '@ieeesa-npm/models';\r\n\r\nexport * from './lib/components/stepper/stepper.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","autocompleteConstInfo","filter","i1.FormUtilityService","i7","i8","i2","i3","i5","i6","moment","datePickerInfo","i3.DatepickerService","i4","buttonActionsInfo","i2.DatepickerService","i3.FormUtilityService","searchInfo","dropdownInfo","constantsInfo","constants","i2.FileUploadService","constants?.colorPicker","takeUntil","map","debounceTime","i9","i11","constants?.richTextEditor","screenTexts","i1.BreakpointObserverService","i3.FileUploadService","i1.SafePipe","modalInfo?.ariaLabel","constants?.welcome"],"mappings":"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"}
|