cats-ui-lib 2.2.0 → 2.2.2
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/fesm2022/cats-ui-lib.mjs +62 -80
- package/fesm2022/cats-ui-lib.mjs.map +1 -1
- package/index.d.ts +2 -1
- package/package.json +1 -1
- package/styles/_fonts.scss +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cats-ui-lib.mjs","sources":["../../../projects/cats-ui/src/lib/services/cats-ui.service.ts","../../../projects/cats-ui/src/lib/components/input/input.component.ts","../../../projects/cats-ui/src/lib/components/input/input.component.html","../../../projects/cats-ui/src/lib/modal/cats-ui.modal.ts","../../../projects/cats-ui/src/lib/components/single-select/single-select.component.ts","../../../projects/cats-ui/src/lib/components/single-select/single-select.component.html","../../../projects/cats-ui/src/lib/components/multi-select/multi-select.component.ts","../../../projects/cats-ui/src/lib/components/multi-select/multi-select.component.html","../../../projects/cats-ui/src/lib/components/search-box/search-box.component.ts","../../../projects/cats-ui/src/lib/components/search-box/search-box.component.html","../../../projects/cats-ui/src/lib/directives/outside-click.directive.ts","../../../projects/cats-ui/src/lib/components/auto-complete-single-select/auto-complete-single-select.component.ts","../../../projects/cats-ui/src/lib/components/auto-complete-single-select/auto-complete-single-select.component.html","../../../projects/cats-ui/src/lib/components/auto-complete-multi-select/auto-complete-multi-select.component.ts","../../../projects/cats-ui/src/lib/components/auto-complete-multi-select/auto-complete-multi-select.component.html","../../../projects/cats-ui/src/lib/components/toogle-button/toogle-button.component.ts","../../../projects/cats-ui/src/lib/components/toogle-button/toogle-button.component.html","../../../projects/cats-ui/src/lib/components/checkbox-button/checkbox-button.component.ts","../../../projects/cats-ui/src/lib/components/checkbox-button/checkbox-button.component.html","../../../projects/cats-ui/src/lib/components/radio-button/radio-button.component.ts","../../../projects/cats-ui/src/lib/components/radio-button/radio-button.component.html","../../../projects/cats-ui/src/lib/components/custom-date-picker/calendar-grid.component.ts","../../../projects/cats-ui/src/lib/components/custom-date-picker/calendar-grid.component.html","../../../projects/cats-ui/src/lib/components/custom-date-picker/time-input.component.ts","../../../projects/cats-ui/src/lib/components/custom-date-picker/time-input.component.html","../../../projects/cats-ui/src/lib/components/custom-date-picker/custom-date-picker.component.ts","../../../projects/cats-ui/src/lib/components/custom-date-picker/custom-date-picker.component.html","../../../projects/cats-ui/src/lib/directives/cats-ui-tooltip.directive.ts","../../../projects/cats-ui/src/lib/components/accordion/accordion.component.ts","../../../projects/cats-ui/src/lib/components/accordion/accordion.component.html","../../../projects/cats-ui/src/lib/components/accordion/accordion-item/accordion-item.component.ts","../../../projects/cats-ui/src/lib/components/accordion/accordion-item/accordion-item.component.html","../../../projects/cats-ui/src/lib/components/tabset/tab-content/tab-content.component.ts","../../../projects/cats-ui/src/lib/components/tabset/tab-content/tab-content.component.html","../../../projects/cats-ui/src/lib/components/tabset/tabset.component.ts","../../../projects/cats-ui/src/lib/components/tabset/tabset.component.html","../../../projects/cats-ui/src/lib/directives/auto-position.directive.ts","../../../projects/cats-ui/src/lib/components/timestamp-filter/timestamp-filter.component.ts","../../../projects/cats-ui/src/lib/components/timestamp-filter/timestamp-filter.component.html","../../../projects/cats-ui/src/lib/components/wizard/wizard.directive.ts","../../../projects/cats-ui/src/lib/components/wizard/wizard.service.ts","../../../projects/cats-ui/src/lib/components/wizard/wizard.component.ts","../../../projects/cats-ui/src/lib/components/wizard/wizard.component.html","../../../projects/cats-ui/src/lib/components/file-upload/file-upload.component.ts","../../../projects/cats-ui/src/lib/components/file-upload/file-upload.component.html","../../../projects/cats-ui/src/lib/components/header/header.component.ts","../../../projects/cats-ui/src/lib/components/header/header.component.html","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-box.component.ts","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-box.component.html","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-ref.ts","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-box.service.ts","../../../projects/cats-ui/src/lib/components/sidebar/sidebar.component.ts","../../../projects/cats-ui/src/lib/components/sidebar/sidebar.component.html","../../../projects/cats-ui/src/public-api.ts","../../../projects/cats-ui/src/cats-ui-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CatsUiService {\r\n\r\n constructor() { }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n FormControl,\r\n NG_VALIDATORS,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { InputConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-input',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class InputComponent implements ControlValueAccessor, Validator {\r\n @Input() inputConfig!: InputConfig;\r\n @Output() onKeyDown = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n @Output() onKeyUp = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n\r\n value: string = '';\r\n disabled = false;\r\n touched = false;\r\n control!: FormControl<any> | null;\r\n showPassword = false;\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n /**\r\n * @description Method to when value changes\r\n * @author Shiva Kant\r\n */\r\n handleInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value = target.value;\r\n this.onChange(this.value);\r\n\r\n if (this.control) {\r\n this.control.markAsDirty();\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n /**\r\n * @description Method to Handle key down event\r\n * @author Shiva Kant\r\n */\r\n handleKeyDown(event: KeyboardEvent) {\r\n this.onKeyDown.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to handle key up event\r\n * @author Shiva Kant\r\n */\r\n handleKeyUp(event: KeyboardEvent) {\r\n this.onKeyUp.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to Handle blur (touched\r\n * @author Shiva Kant\r\n */\r\n\r\n handleBlur(event: FocusEvent): void {\r\n this.touched = true;\r\n this.onTouched();\r\n const control = (event.target as any)?.control;\r\n control?.markAsTouched?.();\r\n }\r\n /**\r\n * @description Method to ControlValueAccessor methods\r\n * @author Shiva Kant\r\n */\r\n\r\n writeValue(value: any): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n /**\r\n * @description Method to Validator interface\r\n * @author Shiva Kant\r\n */\r\n\r\n validate(control: FormControl): any {\r\n this.control = control;\r\n if (this.inputConfig?.type === 'email') {\r\n return Validators.email(control);\r\n }\r\n return null;\r\n }\r\n /**\r\n * @description method to use show password\r\n * @author Shiva Kant\r\n */\r\n togglePassword() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n}\r\n","<div class=\"cats-input-container\">\r\n @if (inputConfig.label) {\r\n <label class=\"cats-label-text\">{{ inputConfig.label }}</label>\r\n }\r\n <div class=\"cats-custom-input\">\r\n <input\r\n [ngClass]=\"{\r\n invalid:\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n }\"\r\n class=\"cats-input-box\"\r\n [type]=\"showPassword ? 'text' : inputConfig.type\"\r\n [placeholder]=\"inputConfig.placeholder\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"value\"\r\n (input)=\"handleInput($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n (keydown)=\"handleKeyDown($event)\"\r\n (keyup)=\"handleKeyUp($event)\"\r\n />\r\n <!-- Eye Icon Only When Type Is Password -->\r\n @if (inputConfig.type === \"password\") {\r\n <span class=\"cats-eye-icon\" (click)=\"togglePassword()\">\r\n <img\r\n class=\"cats-eye-img\"\r\n [src]=\"showPassword ? 'images/eye.svg' : 'images/eye-off.svg'\"\r\n alt=\"toggle password visibility\"\r\n />\r\n </span>\r\n }\r\n </div>\r\n</div>\r\n","export class SingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n searchPlaceholder?: string = 'Search Here';\r\n required?: boolean = false;\r\n}\r\n\r\nexport class MultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n searchPlaceholder?: string = 'Search Here';\r\n chipLimit: number = 2;\r\n selectAll?: boolean = true;\r\n required?: boolean = false;\r\n}\r\n\r\nexport class SearchConfig {\r\n serachValue: string = '';\r\n placeholder?: string = 'Search';\r\n}\r\n\r\nexport class InputConfig {\r\n type: 'text' | 'email' | 'password' | 'number' = 'text';\r\n placeholder?: string = 'Enter here';\r\n label?: string = 'label';\r\n}\r\n\r\nexport class AutoCompleteSingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n customInput: boolean = false;\r\n}\r\nexport class AutoCompleteMultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n selectAll?: boolean = true;\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n chipLimit: number = 2;\r\n customInput?: boolean = false;\r\n pattern?: string = '';\r\n infoText?: string = '';\r\n selectionLimit?: number = 0;\r\n}\r\nexport class ToggleConfig {\r\n checked: boolean = false;\r\n disabled?: boolean = false;\r\n}\r\nexport class CheckBoxSubtask {\r\n idField: string = '';\r\n textField: string = '';\r\n checked?: boolean = false;\r\n}\r\n\r\nexport class CheckBoxConfig {\r\n idField: string = '';\r\n textField: string = '';\r\n disabledField?: string = '';\r\n name: string = '';\r\n checked?: boolean = false;\r\n subtasks?: CheckBoxSubtask[];\r\n}\r\nexport interface RadioButtonConfig {\r\n label?: string;\r\n disabled?: string;\r\n valueField?: string;\r\n textField?: string;\r\n name: string;\r\n layout?: 'horizontal' | 'vertical';\r\n}\r\nexport interface DialogConfig {\r\n id?: string;\r\n title?: string;\r\n closeOnBackdropClick?: boolean;\r\n showBackdrop?: boolean;\r\n class?: string;\r\n showHeader?: boolean;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { SingleSelectConfig } from '../../modal/cats-ui.modal';\r\n\r\nconst noop = () => {};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-single-select',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './single-select.component.html',\r\n styleUrl: './single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: SingleSelectComponent,\r\n multi: true,\r\n },\r\n SINGLE_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class SingleSelectComponent\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() singleSelectConfig: SingleSelectConfig = new SingleSelectConfig();\r\n @Input() selectedOption: any;\r\n @Output() onSelection = new EventEmitter();\r\n\r\n showDropdown = false;\r\n searchText: string = '';\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n disableControl: boolean = false;\r\n @Output() onScroll: any = new EventEmitter();\r\n @Input() parentNativeElement: any;\r\n\r\n @ContentChild('selectedData') selectedData!: TemplateRef<any>;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n private el: ElementRef,\r\n ) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n this.optionList = [];\r\n } else {\r\n if (this.optionList.length > 10)\r\n this.singleSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n // this.parentNativeElement.scrollIntoView({\r\n // behavior: 'smooth',\r\n // block: 'center',\r\n // });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n if (typeof obj == 'string' || typeof obj == 'number') return true;\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n this.selectedOption = item;\r\n this.toggleDropdown();\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(item);\r\n }\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param obj this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(obj: any): void {\r\n this.selectedOption = '';\r\n\r\n if (this.optionList.length && obj) {\r\n if (typeof obj === 'string' || typeof obj === 'number') {\r\n if (\r\n typeof this.optionList?.[0] === 'string' ||\r\n typeof this.optionList?.[0] === 'number'\r\n ) {\r\n if (this.optionList.includes(obj)) {\r\n this.selectedOption = obj;\r\n }\r\n } else if (obj != '') {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] == obj ||\r\n option[this.singleSelectConfig.textField] == obj\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n obj?.hasOwnProperty(this.singleSelectConfig.idField) &&\r\n !this.isObjEmpty(this.optionList[0])\r\n ) {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] ==\r\n obj[this.singleSelectConfig.idField]\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n setTimeout(() => {\r\n this.onChangeCallback(this.selectedOption);\r\n }, 0);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.singleSelectConfig.required) {\r\n this.inValid =\r\n this.selectedOption == '' ||\r\n JSON.stringify(this.selectedOption) == '{}';\r\n }\r\n this.searchText = '';\r\n if (this.showDropdown) this.onTouchedCallback();\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) => {\r\n if (typeof option != 'object') {\r\n return option?.toLowerCase().includes(this.searchText.toLowerCase());\r\n } else {\r\n return option[this.singleSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase());\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"cats-main-wrapper\" id=\"main-wrapper-single-select\">\r\n <div\r\n class=\"cats-single-select-dropdown\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n invalid:\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-input': !selectedOption && disableControl,\r\n 'selected-disable': selectedOption && disableControl,\r\n }\"\r\n >\r\n <div class=\"cats-left-details\">\r\n @if (singleSelectConfig.prefixLabel) {\r\n <span class=\"predefine-label\">\r\n <p class=\"prefix-text textTruncate\">{{ singleSelectConfig.prefixLabel }}</p>\r\n </span>\r\n }\r\n @if (\r\n !isObjEmpty(selectedOption) &&\r\n selectedOption[singleSelectConfig.textField]\r\n ) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n <ng-template #defaultTemplate let-data=\"data\">\r\n <!-- COLOR -->\r\n @if (singleSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n selectedOption[singleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (singleSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"selectedOption[singleSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n\r\n <!-- TEXT -->\r\n <span class=\"textTruncate\">\r\n {{ selectedOption[singleSelectConfig.textField] }}\r\n </span>\r\n </ng-template>\r\n } @else if (selectedOption && isObjEmpty(selectedOption)) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate1\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultTemplate1 let-data=\"data\">\r\n <span class=\"textTruncate\">\r\n {{ selectedOption }}\r\n </span>\r\n </ng-template>\r\n } @else {\r\n <span class=\"placeholderColor textTruncate\">{{\r\n singleSelectConfig.placeholder\r\n }}</span>\r\n }\r\n </div>\r\n <span >\r\n <img class=\"cats-arrow-icon\"\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img class=\"cats-arrow-icon\"\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div\r\n class=\"cats-dropdown-list\"\r\n id=\"container_scroll\"\r\n (scroll)=\"onDivScroll($event)\"\r\n >\r\n @if (singleSelectConfig.enableSearch) {\r\n <div class=\"cats-search-bar\">\r\n <div class=\"cats-input-box\">\r\n <img src=\"images/search.svg\" class=\"cats-search-icon\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter-search-box\"\r\n name=\"\"\r\n id=\"\"\r\n [placeholder]=\"\r\n singleSelectConfig.searchPlaceholder || 'Search here'\r\n \"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cats-cross-icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @if (isObjEmpty(this.optionList[0] || \"\")) {\r\n @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"cats-item\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField],\r\n }\"\r\n >\r\n <span class=\"textTruncate\">{{ option }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no-data cats-item\">No Data Found.</li>\r\n }\r\n } @else {\r\n @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"cats-item\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField],\r\n }\"\r\n >\r\n <!-- COLOR BADGE -->\r\n @if (singleSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color': option[singleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (singleSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"option[singleSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\">{{\r\n option[singleSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no-data cats-item\">No Data Found.</li>\r\n }\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass, NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { MultiSelectConfig } from '../../modal/cats-ui.modal';\r\nconst noop = () => {};\r\nexport const MULTI_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\nexport const MULTI_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-multi-select',\r\n imports: [NgClass, FormsModule, NgStyle],\r\n templateUrl: './multi-select.component.html',\r\n styleUrl: './multi-select.component.scss',\r\n providers: [\r\n MULTI_SELECT_CONTROL_VALUE_ACCESSOR,\r\n MULTI_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class MultiSelectComponent\r\n implements OnChanges, OnInit, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() multiSelectConfig: MultiSelectConfig = new MultiSelectConfig();\r\n\r\n @Input() selectedOptions: any[] = [];\r\n\r\n @Output() onSelection = new EventEmitter();\r\n\r\n control!: FormControl<any> | null;\r\n\r\n showDropdown = false;\r\n isListArrayOfObject = false;\r\n isSelectedAll = false;\r\n inValid: boolean = false;\r\n searchText: string = '';\r\n disabledControl: boolean = false;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n private el: ElementRef,\r\n ) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (\r\n _changes['optionList'].currentValue &&\r\n _changes['optionList'].currentValue.length > 0\r\n ) {\r\n if (\r\n typeof this.optionList[0] === 'string' ||\r\n typeof this.optionList[0] === 'number'\r\n ) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n const item: any = {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n isSelected: false,\r\n };\r\n\r\n if (this.multiSelectConfig.disabledField) {\r\n item[this.multiSelectConfig.disabledField] = false;\r\n }\r\n\r\n return item;\r\n });\r\n } else {\r\n this.isListArrayOfObject = true;\r\n this.optionList = this.optionList.map((option: any) => {\r\n return {\r\n ...option,\r\n isSelected: false,\r\n };\r\n });\r\n }\r\n if (this.optionList.length > 10)\r\n this.multiSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n item.isSelected = !item.isSelected;\r\n if (!item.isSelected) {\r\n let ind = this.selectedOptions.findIndex(\r\n (option: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField],\r\n );\r\n if (ind >= 0) this.selectedOptions.splice(ind, 1);\r\n } else {\r\n this.selectedOptions.push(item);\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true,\r\n );\r\n\r\n this.inValid = false;\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param controlValue this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(controlValue: any[]): void {\r\n if (this.optionList.length) {\r\n this.selectedOptions = [];\r\n if (controlValue && controlValue.length > 0) {\r\n if (\r\n typeof controlValue[0] === 'string' ||\r\n typeof controlValue[0] === 'number'\r\n ) {\r\n controlValue = controlValue.map((option: string | number) => {\r\n return {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n };\r\n });\r\n }\r\n for (const option of controlValue) {\r\n let ind = this.optionList.findIndex(\r\n (item: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField] ||\r\n item[this.multiSelectConfig.textField] ==\r\n option[this.multiSelectConfig.textField],\r\n );\r\n if (ind >= 0) {\r\n this.optionList[ind] = {\r\n ...this.optionList[ind],\r\n isSelected: true,\r\n };\r\n this.selectedOptions.push(this.optionList[ind]);\r\n }\r\n }\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true,\r\n );\r\n this.onChangeCallback(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.multiSelectConfig.required) {\r\n this.inValid = this.selectedOptions.length < 0;\r\n }\r\n this.searchText = '';\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n checkUncheckAll(): void {\r\n if (this.isSelectedAll) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: false };\r\n });\r\n\r\n this.isSelectedAll = false;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n } else {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: true };\r\n });\r\n\r\n this.isSelectedAll = true;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n }\r\n\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onSelection.emit(this.selectedOptions);\r\n }\r\n\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) =>\r\n option[this.multiSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase()),\r\n );\r\n }\r\n}\r\n","<div class=\"cats-main-wrapper\">\r\n <div\r\n class=\"cats-display-div\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n invalid:\r\n control?.touched &&\r\n control?.dirty &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-input': !selectedOptions && disabledControl,\r\n 'selected-disable': selectedOptions && disabledControl,\r\n }\"\r\n >\r\n <div class=\"cats-left-details\">\r\n @if (multiSelectConfig.prefixLabel) {\r\n <span class=\"predefine-label\">\r\n <p class=\"textTruncate predefine-label-text\">\r\n {{ multiSelectConfig.prefixLabel }}\r\n </p>\r\n </span>\r\n }\r\n <div class=\"multi-label-wrapper\">\r\n @if (selectedOptions.length > 0) {\r\n @for (item of selectedOptions; track $index) {\r\n @if (multiSelectConfig.chipLimit >= $index + 1) {\r\n <div class=\"cats-input-text\">\r\n <!-- SHOW ONLY WHEN SELECTED -->\r\n @if (item.isSelected) {\r\n <ng-container>\r\n <!-- COLOR BADGE -->\r\n @if (multiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[multiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (multiSelectConfig.iconField) {\r\n <span>\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[multiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <!-- TEXT -->\r\n <span class=\"textTruncate cats-span-text\">\r\n {{ item[multiSelectConfig.textField] }}\r\n </span>\r\n <!-- <span class=\"textTruncate\">{{\r\n item[multiSelectConfig.textField]\r\n }}</span> -->\r\n <!-- <i-feather name=\"x\" (click)=\"$event.stopPropagation();updateSelectedOption(item)\"></i-feather> -->\r\n <img\r\n src=\"images/x-circle.svg\"\r\n (click)=\"$event.stopPropagation(); updateSelectedOption(item)\"\r\n class=\"cats-cross-icon\"\r\n alt=\"\"\r\n />\r\n </div>\r\n }\r\n }\r\n } @else {\r\n <span class=\"placeholderColor textTruncate\">{{\r\n multiSelectConfig.placeholder\r\n }}</span>\r\n }\r\n @if (multiSelectConfig.chipLimit < selectedOptions.length) {\r\n <div class=\"cats-view-more\">\r\n +{{ selectedOptions.length - multiSelectConfig.chipLimit }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <span class=\"arrow-icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div class=\"cats-dropdown-list\" id=\"container_scroll\">\r\n @if (multiSelectConfig.enableSearch) {\r\n <div class=\"cats-search-bar\">\r\n <div class=\"cats-input-box\">\r\n <img class=\"cats-search-img\" src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter-search-box\"\r\n name=\"\"\r\n id=\"\"\r\n [placeholder]=\"\r\n multiSelectConfig.searchPlaceholder || 'Search here'\r\n \"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cats-cross-icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @if (multiSelectConfig.selectAll && optionList.length > 0) {\r\n <li class=\"cats-multiitem\" (click)=\"checkUncheckAll()\">\r\n <span class=\"cats-checkbox-container\">\r\n <input type=\"checkbox\" [checked]=\"isSelectedAll\" />\r\n @if (isSelectedAll) {\r\n UnSelectAll\r\n } @else {\r\n SelectAll\r\n }\r\n </span>\r\n </li>\r\n }\r\n @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"cats-checkbox-container cats-multiitem\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n multiSelectConfig.disabledField &&\r\n option[multiSelectConfig.disabledField],\r\n }\"\r\n >\r\n <input type=\"checkbox\" [checked]=\"option.isSelected\" />\r\n <!-- COLOR BADGE -->\r\n @if (multiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color': option[multiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (multiSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"option[multiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\"\r\n >{{ option[multiSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n } @empty {\r\n <li class=\"no-data cats-multiitem\">No Data Found.</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n} from '@angular/forms';\r\nimport { SearchConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-search-box',\r\n imports: [FormsModule],\r\n templateUrl: './search-box.component.html',\r\n styleUrl: './search-box.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SearchBoxComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SearchBoxComponent implements ControlValueAccessor {\r\n searchParam: string = '';\r\n @Input() searchConfig: SearchConfig = new SearchConfig();\r\n @Output() onClose = new EventEmitter<void>();\r\n @Output() searchParamValue = new EventEmitter<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n public onTouched: () => void = () => {};\r\n isDisabled = false;\r\n\r\n ngOnInit(): void {\r\n this.searchParam = this.searchConfig?.serachValue || '';\r\n }\r\n /**\r\n * @description Method to Called when input changes\r\n * @author Shiva Kant\r\n */\r\n\r\n onInputChange(event: any) {\r\n const value = (event.target as HTMLInputElement)?.value;\r\n this.searchParam = value;\r\n this.onChange(value);\r\n this.searchParamValue.emit(value);\r\n }\r\n /**\r\n * @description Method to closeSearchBar\r\n * @author Shiva Kant\r\n */\r\n closeSearchBar(): void {\r\n this.searchParam = '';\r\n this.onChange('');\r\n this.searchParamValue.emit('');\r\n this.onClose.emit();\r\n }\r\n\r\n // -------- ControlValueAccessor methods --------\r\n writeValue(value: string): void {\r\n this.searchParam = value || '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"cats-search-input\">\r\n <img class=\"cats-search-icon\" src=\"images/search.svg\" alt=\"\" srcset=\"\" />\r\n <input\r\n [placeholder]=\"searchConfig.placeholder\"\r\n type=\"text\"\r\n class=\"cats-search-text\"\r\n [value]=\"searchParam\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n @if (searchParam.length > 0) {\r\n <div class=\"cats-cross-icon\">\r\n <img class=\"cats-clear-icon\" src=\"images/x-cancel-btn.svg\" alt=\"\" srcset=\"\" (click)=\"closeSearchBar()\" />\r\n </div>\r\n }\r\n</div>\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: '[catsOutsideClick]',\r\n standalone: true,\r\n})\r\nexport class OutsideClickDirective {\r\n @Output() public clickOutSide = new EventEmitter<MouseEvent>();\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * @description Hosts listener\r\n * @author Shiva Kant\r\n * @param event \r\n * @returns click \r\n */\r\n @HostListener('document:click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n const targetElement = event.target as HTMLElement | null;\r\n\r\n // Guard clause: exit early if no target or not an element\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickInside) {\r\n this.clickOutSide.emit(event);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { AutoCompleteSingleSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nconst noop = () => {};\r\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const DROPDOWN_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-input-single-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-single-select.component.html',\r\n styleUrl: './auto-complete-single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutoCompleteSingleSelectComponent,\r\n multi: true,\r\n },\r\n DROPDOWN_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteSingleSelectComponent implements OnInit {\r\n @Input() autoSingleSelectConfig: AutoCompleteSingleSelectConfig =\r\n new AutoCompleteSingleSelectConfig();\r\n @Input() placeholder = 'Enter or Select Option';\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOption: any;\r\n constructor() {}\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n disableControl: boolean = false;\r\n ngOnInit(): void {}\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionsList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string): void {\r\n if (type == 'object') {\r\n this.selectedItem = item;\r\n this.inputValue = item[this.autoSingleSelectConfig.textField];\r\n } else {\r\n this.inputValue = item;\r\n }\r\n this.selectedOption = item;\r\n this.showDropdown = false;\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(this.selectedOption);\r\n }\r\n\r\n writeValue(obj: any): void {\r\n this.syncSelectionWithValue(obj);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // ---------- Helpers ----------\r\n private syncSelectionWithValue(value: any): void {\r\n this.selectedOption = null;\r\n this.inputValue = '';\r\n\r\n if (!value || !this.optionsList?.length) return;\r\n\r\n if (typeof value !== 'object') {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o === value ||\r\n o?.[this.autoSingleSelectConfig.idField] === value ||\r\n o?.[this.autoSingleSelectConfig.textField] === value,\r\n ) ?? value;\r\n } else {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o[this.autoSingleSelectConfig.idField] ===\r\n value[this.autoSingleSelectConfig.idField],\r\n ) ?? value;\r\n }\r\n this.selectedItem = this.selectedOption;\r\n this.inputValue = this.isObject(this.selectedOption)\r\n ? this.selectedOption[this.autoSingleSelectConfig.textField]\r\n : this.selectedOption;\r\n }\r\n /**\r\n * @description this method is use to update input value\r\n */\r\n updateInputValue(): void {\r\n let data: any = null;\r\n\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.selectedOption = null;\r\n this.onChangeCallback(null);\r\n } else {\r\n if (this.isObject(this.optionsList?.[0])) {\r\n // Try to find existing option\r\n const matchedOption = this.optionsList.find(\r\n (o) =>\r\n o[this.autoSingleSelectConfig.textField]?.toLowerCase()?.trim() ===\r\n this.inputValue.toLowerCase().trim(),\r\n );\r\n\r\n if (matchedOption) {\r\n //Use existing object (keeps ID)\r\n data = matchedOption;\r\n } else {\r\n // New custom value\r\n data = {\r\n [this.autoSingleSelectConfig.idField]: null,\r\n [this.autoSingleSelectConfig.textField]: this.inputValue,\r\n };\r\n }\r\n } else {\r\n data = this.inputValue;\r\n }\r\n\r\n this.selectedOption = data;\r\n this.onChangeCallback(data);\r\n }\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(data);\r\n this.control?.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus(): void {\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.updateInputValue(); // reuse logic\r\n this.showDropdown = false;\r\n return;\r\n }\r\n\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on click outside\r\n */\r\n outsideClicked(): void {\r\n if (this.showDropdown) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n this.showDropdown = false;\r\n }\r\n onClickEnter(control: any) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"cats-main-container\"\r\n catsOutsideClick\r\n (clickOutSide)=\"outsideClicked()\"\r\n>\r\n <div\r\n class=\"cats-input-container\"\r\n [ngClass]=\"{\r\n invalid:\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-input': !selectedItem && disableControl,\r\n 'selected-disable': selectedItem && disableControl,\r\n }\"\r\n >\r\n <div class=\"cats-input-box\">\r\n @if (selectedItem && autoSingleSelectConfig.colorField && inputValue) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color': selectedItem[autoSingleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n @if (selectedItem && autoSingleSelectConfig.iconField && inputValue) {\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"selectedItem[autoSingleSelectConfig.iconField]\"\r\n />\r\n }\r\n <input\r\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\r\n class=\"textTruncate cats-input-text\"\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n (keyup.enter)=\"onClickEnter(inputValue)\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n (input)=\"updateDropdownStatus()\"\r\n [placeholder]=\"autoSingleSelectConfig.placeholder\"\r\n />\r\n </div>\r\n <div (click)=\"toggleDropdown()\">\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-up.svg\"\r\n alt=\"up-arrow\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-down.svg\"\r\n alt=\"down-arrow\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (showDropdown) {\r\n <div class=\"dropdown-list-single-auto-select\">\r\n <!-- if optionList is an array of object-->\r\n @if (isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if (\r\n item[autoSingleSelectConfig.textField]\r\n .toLowerCase()\r\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\r\n ) {\r\n <li\r\n class=\"cats-item\"\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled-option'\r\n : ''\r\n \"\r\n >\r\n <!-- COLOR BADGE -->\r\n @if (autoSingleSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[autoSingleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n <!-- ICON -->\r\n @if (autoSingleSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[autoSingleSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\">\r\n {{ item[autoSingleSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n }\r\n </ng-container>\r\n }\r\n </ul>\r\n </ng-container>\r\n }\r\n\r\n <!-- if optionList is an array of string-->\r\n @if (!isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if (item.includes(inputValue) || inputValue == \"\") {\r\n <li\r\n class=\"cats-item\"\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled-option'\r\n : ''\r\n \"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n {{ item }}\r\n </li>\r\n }\r\n </ng-container>\r\n }\r\n </ul></ng-container\r\n >\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { AutoCompleteMultiSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { SafeHtml, DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'cats-ui-input-multi-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-multi-select.component.html',\r\n styleUrl: './auto-complete-multi-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteMultiSelectComponent\r\n implements OnInit, ControlValueAccessor\r\n{\r\n @Input() autoCompleteMultiSelectConfig!: AutoCompleteMultiSelectConfig;\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOptions: any[] = [];\r\n isSelectedAll: boolean = false;\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n isDisabled = false;\r\n safePlaceholder!: SafeHtml;\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n ngOnInit() {\r\n this.safePlaceholder = this.sanitizer.bypassSecurityTrustHtml(\r\n this.autoCompleteMultiSelectConfig?.placeholder as string,\r\n );\r\n }\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionsList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n private onChange: (_: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n this.parentNativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n writeValue(value: any[]): void {\r\n if (Array.isArray(value)) {\r\n this.selectedOptions = value;\r\n\r\n // sync optionsList selection\r\n this.optionsList.forEach((opt) => {\r\n opt.isSelected = value.some((v) =>\r\n this.isObject(v)\r\n ? v[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField]\r\n : v === opt,\r\n );\r\n });\r\n this.onChange(this.selectedOptions);\r\n this.updateSelectAllState();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.inputValue = target.value;\r\n }\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string) {\r\n if (type === 'object') {\r\n // Toggle the option's isSelected\r\n item.isSelected = !item.isSelected;\r\n\r\n if (item.isSelected) {\r\n // add to selectedOptions if not already present\r\n const exists = this.selectedOptions.some(\r\n (opt) =>\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (!exists) this.selectedOptions.push(item);\r\n } else {\r\n // remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter(\r\n (opt) =>\r\n !(\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField]\r\n ),\r\n );\r\n }\r\n } else {\r\n // string type\r\n const existsIndex = this.selectedOptions.findIndex((opt) => opt === item);\r\n if (existsIndex > -1) {\r\n // remove\r\n this.selectedOptions.splice(existsIndex, 1);\r\n } else {\r\n // add\r\n this.selectedOptions.push(item);\r\n }\r\n\r\n // If optionsList contains this string, also toggle its isSelected there\r\n const idxInOptions = this.optionsList.findIndex(\r\n (o) => typeof o === 'string' && o === item,\r\n );\r\n if (idxInOptions > -1) {\r\n // toggle corresponding option's isSelected\r\n const opt = this.optionsList[idxInOptions] as any;\r\n opt.isSelected = !opt.isSelected;\r\n }\r\n }\r\n\r\n // keep select all state consistent\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to checkUncheckAll\r\n * @author Shiva Kant\r\n */\r\n\r\n checkUncheckAll(event: any) {\r\n if (event) event.stopPropagation();\r\n this.isSelectedAll = !this.isSelectedAll;\r\n\r\n this.optionsList.forEach((item) => {\r\n if (\r\n !this.autoCompleteMultiSelectConfig.disabledField ||\r\n !item[this.autoCompleteMultiSelectConfig.disabledField]\r\n ) {\r\n item.isSelected = this.isSelectedAll;\r\n }\r\n });\r\n\r\n // Keep custom values intact\r\n const customChips = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? !this.optionsList.some(\r\n (o) =>\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField],\r\n )\r\n : !this.optionsList.includes(opt),\r\n );\r\n\r\n const selectedOptionItems = this.optionsList.filter(\r\n (opt) => opt.isSelected,\r\n );\r\n\r\n this.selectedOptions = [...customChips, ...selectedOptionItems];\r\n this.onChange(this.selectedOptions);\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to removeChip\r\n * @author Shiva Kant\r\n */\r\n removeChip(item: any) {\r\n // Remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] !==\r\n (this.isObject(item)\r\n ? item[this.autoCompleteMultiSelectConfig.textField]\r\n : item)\r\n : opt !== item,\r\n );\r\n\r\n // If item corresponds to an optionsList entry, unselect it there too\r\n if (this.isObject(item)) {\r\n const idx = this.optionsList.findIndex(\r\n (o: any) =>\r\n this.isObject(o) &&\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n } else {\r\n // string case\r\n const idx = this.optionsList.findIndex((o) => o === item);\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n }\r\n\r\n // update select all state & emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions); // 🔥 THIS updates formControl\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus() {\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on onClickEnter\r\n * @author Shiva Kant\r\n */\r\n\r\n onClickEnter(control?: any): void {\r\n if (!this.inputValue.trim()) return;\r\n\r\n // pattern check\r\n if (this.autoCompleteMultiSelectConfig.pattern) {\r\n const regex = new RegExp(this.autoCompleteMultiSelectConfig.pattern);\r\n if (!regex.test(this.inputValue)) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n }\r\n\r\n const val = this.inputValue.trim();\r\n const valLower = val.toLowerCase();\r\n\r\n // Avoid duplicate\r\n const exists = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower\r\n : opt.toLowerCase() === valLower,\r\n );\r\n if (exists) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n\r\n // Try find matched item in optionsList\r\n const matchedItem = this.isObject(this.optionsList?.[0])\r\n ? this.optionsList.find(\r\n (opt: any) =>\r\n opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower,\r\n )\r\n : this.optionsList.find((opt: any) => opt.toLowerCase() === valLower);\r\n\r\n if (matchedItem) {\r\n // If matched, ensure option is marked selected and present in selectedOptions\r\n matchedItem.isSelected = true;\r\n const already = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n matchedItem[this.autoCompleteMultiSelectConfig.textField]\r\n : opt === matchedItem,\r\n );\r\n if (!already) this.selectedOptions.push(matchedItem);\r\n } else if (this.autoCompleteMultiSelectConfig.customInput) {\r\n // create custom item and mark it selected\r\n let newItem: any = val;\r\n if (this.isObject(this.optionsList?.[0])) {\r\n newItem = {\r\n [this.autoCompleteMultiSelectConfig.idField]: null,\r\n [this.autoCompleteMultiSelectConfig.textField]: val,\r\n isSelected: true, // mark selected for consistency\r\n __isCustom: true, // optional flag to identify custom items\r\n };\r\n }\r\n this.selectedOptions.push(newItem);\r\n }\r\n\r\n // reset input but keep dropdown open (as you wanted)\r\n this.inputValue = '';\r\n\r\n // update select all state and emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n outsideClicked(): void {\r\n this.showDropdown = false;\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n\r\n updateSelectAllState() {\r\n // only consider non-disabled items for select-all state\r\n const selectable = this.optionsList.filter(\r\n (opt: any) =>\r\n !(\r\n this.autoCompleteMultiSelectConfig.disabledField &&\r\n opt[this.autoCompleteMultiSelectConfig.disabledField]\r\n ),\r\n );\r\n this.isSelectedAll =\r\n selectable.length > 0 && selectable.every((opt: any) => !!opt.isSelected);\r\n }\r\n}\r\n","<div class=\"cats-main-container\">\r\n <div\r\n class=\"cats-input-container\"\r\n [class.active]=\"showDropdown\"\r\n [ngClass]=\"{\r\n invalid: control?.touched && control?.invalid && control?.errors,\r\n 'disable-input': !selectedOptions && isDisabled,\r\n 'selected-disable': selectedOptions && isDisabled,\r\n }\"\r\n catsOutsideClick\r\n (clickOutSide)=\"outsideClicked()\"\r\n >\r\n <div class=\"cats-chips-wrapper\">\r\n <!-- Chips -->\r\n @for (item of selectedOptions; track $index) {\r\n @if ($index < autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"cats-chip\" (click)=\"$event.stopPropagation()\">\r\n <!-- <span class=\"textTruncate chip-text\">\r\n {{\r\n isObject(item)\r\n ? item[autoCompleteMultiSelectConfig.textField]\r\n : item\r\n }}\r\n </span> -->\r\n <!-- SHOW ONLY WHEN SELECTED -->\r\n @if (\r\n isObject(item) ? item.isSelected : selectedOptions.includes(item)\r\n ) {\r\n <ng-container>\r\n <!-- COLOR BADGE -->\r\n @if (autoCompleteMultiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[autoCompleteMultiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (autoCompleteMultiSelectConfig.iconField) {\r\n <span>\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <!-- TEXT -->\r\n <span class=\"textTruncate chip-text\">\r\n {{\r\n isObject(item)\r\n ? item[autoCompleteMultiSelectConfig.textField]\r\n : item\r\n }}\r\n </span>\r\n <img\r\n src=\"images/x-circle.svg\"\r\n class=\"cats-cross-icon\"\r\n (click)=\"$event.stopPropagation(); removeChip(item)\"\r\n />\r\n </div>\r\n }\r\n }\r\n <!-- +N counter -->\r\n @if (selectedOptions.length > autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"cats-view-more\">\r\n +{{\r\n selectedOptions.length - autoCompleteMultiSelectConfig.chipLimit\r\n }}\r\n </div>\r\n }\r\n <!-- Input Box (always available) -->\r\n <div\r\n class=\"cats-input-box\"\r\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\r\n >\r\n <input\r\n type=\"text\"\r\n class=\"multi-select-input\"\r\n [value]=\"inputValue\"\r\n (input)=\"onInput($event)\"\r\n (keyup.enter)=\"onClickEnter()\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n @if (selectedOptions.length === 0 && !inputValue) {\r\n <div class=\"fake-placeholder\" [innerHTML]=\"safePlaceholder\"></div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown toggle -->\r\n <div (click)=\"toggleDropdown()\">\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-up.svg\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-down.svg\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown list -->\r\n @if (showDropdown) {\r\n <div\r\n class=\"dropdown-list-multi-auto-select\"\r\n id=\"container_scroll\"\r\n (click)=\"onDivScroll($event)\"\r\n >\r\n @if (\r\n autoCompleteMultiSelectConfig.infoText ||\r\n autoCompleteMultiSelectConfig.selectionLimit\r\n ) {\r\n <div class=\"cats-headerRow\">\r\n @if (autoCompleteMultiSelectConfig.infoText) {\r\n <span class=\"cats-infoText textTruncate\">\r\n {{ autoCompleteMultiSelectConfig.infoText }}\r\n </span>\r\n }\r\n\r\n @if (autoCompleteMultiSelectConfig.selectionLimit) {\r\n <span class=\"cats-countText textTruncate\">\r\n {{ selectedOptions.length }}/{{\r\n autoCompleteMultiSelectConfig.selectionLimit\r\n }}\r\n are Selected\r\n </span>\r\n }\r\n </div>\r\n }\r\n <ul class=\"cats-ul-multi-select\">\r\n <!-- infotext -->\r\n <!-- Select All -->\r\n @if (autoCompleteMultiSelectConfig.selectAll) {\r\n <li\r\n class=\"cats-checkbox-container select-all-item\"\r\n (click)=\"checkUncheckAll($event)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-input-checkbox\"\r\n [checked]=\"isSelectedAll\"\r\n (click)=\"$event.stopPropagation(); checkUncheckAll($event)\"\r\n />\r\n <span>{{ isSelectedAll ? \"Unselect All\" : \"Select All\" }}</span>\r\n </li>\r\n }\r\n\r\n <!-- Object Options -->\r\n @if (isObject(optionsList[0])) {\r\n @for (item of optionsList; track $index) {\r\n @if (\r\n item[autoCompleteMultiSelectConfig.textField]\r\n .toLowerCase()\r\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\r\n ) {\r\n <li\r\n class=\"cats-checkbox-container\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n autoCompleteMultiSelectConfig.disabledField &&\r\n item[autoCompleteMultiSelectConfig.disabledField],\r\n }\"\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-input-checkbox\"\r\n [checked]=\"item.isSelected\"\r\n (click)=\"\r\n $event.stopPropagation(); updateSelectedItem(item, 'object')\r\n \"\r\n />\r\n <!-- COLOR BADGE -->\r\n @if (autoCompleteMultiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[autoCompleteMultiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (autoCompleteMultiSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\">{{\r\n item[autoCompleteMultiSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n }\r\n }\r\n }\r\n\r\n <!-- String Options -->\r\n @if (!isObject(optionsList[0])) {\r\n @for (item of optionsList; track $index) {\r\n @if (\r\n item.toLowerCase().includes(inputValue.toLowerCase()) ||\r\n inputValue == \"\"\r\n ) {\r\n <li\r\n class=\"cats-checkbox-container\"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-input-checkbox\"\r\n [checked]=\"selectedOptions.includes(item)\"\r\n (click)=\"\r\n $event.stopPropagation(); updateSelectedItem(item, 'string')\r\n \"\r\n />\r\n <span class=\"textTruncate\">{{ item }}</span>\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { ToggleConfig } from '../../modal/cats-ui.modal';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-ui-toogle-button',\r\n imports: [],\r\n templateUrl: './toogle-button.component.html',\r\n styleUrl: './toogle-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ToogleButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ToogleButtonComponent {\r\n @Input() toggleConfig!: ToggleConfig;\r\n @Output() onToggled: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n toggle() {\r\n if (!this.toggleConfig.disabled) {\r\n this.toggleConfig.checked = !this.toggleConfig.checked;\r\n this.onToggled.emit(this.toggleConfig.checked);\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: boolean): void {\r\n this.toggleConfig.checked = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.toggleConfig.disabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"cats-toggle-button\">\r\n <label class=\"cats-switch\">\r\n <input \r\n type=\"checkbox\" \r\n class=\"cats-toggle-input\"\r\n [checked]=\"toggleConfig.checked\" \r\n [disabled]=\"toggleConfig.disabled\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"cats-slider round\"></span>\r\n </label>\r\n</div>\r\n","import { Component,EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { CheckBoxConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-checkbox-button',\r\n imports: [],\r\n templateUrl: './checkbox-button.component.html',\r\n styleUrl: './checkbox-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxButtonComponent\r\n implements ControlValueAccessor, OnChanges\r\n{\r\n @Input() checkBoxConfig!: CheckBoxConfig;\r\n @Output() onCheckBoxSelection = new EventEmitter<any>();\r\n @Input() optionList: any[] = [];\r\n @Input() selectedOptions: any[] = [];\r\n\r\n private onChange: (value: any[]) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n get idField(): string {\r\n return this.checkBoxConfig?.idField || 'id';\r\n }\r\n\r\n get textField(): string {\r\n return this.checkBoxConfig?.textField || 'name';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedOptions'] && this.selectedOptions?.length) {\r\n this.applySelectedOptions();\r\n }\r\n }\r\n\r\n /**\r\n * @description normalizeSelectedValue the value according t\r\n * @param item\r\n * @returns\r\n */\r\n normalizeSelectedValue(item: any): string {\r\n if (item == null) return '';\r\n\r\n if (typeof item === 'string') return item; // case 1: string of id or name\r\n if (item.id) return item.id; // case 2: object with id\r\n if (item.name) return item.name; // case 3: object with name\r\n\r\n return ''; // fallback\r\n }\r\n\r\n /**\r\n * @description Method is to Apply selectedOptions on input change\r\n * @author Shiva Kant\r\n */\r\n private applySelectedOptions() {\r\n const normalized = this.selectedOptions.map((s: any) =>\r\n this.normalizeSelectedValue(s)\r\n );\r\n this.optionList = this.optionList.map((task) => {\r\n const taskId = task.id;\r\n const taskName = task.name;\r\n\r\n const isParentSelected =\r\n normalized.includes(taskId) || normalized.includes(taskName);\r\n\r\n const updatedSubtasks = (task.subtasks ?? []).map((sub: any) => {\r\n const subId = sub.id;\r\n const subName = sub.name;\r\n\r\n return {\r\n ...sub,\r\n checked: normalized.includes(subId) || normalized.includes(subName),\r\n };\r\n });\r\n\r\n return {\r\n ...task,\r\n checked:\r\n isParentSelected || updatedSubtasks.every((s: any) => s.checked),\r\n subtasks: updatedSubtasks,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method is to Checkbox change handler\r\n * @author Shiva Kant\r\n * @param event\r\n * @param parentIndex\r\n * @param subIndex\r\n */\r\n onCheckboxChange(event: Event, parentIndex: number, subIndex?: number) {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n\r\n this.optionList = this.optionList.map((task, i) => {\r\n const safeTask = {\r\n ...task,\r\n checked: task.checked ?? false,\r\n subtasks: task.subtasks ?? [],\r\n };\r\n\r\n if (i === parentIndex) {\r\n if (subIndex === undefined) {\r\n // Parent checkbox toggled\r\n safeTask.checked = checked;\r\n safeTask.subtasks = safeTask.subtasks.map((sub: any) => ({\r\n ...sub,\r\n checked,\r\n }));\r\n } else if (safeTask.subtasks[subIndex]) {\r\n // Subtask toggled\r\n safeTask.subtasks[subIndex].checked = checked;\r\n // Parent checked only if all subtasks are checked\r\n safeTask.checked = safeTask.subtasks.every((sub: any) => sub.checked);\r\n }\r\n }\r\n\r\n return safeTask;\r\n });\r\n\r\n const checkedTasks = this.optionList\r\n .filter(\r\n (task) =>\r\n (task.checked ?? false) ||\r\n task.subtasks?.some((s: any) => s.checked ?? false)\r\n )\r\n .map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks?.filter((s: any) => s.checked ?? false) || [],\r\n }));\r\n\r\n const selectedObjects = checkedTasks.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks.filter((s: any) => s.checked),\r\n }));\r\n\r\n this.onCheckBoxSelection.emit(selectedObjects);\r\n this.onChange(this.optionList);\r\n this.onTouched();\r\n }\r\n /**\r\n * @description Indeterminate state for parent on option checked\r\n * @param task\r\n * @returns\r\n */\r\n partiallyComplete(task: any): boolean {\r\n if (!task?.subtasks?.length) return false;\r\n const done = task.subtasks.filter((t: any) => t.checked).length;\r\n return done > 0 && done < task.subtasks.length;\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.optionList = value.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks ? [...task.subtasks] : [],\r\n }));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.optionList.forEach((task) => {\r\n task.checked = false;\r\n task.subtasks?.forEach((sub: any) => (sub.checked = false));\r\n });\r\n }\r\n }\r\n}\r\n","<div class=\"cats-parent-container\">\r\n @for (task of optionList; let parentIndex = $index; track $index) {\r\n <!-- Parent Checkbox -->\r\n <label class=\"cats-checkbox-container\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-checkbox-input\"\r\n [name]=\"checkBoxConfig.name\"\r\n [checked]=\"task.checked\"\r\n [disabled]=\"\r\n checkBoxConfig.disabledField\r\n ? task[checkBoxConfig.disabledField]\r\n : false\r\n \"\r\n [indeterminate]=\"partiallyComplete(task)\"\r\n (change)=\"onCheckboxChange($event, parentIndex)\"\r\n />\r\n <span class=\"textTruncate\">{{ task[textField] }}</span>\r\n </label>\r\n\r\n <!-- Subtasks -->\r\n @if (task.subtasks && task.subtasks.length > 0) {\r\n <ul class=\"cats-sub\">\r\n @for (sub of task.subtasks; let idx = $index; track $index) {\r\n <li>\r\n <label class=\"cats-checkbox-container\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-checkbox-input\"\r\n [checked]=\"sub.checked\"\r\n (change)=\"onCheckboxChange($event, parentIndex, idx)\"\r\n />\r\n <!-- <span class=\"checkmark\"></span> -->\r\n <span class=\"cats-label-text\">{{ sub[textField] }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { RadioButtonConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-radio-button',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './radio-button.component.html',\r\n styleUrl: './radio-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadioButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RadioButtonComponent implements ControlValueAccessor {\r\n @Input() config!: RadioButtonConfig;\r\n @Input() optionList: any[] = [];\r\n @Output() selectionChange = new EventEmitter<any>();\r\n // selectedRadio pass id in number or name in string or full object\r\n @Input() selectedRadio: any;\r\n\r\n value: any = null;\r\n isDisabled = false;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedRadio'] && this.optionList?.length) {\r\n if (!this.selectedRadio) return;\r\n\r\n const selected = this.selectedRadio;\r\n\r\n const match = this.optionList.find((opt) => {\r\n const optValue = this.extractValue(opt);\r\n const optLabel = this.extractLabel(opt);\r\n\r\n if (typeof selected === 'string' || typeof selected === 'number') {\r\n // Match primitive against value or label\r\n return selected === optValue || selected === optLabel;\r\n } else if (typeof selected === 'object') {\r\n // Match object against option's value or label\r\n const selValue = this.extractValue(selected);\r\n const selLabel = this.extractLabel(selected);\r\n return selValue === optValue || selLabel === optLabel;\r\n }\r\n return false;\r\n });\r\n\r\n if (match) {\r\n this.value = this.extractValue(match);\r\n this.onChange(this.value);\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n /**\r\n * @description method to handle change of toggle button\r\n * @author Shiva Kant\r\n * @param option\r\n */\r\n handleChange(option: any) {\r\n this.value = this.extractValue(option);\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.selectionChange.emit(option);\r\n }\r\n /**\r\n * @description method to extractValue\r\n * @author Shiva Kant\r\n * @param option\r\n * @returns\r\n */\r\n extractValue(option: any): any {\r\n if (typeof option === 'string' || typeof option === 'number') {\r\n return option;\r\n }\r\n\r\n const key = this.config.valueField ?? 'id'; // ALWAYS a string\r\n return option[key];\r\n }\r\n\r\n extractLabel(option: any): string {\r\n if (typeof option === 'string') return option;\r\n\r\n const key = this.config.textField ?? 'label';\r\n return option[key];\r\n }\r\n\r\n /**\r\n * * @description method to normalizeValue\r\n * @author Shiva Kant\r\n * @param value\r\n * @returns\r\n */\r\n normalizeValue(value: any): any {\r\n if (value == null) return null;\r\n\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n // object case → return id or valueField\r\n const key = this.config.valueField ?? 'id';\r\n return value[key];\r\n }\r\n}\r\n","<div class=\"cats-radio-group\" [ngClass]=\"config.layout\">\r\n @if (config.label) {\r\n <div class=\"cats-group-label\">{{ config.label }}</div>\r\n }\r\n\r\n <div class=\"cats-radio-option-container\">\r\n @for (option of optionList; track $index) {\r\n <div class=\"cats-radio-option\">\r\n <input\r\n type=\"radio\"\r\n class=\"cats-radio-input\"\r\n [name]=\"config.name\"\r\n [id]=\"extractValue(option)\"\r\n [disabled]=\"config.disabled ? option[config.disabled] : false\"\r\n [value]=\"extractValue(option)\"\r\n [(ngModel)]=\"value\"\r\n (change)=\"handleChange(option)\"\r\n />\r\n <label class=\"cats-label\" [for]=\"extractValue(option)\">{{ extractLabel(option) }}</label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'custom-calendar-grid',\r\n templateUrl: './calendar-grid.component.html',\r\n styleUrls: ['./calendar-grid.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\nexport class CalendarGridComponent {\r\n @Input() month!: number;\r\n @Input() year!: number;\r\n @Input() calendarDays!: (number | null)[];\r\n @Input() weekDays!: string[];\r\n @Input() parent!: any;\r\n\r\n @Output() daySelected = new EventEmitter<number | null>();\r\n\r\n selectDay(day: number | null) {\r\n this.daySelected.emit(day);\r\n }\r\n\r\n isSelected(day: number | null): boolean {\r\n return this.parent.isSelected(day, this.month, this.year);\r\n }\r\n\r\n isInRange(day: number | null): boolean {\r\n return this.parent.isInRange(day, this.month, this.year);\r\n }\r\n\r\n isRangeStart(day: number | null): boolean {\r\n return this.parent.isRangeStart(day, this.month, this.year);\r\n }\r\n\r\n isRangeEnd(day: number | null): boolean {\r\n return this.parent.isRangeEnd(day, this.month, this.year);\r\n }\r\n\r\n isToday(day: number | null): boolean {\r\n return this.parent.isToday(day, this.month, this.year);\r\n }\r\n\r\n isDayDisabled(day: number | null): boolean {\r\n return this.parent.isDayDisabled(day, this.month, this.year);\r\n }\r\n\r\n isOtherMonth(day: number | null): boolean {\r\n return this.parent.isOtherMonth(day);\r\n }\r\n\r\n getDayDisplay(day: number | null): string {\r\n return this.parent.getDayDisplay(day);\r\n }\r\n}","<div class=\"calendar-grid sp-t-12 sm-b-8\">\r\n @for (d of weekDays; track $index) {\r\n <div class=\"weekday-header meta-regular-emphasized\">{{ d }}</div>\r\n }\r\n\r\n <!-- Days -->\r\n @for (day of calendarDays; track $index) {\r\n <div class=\"calendar-day body-medium\" [class.other-month]=\"isOtherMonth(day)\" [class.selected]=\"isSelected(day)\"\r\n [class.in-range]=\"isInRange(day)\" [class.range-start]=\"isRangeStart(day)\" [class.range-end]=\"isRangeEnd(day)\"\r\n [class.today]=\"isToday(day)\" [class.disabled]=\"isDayDisabled(day)\" (click)=\"selectDay(day)\">\r\n <span>{{ getDayDisplay(day) }}</span>\r\n </div>\r\n }\r\n</div>","import { Component, EventEmitter, forwardRef, Output } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n FormControl,\r\n Validator,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-time-input',\r\n templateUrl: './time-input.component.html',\r\n styleUrls: ['./time-input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TimeInputComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TimeInputComponent implements ControlValueAccessor, Validator {\r\n timeValue = '';\r\n timeMeridiem: 'AM' | 'PM' = 'AM';\r\n control!: FormControl;\r\n\r\n @Output() timeChange = new EventEmitter<{\r\n time: string;\r\n meridiem: 'AM' | 'PM';\r\n }>();\r\n\r\n private onChangeCallback: (_: any) => void = () => {};\r\n private onTouchedCallback: () => void = () => {};\r\n\r\n // ------------------ Input Handling ------------------\r\n handleTimeInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n // Allow only digits + colon\r\n value = value.replace(/[^0-9:]/g, '');\r\n\r\n // CASE: user typed \"1:\" shorthand → treat leading digit as \"0X\"\r\n if (/^\\d:$/.test(value)) {\r\n this.timeValue = `0${value[0]}:`;\r\n input.value = this.timeValue;\r\n this.updateControlValue();\r\n this.emitTime();\r\n return;\r\n }\r\n\r\n // Strip all colons → work purely with raw digits\r\n let raw = value.replace(/:/g, '');\r\n\r\n // Limit to 4 digits max\r\n raw = raw.slice(0, 4);\r\n\r\n // Only auto-insert colon once we have exactly 4 digits\r\n // This prevents colon from disrupting cursor position mid-typing\r\n if (raw.length === 4) {\r\n this.timeValue = raw.slice(0, 2) + ':' + raw.slice(2, 4);\r\n } else {\r\n this.timeValue = raw;\r\n }\r\n\r\n // Sync the actual input element value to prevent browser\r\n // from showing stale/mis-formatted text\r\n input.value = this.timeValue;\r\n\r\n this.updateControlValue();\r\n this.emitTime();\r\n }\r\n\r\n setPeriod(period: 'AM' | 'PM') {\r\n this.timeMeridiem = period;\r\n this.updateControlValue();\r\n this.emitTime();\r\n }\r\n\r\n private emitTime() {\r\n this.timeChange.emit({ time: this.timeValue, meridiem: this.timeMeridiem });\r\n }\r\n\r\n private updateControlValue() {\r\n if (!this.isValidTime(this.timeValue)) {\r\n this.onChangeCallback(null);\r\n return;\r\n }\r\n\r\n let [hours, minutes] = this.timeValue.split(':').map(Number);\r\n\r\n // Convert to 24h\r\n if (this.timeMeridiem === 'PM' && hours < 12) hours += 12;\r\n if (this.timeMeridiem === 'AM' && hours === 12) hours = 0;\r\n\r\n this.onChangeCallback(hours * 3600 + minutes * 60);\r\n }\r\n\r\n // ------------------ Validation ------------------\r\n private isValidTime(value: string): boolean {\r\n // Must be fully formatted HH:MM to be valid\r\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\r\n\r\n const [hStr, mStr] = value.split(':');\r\n const hours = Number(hStr);\r\n const minutes = Number(mStr);\r\n\r\n return (\r\n !isNaN(hours) &&\r\n !isNaN(minutes) &&\r\n hours >= 1 &&\r\n hours <= 12 &&\r\n minutes >= 0 &&\r\n minutes <= 59\r\n );\r\n }\r\n\r\n validate(control: FormControl) {\r\n this.control = control;\r\n return this.isValidTime(this.timeValue) ? null : { timePattern: true };\r\n }\r\n\r\n // ------------------ ControlValueAccessor ------------------\r\n writeValue(obj: any): void {\r\n if (typeof obj === 'number') {\r\n let hours = Math.floor(obj / 3600);\r\n const minutes = Math.floor((obj % 3600) / 60);\r\n\r\n this.timeMeridiem = hours >= 12 ? 'PM' : 'AM';\r\n if (hours > 12) hours -= 12;\r\n if (hours === 0) hours = 12;\r\n\r\n this.timeValue = `${hours.toString().padStart(2, '0')}:${minutes\r\n .toString()\r\n .padStart(2, '0')}`;\r\n } else {\r\n this.timeValue = '';\r\n this.timeMeridiem = 'AM';\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n setDisabledState?(_isDisabled: boolean): void {}\r\n\r\n onFocusOut() {\r\n this.formatTimeOnBlur();\r\n this.onTouchedCallback();\r\n }\r\n\r\n private formatTimeOnBlur() {\r\n if (!this.timeValue) return;\r\n\r\n // Strip colon and parse raw digits (handles both \"115\" and \"11:5\")\r\n const raw = this.timeValue.replace(/:/g, '');\r\n\r\n if (raw.length < 1) {\r\n this.clearValue();\r\n return;\r\n }\r\n\r\n const hours = Number(raw.slice(0, 2));\r\n // If only 1–2 digits typed (e.g. \"11\"), default minutes to 0\r\n const minutes = raw.length >= 3 ? Number(raw.slice(2, 4)) : 0;\r\n\r\n // Validate hour\r\n if (isNaN(hours) || hours < 1 || hours > 12) {\r\n this.clearValue();\r\n return;\r\n }\r\n\r\n // Validate minutes\r\n if (isNaN(minutes) || minutes < 0 || minutes > 59) {\r\n this.clearValue();\r\n return;\r\n }\r\n\r\n // Format properly\r\n this.timeValue =\r\n `${hours.toString().padStart(2, '0')}:` +\r\n `${minutes.toString().padStart(2, '0')}`;\r\n\r\n this.updateControlValue();\r\n this.emitTime();\r\n }\r\n\r\n private clearValue() {\r\n this.timeValue = '';\r\n this.onChangeCallback(null);\r\n this.emitTime();\r\n }\r\n\r\n clear() {\r\n this.writeValue(null);\r\n this.onChangeCallback(null);\r\n this.emitTime();\r\n }\r\n}\r\n","<div class=\"footer-row time-row\">\r\n <span class=\"footer-label body-large sp-x-12\">Time</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <div class=\"time-input-wrapper\">\r\n <input\r\n class=\"time-input body-large\"\r\n type=\"text\"\r\n [value]=\"timeValue\"\r\n placeholder=\"HH:MM\"\r\n (input)=\"handleTimeInput($event)\"\r\n (blur)=\"onFocusOut()\"\r\n maxlength=\"5\"\r\n autocomplete=\"off\"\r\n />\r\n <div class=\"period-toggle\">\r\n <button\r\n type=\"button\"\r\n class=\"period-btn body-medium\"\r\n [class.active]=\"timeMeridiem === 'AM'\"\r\n (click)=\"setPeriod('AM')\"\r\n >\r\n AM\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"period-btn body-medium\"\r\n [class.active]=\"timeMeridiem === 'PM'\"\r\n (click)=\"setPeriod('PM')\"\r\n >\r\n PM\r\n </button>\r\n </div>\r\n </div>\r\n <img\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"Clear\"\r\n class=\"cancel-btn\"\r\n (click)=\"clear();\"\r\n />\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n HostListener,\r\n ElementRef,\r\n forwardRef,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\n\r\nexport type DatePickerMode = 'single' | 'range' | 'dual';\r\n\r\nexport interface DatePickerConfig {\r\n mode?: DatePickerMode; // 'single' | 'range' | 'dual'\r\n time?: boolean;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n placeholder?: string;\r\n fromPlaceholder?: string;\r\n toPlaceholder?: string;\r\n dateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\r\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\r\n disabledDates?: Date[];\r\n disablePastDays?: number;\r\n showDateLabel?: boolean;\r\n showTimeLabel?: boolean;\r\n}\r\n\r\nexport interface DateRange {\r\n from: string | null;\r\n fromTime: string\r\n to: string | null;\r\n toTime: string\r\n}\r\n\r\nexport interface DateTimeResult {\r\n date: string | null;\r\n time: string; // \"HH:mm\"\r\n meridiem: 'AM' | 'PM';\r\n}\r\n\r\nexport type CalenderView = 'day' | 'year' | 'month'\r\n\r\nimport { CalendarGridComponent } from './calendar-grid.component';\r\nimport { TimeInputComponent } from './time-input.component';\r\n\r\n@Component({\r\n selector: 'cats-ui-custom-date-picker',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CustomDatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n templateUrl: './custom-date-picker.component.html',\r\n styleUrls: ['./custom-date-picker.component.scss'],\r\n imports: [\r\n CommonModule,\r\n CalendarGridComponent,\r\n TimeInputComponent,\r\n FormsModule,\r\n ],\r\n})\r\nexport class CustomDatePickerComponent implements OnInit, ControlValueAccessor ,OnChanges{\r\n @Input() config: DatePickerConfig = {};\r\n @Input() label: string = '';\r\n @Input() showHeader: boolean = true;\r\n @Input() showTrigger: boolean = true;\r\n\r\n // Single / datetime\r\n\r\n @Output() applied = new EventEmitter<\r\n Date | DateRange | DateTimeResult | string\r\n >();\r\n @Output() cancelled = new EventEmitter<void>();\r\n\r\n // Range\r\n @Output() rangeSelected = new EventEmitter<DateRange>();\r\n\r\n private onChange: (val: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n // ─── State ────────────────────────────────────────────────────────────────\r\n isOpen = false;\r\n\r\n // Single / DateTime\r\n selectedDate: Date | null = null;\r\n tempDate: Date | null = null;\r\n\r\n // Range\r\n rangeFrom: Date | null = null;\r\n rangeTo: Date | null = null;\r\n tempFrom: Date | null = null;\r\n tempTo: Date | null = null;\r\n\r\n // DateTime\r\n timeValue = '';\r\n timeMeridiem: 'AM' | 'PM' = 'AM';\r\n fromTimeValue = '';\r\n fromTimeMeridiem: 'AM' | 'PM' = 'AM';\r\n toTimeValue = '';\r\n toTimeMeridiem: 'AM' | 'PM' = 'AM';\r\n\r\n // Calendar\r\n currentMonth: number = new Date().getMonth();\r\n currentYear: number = new Date().getFullYear();\r\n weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\n calendarDays: (number | null)[] = [];\r\n\r\n // Dual mode (two calendars)\r\n currentMonth2: number = new Date().getMonth();\r\n currentYear2: number = new Date().getFullYear();\r\n calendarDays2: (number | null)[] = [];\r\n\r\n yearRange: number[] = [];\r\n calenderView: CalenderView = 'day';\r\n activeCalendar: 'primary' | 'secondary' = 'primary';\r\n\r\n monthNames = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n ];\r\n\r\n constructor(private elRef: ElementRef) {}\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config']?.currentValue) {\r\n if (!this.showTrigger) {\r\n this.toggleCalendar();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.generateYearRange();\r\n if (!this.showTrigger) {\r\n this.toggleCalendar()\r\n }\r\n }\r\n\r\n // ─── Getters ──────────────────────────────────────────────────────────────\r\n\r\n get mode(): DatePickerMode {\r\n return this.config.mode || 'single';\r\n }\r\n\r\n get showDateLabel(): boolean {\r\n return this.config.showDateLabel !== false;\r\n }\r\n\r\n get time(): boolean {\r\n return this.config.time ?? false;\r\n }\r\n\r\n get currentMonthYear(): string {\r\n return `${this.monthNames[this.currentMonth]} ${this.currentYear}`;\r\n }\r\n\r\n get currentMonthName() {\r\n return this.monthNames[this.currentMonth];\r\n }\r\n\r\n get activeMonthName(): string {\r\n return this.activeCalendar === 'secondary'\r\n ? this.monthNames[this.currentMonth2]\r\n : this.monthNames[this.currentMonth];\r\n }\r\n\r\n get activeYearValue(): number {\r\n return this.activeCalendar === 'secondary'\r\n ? this.currentYear2\r\n : this.currentYear;\r\n }\r\n\r\n get displayValue(): string {\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (this.rangeFrom && this.rangeTo) {\r\n return `${this.formatDate(this.rangeFrom)} – ${this.formatDate(this.rangeTo)}`;\r\n }\r\n if (this.rangeFrom) return this.formatDate(this.rangeFrom);\r\n return '';\r\n }\r\n return this.selectedDate ? this.formatDate(this.selectedDate) : '';\r\n }\r\n\r\n get tempDisplayValue(): string {\r\n if (!this.tempDate) return this.config.placeholder || 'Select date';\r\n return this.formatDate(this.tempDate);\r\n }\r\n\r\n get tempFromDisplay(): string {\r\n if (!this.tempFrom) return this.config.fromPlaceholder || 'Select date';\r\n return this.formatDate(this.tempFrom);\r\n }\r\n\r\n get tempToDisplay(): string {\r\n if (!this.tempTo) return this.config.toPlaceholder || 'Select date';\r\n return this.formatDate(this.tempTo);\r\n }\r\n\r\n // ─── ControlValueAccessor ─────────────────────────────────────────────────\r\n\r\n // writeValue(val: any): void {\r\n // if (!val) {\r\n // this.selectedDate = null;\r\n // this.tempDate = null;\r\n\r\n // this.rangeFrom = null;\r\n // this.rangeTo = null;\r\n // this.tempFrom = null;\r\n // this.tempTo = null;\r\n\r\n // this.timeValue = '';\r\n // this.timeMeridiem = 'AM';\r\n\r\n // this.fromTimeValue = '';\r\n // this.fromTimeMeridiem = 'AM';\r\n\r\n // this.toTimeValue = '';\r\n // this.toTimeMeridiem = 'AM';\r\n // }\r\n // if (this.mode === 'range' || this.mode === 'dual') {\r\n // const from = val.from ? new Date(val.from) : null;\r\n // const to = val.to ? new Date(val.to) : null;\r\n\r\n // this.rangeFrom = from;\r\n // this.rangeTo = to;\r\n // this.tempFrom = from;\r\n // this.tempTo = to;\r\n\r\n // if (this.time) {\r\n // if (val.fromTime) {\r\n // const [time, meridiem] = val.fromTime.split(' ');\r\n // this.fromTimeValue = time;\r\n // this.fromTimeMeridiem = meridiem || 'AM';\r\n // }\r\n\r\n // if (val.toTime) {\r\n // const [time, meridiem] = val.toTime.split(' ');\r\n // this.toTimeValue = time;\r\n // this.toTimeMeridiem = meridiem || 'AM';\r\n // }\r\n // }\r\n // }\r\n // // Single mode with time\r\n // else if (this.time && val?.date) {\r\n // this.selectedDate = new Date(val.date);\r\n // this.tempDate = new Date(val.date);\r\n // if (val.time) {\r\n // const [time, meridiem] = val.time.split(' ');\r\n // this.timeValue = time;\r\n // this.timeMeridiem = meridiem || 'AM';\r\n // }\r\n // }\r\n // // Single mode without time\r\n // else {\r\n // this.selectedDate = new Date(val);\r\n // this.tempDate = new Date(val);\r\n // }\r\n // // this.initializeCurrentMonthYear()\r\n // }\r\n writeValue(val: any): void {\r\n // Guard: reset and exit early if no value\r\n if (!val) {\r\n this.selectedDate = null;\r\n this.tempDate = null;\r\n this.rangeFrom = null;\r\n this.rangeTo = null;\r\n this.tempFrom = null;\r\n this.tempTo = null;\r\n this.timeValue = '';\r\n this.timeMeridiem = 'AM';\r\n this.fromTimeValue = '';\r\n this.fromTimeMeridiem = 'AM';\r\n this.toTimeValue = '';\r\n this.toTimeMeridiem = 'AM';\r\n return;\r\n }\r\n\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n const from = val.from ? new Date(val.from) : null;\r\n const to = val.to ? new Date(val.to) : null;\r\n\r\n this.rangeFrom = from;\r\n this.rangeTo = to;\r\n this.tempFrom = from;\r\n this.tempTo = to;\r\n\r\n // Remove \"if (this.time)\" — check val directly instead\r\n if (val.fromTime) {\r\n const [time, meridiem] = val.fromTime.split(' ');\r\n this.fromTimeValue = time;\r\n this.fromTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\r\n // Also convert to seconds so ngModel patches the child correctly\r\n this.fromTimeInSeconds = this.convertToSeconds(\r\n time,\r\n meridiem as 'AM' | 'PM',\r\n );\r\n }\r\n\r\n if (val.toTime) {\r\n const [time, meridiem] = val.toTime.split(' ');\r\n this.toTimeValue = time;\r\n this.toTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\r\n // Also convert to seconds so ngModel patches the child correctly\r\n this.toTimeInSeconds = this.convertToSeconds(\r\n time,\r\n meridiem as 'AM' | 'PM',\r\n );\r\n }\r\n }\r\n // Single with time\r\n else if (this.time && val?.date) {\r\n this.selectedDate = new Date(val.date);\r\n this.tempDate = new Date(val.date);\r\n if (val.time) {\r\n const [time, meridiem] = val.time.split(' ');\r\n this.timeValue = time;\r\n this.timeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\r\n this.singleTimeInSeconds = this.convertToSeconds(\r\n time,\r\n meridiem as 'AM' | 'PM',\r\n );\r\n }\r\n }\r\n // Single without time\r\n else if (val) {\r\n this.selectedDate = new Date(val);\r\n this.tempDate = new Date(val);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // ─── Toggle ───────────────────────────────────────────────────────────────\r\n\r\n toggleCalendar(): void {\r\n this.isOpen = true;\r\n\r\n this.initializeCurrentMonthYear();\r\n this.onTouched();\r\n }\r\n initializeCurrentMonthYear(): void {\r\n const refDate =\r\n (this.mode === 'range' || this.mode === 'dual') && this.rangeFrom\r\n ? this.rangeFrom\r\n : this.selectedDate || new Date();\r\n\r\n this.currentMonth = refDate.getMonth();\r\n this.currentYear = refDate.getFullYear();\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n if (this.mode === 'dual' && this.rangeFrom && this.rangeTo) {\r\n const sameMonth = this.rangeFrom.getMonth() === this.rangeTo.getMonth();\r\n\r\n if (sameMonth) {\r\n const { month, year } = this.getNextMonthYear(\r\n this.currentMonth,\r\n this.currentYear,\r\n );\r\n this.currentMonth2 = month;\r\n this.currentYear2 = year;\r\n } else {\r\n this.currentMonth2 = this.rangeTo.getMonth();\r\n this.currentYear2 = this.rangeTo.getFullYear();\r\n }\r\n }\r\n\r\n this.buildCalendar();\r\n \r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.elRef.nativeElement.contains(event.target)) {\r\n // this.onCancel();\r\n }\r\n }\r\n\r\n // ─── Calendar Build ───────────────────────────────────────────────────────\r\n\r\n buildCalendar(): void {\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n\r\n this.calendarDays = this.buildCalendarDays(\r\n this.currentMonth,\r\n this.currentYear,\r\n );\r\n\r\n this.calendarDays2 = this.buildCalendarDays(\r\n this.currentMonth2,\r\n this.currentYear2,\r\n );\r\n } else {\r\n this.calendarDays = this.buildCalendarDays(\r\n this.currentMonth,\r\n this.currentYear,\r\n );\r\n }\r\n }\r\n\r\n private buildCalendarDays(month: number, year: number): (number | null)[] {\r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n\r\n const days: (number | null)[] = [];\r\n\r\n // Leading days from prev month (greyed out)\r\n for (let i = firstDay - 1; i >= 0; i--) {\r\n days.push(-(prevMonthDays - i)); // negative = prev month\r\n }\r\n\r\n // Current month days\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n days.push(d);\r\n }\r\n\r\n // Trailing days from next month\r\n let trailing = 1;\r\n while (days.length % 7 !== 0) {\r\n days.push(1000 + trailing++); // 1000+ = next month\r\n }\r\n\r\n return days;\r\n }\r\n\r\n private getNextMonthYear(\r\n month: number,\r\n year: number,\r\n ): { month: number; year: number } {\r\n if (month === 11) {\r\n return { month: 0, year: year + 1 };\r\n }\r\n return { month: month + 1, year };\r\n }\r\n\r\n private getPrevMonthYear(\r\n month: number,\r\n year: number,\r\n ): { month: number; year: number } {\r\n if (month === 0) {\r\n return { month: 11, year: year - 1 };\r\n }\r\n return { month: month - 1, year };\r\n }\r\n\r\n generateYearRange(year: number = this.currentYear): void {\r\n const startYear = year - (year % 20);\r\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\r\n }\r\n\r\n openView(calendar: 'primary' | 'secondary', view: CalenderView): void {\r\n this.activeCalendar = calendar;\r\n this.calenderView = view;\r\n if (view === 'year') {\r\n this.generateYearRange(\r\n calendar === 'secondary' ? this.currentYear2 : this.currentYear,\r\n );\r\n }\r\n }\r\n\r\n getDayDisplay(day: number | null): string {\r\n if (day === null) return '';\r\n if (day < 0) return String(Math.abs(day));\r\n if (day > 999) return String(day - 1000);\r\n return String(day);\r\n }\r\n\r\n isOtherMonth(day: number | null): boolean {\r\n if (day === null) return false;\r\n return day < 0 || day > 999;\r\n }\r\n\r\n getActualDay(day: number | null): number | null {\r\n if (day === null) return null;\r\n if (day < 0 || day > 999) return null; // other month — not selectable\r\n return day;\r\n }\r\n\r\n // ─── Navigation ───────────────────────────────────────────────────────────\r\n\r\n // Fix — secondary is always exactly 1 month ahead of primary\r\n prevMonth(): void {\r\n const prev = this.getPrevMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth = prev.month;\r\n this.currentYear = prev.year;\r\n\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n this.buildCalendar();\r\n }\r\n\r\n nextMonth(): void {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth = next.month;\r\n this.currentYear = next.year;\r\n\r\n if (this.mode === 'dual') {\r\n const next2 = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next2.month;\r\n this.currentYear2 = next2.year;\r\n }\r\n this.buildCalendar();\r\n }\r\n\r\n selectMonth(month: string) {\r\n const index = this.monthNames.indexOf(month);\r\n if (this.activeCalendar === 'primary') {\r\n this.currentMonth = index;\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n } else {\r\n this.currentMonth2 = index;\r\n if (this.mode === 'dual') {\r\n const prev = this.getPrevMonthYear(\r\n this.currentMonth2,\r\n this.currentYear2,\r\n );\r\n this.currentMonth = prev.month;\r\n this.currentYear = prev.year;\r\n }\r\n }\r\n this.buildCalendar();\r\n this.calenderView = 'day';\r\n }\r\n\r\n previousYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year - 18);\r\n }\r\n\r\n nextYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year + 18);\r\n }\r\n\r\n selectYear(year: number) {\r\n if (this.activeCalendar === 'primary') {\r\n this.currentYear = year;\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n } else {\r\n this.currentYear2 = year;\r\n if (this.mode === 'dual') {\r\n const prev = this.getPrevMonthYear(\r\n this.currentMonth2,\r\n this.currentYear2,\r\n );\r\n this.currentMonth = prev.month;\r\n this.currentYear = prev.year;\r\n }\r\n }\r\n this.generateYearRange(\r\n this.activeCalendar === 'secondary'\r\n ? this.currentYear2\r\n : this.currentYear,\r\n );\r\n this.buildCalendar();\r\n this.calenderView = 'day';\r\n }\r\n\r\n // ─── Day Selection ────────────────────────────────────────────────────────\r\n\r\n selectDay(\r\n day: number | null,\r\n calendar: 'primary' | 'secondary' = 'primary',\r\n ): void {\r\n const month =\r\n calendar === 'secondary' ? this.currentMonth2 : this.currentMonth;\r\n const year =\r\n calendar === 'secondary' ? this.currentYear2 : this.currentYear;\r\n\r\n const actual = this.getActualDay(day);\r\n if (!actual || this.isDayDisabled(actual, month, year)) return;\r\n\r\n const date = new Date(year, month, actual);\r\n\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (!this.tempFrom && !this.tempTo) {\r\n this.tempFrom = date;\r\n } else if (this.tempFrom && !this.tempTo) {\r\n if (date < this.tempFrom) {\r\n this.tempTo = this.tempFrom;\r\n this.tempFrom = date;\r\n } else {\r\n this.tempTo = date;\r\n }\r\n } else {\r\n this.tempFrom = date;\r\n this.tempTo = null;\r\n }\r\n } else {\r\n this.tempDate = date;\r\n }\r\n }\r\n\r\n // ─── Day State Checks ─────────────────────────────────────────────────────\r\n\r\n isSelected(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n const date = new Date(year, month, actual);\r\n return (\r\n this.isSameDay(date, this.tempFrom) || this.isSameDay(date, this.tempTo)\r\n );\r\n }\r\n\r\n if (!this.tempDate) return false;\r\n return (\r\n this.tempDate.getDate() === actual &&\r\n this.tempDate.getMonth() === month &&\r\n this.tempDate.getFullYear() === year\r\n );\r\n }\r\n\r\n isInRange(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\r\n const actual = this.getActualDay(day);\r\n if (!actual || !this.tempFrom || !this.tempTo) return false;\r\n const date = new Date(year, month, actual);\r\n return date > this.tempFrom && date < this.tempTo;\r\n }\r\n\r\n isRangeStart(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n return this.isSameDay(new Date(year, month, actual), this.tempFrom);\r\n }\r\n\r\n isRangeEnd(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n return this.isSameDay(new Date(year, month, actual), this.tempTo);\r\n }\r\n\r\n isToday(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n const today = new Date();\r\n return (\r\n today.getDate() === actual &&\r\n today.getMonth() === month &&\r\n today.getFullYear() === year\r\n );\r\n }\r\n\r\n isDayDisabled(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n const actual = this.getActualDay(day);\r\n if (!actual) return true;\r\n const date = new Date(year, month, actual);\r\n\r\n // disablePastDays: disable last N days from today\r\n if (this.config.disablePastDays) {\r\n const cutoff = new Date();\r\n cutoff.setDate(cutoff.getDate() - this.config.disablePastDays);\r\n cutoff.setHours(0, 0, 0, 0);\r\n if (date < cutoff) return true;\r\n }\r\n\r\n if (this.config.minDate) {\r\n const min = new Date(this.config.minDate);\r\n min.setHours(0, 0, 0, 0);\r\n if (date < min) return true;\r\n }\r\n\r\n if (this.config.maxDate) {\r\n const max = new Date(this.config.maxDate);\r\n max.setHours(23, 59, 59, 999);\r\n if (date > max) return true;\r\n }\r\n\r\n if (this.config.disabledDates?.length) {\r\n return this.config.disabledDates.some((d) => this.isSameDay(d, date));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // ─── Time (datetime mode) ─────────────────────────────────────────────────\r\n\r\n // handleTimeInput(event: Event, field: 'timeValue' | 'fromTimeValue' | 'toTimeValue') {\r\n // const input = event.target as HTMLInputElement;\r\n // let value = input.value.replace(/[^0-9]/g, '');\r\n\r\n // if (value.length > 2) {\r\n // value = value.slice(0, 2) + ':' + value.slice(2, 4);\r\n // }\r\n\r\n // this[field] = value.slice(0, 5);\r\n // }\r\n\r\n // setPeriod(value: 'AM' | 'PM', field: 'timeMeridiem' | 'fromTimeMeridiem' | 'toTimeMeridiem'): void {\r\n // this[field] = value;\r\n // }\r\n\r\n setTime(event: any) {\r\n console.log(event);\r\n }\r\n singleTimeInSeconds: number | null = null;\r\n fromTimeInSeconds: number | null = null;\r\n toTimeInSeconds: number | null = null;\r\n\r\n private convertToSeconds(time: string, meridiem: 'AM' | 'PM'): number | null {\r\n if (!time) return null;\r\n\r\n let [hours, minutes] = time.split(':').map(Number);\r\n\r\n if (isNaN(hours) || isNaN(minutes)) return null;\r\n\r\n if (meridiem === 'PM' && hours < 12) hours += 12;\r\n if (meridiem === 'AM' && hours === 12) hours = 0;\r\n\r\n return hours * 3600 + minutes * 60;\r\n }\r\n onSingleTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\r\n this.timeValue = event.time;\r\n this.timeMeridiem = event.meridiem;\r\n\r\n // store for patch\r\n this.singleTimeInSeconds = this.convertToSeconds(\r\n event.time,\r\n event.meridiem,\r\n );\r\n }\r\n\r\n onFromTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\r\n this.fromTimeValue = event.time;\r\n this.fromTimeMeridiem = event.meridiem;\r\n\r\n this.fromTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\r\n }\r\n\r\n onToTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\r\n this.toTimeValue = event.time;\r\n this.toTimeMeridiem = event.meridiem;\r\n\r\n this.toTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\r\n }\r\n // ─── Actions ──────────────────────────────────────────────────────────────\r\n onApply(): void {\r\n const parentDateFormat = this.config.parentDateFormat;\r\n\r\n // ---------------- RANGE / DUAL ----------------\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (!this.tempFrom || !this.tempTo) return;\r\n\r\n let fromTime = '';\r\n let toTime = '';\r\n\r\n if (this.time) {\r\n const normalizedFrom = this.normalizeTime(this.fromTimeValue);\r\n const normalizedTo = this.normalizeTime(this.toTimeValue);\r\n\r\n // block apply if invalid\r\n if (!normalizedFrom || !normalizedTo) return;\r\n\r\n fromTime = `${normalizedFrom} ${this.fromTimeMeridiem}`;\r\n toTime = `${normalizedTo} ${this.toTimeMeridiem}`;\r\n }\r\n\r\n this.rangeFrom = this.tempFrom;\r\n this.rangeTo = this.tempTo;\r\n\r\n const result: DateRange = {\r\n from: this.formatDate(this.rangeFrom, parentDateFormat),\r\n to: this.formatDate(this.rangeTo, parentDateFormat),\r\n fromTime,\r\n toTime,\r\n };\r\n\r\n this.onChange(result);\r\n this.applied.emit(result);\r\n }\r\n\r\n // ---------------- SINGLE ----------------\r\n else if (this.mode === 'single') {\r\n if (!this.tempDate) return;\r\n\r\n this.selectedDate = this.tempDate;\r\n const finalDate = this.formatDate(this.tempDate, parentDateFormat);\r\n\r\n if (this.time) {\r\n const normalized = this.normalizeTime(this.timeValue);\r\n\r\n // block invalid time\r\n if (!normalized) return;\r\n\r\n const result: DateTimeResult = {\r\n date: finalDate,\r\n time: `${normalized} ${this.timeMeridiem}`,\r\n meridiem: this.timeMeridiem,\r\n };\r\n\r\n this.onChange(result);\r\n this.applied.emit(result);\r\n } else {\r\n this.onChange(finalDate);\r\n this.applied.emit(finalDate);\r\n }\r\n }\r\n\r\n this.isOpen = false;\r\n }\r\n private normalizeTime(value: string): string | null {\r\n if (!value) return null;\r\n\r\n let [h, m] = value.split(':');\r\n\r\n let hours = Number(h);\r\n let minutes = Number(m ?? 0);\r\n\r\n // Invalid hour (block 00 also)\r\n if (!hours || hours < 1 || hours > 12) return null;\r\n\r\n // Invalid minutes\r\n if (minutes < 0 || minutes > 59) return null;\r\n\r\n // ✅ Auto fix\r\n return `${hours.toString().padStart(2, '0')}:${minutes\r\n .toString()\r\n .padStart(2, '0')}`;\r\n }\r\n\r\n appendTimeInDate(time: string, date: Date, timeMeridiem: string) {\r\n const [hours, minutes] = time.split(':').map(Number);\r\n const dateWithTime = new Date(date);\r\n if (!isNaN(hours) && !isNaN(minutes)) {\r\n let h = hours;\r\n if (timeMeridiem === 'PM' && h < 12) h += 12;\r\n if (timeMeridiem === 'AM' && h === 12) h = 0;\r\n dateWithTime.setHours(h, minutes, 0, 0);\r\n }\r\n\r\n return dateWithTime;\r\n }\r\n\r\n onCancel(): void {\r\n //Reset values to last applied state\r\n this.tempDate = this.selectedDate ? new Date(this.selectedDate) : null;\r\n this.tempFrom = this.rangeFrom ? new Date(this.rangeFrom) : null;\r\n this.tempTo = this.rangeTo ? new Date(this.rangeTo) : null;\r\n this.calenderView = 'day';\r\n\r\n this.isOpen = false;\r\n this.cancelled.emit();\r\n }\r\n\r\n clearDate(): void {\r\n this.selectedDate = null;\r\n this.tempDate = null;\r\n this.rangeFrom = null;\r\n this.rangeTo = null;\r\n this.tempFrom = null;\r\n this.tempTo = null;\r\n this.onChange(null);\r\n // this.applied.emit(null);\r\n }\r\n cancelDate(source: string) {\r\n if (source == 'from') {\r\n this.tempFrom = null;\r\n this.rangeFrom = null;\r\n } else if (source == 'to') {\r\n this.tempTo = null;\r\n this.rangeTo = null;\r\n } else {\r\n this.tempDate = null;\r\n }\r\n }\r\n onDaySelected(day: number | null, calendar: 'primary' | 'secondary') {\r\n this.selectDay(day, calendar);\r\n }\r\n\r\n // ─── Helpers ──────────────────────────────────────────────────────────────\r\n\r\n isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return (\r\n a.getDate() === b.getDate() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getFullYear() === b.getFullYear()\r\n );\r\n }\r\n\r\n formatDate(\r\n date: Date,\r\n dateFormat: string = this.config.dateFormat ?? '',\r\n ): string {\r\n const day = date.getDate();\r\n const monthShort = this.monthNames[date.getMonth()].slice(0, 3);\r\n const year = date.getFullYear();\r\n\r\n switch (dateFormat) {\r\n case 'MM/dd/yyyy':\r\n return `${String(date.getMonth() + 1).padStart(2, '0')}/${String(day).padStart(2, '0')}/${year}`;\r\n case 'yyyy-MM-dd':\r\n return `${year}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\r\n default:\r\n return `${day} ${monthShort} ${year}`;\r\n }\r\n }\r\n\r\n get canApply(): boolean {\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (!this.tempFrom || !this.tempTo) return false;\r\n if (this.tempFrom > this.tempTo) return false;\r\n if (this.time) {\r\n if (!this.isValidTime(this.fromTimeValue)) return false;\r\n if (!this.isValidTime(this.toTimeValue)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (this.mode === 'single') {\r\n if (!this.tempDate) return false;\r\n let finalDate = new Date(this.tempDate);\r\n\r\n if (this.time) {\r\n if (!this.isValidTime(this.timeValue)) return false;\r\n const [hours, minutes] = this.timeValue.split(':').map(Number);\r\n let h = hours;\r\n if (this.timeMeridiem === 'PM' && h < 12) h += 12;\r\n if (this.timeMeridiem === 'AM' && h === 12) h = 0;\r\n finalDate.setHours(h, minutes, 0, 0);\r\n }\r\n\r\n if (this.config?.maxDate && finalDate > this.config.maxDate) {\r\n return false;\r\n }\r\n\r\n if (this.config?.minDate && finalDate < this.config.minDate) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n private isValidTime(value: string): boolean {\r\n const [hStr, mStr] = value.split(':');\r\n if (!hStr) return false;\r\n const hours = Number(hStr);\r\n const minutes = Number(mStr ?? '0');\r\n return !(\r\n isNaN(hours) ||\r\n isNaN(minutes) ||\r\n hours < 1 ||\r\n hours > 12 ||\r\n minutes < 0 ||\r\n minutes > 59\r\n );\r\n }\r\n}\r\n","<div class=\"date-picker-wrapper\" id=\"custom-date\">\r\n <!-- Label -->\r\n @if (label) {\r\n <label class=\"date-label\">{{ label }}</label>\r\n }\r\n\r\n <!-- Input Trigger -->\r\n @if (showTrigger) {\r\n <div\r\n class=\"date-input\"\r\n [class.is-open]=\"isOpen\"\r\n [class.has-value]=\"displayValue\"\r\n (click)=\"toggleCalendar()\"\r\n >\r\n <span class=\"date-input-text\" [class.custom-placeholder]=\"!displayValue\">\r\n {{ displayValue || config.placeholder || \"Select date\" }}\r\n </span>\r\n \r\n <svg\r\n class=\"calendar-icon\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n </svg>\r\n\r\n @if (displayValue) {\r\n <span class=\"clear-btn\" (click)=\"$event.stopPropagation(); clearDate()\">\r\n <img src=\"images/x.svg\" alt=\"\" />\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Calendar Dropdown -->\r\n @if (!showTrigger || isOpen) {\r\n <div\r\n class=\"calendar-dropdown sp-16 br-8\"\r\n [ngClass]=\"{ 'month-year-view': calenderView != 'day' }\"\r\n >\r\n <div class=\"calendar-header sm-b-12\">\r\n <div class=\"nav-btn br-4\" (click)=\"prevMonth()\" type=\"button\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </div>\r\n <div class=\"month-year body-medium\">\r\n @if (mode === \"dual\") {\r\n @if (calenderView == \"day\" || activeCalendar != \"secondary\") {\r\n <div class=\"month-year-wrapper\">\r\n <span class=\"month\" (click)=\"openView('primary', 'month')\">{{\r\n currentMonthName\r\n }}</span>\r\n <span class=\"year\" (click)=\"openView('primary', 'year')\">{{\r\n currentYear\r\n }}</span>\r\n </div>\r\n }\r\n\r\n @if (calenderView == \"day\" || activeCalendar != \"primary\") {\r\n <div class=\"month-year-wrapper\">\r\n <span class=\"month\" (click)=\"openView('secondary', 'month')\">{{\r\n monthNames[currentMonth2]\r\n }}</span>\r\n <span class=\"year\" (click)=\"openView('secondary', 'year')\">{{\r\n currentYear2\r\n }}</span>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"month-year-wrapper\">\r\n <span class=\"month\" (click)=\"calenderView = 'month'\">{{\r\n currentMonthName\r\n }}</span>\r\n <span class=\"year\" (click)=\"calenderView = 'year'\">{{\r\n currentYear\r\n }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"nav-btn br-4\" (click)=\"nextMonth()\" type=\"button\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n </div>\r\n\r\n @if (calenderView == \"month\") {\r\n <div class=\"month-grid\">\r\n @for (month of monthNames; track month) {\r\n <span\r\n class=\"month\"\r\n (click)=\"selectMonth(month)\"\r\n [ngClass]=\"{ selected: month == activeMonthName }\"\r\n >{{ month }}</span\r\n >\r\n }\r\n </div>\r\n } @else if (calenderView == \"year\") {\r\n <div class=\"year-selector\">\r\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"year-grid\">\r\n @for (year of yearRange; track year) {\r\n <span\r\n class=\"year\"\r\n (click)=\"selectYear(year)\"\r\n [ngClass]=\"{ selected: year == activeYearValue }\"\r\n >{{ year }}</span\r\n >\r\n }\r\n </div>\r\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n } @else {\r\n <!-- Weekday Headers -->\r\n <div class=\"day_wrapper\">\r\n @if (mode === \"dual\") {\r\n <div class=\"dual-calendar\">\r\n <div class=\"calendar-panel\">\r\n <custom-calendar-grid\r\n [month]=\"currentMonth\"\r\n [year]=\"currentYear\"\r\n [calendarDays]=\"calendarDays\"\r\n [weekDays]=\"weekDays\"\r\n [parent]=\"this\"\r\n (daySelected)=\"onDaySelected($event, 'primary')\"\r\n ></custom-calendar-grid>\r\n </div>\r\n\r\n <div class=\"calendar-panel\">\r\n <custom-calendar-grid\r\n [month]=\"currentMonth2\"\r\n [year]=\"currentYear2\"\r\n [calendarDays]=\"calendarDays2\"\r\n [weekDays]=\"weekDays\"\r\n [parent]=\"this\"\r\n (daySelected)=\"onDaySelected($event, 'secondary')\"\r\n ></custom-calendar-grid>\r\n </div>\r\n </div>\r\n } @else {\r\n <custom-calendar-grid\r\n [month]=\"currentMonth\"\r\n [year]=\"currentYear\"\r\n [calendarDays]=\"calendarDays\"\r\n [weekDays]=\"weekDays\"\r\n [parent]=\"this\"\r\n (daySelected)=\"onDaySelected($event, 'primary')\"\r\n ></custom-calendar-grid>\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n class=\"calendar-footer sm-b-16\"\r\n [ngClass]=\"{ 'dual-calendar': config.mode === 'dual' }\"\r\n >\r\n <!-- SINGLE MODE footer -->\r\n @if (mode === \"single\" && showDateLabel) {\r\n <div class=\"calendar-footer-wrapper\">\r\n <div class=\"footer-row label-row\">\r\n <span class=\"footer-label body-large sp-x-12\">Date</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <span class=\"footer-value body-large\">{{\r\n tempDisplayValue\r\n }}</span>\r\n <img\r\n (click)=\"cancelDate('single')\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n @if (time) {\r\n <cats-time-input\r\n [(ngModel)]=\"singleTimeInSeconds\"\r\n (timeChange)=\"onSingleTimeChange($event)\"\r\n ></cats-time-input>\r\n }\r\n }\r\n\r\n <!-- RANGE MODE footer -->\r\n @if (mode === \"range\" || mode === \"dual\") {\r\n <div\r\n class=\"calendar-footer-wrapper\"\r\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\r\n >\r\n <div class=\"footer-row label-row\">\r\n <span class=\"footer-label body-large sp-x-12\">From</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <span class=\"footer-value body-large\">{{\r\n tempFromDisplay\r\n }}</span>\r\n <img\r\n (click)=\"cancelDate('from')\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n @if (time) {\r\n <cats-time-input\r\n [(ngModel)]=\"fromTimeInSeconds\"\r\n (timeChange)=\"onFromTimeChange($event)\"\r\n ></cats-time-input>\r\n }\r\n </div>\r\n <div\r\n class=\"dual-calendar-border-top\"\r\n [ngClass]=\"{ 'calendar-footer-wrapper': time, 'sp-t-12': time }\"\r\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\r\n >\r\n <div class=\"footer-row label-row\" [class.muted]=\"!tempTo\">\r\n <span class=\"footer-label body-large sp-x-12\">To</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <span class=\"footer-value body-large\">{{\r\n tempToDisplay\r\n }}</span>\r\n <img\r\n (click)=\"cancelDate('to')\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n @if (time) {\r\n <cats-time-input\r\n [(ngModel)]=\"toTimeInSeconds\"\r\n (timeChange)=\"onToTimeChange($event)\"\r\n ></cats-time-input>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- Action Buttons -->\r\n <div class=\"footer-actions\">\r\n <button\r\n class=\"btn-cancel footer-btn body-medium\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n class=\"btn-apply footer-btn body-medium\"\r\n (click)=\"onApply()\"\r\n type=\"button\"\r\n [disabled]=\"!canApply\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[catsUiTooltip]',\r\n})\r\nexport class CatsUiTooltipDirective implements OnInit, OnDestroy {\r\n @Input('catsUiTooltip') tooltipText = '';\r\n @Input() tooltipClass?: string = '';\r\n\r\n private tooltipEl!: HTMLElement;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit(): void {\r\n this.showTooltip();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('mouseenter')\r\n showTooltip() {\r\n this.createTooltip();\r\n this.positionTooltip();\r\n }\r\n\r\n @HostListener('mouseleave')\r\n hideTooltip() {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('window:resize')\r\n @HostListener('window:scroll')\r\n adjustOnWindowChange() {\r\n if (this.tooltipEl) this.positionTooltip();\r\n }\r\n\r\n /**\r\n * @description Creates tooltip\r\n * @author Shiva Kant\r\n * @returns\r\n */\r\n private createTooltip() {\r\n if (this.tooltipEl) return;\r\n\r\n this.tooltipEl = this.renderer.createElement('div');\r\n this.tooltipEl.innerText = this.tooltipText;\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'position', 'fixed');\r\n // this.renderer.setStyle(this.tooltipEl, 'padding', '6px 10px');\r\n // this.renderer.setStyle(this.tooltipEl, 'background', '#ffffff');\r\n // this.renderer.setStyle(this.tooltipEl, 'color', '#434a51');\r\n // this.renderer.setStyle(this.tooltipEl, 'borderRadius', '4px');\r\n // this.renderer.setStyle(this.tooltipEl, 'zIndex', '9999');\r\n // this.renderer.setStyle(this.tooltipEl, 'whiteSpace', 'nowrap');\r\n // Add a custom class if provided\r\n if (this.tooltipClass) {\r\n this.renderer.addClass(this.tooltipEl, this.tooltipClass);\r\n } else {\r\n // Optionally, you can add a default class here\r\n this.renderer.addClass(this.tooltipEl, 'default-tooltip-class');\r\n }\r\n\r\n document.body.appendChild(this.tooltipEl);\r\n }\r\n\r\n /**\r\n * @description Removes tooltip\r\n * @author Shiva Kant\r\n */\r\n private removeTooltip() {\r\n if (this.tooltipEl) {\r\n this.tooltipEl.remove();\r\n this.tooltipEl = null as any;\r\n }\r\n }\r\n\r\n /**\r\n * @description Positions tooltip\r\n * @author Shiva Kant\r\n */\r\n private positionTooltip() {\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\r\n\r\n const spacing = 8; // distance from host element\r\n\r\n const fitsAbove = hostRect.top >= tooltipRect.height + spacing;\r\n const fitsBelow =\r\n window.innerHeight - hostRect.bottom >= tooltipRect.height + spacing;\r\n const fitsLeft = hostRect.left >= tooltipRect.width + spacing;\r\n const fitsRight =\r\n window.innerWidth - hostRect.right >= tooltipRect.width + spacing;\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n // Priority: bottom → top → right → left\r\n if (fitsBelow) {\r\n top = hostRect.bottom + spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsAbove) {\r\n top = hostRect.top - tooltipRect.height - spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsRight) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.right + spacing;\r\n } else if (fitsLeft) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.left - tooltipRect.width - spacing;\r\n } else {\r\n // fallback → bottom with clamped position\r\n top = hostRect.bottom + spacing;\r\n left = Math.min(\r\n Math.max(10, hostRect.left),\r\n window.innerWidth - tooltipRect.width - 10\r\n );\r\n }\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'top', `${top}px`);\r\n this.renderer.setStyle(this.tooltipEl, 'left', `${left}px`);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion',\r\n imports: [],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss',\r\n})\r\nexport class AccordionComponent {\r\n openedIndex: number | null = null;\r\n\r\n /**\r\n * @description Toggles accordion component\r\n * @author Shiva Kant\r\n * @param index \r\n */\r\n toggle(index: number): void {\r\n this.openedIndex = this.openedIndex === index ? null : index;\r\n }\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @param index \r\n * @returns true if open \r\n */\r\n isOpen(index: number): boolean {\r\n return this.openedIndex === index;\r\n }\r\n}\r\n","<div class=\"accordion\">\r\n <ng-content></ng-content> <!-- Will contain AccordionItem components -->\r\n</div>\r\n","import {\r\n Component,\r\n ContentChild,\r\n Inject,\r\n Input,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { AccordionComponent } from '../accordion.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion-item',\r\n imports: [CommonModule],\r\n templateUrl: './accordion-item.component.html',\r\n styleUrl: './accordion-item.component.scss',\r\n})\r\nexport class AccordionItemComponent {\r\n @Input() title: string = '';\r\n @Input() index: number = 0;\r\n\r\n // Change this to allow null instead of undefined\r\n @ContentChild(TemplateRef) contentTemplate: TemplateRef<any> | null = null;\r\n\r\n constructor(\r\n @Inject(AccordionComponent) private accordion: AccordionComponent\r\n ) {}\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @returns true if open\r\n */\r\n isOpen(): boolean {\r\n return this.accordion.isOpen(this.index);\r\n }\r\n\r\n /**\r\n * @description Toggles accordion item component\r\n * @author Shiva Kant\r\n */\r\n toggle(): void {\r\n this.accordion.toggle(this.index);\r\n }\r\n\r\n /**\r\n * @description perform any initialization after content is injected\r\n * @author Shiva Kant\r\n */\r\n ngAfterContentInit(): void {\r\n if (!this.contentTemplate) {\r\n console.error(\r\n 'No content template provided for accordion item:',\r\n this.title\r\n );\r\n }\r\n }\r\n}\r\n","<div class=\"accordion-item\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <div class=\"title\">{{ title }}</div>\r\n <img\r\n class=\"arrow_icon\"\r\n [src]=\"isOpen() ? 'images/chevron-up.svg' : 'images/chevron-down.svg'\"\r\n alt=\"\"\r\n />\r\n </div>\r\n\r\n <!-- <div class=\"accordion-body\" [class.open]=\"isOpen()\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n </div> -->\r\n\r\n <div class=\"accordion-body\" [class.open]=\"isOpen()\">\r\n <div class=\"inner\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cats-ui-tab-content',\r\n imports: [],\r\n templateUrl: './tab-content.component.html',\r\n styleUrl: './tab-content.component.scss',\r\n})\r\nexport class TabContentComponent {\r\n @Input() active = false;\r\n @Input() tabId!: number;\r\n}\r\n"," @if (active) {\r\n\r\n <ng-container >\r\n <ng-content></ng-content>\r\n </ng-container>\r\n }","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { TabContentComponent } from './tab-content/tab-content.component';\r\nimport { NgClass } from '@angular/common';\r\n\r\nexport interface TabConfig {\r\n type?: 'Default' | 'Stroke' | string;\r\n addTab?: boolean;\r\n closeTab?: boolean;\r\n homeTab?: boolean;\r\n}\r\nexport interface TabItem {\r\n id: number;\r\n title: string;\r\n leadingIcon?: string;\r\n tralingIocn?: string;\r\n count?: number | string;\r\n isDisable?: boolean;\r\n isHome?: boolean;\r\n}\r\n@Component({\r\n selector: 'cats-ui-tabset',\r\n imports: [NgClass],\r\n templateUrl: './tabset.component.html',\r\n styleUrl: './tabset.component.scss',\r\n})\r\nexport class TabsetComponent {\r\n @Input() tabs: TabItem[] = [];\r\n\r\n @Input() activeTab!: number | null;\r\n @Output() activeTabChange = new EventEmitter<number | null>();\r\n\r\n @Input() tabConfig: TabConfig = {};\r\n\r\n @Output() tabAdded = new EventEmitter<TabItem>();\r\n @Output() tabClosed = new EventEmitter<number>();\r\n\r\n @ContentChildren(TabContentComponent)\r\n contents!: QueryList<TabContentComponent>;\r\n\r\n counter = 1;\r\n\r\n ngAfterContentInit() {\r\n // if (this.tabs.length) {\r\n // // this.activeTab = this.tabs[0].id;\r\n // this.counter = this.tabs.length + 1;\r\n // this.updateContentActivation();\r\n // }\r\n if (this.tabs.length) {\r\n if (this.activeTab === null || this.activeTab === undefined) {\r\n this.activeTab = this.tabs[0].id;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n\r\n this.counter = this.tabs.length + 1;\r\n this.updateContentActivation();\r\n }\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['tabs'] || changes['tabConfig']) {\r\n this.addHomeTabIfNeeded();\r\n\r\n // Set default active tab if not provided\r\n if (\r\n (this.activeTab === null || this.activeTab === undefined) &&\r\n this.tabs.length\r\n ) {\r\n this.activeTab = this.tabs[0].id;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n\r\n this.updateContentActivation();\r\n }\r\n\r\n if (changes['activeTab']) {\r\n this.updateContentActivation();\r\n }\r\n }\r\n addHomeTabIfNeeded() {\r\n if (!this.tabConfig?.homeTab) return;\r\n\r\n const alreadyExists = this.tabs?.some((t) => t.isHome);\r\n\r\n if (!alreadyExists) {\r\n const homeTab = {\r\n id: 0,\r\n title: '',\r\n closable: false,\r\n isHome: true,\r\n };\r\n\r\n this.tabs = [homeTab, ...(this.tabs || [])];\r\n }\r\n }\r\n setActive(id: number) {\r\n this.activeTab = id;\r\n this.activeTabChange.emit(id);\r\n this.updateContentActivation();\r\n }\r\n\r\n closeTab(event: Event, id: number, index: number) {\r\n event.stopPropagation();\r\n\r\n if (!this.tabConfig.closeTab) return;\r\n\r\n this.tabs.splice(index, 1);\r\n\r\n if (this.activeTab === id) {\r\n this.activeTab = this.tabs.length ? this.tabs[0].id : null;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n\r\n this.updateContentActivation();\r\n this.tabClosed.emit(id);\r\n }\r\n\r\n addTab(event: Event) {\r\n event.stopPropagation();\r\n\r\n if (!this.tabConfig.addTab) return;\r\n\r\n this.tabAdded.emit(); // \r\n }\r\n updateContentActivation() {\r\n if (!this.contents) return;\r\n\r\n this.contents.forEach((content) => {\r\n content.active = content.tabId === this.activeTab;\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"cats_tab_container\"\r\n [ngClass]=\"{\r\n stroke_tab: tabConfig.type?.toLowerCase() === 'stroke',\r\n ipro_tab: tabConfig.type?.toLowerCase() === 'file',\r\n ipro_tab_large: tabConfig.type?.toLowerCase() === 'filelarge',\r\n }\"\r\n>\r\n <ul class=\"cats_tab_header\">\r\n @for (t of tabs; track t.id; let i = $index) {\r\n <li\r\n class=\"cats_tab_item sp-x-12\"\r\n [class.active]=\"t.id === activeTab\"\r\n [class.disabled]=\"t.isDisable\"\r\n (click)=\"setActive(t.id)\"\r\n >\r\n <!-- Home Icon -->\r\n @if (t.isHome) {\r\n <img src=\"images/home.svg\" class=\"cats_home_icon\" />\r\n }\r\n <!-- <ng-container ></ng-container> -->\r\n @else {\r\n <div class=\"cats_tab_item_container\">\r\n <!-- leadingIcon -->\r\n @if (t.leadingIcon) {\r\n <img [src]=\"t.leadingIcon\" class=\"cats_leading_icon\" />\r\n }\r\n\r\n <!-- Title -->\r\n <span class=\"cats_title\">{{ t.title }}</span>\r\n <!-- tralingIocn -->\r\n @if (t.tralingIocn) {\r\n <img [src]=\"t.tralingIocn\" class=\"cats_trailng_icon\" />\r\n }\r\n <!-- tab_count -->\r\n @if (t.count) {\r\n <span class=\"cats_tab_count\">{{ t.count }}</span>\r\n }\r\n </div>\r\n }\r\n <!-- Close (NOT for first tab) -->\r\n @if (tabConfig.closeTab && i !== 0) {\r\n <img\r\n class=\"cats_close_icon pointer\"\r\n (click)=\"closeTab($event, t.id, i)\"\r\n src=\"images/x.svg\"\r\n alt=\"\"\r\n />\r\n }\r\n </li>\r\n }\r\n\r\n <!-- Add Button -->\r\n @if (tabConfig.addTab) {\r\n <li class=\"add_more_tab cats_tab_item sp-x-12\" (click)=\"addTab($event)\">\r\n <img src=\"images/plus.svg\" alt=\"\" />\r\n </li>\r\n }\r\n </ul>\r\n <div class=\"cats_tab_content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Input,\r\n AfterViewInit,\r\n Renderer2,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[autoPosition]',\r\n})\r\nexport class AutoPositionDirective implements AfterViewInit {\r\n @Input() overlay!: HTMLElement;\r\n @Input() trigger!: HTMLElement; \r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.setPosition(), 0);\r\n }\r\n\r\n setPosition() {\r\n if (!this.overlay || !this.trigger) return;\r\n\r\n const triggerRect = this.trigger.getBoundingClientRect();\r\n const overlayRect = this.overlay.getBoundingClientRect();\r\n\r\n const spaceRight = window.innerWidth - triggerRect.right;\r\n const spaceLeft = triggerRect.left;\r\n const spaceBottom = window.innerHeight - triggerRect.bottom;\r\n const spaceTop = triggerRect.top;\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n // smarter: pick best space\r\n const positions = [\r\n { type: 'right', space: spaceRight },\r\n { type: 'left', space: spaceLeft },\r\n { type: 'bottom', space: spaceBottom },\r\n { type: 'top', space: spaceTop },\r\n ].sort((a, b) => b.space - a.space);\r\n\r\n switch (positions[0].type) {\r\n case 'right':\r\n left = triggerRect.right;\r\n top = triggerRect.top;\r\n break;\r\n case 'left':\r\n left = triggerRect.left - overlayRect.width;\r\n top = triggerRect.top;\r\n break;\r\n case 'bottom':\r\n left = triggerRect.left;\r\n top = triggerRect.bottom;\r\n break;\r\n case 'top':\r\n left = triggerRect.left;\r\n top = triggerRect.top - overlayRect.height;\r\n break;\r\n }\r\n\r\n Object.assign(this.overlay.style, {\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n zIndex: '1000',\r\n });\r\n }\r\n}\r\n","\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport {\r\n CustomDatePickerComponent,\r\n DatePickerConfig,\r\n DatePickerMode,\r\n} from '../custom-date-picker';\r\nimport { AutoPositionDirective } from '../../directives/auto-position.directive';\r\n\r\n/* ===================== MODELS ===================== */\r\n\r\nexport type FilterType =\r\n | 'live'\r\n | 'today'\r\n | 'week'\r\n | 'month'\r\n | 'fy'\r\n | 'last'\r\n | 'customRange'\r\n | 'customDate';\r\n\r\nexport interface TimeFilterOption {\r\n label: string;\r\n value: string;\r\n type?: 'radio' | 'input' | 'submenu';\r\n children?: TimeFilterOption[];\r\n default?: boolean;\r\n custom?: boolean;\r\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\r\n pickerMode?: DatePickerMode;\r\n time?: boolean;\r\n extraConfig?: Partial<DatePickerConfig>;\r\n}\r\n\r\nexport interface TimeFilterConfig {\r\n title?: string;\r\n showReset?: boolean;\r\n options: TimeFilterOption[];\r\n}\r\n\r\nexport interface TimeFilterOutput {\r\n type: FilterType;\r\n label?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n value?: number;\r\n unit?: 'Hours' | 'Days';\r\n key?: string;\r\n dates?: any;\r\n}\r\nexport interface TimeFilterValue {\r\n type: string;\r\n dates?: any;\r\n lastValue?: number;\r\n lastUnit?: 'seconds' | 'minutes' | 'hours' | 'days';\r\n}\r\n\r\n/* ===================== COMPONENT ===================== */\r\n\r\n@Component({\r\n selector: 'cats-ui-timestamp-filter',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CustomDatePickerComponent,\r\n AutoPositionDirective,\r\n ],\r\n templateUrl: './timestamp-filter.component.html',\r\n styleUrl: './timestamp-filter.component.scss',\r\n})\r\nexport class TimestampFilterComponent implements OnInit {\r\n @Input({ required: true }) config!: TimeFilterConfig;\r\n @Output() selectionChange = new EventEmitter<TimeFilterOutput>();\r\n @Input() selectedValue: TimeFilterValue | null = null;\r\n\r\n // Internal radio binding\r\n radioValue: string | null = null;\r\n previousRadioValue: string | null = null;\r\n activePicker: TimeFilterOption | null = null;\r\n\r\n lastValue: number = 24;\r\n lastUnit: 'seconds' | 'minutes' | 'hours' | 'days' = 'hours';\r\n selectedDateLabels: Record<string, string> = {};\r\n dateControls: Record<string, FormControl> = {};\r\n\r\n /* ===================== GETTERS ===================== */\r\n\r\n get normalOptions(): TimeFilterOption[] {\r\n return this.config?.options?.filter((o) => !o.custom) || [];\r\n }\r\n\r\n get customOptions(): TimeFilterOption[] {\r\n return this.config?.options?.filter((o) => o.custom) || [];\r\n }\r\n\r\n /** Returns the FormControl for the currently active picker. */\r\n get activePickerControl(): FormControl | null {\r\n if (!this.activePicker) return null;\r\n return this.dateControls[this.activePicker.value] ?? null;\r\n }\r\n\r\n /* ===================== INIT ===================== */\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n \r\n this.customOptions\r\n .filter((o) => o.type === 'submenu')\r\n .forEach((opt) => {\r\n this.dateControls[opt.value] = new FormControl(null);\r\n });\r\n\r\n if (!this.config?.options?.length) return;\r\n\r\n if (this.selectedValue?.type) {\r\n this.applyPreset(this.selectedValue);\r\n } else {\r\n const defaultOption = this.config.options.find((o) => o.default);\r\n if (defaultOption) this.selectOption(defaultOption);\r\n }\r\n }\r\n\r\n /* ===================== PRESET RESTORE ===================== */\r\n\r\n private applyPreset(preset: TimeFilterValue): void {\r\n const option = this.config.options.find((o) => o.value === preset.type);\r\n if (!option) return;\r\n\r\n if (option.custom && option.type === 'submenu') {\r\n this.radioValue = option.value;\r\n\r\n const rawDates = preset.dates; // original raw picker payload\r\n\r\n if (rawDates != null) {\r\n this.dateControls[option.value]?.patchValue(rawDates, {\r\n emitEvent: false,\r\n });\r\n\r\n // Rebuild the display label from the raw payload\r\n this.selectedDateLabels[option.value] = this.buildDateLabel(\r\n rawDates,\r\n option,\r\n );\r\n }\r\n\r\n const isRange =\r\n option.pickerMode === 'range' || option.pickerMode === 'dual';\r\n\r\n const startDate = this.extractStartDate(rawDates, isRange);\r\n const endDate = this.extractEndDate(rawDates, isRange);\r\n\r\n this.emit({\r\n type: isRange ? 'customRange' : 'customDate',\r\n label: option.label,\r\n key: option.value,\r\n ...(startDate ? { startDate } : {}),\r\n ...(endDate ? { endDate } : {}),\r\n dates: rawDates,\r\n });\r\n } else if (option.value === 'last') {\r\n if (preset.lastValue != null) this.lastValue = preset.lastValue;\r\n if (preset.lastUnit) this.lastUnit = preset.lastUnit;\r\n this.selectOption(option);\r\n } else {\r\n this.selectOption(option);\r\n }\r\n }\r\n\r\n /* ===================== PICKER CONFIG ===================== */\r\n\r\n getPickerConfig(option: TimeFilterOption): DatePickerConfig {\r\n const mode: DatePickerMode = option.pickerMode || 'dual';\r\n\r\n const isTimeType =\r\n option.value.toLowerCase().includes('time') || !!option.time;\r\n\r\n return {\r\n mode,\r\n ...(isTimeType ? { time: true } : {}),\r\n ...(option.parentDateFormat\r\n ? { dateFormat: option.parentDateFormat }\r\n : {}),\r\n ...(option.extraConfig ?? {}),\r\n };\r\n }\r\n\r\n /* ===================== MAIN HANDLER ===================== */\r\n\r\n selectOption(option: TimeFilterOption): void {\r\n if (!option) return;\r\n\r\n if (option.custom && option.type === 'submenu') {\r\n this.previousRadioValue = this.radioValue;\r\n this.radioValue = option.value;\r\n this.activePicker = option;\r\n\r\n Object.keys(this.selectedDateLabels).forEach((key) => {\r\n if (key !== option.value) {\r\n delete this.selectedDateLabels[key];\r\n this.dateControls[key]?.reset(null, { emitEvent: false });\r\n }\r\n });\r\n\r\n return; // NO emit here — wait for onDateApplied\r\n }\r\n\r\n this.previousRadioValue = this.radioValue;\r\n this.radioValue = option.value;\r\n this.activePicker = null;\r\n\r\n const defaultDate = new Date();\r\n let start: Date | undefined;\r\n const end: Date = defaultDate;\r\n\r\n const formatDate = (date: Date): string => {\r\n const format = option.parentDateFormat;\r\n if (!format) return date.toISOString();\r\n\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n\r\n switch (format) {\r\n case 'dd MMM yyyy': {\r\n const monthNames = [\r\n 'Jan',\r\n 'Feb',\r\n 'Mar',\r\n 'Apr',\r\n 'May',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Oct',\r\n 'Nov',\r\n 'Dec',\r\n ];\r\n return `${day} ${monthNames[date.getMonth()]} ${year}`;\r\n }\r\n case 'MM/dd/yyyy':\r\n return `${month}/${day}/${year}`;\r\n case 'yyyy-MM-dd':\r\n return `${year}-${month}-${day}`;\r\n default:\r\n return date.toISOString();\r\n }\r\n };\r\n\r\n switch (option.value) {\r\n case 'live':\r\n return this.emit({ type: 'live', label: option.label, key: 'live' });\r\n\r\n case 'today':\r\n start = this.startOfDay(defaultDate);\r\n break;\r\n\r\n case 'week':\r\n start = this.startOfWeek(defaultDate);\r\n break;\r\n\r\n case 'month':\r\n start = new Date(defaultDate.getFullYear(), defaultDate.getMonth(), 1);\r\n break;\r\n\r\n case 'fy':\r\n start = this.startOfFinancialYear(defaultDate);\r\n break;\r\n\r\n case '24h':\r\n start = this.subtractTime(defaultDate, 24, 'hours');\r\n break;\r\n\r\n case '7d':\r\n start = this.subtractTime(defaultDate, 7, 'days');\r\n break;\r\n\r\n case '30d':\r\n start = this.subtractTime(defaultDate, 30, 'days');\r\n break;\r\n\r\n case 'last':\r\n if (this.lastValue && this.lastUnit) {\r\n return this.emitLast();\r\n }\r\n return;\r\n\r\n default:\r\n return this.emit({\r\n type: option.value as FilterType,\r\n label: option.label,\r\n key: option.value,\r\n });\r\n }\r\n\r\n this.emit({\r\n type: option.value as FilterType,\r\n label: option.label,\r\n startDate: start ? formatDate(start) : undefined,\r\n endDate: formatDate(end),\r\n key: option.value,\r\n });\r\n }\r\n\r\n /* ===================== DATE PICKER EVENTS ===================== */\r\n\r\n onDateApplied(event: any): void {\r\n if (!this.activePicker) return;\r\n\r\n const option = this.activePicker;\r\n this.radioValue = option.value;\r\n const ctrl = this.dateControls[option.value];\r\n if (ctrl) {\r\n ctrl.patchValue(event, { emitEvent: false });\r\n }\r\n this.selectedDateLabels[option.value] = this.buildDateLabel(event, option);\r\n\r\n const isRange =\r\n option.pickerMode === 'range' || option.pickerMode === 'dual';\r\n\r\n const startDate = this.extractStartDate(event, isRange);\r\n const endDate = this.extractEndDate(event, isRange);\r\n\r\n this.emit({\r\n type: isRange ? 'customRange' : 'customDate',\r\n label: option.label,\r\n key: option.value,\r\n ...(startDate ? { startDate } : {}),\r\n ...(endDate ? { endDate } : {}),\r\n dates: event, \r\n });\r\n\r\n this.activePicker = null;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Cancel: restore radio to whatever was selected before picker opened.\r\n */\r\n onCancel(_event: any): void {\r\n this.radioValue = this.previousRadioValue;\r\n this.activePicker = null;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /* ===================== LAST X ===================== */\r\n\r\n emitLast(): void {\r\n const unitMap: Record<string, 'Hours' | 'Days'> = {\r\n seconds: 'Hours',\r\n minutes: 'Hours',\r\n hours: 'Hours',\r\n days: 'Days',\r\n };\r\n this.emit({\r\n type: 'last',\r\n label: `Last ${this.lastValue} ${this.lastUnit}`,\r\n value: this.lastValue,\r\n unit: unitMap[this.lastUnit],\r\n key: 'last',\r\n });\r\n }\r\n\r\n onLastChange(): void {\r\n if (this.radioValue === 'last') {\r\n this.emitLast();\r\n }\r\n }\r\n\r\n /* ===================== RESET ===================== */\r\n\r\n reset(): void {\r\n this.selectedDateLabels = {};\r\n Object.values(this.dateControls).forEach((ctrl) =>\r\n ctrl.reset(null, { emitEvent: false }),\r\n );\r\n\r\n const defaultOption = this.config.options.find((o) => o.default);\r\n if (defaultOption) {\r\n this.selectOption(defaultOption);\r\n }\r\n }\r\n\r\n /* ===================== PRIVATE HELPERS ===================== */\r\n\r\n private extractStartDate(event: any, isRange: boolean): string | undefined {\r\n if (!event) return undefined;\r\n\r\n if (isRange) {\r\n // range / datetimerange → { from, to, fromTime?, toTime? }\r\n if (!event.from) return undefined;\r\n return event.fromTime ? `${event.from} ${event.fromTime}` : event.from;\r\n }\r\n\r\n // single date → plain string\r\n if (typeof event === 'string') return event;\r\n\r\n // datetime → { date, time, meridiem }\r\n if (event.date) {\r\n return event.time ? `${event.date} ${event.time}` : event.date;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private extractEndDate(event: any, isRange: boolean): string | undefined {\r\n if (!event || !isRange) return undefined;\r\n\r\n if (!event.to) return undefined;\r\n return event.toTime ? `${event.to} ${event.toTime}` : event.to;\r\n }\r\n\r\n private buildDateLabel(event: any, option: TimeFilterOption): string {\r\n if (!event) return option.label;\r\n\r\n // range / datetimerange → { from, to, fromTime?, toTime? }\r\n if (event?.from != null || event?.to != null) {\r\n const from = event.fromTime\r\n ? `${event.from} ${event.fromTime}`\r\n : event.from;\r\n const to = event.toTime ? `${event.to} ${event.toTime}` : event.to;\r\n return from && to ? `${from} – ${to}` : (from ?? to ?? option.label);\r\n }\r\n\r\n // datetime → { date, time, meridiem }\r\n if (event?.date && event?.time) {\r\n return `${event.date} ${event.time}`;\r\n }\r\n if (event?.date) return event.date;\r\n\r\n // plain string (single date)\r\n if (typeof event === 'string') return event;\r\n\r\n // legacy fallback\r\n if (event?.startDate && event?.endDate)\r\n return `${event.startDate} – ${event.endDate}`;\r\n if (event?.startDate) return event.startDate;\r\n\r\n return option.label;\r\n }\r\n\r\n private emit(payload: TimeFilterOutput): void {\r\n this.selectionChange.emit(payload);\r\n }\r\n\r\n private startOfDay(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n }\r\n\r\n private startOfWeek(date: Date): Date {\r\n const d = new Date(date);\r\n const day = d.getDay();\r\n const diff = day === 0 ? 6 : day - 1; // Monday start\r\n d.setDate(d.getDate() - diff);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n }\r\n\r\n private startOfFinancialYear(date: Date): Date {\r\n const year =\r\n date.getMonth() >= 3 ? date.getFullYear() : date.getFullYear() - 1;\r\n return new Date(year, 3, 1); // April 1\r\n }\r\n\r\n private subtractTime(date: Date, value: number, unit: string): Date {\r\n const newDate = new Date(date);\r\n switch (unit) {\r\n case 'seconds':\r\n newDate.setSeconds(newDate.getSeconds() - value);\r\n break;\r\n case 'minutes':\r\n newDate.setMinutes(newDate.getMinutes() - value);\r\n break;\r\n case 'hours':\r\n newDate.setHours(newDate.getHours() - value);\r\n break;\r\n case 'days':\r\n newDate.setDate(newDate.getDate() - value);\r\n break;\r\n }\r\n return newDate;\r\n }\r\n}","<div class=\"filter-card\" autoAdjust>\r\n <div class=\"header\">\r\n <span class=\"title\">{{ config.title || \"Timestamp Filter\" }}</span>\r\n\r\n @if (config.showReset) {\r\n <span class=\"reset\" (click)=\"reset()\">Reset to Default</span>\r\n }\r\n </div>\r\n\r\n <div class=\"options\">\r\n\r\n <!-- NORMAL OPTIONS -->\r\n <div class=\"normal\">\r\n @for (option of normalOptions; track $index) {\r\n <div class=\"option\" (click)=\"selectOption(option)\">\r\n <label class=\"label\">\r\n <input\r\n type=\"radio\"\r\n [value]=\"option.value\"\r\n [(ngModel)]=\"radioValue\"\r\n />\r\n <span class=\"label-text\">{{ option.label }}</span>\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- CUSTOM SECTION HEADER -->\r\n <div class=\"custom-wrapper\">\r\n <div class=\"custom-header\">\r\n <span class=\"custom-title\">Custom</span>\r\n </div>\r\n </div>\r\n\r\n <!-- CUSTOM OPTIONS -->\r\n <div class=\"customs\" #trigger>\r\n @for (custom of customOptions; track custom.value) {\r\n <div\r\n class=\"custom\"\r\n (click)=\"selectOption(custom)\"\r\n >\r\n <label class=\"label\">\r\n <input\r\n type=\"radio\"\r\n [value]=\"custom.value\"\r\n [(ngModel)]=\"radioValue\"\r\n />\r\n <span class=\"label-text\">{{ custom.label }}</span>\r\n </label>\r\n\r\n <!-- INPUT BELOW OPTION (type: 'input') -->\r\n @if (custom.type === 'input') {\r\n <div class=\"last-input\">\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"lastValue\"\r\n (change)=\"onLastChange()\"\r\n />\r\n <select [(ngModel)]=\"lastUnit\" (change)=\"onLastChange()\">\r\n <option value=\"hours\">Hours</option>\r\n <option value=\"minutes\">Minutes</option>\r\n <option value=\"seconds\">Seconds</option>\r\n </select>\r\n </div>\r\n }\r\n\r\n <!-- SUBMENU ARROW + APPLIED DATE LABEL (type: 'submenu') -->\r\n @if (custom.type === 'submenu') {\r\n <span class=\"arrow\">\r\n <img src=\"/images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n\r\n <!-- @if (selectedDateLabels[custom.value]) {\r\n <div class=\"applied-date-label\">\r\n <span class=\"applied-date-text\">\r\n {{ selectedDateLabels[custom.value] }}\r\n </span>\r\n </div>\r\n } -->\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- DATE PICKER OVERLAY -->\r\n\r\n@if (activePicker) {\r\n <div\r\n class=\"picker-overlay\"\r\n autoPosition\r\n [overlay]=\"pickerRef\"\r\n [trigger]=\"trigger\"\r\n >\r\n <div class=\"picker-container\" #pickerRef (click)=\"$event.stopPropagation()\">\r\n \r\n @if (activePickerControl) {\r\n <cats-ui-custom-date-picker\r\n [formControl]=\"activePickerControl\"\r\n [config]=\"getPickerConfig(activePicker)\"\r\n (applied)=\"onDateApplied($event)\"\r\n (cancelled)=\"onCancel($event)\"\r\n [showTrigger]=\"false\"\r\n ></cats-ui-custom-date-picker>\r\n } @else {\r\n <cats-ui-custom-date-picker\r\n [config]=\"getPickerConfig(activePicker)\"\r\n (applied)=\"onDateApplied($event)\"\r\n (cancelled)=\"onCancel($event)\"\r\n [showTrigger]=\"false\"\r\n ></cats-ui-custom-date-picker>\r\n }\r\n </div>\r\n </div>\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[wizardStep]',\r\n})\r\nexport class WizardStepDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Injectable, signal, computed } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class WizardService {\r\n // Map of wizardId -> WizardInstance\r\n private wizards = signal<Record<string, any>>({});\r\n activeStep = signal<any>({});\r\n stepConfig = signal<any>({});\r\n // ─── Open ───────────────────────────────────────────\r\n open(wizardId: string, config: any) {\r\n document.body.style.overflow = 'hidden';\r\n this.wizards.update((all) => ({\r\n ...all,\r\n [wizardId]: {\r\n config,\r\n currentStepIndex: 0,\r\n isOpen: true,\r\n },\r\n }));\r\n }\r\n\r\n // ─── Close ──────────────────────────────────────────\r\n close(wizardId: string) {\r\n this.wizards.update((all) => {\r\n const updated = { ...all };\r\n delete updated[wizardId];\r\n return updated;\r\n });\r\n\r\n this.stepConfig.update((config: any) => {\r\n delete config[wizardId];\r\n return config;\r\n });\r\n\r\n this.activeStep.update((obj: any) => {\r\n delete obj[wizardId];\r\n return obj;\r\n });\r\n document.body.style.overflow = 'auto';\r\n }\r\n nextStep(wizardId: string): void {\r\n let step = this.activeStep()?.[wizardId];\r\n this.stepConfig.update((config: any) => {\r\n let stepConfig = config?.[wizardId];\r\n if (step < stepConfig?.length) {\r\n stepConfig[step - 1].state = 'done';\r\n stepConfig[step].state = 'active';\r\n step++;\r\n return config;\r\n } else {\r\n stepConfig[stepConfig?.length - 1].state = 'active';\r\n step = stepConfig?.length;\r\n return config;\r\n }\r\n });\r\n this.activeStep.update((obj: any) => {\r\n obj[wizardId] = step;\r\n return obj;\r\n });\r\n }\r\n\r\n previousStep(wizardId: string): void {\r\n let step = this.activeStep()?.[wizardId];\r\n this.stepConfig.update((config: any) => {\r\n let stepConfig = config?.[wizardId];\r\n if (step > 1) {\r\n stepConfig[step - 1].state = 'normal';\r\n stepConfig[step - 2].state = 'active';\r\n step--;\r\n return config;\r\n }\r\n stepConfig[0].state = 'active';\r\n step = 1;\r\n return config;\r\n });\r\n this.activeStep.update((obj: any) => {\r\n obj[wizardId] = step;\r\n return obj;\r\n });\r\n }\r\n\r\n gotoStep(step: number, wizardId: string): void {\r\n this.stepConfig.update((config) => {\r\n let stepConfig = config?.[wizardId];\r\n\r\n if (step > 0 && step <= stepConfig?.length) {\r\n stepConfig = stepConfig.map((stepData: any, index: number) => {\r\n if (index < step - 1) {\r\n return { ...stepData, state: 'done' };\r\n } else if (index == step - 1) {\r\n return { ...stepData, state: 'active' };\r\n }\r\n return stepData;\r\n });\r\n config[wizardId] = stepConfig;\r\n this.activeStep.update((obj: any) => {\r\n obj[wizardId] = step;\r\n return obj;\r\n });\r\n }\r\n return config;\r\n });\r\n }\r\n // ─── Getters ─────────────────────────────────────────\r\n isOpen(wizardId: string) {\r\n return computed(() => this.wizards()[wizardId]?.isOpen ?? false);\r\n }\r\n\r\n getConfig(wizardId: string) {\r\n return computed(() => this.wizards()[wizardId]?.config ?? null);\r\n }\r\n\r\n getCurrentStepIndex(wizardId: string) {\r\n return computed(() => this.wizards()[wizardId]?.currentStepIndex ?? 0);\r\n }\r\n\r\n getCurrentStep(wizardId: string) {\r\n return computed(() => {\r\n const w = this.wizards()[wizardId];\r\n if (!w) return null;\r\n return w.config.steps[w.currentStepIndex];\r\n });\r\n }\r\n\r\n getProgress(wizardId: string) {\r\n return computed(() => {\r\n const w = this.wizards()[wizardId];\r\n if (!w) return 0;\r\n return ((w.currentStepIndex + 1) / w.config.steps.length) * 100;\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n effect,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n QueryList,\r\n} from '@angular/core';\r\nimport { WizardService } from './wizard.service';\r\nimport { WizardStepDirective } from './wizard.directive';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-wizard',\r\n imports: [CommonModule],\r\n templateUrl: './wizard.component.html',\r\n styleUrl: './wizard.component.scss',\r\n})\r\nexport class WizardComponent {\r\n @Input() wizardId!: string;\r\n @Input() title: string = 'Wizard';\r\n @Output() closed = new EventEmitter<void>();\r\n @ContentChildren(WizardStepDirective)\r\n stepTemplates!: QueryList<WizardStepDirective>;\r\n @Input() showProgressBar: boolean = true;\r\n @Input() showStepBadge: boolean = true;\r\n expandable: boolean = true;\r\n\r\n isExpanded = false;\r\n\r\n steps: any = {};\r\n activeStep: any = {};\r\n\r\n templates: WizardStepDirective[] = [];\r\n\r\n constructor(private commonService: WizardService) {\r\n effect(() => {\r\n this.steps = this.commonService.stepConfig();\r\n this.activeStep = this.commonService.activeStep();\r\n });\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.templates = this.stepTemplates.toArray();\r\n\r\n // React if templates change dynamically\r\n this.stepTemplates.changes.subscribe(() => {\r\n this.templates = this.stepTemplates.toArray();\r\n });\r\n }\r\n toggleExpand() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n @HostListener('document:keydown.escape')\r\n onEscPressed() {\r\n if (this.isExpanded) {\r\n this.isExpanded = false;\r\n }\r\n }\r\n get currentStepIndex(): number {\r\n return (this.activeStep?.[this.wizardId] ?? 1) - 1;\r\n }\r\n\r\n get wizardSteps(): any[] {\r\n return this.steps?.[this.wizardId] ?? [];\r\n }\r\n\r\n get currentTemplate() {\r\n return this.templates[this.currentStepIndex]?.templateRef ?? null;\r\n }\r\n\r\n get currentStepLabel(): string {\r\n return this.wizardSteps[this.currentStepIndex]?.title ?? '';\r\n }\r\n\r\n get currentStepNumber(): number {\r\n return this.activeStep?.[this.wizardId] ?? 1;\r\n }\r\n\r\n goToStep(step: number) {\r\n this.commonService.gotoStep(step, this.wizardId);\r\n }\r\n closeModal(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<div class=\"cats-modal-overlay\">\r\n <!-- Stop closing when clicking inside modal -->\r\n <div class=\"cats-modal\" [class.expanded]=\"isExpanded\">\r\n <!-- PROGRESS BAR (TOP STRIP) -->\r\n @if (showProgressBar) {\r\n <div class=\"cats-modal-progress-bar\">\r\n @for (step of wizardSteps; track $index) {\r\n <div\r\n class=\"cats-progress-step\"\r\n [class.progres-done]=\"step.state === 'done'\"\r\n [class.progress-active]=\"step.state === 'active'\"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n <!-- Title -->\r\n\r\n <!-- HEADER -->\r\n <div class=\"cats-modal-header\">\r\n <div class=\"cats-header-left\">\r\n <span class=\"cats-title textTruncate\">{{ title }}</span>\r\n @if (showStepBadge && currentStepNumber) {\r\n <span class=\"cats-step textTruncate\">\r\n Step {{ currentStepNumber }}: {{ currentStepLabel }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"cats-header-right\">\r\n @if (expandable) {\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"toggleExpand()\"\r\n [src]=\"\r\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\r\n \"\r\n alt=\"\"\r\n />\r\n }\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"closeModal()\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- BODY -->\r\n <div class=\"cats-modal-body\" [class.collapsed]=\"!isExpanded && expandable\">\r\n @if (currentTemplate) {\r\n <ng-container *ngTemplateOutlet=\"currentTemplate\"></ng-container>\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 forwardRef,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-ui-file-upload',\r\n standalone: true,\r\n imports: [ReactiveFormsModule],\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FileUploadComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FileUploadComponent implements ControlValueAccessor {\r\n // ─── Config Inputs ───────────────────────────────────────────────────────────\r\n @Input() placeholder: string = 'Drop files here';\r\n @Input() errorMessage: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() multiple: boolean = false;\r\n\r\n /** Button position: 'left' (prefix) | 'right' (suffix) */\r\n @Input() buttonPosition: 'left' | 'right' = 'left';\r\n\r\n @Input() maxSize: number | null = null;\r\n @Input() minSize: number | null = null;\r\n @Input() helperText: string = '';\r\n @Output() onfileChange = new EventEmitter<any>();\r\n @Output() onfileRemove = new EventEmitter<any>();\r\n\r\n /**\r\n * Accepted MIME types or extensions, comma-separated.\r\n * e.g. 'image/png,image/jpeg' or '.png,.jpg,.pdf'\r\n * Passed directly to the hidden <input accept=\"...\"> attribute.\r\n * Also used for runtime validation.\r\n * null = accept all\r\n */\r\n @Input() accept: string | null = null;\r\n\r\n // ─── Internal State ──────────────────────────────────────────────────────────\r\n value: File[] = [];\r\n isFocused = false;\r\n validationError: string = '';\r\n control!: FormControl<any> | null;\r\n\r\n // ─── ControlValueAccessor hooks ──────────────────────────────────────────────\r\n onChange: (value: File[]) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n writeValue(files: File[] | null | undefined): void {\r\n this.value = Array.isArray(files) ? files : [];\r\n }\r\n\r\n registerOnChange(fn: (value: File[]) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n validate(control: FormControl): any {\r\n this.control = control;\r\n }\r\n // ─── Validation ──────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Validates a single file against minSize, maxSize, and accept rules.\r\n * Returns an error string, or empty string if valid.\r\n */\r\n private validateFile(file: File): string {\r\n if (this.minSize !== null && file.size < this.minSize) {\r\n return `\"${file.name}\" is too small (min: ${this.formatBytes(this.minSize)}).`;\r\n }\r\n\r\n if (this.maxSize !== null && file.size > this.maxSize) {\r\n return `\"${file.name}\" exceeds max size (max: ${this.formatBytes(this.maxSize)}).`;\r\n }\r\n\r\n if (this.accept) {\r\n const accepted = this.accept\r\n .split(',')\r\n .map((t) => t.trim().toLowerCase());\r\n const fileExt = '.' + file.name.split('.').pop()!.toLowerCase();\r\n const fileMime = file.type.toLowerCase();\r\n\r\n const isAllowed = accepted.some((token) => {\r\n if (token.startsWith('.')) return token === fileExt; // extension match\r\n if (token.endsWith('/*'))\r\n return fileMime.startsWith(token.slice(0, -1)); // wildcard MIME e.g. image/*\r\n return token === fileMime; // exact MIME match\r\n });\r\n\r\n if (!isAllowed) {\r\n return `\"${file.name}\" has an unsupported file type.`;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /** Validates a batch; sets validationError and returns only valid files. */\r\n private processFiles(files: File[]): File[] {\r\n this.validationError = '';\r\n\r\n const valid: File[] = [];\r\n for (const file of files) {\r\n const err = this.validateFile(file);\r\n if (err) {\r\n this.validationError = err; // show the first error (or accumulate if preferred)\r\n break;\r\n }\r\n valid.push(file);\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n // ─── File Select (via button click) ──────────────────────────────────────────\r\n onFileSelect(event: Event, input: HTMLInputElement): void {\r\n if (this.disabled) return;\r\n\r\n const target = event.target as HTMLInputElement;\r\n const raw = Array.from(target.files ?? []);\r\n const files = this.multiple ? raw : raw.slice(0, 1);\r\n\r\n const valid = this.processFiles(files);\r\n if (valid.length) {\r\n this.value = valid;\r\n this.onChange(this.value);\r\n }\r\n this.onfileChange.emit(this.value);\r\n this.onTouched();\r\n\r\n input.value = '';\r\n this.isFocused = false;\r\n }\r\n\r\n // ─── Drag & Drop ─────────────────────────────────────────────────────────────\r\n onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n if (this.disabled) return;\r\n\r\n const raw = Array.from(event.dataTransfer?.files ?? []);\r\n const files = this.multiple ? raw : [raw[0]].filter(Boolean);\r\n\r\n const valid = this.processFiles(files);\r\n if (valid.length) {\r\n this.value = valid;\r\n this.onChange(this.value);\r\n }\r\n this.onfileChange.emit(this.value);\r\n this.onTouched();\r\n this.isFocused = false;\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n // ─── Remove File ─────────────────────────────────────────────────────────────\r\n removeFile(index: number, input?: HTMLInputElement): void {\r\n this.value = this.value.filter((_, i) => i !== index);\r\n this.validationError = '';\r\n this.onChange(this.value);\r\n this.onfileRemove.emit(this.value);\r\n if (input) input.value = '';\r\n }\r\n\r\n // ─── Helpers ─────────────────────────────────────────────────────────────────\r\n\r\n /** Human-readable byte string: 1024 → \"1 KB\", 5242880 → \"5 MB\" */\r\n formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\r\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\r\n return `${(bytes / 1024 ** 3).toFixed(1)} GB`;\r\n }\r\n\r\n /**\r\n * Builds a human-readable hint string from the current constraints.\r\n * e.g. \"PNG, JPG • Max 5 MB • Min 10 KB\"\r\n */\r\n // get helperText(): string {\r\n // const parts: string[] = [];\r\n\r\n // if (this.accept) {\r\n // const labels = this.accept\r\n // .split(',')\r\n // .map((t) =>\r\n // t.trim().replace('image/', '').replace('.', '').toUpperCase(),\r\n // )\r\n // .join(', ');\r\n // parts.push(labels);\r\n // }\r\n\r\n // if (this.maxSize !== null)\r\n // parts.push(`Max ${this.formatBytes(this.maxSize)}`);\r\n // if (this.minSize !== null)\r\n // parts.push(`Min ${this.formatBytes(this.minSize)}`);\r\n\r\n // return parts.join(' • ');\r\n // }\r\n\r\n // ─── Computed Getters ────────────────────────────────────────────────────────\r\n get isFilled(): boolean {\r\n return this.value?.length > 0;\r\n }\r\n\r\n /** Combines external errorMessage prop with internal validation errors. */\r\n get displayError(): string {\r\n return this.validationError || this.errorMessage;\r\n }\r\n\r\n get hasError(): boolean {\r\n return !!this.displayError;\r\n }\r\n}\r\n","<div class=\"file-wrapper\">\r\n <div\r\n class=\"file-upload-box\"\r\n (focusin)=\"isFocused = true\"\r\n [class.focused]=\"isFocused\"\r\n [class.error]=\"hasError\"\r\n [class.disabled]=\"disabled\"\r\n [class.filled]=\"isFilled\"\r\n (drop)=\"onDrop($event)\"\r\n (dragover)=\"onDragOver($event)\"\r\n >\r\n <!-- PREFIX BUTTON -->\r\n @if (buttonPosition === \"left\") {\r\n <button\r\n type=\"button\"\r\n class=\"file-btn\"\r\n (click)=\"fileInput.click(); isFocused = true\"\r\n [disabled]=\"disabled\"\r\n >\r\n Choose File\r\n </button>\r\n }\r\n\r\n <!-- CONTENT -->\r\n <div class=\"file-content\">\r\n @if (!isFilled) {\r\n <span class=\"file-placeholder\">{{ placeholder }}</span>\r\n }\r\n\r\n @if (isFilled) {\r\n <div class=\"file-list\">\r\n @for (file of value; track $index; let i = $index) {\r\n <span class=\"file-chip\">\r\n {{ file.name }}\r\n <img\r\n class=\"remove-file\"\r\n src=\"images/x.svg\"\r\n alt=\"Remove file\"\r\n (click)=\"removeFile(i, fileInput)\"\r\n />\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- SUFFIX BUTTON -->\r\n @if (buttonPosition === \"right\") {\r\n <button\r\n type=\"button\"\r\n class=\"file-btn\"\r\n (click)=\"fileInput.click(); isFocused = true\"\r\n [disabled]=\"disabled\"\r\n >\r\n Choose File\r\n </button>\r\n }\r\n\r\n <!-- Hidden Input — accept wired dynamically -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [attr.accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n (change)=\"onFileSelect($event, fileInput)\"\r\n (cancel)=\"isFocused = false\"\r\n hidden\r\n />\r\n </div>\r\n\r\n <!-- CONSTRAINT HINT (shown when not filled and constraints exist) -->\r\n @if (helperText && !hasError) {\r\n <div class=\"file-hint-text\">{{ helperText }}</div>\r\n }\r\n\r\n <!-- ERROR (validation or external) -->\r\n @if (hasError && !disabled) {\r\n <div class=\"file-error-text\">\r\n <img src=\"images/error-info.svg\" alt=\"\" />{{ displayError }}\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nexport interface HeaderConfig {\r\n brandLogo: string;\r\n productLogo: string;\r\n showDropdown?: boolean;\r\n showGlobalIcon?: boolean;\r\n showAiAgent?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cats-ui-header',\r\n imports: [],\r\n templateUrl: './header.component.html',\r\n styleUrl: './header.component.scss',\r\n})\r\nexport class HeaderComponent {\r\n @Input() headerConfig!: HeaderConfig;\r\n @Input() dropdownItems: any[] = [];\r\n @Output() onDropdownSelection = new EventEmitter<any>();\r\n profileOpen = false;\r\n dropdownOpen = false;\r\n\r\n selectedItem: any;\r\n\r\n ngOnInit() {\r\n if (this.dropdownItems.length) {\r\n this.selectedItem = this.dropdownItems[0];\r\n }\r\n }\r\n\r\n onSelect(item: any) {\r\n this.selectedItem = item;\r\n this.dropdownOpen = false;\r\n this.onDropdownSelection.emit(this.selectedItem);\r\n }\r\n\r\n toggleMenu() {\r\n this.profileOpen = !this.profileOpen;\r\n }\r\n\r\n toggleDropdown() {\r\n this.dropdownOpen = !this.dropdownOpen;\r\n }\r\n\r\n closeMenu() {\r\n this.profileOpen = false;\r\n }\r\n}\r\n","<header class=\"app-header\">\r\n <!-- Left Section -->\r\n <div class=\"header-left\">\r\n <!-- <button class=\"app-launcher\" aria-label=\"App Launcher\">\r\n <span class=\"grid-icon\"></span>\r\n </button> -->\r\n <img src=\"images/Waffle.svg\" alt=\"\" />\r\n <img [src]=\"headerConfig.brandLogo\" alt=\"Brand Logo\" class=\"brand-logo\" />\r\n\r\n <img\r\n [src]=\"headerConfig.productLogo\"\r\n alt=\"Product Logo\"\r\n class=\"product-logo\"\r\n />\r\n </div>\r\n\r\n <!-- Right Section -->\r\n <div class=\"header-right\">\r\n @if (headerConfig.showGlobalIcon) {\r\n <img src=\"images/global-logo.svg\" alt=\"\" />\r\n }\r\n\r\n <img src=\"images/nodification.svg\" alt=\"\" class=\"icon-btn notification\" />\r\n @if (headerConfig.showDropdown && dropdownItems.length) {\r\n <div class=\"dropdown control-panel\">\r\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown()\">\r\n <span>{{ selectedItem.label }}</span>\r\n <span>\r\n <img src=\"images/chevron-down-white.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n @if (dropdownOpen) {\r\n <div class=\"dropdown-panel\">\r\n <ul>\r\n @for (item of dropdownItems; track item) {\r\n <li (click)=\"onSelect(item)\">{{ item.label }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @if (headerConfig.showAiAgent) {\r\n <div class=\"ai-agent\">\r\n <img src=\"images/star-yellow.svg\" alt=\"\" />\r\n <span class=\"ai-agent-btn\"> AI Agent</span>\r\n </div>\r\n }\r\n <div class=\"profile\">\r\n <div class=\"profile-wrapper\" (click)=\"toggleMenu()\">\r\n <img src=\"images/user-image.svg\" alt=\"User\" />\r\n <div class=\"profile-info\">\r\n <span class=\"name textTruncate\">Maximillian Thomas Broadwater</span>\r\n <span class=\"role textTruncate\">Super Admin User</span>\r\n </div>\r\n </div>\r\n\r\n @if (profileOpen) {\r\n <div class=\"loggedin-profile-list\">\r\n <!-- profile start -->\r\n\r\n <div class=\"profile-box\">\r\n <div class=\"for-edit-icon\">\r\n <img src=\"images/user-image.svg\" class=\"profile-img\" />\r\n <img src=\"images/edit.svg\" alt=\"edit\" class=\"on-hover\" />\r\n </div>\r\n\r\n <div>\r\n <div class=\"profile-heading textTruncate\">John Doe</div>\r\n <div class=\"profile-txt textTruncate\">Admin</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"switch-box\">\r\n <div class=\"switch-role\">\r\n <img src=\"images/users-01.svg\" class=\"edit-img\" />\r\n <div class=\"switch-txt\">Switch Role</div>\r\n\r\n <!-- drop down -->\r\n <div class=\"switching-role-dropdown\">\r\n <div class=\"text-title\">Switch Role</div>\r\n\r\n <div class=\"item-list active\">\r\n <input\r\n class=\"radio-input\"\r\n checked\r\n type=\"radio\"\r\n name=\"tracking\"\r\n />\r\n <span class=\"text\">Admin</span>\r\n </div>\r\n\r\n <div class=\"item-list\">\r\n <input class=\"radio-input\" type=\"radio\" name=\"tracking\" />\r\n <span class=\"text\">User</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"right-side-arrow\">\r\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"switch-box\">\r\n <div class=\"switch-role\">\r\n <img src=\"images/building-07.svg\" class=\"edit-img\" />\r\n <div class=\"switch-txt\">Switch Environment</div>\r\n </div>\r\n\r\n <div class=\"right-side-arrow\">\r\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">Identity & Access</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img class=\"fix-img-size\" src=\"images/user.svg\" alt=\"user\" />\r\n <div class=\"txt-align\">My Profile</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/key-01.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Change Password</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">Account & Preferences</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/shield.svg\" alt=\"bell\" />\r\n <div class=\"txt-align\">Account & Security</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box preference-dropdown-txt\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/settings-04.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Preference</div>\r\n\r\n <!-- dropdown -->\r\n <div class=\"preference-section\">\r\n <div class=\"preference-dropdown\">\r\n <!-- Language -->\r\n <div class=\"language-dropdown\">\r\n <div class=\"preference-dropdown-item\">\r\n <div class=\"text\">Languages</div>\r\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\r\n </div>\r\n\r\n <div class=\"language-section-wrapper\">\r\n <div class=\"language-heading\">\r\n <span>Change Language</span>\r\n </div>\r\n <div class=\"input-search-wrapper\">\r\n <div class=\"input-search\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input type=\"text\" placeholder=\"Enter or Search\" />\r\n </div>\r\n </div>\r\n <div class=\"language-section\">\r\n <div class=\"language-item\">\r\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\r\n <span>English</span>\r\n </div>\r\n <div class=\"language-item\">\r\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\r\n <span>English</span>\r\n </div>\r\n <div class=\"language-item\">\r\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\r\n <span>English</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"language-footer\">\r\n <button class=\"reset\">Reset</button>\r\n <button class=\"apply\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Timezone -->\r\n <div class=\"timezone-dropdown\">\r\n <div class=\"preference-dropdown-item\">\r\n <div class=\"text\">Timezone</div>\r\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\r\n </div>\r\n\r\n <div class=\"timezone-section-wrapper\">\r\n <div class=\"timezone-heading\">\r\n <span>Change Timezone</span>\r\n </div>\r\n <div class=\"input-search-wrapper\">\r\n <div class=\"input-search\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input type=\"text\" placeholder=\"Enter or Search\" />\r\n </div>\r\n </div>\r\n <div class=\"timezone-section\">\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" />\r\n <span class=\"bold-text\">\r\n Nouakchott\r\n <span class=\"light-text\">(GMT+00:00)</span>\r\n </span>\r\n </div>\r\n\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" />\r\n <span class=\"bold-text\">\r\n Beirut <span class=\"light-text\">(GMT+02:00)</span>\r\n </span>\r\n </div>\r\n\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" />\r\n <span class=\"bold-text\">\r\n Kuwait, Riyadh\r\n <span class=\"light-text\">(GMT+03:00)</span>\r\n </span>\r\n </div>\r\n\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" checked />\r\n <span class=\"bold-text\">\r\n Kolkata, India\r\n <span class=\"light-text\">(GMT+05:30)</span>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"timezone-footer\">\r\n <button class=\"reset\">Reset</button>\r\n <button class=\"apply\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/bell.svg\" alt=\"bell\" />\r\n <div class=\"txt-align\">Notification Settings</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">Help & Support</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/file-check-02.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Knowledge Base</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/help-circle.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Help/Support Center</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/info.svg\" alt=\"info\" />\r\n <div class=\"txt-align\">Report Issue</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/message-smile-square.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Feedback</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">System</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/settings.svg\" alt=\"settings\" />\r\n <div class=\"txt-align\">Settings</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/clock-refresh.svg\" alt=\"info\" />\r\n <div class=\"txt-align\">\r\n About <span class=\"light-grey\">(Version 2.14.3)</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/log-out-04.svg\" alt=\"log-out\" class=\"red\" />\r\n <div class=\"txt-align red\">Sign Out</div>\r\n </div>\r\n\r\n <div class=\"right-side-arrow\">\r\n <img src=\"images/chevron-right-red.svg\" alt=\"chevron-right\" />\r\n </div>\r\n </div>\r\n\r\n <!-- profile end -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</header>\r\n","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { DialogRef } from './dialog-ref';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DialogConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-dialog-box',\r\n imports: [CommonModule],\r\n templateUrl: './dialog-box.component.html',\r\n styleUrl: './dialog-box.component.scss',\r\n})\r\nexport class DialogBoxComponent {\r\n @Input() content!: any;\r\n @Input() config: DialogConfig = {};\r\n @Input() dialogRef!: DialogRef;\r\n @Input() expandable: boolean = true;\r\n\r\n @ViewChild('vc', { read: ViewContainerRef, static: true })\r\n vc!: ViewContainerRef;\r\n\r\n isExpanded = false;\r\n\r\n ngAfterViewInit() {\r\n this.vc.clear();\r\n\r\n if (this.content instanceof TemplateRef) {\r\n this.vc.createEmbeddedView(this.content, { dialogRef: this.dialogRef });\r\n } else {\r\n this.vc.createComponent(this.content);\r\n }\r\n }\r\n\r\n toggleExpand() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n\r\n onBackdropClick() {\r\n if (this.config?.closeOnBackdropClick) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n closeModal(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div class=\"cats-dialog-overlay\">\r\n <div\r\n class=\"cats-dialog\"\r\n [ngClass]=\"config.class\"\r\n [class.expanded]=\"isExpanded\"\r\n >\r\n <!-- Header -->\r\n @if (config.showHeader) {\r\n <div class=\"cats-dialog-header\">\r\n <div class=\"cats-header-left\">\r\n @if (config.title) {\r\n <span class=\"cats-title textTruncate\">{{ config.title }}</span>\r\n }\r\n </div>\r\n <div class=\"cats-header-right\">\r\n @if (expandable) {\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"toggleExpand()\"\r\n [src]=\"\r\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\r\n \"\r\n alt=\"expand\"\r\n />\r\n }\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"closeModal()\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"close\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Body -->\r\n <div class=\"cats-dialog-body\" [class.collapsed]=\"!isExpanded && expandable\">\r\n <ng-container #vc></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Subject, Observable } from 'rxjs';\r\n\r\nexport class DialogRef<T = any> {\r\n private afterClosed$ = new Subject<T | undefined>();\r\n\r\n constructor(public id: string) {}\r\n\r\n close(result?: T) {\r\n this.afterClosed$.next(result);\r\n this.afterClosed$.complete();\r\n }\r\n\r\n afterClosed(): Observable<T | undefined> {\r\n return this.afterClosed$.asObservable();\r\n }\r\n}\r\n","import {\r\n ApplicationRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n} from '@angular/core';\r\nimport { DialogRef } from './dialog-ref';\r\nimport { DialogBoxComponent } from './dialog-box.component';\r\nimport { DialogConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogBoxService {\r\n private dialogs = new Map<string, DialogRef>();\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector,\r\n ) {}\r\n\r\n open(componentOrTemplate: any, config: DialogConfig = {}): DialogRef {\r\n const id = config.id || this.generateId();\r\n\r\n const dialogRef = new DialogRef(id);\r\n this.dialogs.set(id, dialogRef);\r\n\r\n const componentRef = createComponent(DialogBoxComponent, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n componentRef.instance.content = componentOrTemplate;\r\n componentRef.instance.config = config;\r\n componentRef.instance.dialogRef = dialogRef;\r\n\r\n this.appRef.attachView(componentRef.hostView);\r\n\r\n const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;\r\n document.body.appendChild(domElem);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this.appRef.detachView(componentRef.hostView);\r\n componentRef.destroy();\r\n this.dialogs.delete(id);\r\n });\r\n\r\n return dialogRef;\r\n }\r\n\r\n close(id: string) {\r\n this.dialogs.get(id)?.close();\r\n }\r\n\r\n closeAll() {\r\n this.dialogs.forEach((dialog) => dialog.close());\r\n }\r\n\r\n private generateId(): string {\r\n return 'dialog-' + Math.random().toString(36).substring(2, 9);\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nexport interface SidebarConfig {\r\n sidebarType?: 'sectional' | string;\r\n switchOrganiser?: boolean;\r\n}\r\nexport interface SidebarAttribute {\r\n attributeId?: number;\r\n attributeName: string;\r\n icon?: string;\r\n activeIcon?: string;\r\n url?: string;\r\n}\r\n\r\nexport interface SidebarFeature {\r\n featureId?: number;\r\n moduleId?: number;\r\n featuresName: string;\r\n icon?: string;\r\n activeIcon?: string;\r\n expandable?: boolean;\r\n url?: string;\r\n isEnable?: boolean;\r\n attributes?: SidebarAttribute[];\r\n}\r\n\r\nexport interface SidebarModule {\r\n moduleName: string;\r\n icon?: string;\r\n activeIcon?: string;\r\n expandable?: boolean;\r\n url?: string;\r\n isEnable?: boolean;\r\n features: SidebarFeature[];\r\n}\r\n@Component({\r\n selector: 'cats-ui-sidebar',\r\n imports: [NgClass],\r\n templateUrl: './sidebar.component.html',\r\n styleUrl: './sidebar.component.scss',\r\n})\r\nexport class SidebarComponent {\r\n @Input() appMenus: SidebarModule[] = [];\r\n isCollapsed = false;\r\n @Input() sidebarConfig!: SidebarConfig;\r\n expandedFeatures: Set<string> = new Set();\r\n @Output() activeSidebar = new EventEmitter<any>();\r\n\r\n collapsedOpenModule: number | null = null;\r\n collapsedOpenFeature: string | null = null;\r\n activeItem: {\r\n moduleIndex: number;\r\n featureIndex: number;\r\n attrIndex: number;\r\n } | null = null;\r\n constructor(private router: Router) {}\r\n /** A feature is expandable if it has at least one attribute */\r\n isExpandable(feature: SidebarFeature): boolean {\r\n return (feature.attributes?.length ?? 0) > 0;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.appMenus?.length) return;\r\n\r\n const moduleIndex = 0;\r\n const firstModule = this.appMenus[moduleIndex];\r\n\r\n if (!firstModule?.features?.length) return;\r\n\r\n const featureIndex = 0;\r\n const firstFeature = firstModule.features[featureIndex];\r\n\r\n // CASE 1: Feature has attributes → activate first attribute\r\n if (this.isExpandable(firstFeature)) {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: 0,\r\n };\r\n\r\n this.activeSidebar.emit({\r\n module: firstModule,\r\n feature: firstFeature,\r\n attribute: firstFeature.attributes?.[0],\r\n });\r\n }\r\n // CASE 2: No attributes → activate feature\r\n else {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: -1,\r\n };\r\n\r\n this.activeSidebar.emit({\r\n module: firstModule,\r\n feature: firstFeature,\r\n attribute: null,\r\n });\r\n }\r\n\r\n // Expand defaults (only for non-sectional)\r\n if (this.sidebarConfig.sidebarType !== 'sectional') {\r\n this.expandedModules.add(moduleIndex);\r\n\r\n if (this.isExpandable(firstFeature)) {\r\n this.expandedFeatures.add(`${moduleIndex}-${featureIndex}`);\r\n }\r\n }\r\n }\r\n\r\n toggleCollapse(): void {\r\n this.isCollapsed = !this.isCollapsed;\r\n // Reset collapsed panel state when toggling\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n }\r\n expandedModules: Set<number> = new Set();\r\n\r\n toggleModule(moduleIndex: number): void {\r\n const module = this.appMenus[moduleIndex];\r\n\r\n if (this.expandedModules.has(moduleIndex)) {\r\n this.expandedModules.delete(moduleIndex);\r\n } else {\r\n this.expandedModules.add(moduleIndex);\r\n }\r\n\r\n // If module has direct URL → navigate\r\n if (module?.url) {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex: -1,\r\n attrIndex: -1,\r\n };\r\n\r\n this.navigateToItem(module);\r\n\r\n this.activeSidebar.emit({\r\n module,\r\n feature: null,\r\n attribute: null,\r\n });\r\n\r\n return;\r\n }\r\n\r\n // fallback logic (your existing)\r\n const firstFeature = module.features?.[0];\r\n if (!firstFeature) return;\r\n\r\n if (this.isExpandable(firstFeature)) {\r\n this.setActiveItem(moduleIndex, 0, 0);\r\n } else {\r\n this.setActiveItem(moduleIndex, 0, -1);\r\n }\r\n }\r\n isModuleExpanded(moduleIndex: number): boolean {\r\n return this.expandedModules.has(moduleIndex);\r\n }\r\n toggleFeature(moduleIndex: number, featureIndex: number): void {\r\n const key = `${moduleIndex}-${featureIndex}`;\r\n if (this.expandedFeatures.has(key)) {\r\n this.expandedFeatures.delete(key);\r\n } else {\r\n this.expandedFeatures.add(key);\r\n }\r\n }\r\n\r\n isFeatureExpanded(moduleIndex: number, featureIndex: number): boolean {\r\n return this.expandedFeatures.has(`${moduleIndex}-${featureIndex}`);\r\n }\r\n\r\n setActiveItem(\r\n moduleIndex: number,\r\n featureIndex: number,\r\n attrIndex: number,\r\n ): void {\r\n this.openAttributeFeatureIndex = null;\r\n this.activeItem = { moduleIndex, featureIndex, attrIndex };\r\n\r\n const selectedModule = this.appMenus[moduleIndex];\r\n const selectedFeature = selectedModule?.features[featureIndex];\r\n const selectedAttribute = selectedFeature?.attributes?.[attrIndex];\r\n this.navigateToItem(selectedModule, selectedFeature, selectedAttribute);\r\n\r\n this.activeSidebar.emit({\r\n module: selectedModule,\r\n feature: selectedFeature,\r\n attribute: selectedAttribute,\r\n });\r\n }\r\n\r\n onFeatureClick(\r\n moduleIndex: number,\r\n featureIndex: number,\r\n feature: SidebarFeature,\r\n ) {\r\n const module = this.appMenus[moduleIndex];\r\n\r\n if (this.isExpandable(feature)) {\r\n this.toggleFeature(moduleIndex, featureIndex);\r\n\r\n // Optional: auto-select first attribute\r\n const attribute = feature.attributes?.[0];\r\n\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: 0,\r\n };\r\n\r\n this.navigateToItem(module, feature, attribute);\r\n\r\n this.activeSidebar.emit({ module, feature, attribute });\r\n } else {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: -1,\r\n };\r\n\r\n this.navigateToItem(module, feature);\r\n\r\n this.activeSidebar.emit({ module, feature, attribute: null });\r\n }\r\n }\r\n\r\n isActiveItem(\r\n moduleIndex: number,\r\n featureIndex?: number,\r\n attrIndex?: number,\r\n ): boolean {\r\n if (!this.activeItem) return false;\r\n\r\n const module = this.appMenus[moduleIndex];\r\n const hasFeatures = module?.features?.length > 0;\r\n\r\n // MODULE ACTIVE\r\n if (featureIndex === undefined) {\r\n return (\r\n this.activeItem.moduleIndex === moduleIndex &&\r\n (!hasFeatures || this.activeItem.featureIndex === -1)\r\n );\r\n }\r\n\r\n // FEATURE ACTIVE\r\n if (attrIndex === undefined) {\r\n return (\r\n this.activeItem.moduleIndex === moduleIndex &&\r\n this.activeItem.featureIndex === featureIndex &&\r\n this.activeItem.attrIndex === -1\r\n );\r\n }\r\n\r\n // ATTRIBUTE ACTIVE\r\n return (\r\n this.activeItem.moduleIndex === moduleIndex &&\r\n this.activeItem.featureIndex === featureIndex &&\r\n this.activeItem.attrIndex === attrIndex\r\n );\r\n }\r\n\r\n collapsedModuleIndex: number | null = null;\r\n collapsedFeatureIndex: number | null = null;\r\n openAttributeFeatureIndex: number | null = null;\r\n isCollapsedIconActive(mIdx: number, fIdx?: number): boolean {\r\n if (!this.activeItem) return false;\r\n\r\n if (this.sidebarConfig?.sidebarType === 'sectional') {\r\n return (\r\n this.activeItem.moduleIndex === mIdx &&\r\n this.activeItem.featureIndex === fIdx\r\n );\r\n }\r\n\r\n // Non-sectional: if fIdx provided, match both; else match module only\r\n if (fIdx !== undefined) {\r\n return (\r\n this.activeItem.moduleIndex === mIdx &&\r\n this.activeItem.featureIndex === fIdx\r\n );\r\n }\r\n\r\n return this.activeItem.moduleIndex === mIdx;\r\n }\r\n\r\n onCollapsedSectionalIconClick(\r\n mIdx: number,\r\n fIdx: number,\r\n source?: string,\r\n ): void {\r\n const isAlreadyOpen =\r\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\r\n\r\n if (source == 'fIdx') {\r\n this.openAttributeFeatureIndex =\r\n this.openAttributeFeatureIndex === fIdx ? null : fIdx;\r\n }\r\n if (isAlreadyOpen && source !== 'fIdx') {\r\n // Close the flyout but keep the item active\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n return;\r\n }\r\n // Open this feature's flyout\r\n this.collapsedModuleIndex = mIdx;\r\n this.collapsedFeatureIndex = fIdx;\r\n\r\n // Set active\r\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\r\n if (!feature) return;\r\n\r\n if (this.isExpandable(feature)) {\r\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\r\n this.navigateToItem(\r\n this.appMenus[mIdx],\r\n feature,\r\n feature.attributes?.[0],\r\n );\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: feature.attributes?.[0],\r\n });\r\n } else {\r\n this.activeItem = {\r\n moduleIndex: mIdx,\r\n featureIndex: fIdx,\r\n attrIndex: -1,\r\n };\r\n\r\n this.navigateToItem(this.appMenus[mIdx], feature);\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: null,\r\n });\r\n }\r\n }\r\n\r\n onCollapsedModuleIconClick(mIdx: number): void {\r\n if (this.collapsedModuleIndex === mIdx) {\r\n // Toggle closed\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n return;\r\n }\r\n\r\n // Open this module's flyout, close any other\r\n this.collapsedModuleIndex = mIdx;\r\n this.collapsedFeatureIndex = null;\r\n }\r\n onCollapsedFeatureClick(mIdx: number, fIdx: number): void {\r\n this.openAttributeFeatureIndex = null;\r\n const isAlreadyOpen =\r\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\r\n\r\n if (isAlreadyOpen) {\r\n this.collapsedFeatureIndex = null;\r\n return;\r\n }\r\n\r\n this.collapsedModuleIndex = mIdx;\r\n this.collapsedFeatureIndex = fIdx;\r\n\r\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\r\n if (!feature) return;\r\n\r\n if (this.isExpandable(feature)) {\r\n this.openAttributeFeatureIndex = fIdx;\r\n\r\n // ✅ FIX: Set activeItem so isCollapsedIconActive(mIdx, fIdx) returns true\r\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\r\n this.navigateToItem(\r\n this.appMenus[mIdx],\r\n feature,\r\n feature.attributes?.[0],\r\n );\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: feature.attributes?.[0],\r\n });\r\n } else {\r\n this.activeItem = {\r\n moduleIndex: mIdx,\r\n featureIndex: fIdx,\r\n attrIndex: -1,\r\n };\r\n this.navigateToItem(this.appMenus[mIdx], feature);\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: null,\r\n });\r\n }\r\n }\r\n // onCollapsedFeatureClick(mIdx: number, fIdx: number): void {\r\n // this.openAttributeFeatureIndex = null;\r\n // const isAlreadyOpen =\r\n // this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\r\n\r\n // if (isAlreadyOpen) {\r\n // this.collapsedFeatureIndex = null;\r\n // return;\r\n // }\r\n\r\n // this.collapsedModuleIndex = mIdx;\r\n // this.collapsedFeatureIndex = fIdx;\r\n\r\n // const feature = this.appMenus[mIdx]?.features?.[fIdx];\r\n // if (!feature) return;\r\n\r\n // if (this.isExpandable(feature)) {\r\n // this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\r\n // this.activeSidebar.emit({\r\n // module: this.appMenus[mIdx],\r\n // feature,\r\n // attribute: feature.attributes?.[0],\r\n // });\r\n // } else {\r\n // this.activeItem = {\r\n // moduleIndex: mIdx,\r\n // featureIndex: fIdx,\r\n // attrIndex: -1,\r\n // };\r\n // this.navigateToItem(this.appMenus[mIdx], feature);\r\n\r\n // this.activeSidebar.emit({\r\n // module: this.appMenus[mIdx],\r\n // feature,\r\n // attribute: null,\r\n // });\r\n // }\r\n // }\r\n navigateToItem(\r\n module: SidebarModule,\r\n feature?: SidebarFeature,\r\n attribute?: SidebarAttribute,\r\n ) {\r\n let targetUrl: string | null = null;\r\n\r\n if (module?.url) {\r\n targetUrl = module.url;\r\n } else if (feature?.url) {\r\n targetUrl = feature.url;\r\n } else if (attribute?.url) {\r\n targetUrl = attribute.url;\r\n }\r\n\r\n if (targetUrl) {\r\n this.router.navigate([targetUrl]);\r\n }\r\n // else {\r\n // console.warn('No URL found for navigation');\r\n // }\r\n }\r\n @HostListener('document:click', ['$event'])\r\n handleOutsideClick(event: Event) {\r\n const target = event.target as HTMLElement;\r\n\r\n if (!target.closest('.cats-sidebar-panel')) {\r\n this.collapsedOpenModule = null;\r\n this.collapsedOpenFeature = null;\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n }\r\n }\r\n}\r\n","<div class=\"cats-sidebar-panel\" [class.collapsed]=\"isCollapsed\">\r\n <!-- Header -->\r\n <div class=\"group-header\">\r\n <div class=\"header-wrapper\" (click)=\"toggleCollapse()\">\r\n <img\r\n class=\"menu-icon\"\r\n [src]=\"\r\n isCollapsed ? 'images/menu-expand.svg' : 'images/menu-collapsed.svg'\r\n \"\r\n alt=\"Toggle menu\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Main Menu -->\r\n <ul class=\"main-menu-list\">\r\n @for (module of appMenus; track mIdx; let mIdx = $index) {\r\n <li class=\"menu-item-wrapper\" [class.disabled]=\"!module.isEnable\">\r\n <!-- Module Header -->\r\n @if (sidebarConfig.sidebarType === \"sectional\") {\r\n <div class=\"head-content\">\r\n <img class=\"img-dropdown\" src=\"images/filled-dropdown.svg\" alt=\"\" />\r\n <span class=\"menu-head\">{{ module.moduleName }}</span>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"head-content\"\r\n [class.active]=\"isActiveItem(mIdx)\"\r\n (click)=\"toggleModule(mIdx)\"\r\n >\r\n <img class=\"img-dropdown\" [src]=\"module.icon\" alt=\"\" />\r\n <span class=\"menu-head\">{{ module.moduleName }}</span>\r\n </div>\r\n }\r\n\r\n <!-- Features List -->\r\n @if (\r\n sidebarConfig.sidebarType === \"sectional\" || isModuleExpanded(mIdx)\r\n ) {\r\n <ul class=\"items-wrapper\">\r\n @for (feature of module.features; track fIdx; let fIdx = $index) {\r\n <li\r\n class=\"items-list\"\r\n [class.disabled]=\"!feature.isEnable\"\r\n [class.cats-show-nested-menu]=\"\r\n isExpandable(feature) &&\r\n isFeatureExpanded(mIdx, fIdx) &&\r\n !isCollapsed\r\n \"\r\n >\r\n <!-- Expanded view -->\r\n <div\r\n class=\"menu-item\"\r\n [class.active]=\"\r\n isActiveItem(mIdx, fIdx) && !isExpandable(feature)\r\n \"\r\n (click)=\"onFeatureClick(mIdx, fIdx, feature)\"\r\n >\r\n <div class=\"item-content\">\r\n <img\r\n class=\"left-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx)\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n alt=\"\"\r\n />\r\n <span class=\"menu-text\">{{ feature.featuresName }}</span>\r\n </div>\r\n\r\n <!-- Chevron: only when feature has attributes -->\r\n @if (isExpandable(feature)) {\r\n @if (isFeatureExpanded(mIdx, fIdx)) {\r\n <img\r\n class=\"chevron-up-icon\"\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n />\r\n } @else {\r\n <img\r\n class=\"chevron-right-icon\"\r\n src=\"images/chevron-right.svg\"\r\n alt=\"\"\r\n />\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Nested Sub-menu -->\r\n @if (isExpandable(feature) && isFeatureExpanded(mIdx, fIdx)) {\r\n <ul class=\"nested-sub-menu\">\r\n @for (\r\n attr of feature.attributes;\r\n track aIdx;\r\n let aIdx = $index\r\n ) {\r\n <li\r\n class=\"nested-item\"\r\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\r\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\r\n >\r\n <img\r\n class=\"attribute-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx, aIdx)\r\n ? attr?.activeIcon\r\n : attr?.icon\r\n \"\r\n alt=\"\"\r\n />\r\n <span class=\"menu-text\">{{ attr.attributeName }}</span>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n\r\n <div class=\"collapsed-menu\">\r\n <!-- Collapsed view (icon only) -->\r\n @if (sidebarConfig.sidebarType === \"sectional\") {\r\n @for (module of appMenus; track mIdx; let mIdx = $index) {\r\n @for (feature of module.features; track fIdx; let fIdx = $index) {\r\n <!-- Feature Icon (sectional: each feature gets its own icon) -->\r\n <div\r\n class=\"menu-item2\"\r\n [ngClass]=\"{\r\n active: isCollapsedIconActive(mIdx, fIdx),\r\n 'open-feature':\r\n collapsedModuleIndex === mIdx && collapsedFeatureIndex === fIdx,\r\n }\"\r\n >\r\n <div\r\n class=\"item-content\"\r\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx)\"\r\n >\r\n <img\r\n class=\"left-icon\"\r\n [src]=\"\r\n isCollapsedIconActive(mIdx, fIdx)\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n />\r\n </div>\r\n\r\n <div class=\"feature-section\">\r\n <div class=\"feature-dropdown\">\r\n <div class=\"feature-heading\">\r\n {{ module.moduleName }}\r\n </div>\r\n\r\n <!-- [class.active]=\"collapsedFeatureIndex === fIdx\" -->\r\n <div\r\n class=\"feature-item\"\r\n [ngClass]=\"{\r\n active: isCollapsedIconActive(mIdx, fIdx),\r\n 'open-attribute':\r\n openAttributeFeatureIndex === fIdx &&\r\n collapsedFeatureIndex === fIdx,\r\n }\"\r\n >\r\n <div\r\n class=\"feature-item-wrapper\"\r\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx, 'fIdx')\"\r\n >\r\n <div class=\"img-text-wrapper\">\r\n <img\r\n class=\"feature-icon\"\r\n [src]=\"\r\n collapsedFeatureIndex === fIdx\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n />\r\n <span class=\"text\">{{ feature.featuresName }}</span>\r\n </div>\r\n\r\n @if (isExpandable(feature)) {\r\n <img src=\"images/chevron-right.svg\" />\r\n }\r\n </div>\r\n\r\n <!-- Attributes -->\r\n @if (\r\n collapsedFeatureIndex === fIdx && isExpandable(feature)\r\n ) {\r\n <div class=\"attribute-section-wrapper\">\r\n <div class=\"attribute-heading\">\r\n {{ feature.featuresName }}\r\n </div>\r\n <div class=\"attribute-section\">\r\n @for (\r\n attr of feature.attributes;\r\n track aIdx;\r\n let aIdx = $index\r\n ) {\r\n <!-- [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\" -->\r\n <div\r\n class=\"attribute-item\"\r\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\r\n >\r\n <img\r\n class=\"attribute-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx, aIdx)\r\n ? attr.activeIcon\r\n : attr.icon\r\n \"\r\n />\r\n <span class=\"text\">{{ attr.attributeName }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n } @else {\r\n @for (module of appMenus; track mIdx; let mIdx = $index) {\r\n <!-- Module Icon (non-sectional: each module gets its own icon) -->\r\n <div\r\n class=\"menu-item2\"\r\n [ngClass]=\"{\r\n active: isCollapsedIconActive(mIdx),\r\n 'open-feature': collapsedModuleIndex === mIdx,\r\n }\"\r\n >\r\n <div class=\"item-content\" (click)=\"onCollapsedModuleIconClick(mIdx)\">\r\n <img\r\n class=\"left-icon\"\r\n [src]=\"\r\n isCollapsedIconActive(mIdx) ? module.activeIcon : module.icon\r\n \"\r\n alt=\"\"\r\n />\r\n </div>\r\n <div class=\"feature-section\">\r\n <div class=\"feature-dropdown\">\r\n <div class=\"feature-heading\">\r\n <span>\r\n {{ module.moduleName }}\r\n </span>\r\n </div>\r\n\r\n @for (feature of module.features; track fIdx; let fIdx = $index) {\r\n <div\r\n class=\"feature-item\"\r\n [ngClass]=\"{\r\n active:\r\n isCollapsedIconActive(mIdx, fIdx) ||\r\n (collapsedModuleIndex === mIdx &&\r\n collapsedFeatureIndex === fIdx),\r\n 'open-attribute':\r\n openAttributeFeatureIndex === fIdx &&\r\n collapsedFeatureIndex === fIdx,\r\n }\"\r\n >\r\n <div\r\n class=\"feature-item-wrapper\"\r\n (click)=\"onCollapsedFeatureClick(mIdx, fIdx)\"\r\n >\r\n <div class=\"img-text-wrapper\">\r\n <img\r\n class=\"feature-icon\"\r\n [src]=\"\r\n isCollapsedIconActive(mIdx, fIdx)\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n alt=\"\"\r\n />\r\n <span class=\"text\">\r\n {{ feature.featuresName }}\r\n </span>\r\n </div>\r\n\r\n @if (isExpandable(feature)) {\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n }\r\n </div>\r\n\r\n <!-- Attributes -->\r\n @if (\r\n collapsedModuleIndex === mIdx &&\r\n collapsedFeatureIndex === fIdx &&\r\n isExpandable(feature)\r\n ) {\r\n <div class=\"attribute-section-wrapper\">\r\n <div class=\"attribute-heading\">\r\n <span>{{ feature.featuresName }}</span>\r\n </div>\r\n\r\n <div class=\"attribute-section\">\r\n @for (\r\n attr of feature.attributes;\r\n track aIdx;\r\n let aIdx = $index\r\n ) {\r\n <div\r\n class=\"attribute-item\"\r\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\r\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\r\n >\r\n <img\r\n class=\"attribute-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx, aIdx)\r\n ? attr.activeIcon\r\n : attr.icon\r\n \"\r\n />\r\n <span class=\"text\">{{ attr.attributeName }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n @if (sidebarConfig.switchOrganiser) {\r\n <div class=\"group-footer\">\r\n <img class=\"footer-icon\" src=\"images/shuffle-01.svg\" alt=\"\" />\r\n <span class=\"footer-text\">Switch Organiser</span>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cats-ui\r\n */\r\n\r\nexport * from './lib/services/cats-ui.service';\r\nexport * from './lib/components/input';\r\nexport * from './lib/components/single-select';\r\nexport * from './lib/components/multi-select';\r\nexport * from './lib/components/search-box';\r\nexport * from './lib/components/auto-complete-single-select';\r\nexport * from './lib/directives/outside-click.directive';\r\nexport * from './lib/components/auto-complete-multi-select';\r\nexport * from './lib/modal/cats-ui.modal';\r\nexport * from './lib/components/toogle-button';\r\nexport * from './lib/components/checkbox-button';\r\nexport * from './lib/components/radio-button';\r\nexport * from './lib/components/custom-date-picker';\r\nexport * from './lib/directives/cats-ui-tooltip.directive';\r\nexport * from './lib/components/accordion';\r\nexport * from './lib/components/tabset';\r\nexport * from './lib/components/timestamp-filter';\r\nexport * from './lib/components/wizard';\r\nexport * from './lib/components/file-upload';\r\nexport * from './lib/components/header';\r\nexport * from './lib/components/dialog-box';\r\nexport * from './lib/components/sidebar';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["noop","i1","i2","i1.WizardService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cats-ui-lib.mjs","sources":["../../../projects/cats-ui/src/lib/services/cats-ui.service.ts","../../../projects/cats-ui/src/lib/components/input/input.component.ts","../../../projects/cats-ui/src/lib/components/input/input.component.html","../../../projects/cats-ui/src/lib/modal/cats-ui.modal.ts","../../../projects/cats-ui/src/lib/components/single-select/single-select.component.ts","../../../projects/cats-ui/src/lib/components/single-select/single-select.component.html","../../../projects/cats-ui/src/lib/components/multi-select/multi-select.component.ts","../../../projects/cats-ui/src/lib/components/multi-select/multi-select.component.html","../../../projects/cats-ui/src/lib/components/search-box/search-box.component.ts","../../../projects/cats-ui/src/lib/components/search-box/search-box.component.html","../../../projects/cats-ui/src/lib/directives/outside-click.directive.ts","../../../projects/cats-ui/src/lib/components/auto-complete-single-select/auto-complete-single-select.component.ts","../../../projects/cats-ui/src/lib/components/auto-complete-single-select/auto-complete-single-select.component.html","../../../projects/cats-ui/src/lib/components/auto-complete-multi-select/auto-complete-multi-select.component.ts","../../../projects/cats-ui/src/lib/components/auto-complete-multi-select/auto-complete-multi-select.component.html","../../../projects/cats-ui/src/lib/components/toogle-button/toogle-button.component.ts","../../../projects/cats-ui/src/lib/components/toogle-button/toogle-button.component.html","../../../projects/cats-ui/src/lib/components/checkbox-button/checkbox-button.component.ts","../../../projects/cats-ui/src/lib/components/checkbox-button/checkbox-button.component.html","../../../projects/cats-ui/src/lib/components/radio-button/radio-button.component.ts","../../../projects/cats-ui/src/lib/components/radio-button/radio-button.component.html","../../../projects/cats-ui/src/lib/components/custom-date-picker/calendar-grid.component.ts","../../../projects/cats-ui/src/lib/components/custom-date-picker/calendar-grid.component.html","../../../projects/cats-ui/src/lib/components/custom-date-picker/time-input.component.ts","../../../projects/cats-ui/src/lib/components/custom-date-picker/time-input.component.html","../../../projects/cats-ui/src/lib/components/custom-date-picker/custom-date-picker.component.ts","../../../projects/cats-ui/src/lib/components/custom-date-picker/custom-date-picker.component.html","../../../projects/cats-ui/src/lib/directives/cats-ui-tooltip.directive.ts","../../../projects/cats-ui/src/lib/components/accordion/accordion.component.ts","../../../projects/cats-ui/src/lib/components/accordion/accordion.component.html","../../../projects/cats-ui/src/lib/components/accordion/accordion-item/accordion-item.component.ts","../../../projects/cats-ui/src/lib/components/accordion/accordion-item/accordion-item.component.html","../../../projects/cats-ui/src/lib/components/tabset/tab-content/tab-content.component.ts","../../../projects/cats-ui/src/lib/components/tabset/tab-content/tab-content.component.html","../../../projects/cats-ui/src/lib/components/tabset/tabset.component.ts","../../../projects/cats-ui/src/lib/components/tabset/tabset.component.html","../../../projects/cats-ui/src/lib/directives/auto-position.directive.ts","../../../projects/cats-ui/src/lib/components/timestamp-filter/timestamp-filter.component.ts","../../../projects/cats-ui/src/lib/components/timestamp-filter/timestamp-filter.component.html","../../../projects/cats-ui/src/lib/components/wizard/wizard.directive.ts","../../../projects/cats-ui/src/lib/components/wizard/wizard.service.ts","../../../projects/cats-ui/src/lib/components/wizard/wizard.component.ts","../../../projects/cats-ui/src/lib/components/wizard/wizard.component.html","../../../projects/cats-ui/src/lib/components/file-upload/file-upload.component.ts","../../../projects/cats-ui/src/lib/components/file-upload/file-upload.component.html","../../../projects/cats-ui/src/lib/components/header/header.component.ts","../../../projects/cats-ui/src/lib/components/header/header.component.html","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-box.component.ts","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-box.component.html","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-ref.ts","../../../projects/cats-ui/src/lib/components/dialog-box/dialog-box.service.ts","../../../projects/cats-ui/src/lib/components/sidebar/sidebar.component.ts","../../../projects/cats-ui/src/lib/components/sidebar/sidebar.component.html","../../../projects/cats-ui/src/public-api.ts","../../../projects/cats-ui/src/cats-ui-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CatsUiService {\r\n\r\n constructor() { }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n FormControl,\r\n NG_VALIDATORS,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { InputConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-input',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class InputComponent implements ControlValueAccessor, Validator {\r\n @Input() inputConfig!: InputConfig;\r\n @Output() onKeyDown = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n @Output() onKeyUp = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n\r\n value: string = '';\r\n disabled = false;\r\n touched = false;\r\n control!: FormControl<any> | null;\r\n showPassword = false;\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n /**\r\n * @description Method to when value changes\r\n * @author Shiva Kant\r\n */\r\n handleInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value = target.value;\r\n this.onChange(this.value);\r\n\r\n if (this.control) {\r\n this.control.markAsDirty();\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n /**\r\n * @description Method to Handle key down event\r\n * @author Shiva Kant\r\n */\r\n handleKeyDown(event: KeyboardEvent) {\r\n this.onKeyDown.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to handle key up event\r\n * @author Shiva Kant\r\n */\r\n handleKeyUp(event: KeyboardEvent) {\r\n this.onKeyUp.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to Handle blur (touched\r\n * @author Shiva Kant\r\n */\r\n\r\n handleBlur(event: FocusEvent): void {\r\n this.touched = true;\r\n this.onTouched();\r\n const control = (event.target as any)?.control;\r\n control?.markAsTouched?.();\r\n }\r\n /**\r\n * @description Method to ControlValueAccessor methods\r\n * @author Shiva Kant\r\n */\r\n\r\n writeValue(value: any): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n /**\r\n * @description Method to Validator interface\r\n * @author Shiva Kant\r\n */\r\n\r\n validate(control: FormControl): any {\r\n this.control = control;\r\n if (this.inputConfig?.type === 'email') {\r\n return Validators.email(control);\r\n }\r\n return null;\r\n }\r\n /**\r\n * @description method to use show password\r\n * @author Shiva Kant\r\n */\r\n togglePassword() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n}\r\n","<div class=\"cats-input-container\">\r\n @if (inputConfig.label) {\r\n <label class=\"cats-label-text\">{{ inputConfig.label }}</label>\r\n }\r\n <div class=\"cats-custom-input\">\r\n <input\r\n [ngClass]=\"{\r\n invalid:\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n }\"\r\n class=\"cats-input-box\"\r\n [type]=\"showPassword ? 'text' : inputConfig.type\"\r\n [placeholder]=\"inputConfig.placeholder\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"value\"\r\n (input)=\"handleInput($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n (keydown)=\"handleKeyDown($event)\"\r\n (keyup)=\"handleKeyUp($event)\"\r\n />\r\n <!-- Eye Icon Only When Type Is Password -->\r\n @if (inputConfig.type === \"password\") {\r\n <span class=\"cats-eye-icon\" (click)=\"togglePassword()\">\r\n <img\r\n class=\"cats-eye-img\"\r\n [src]=\"showPassword ? 'images/eye.svg' : 'images/eye-off.svg'\"\r\n alt=\"toggle password visibility\"\r\n />\r\n </span>\r\n }\r\n </div>\r\n</div>\r\n","export class SingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n searchPlaceholder?: string = 'Search Here';\r\n required?: boolean = false;\r\n}\r\n\r\nexport class MultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n searchPlaceholder?: string = 'Search Here';\r\n chipLimit: number = 2;\r\n selectAll?: boolean = true;\r\n required?: boolean = false;\r\n}\r\n\r\nexport class SearchConfig {\r\n serachValue: string = '';\r\n placeholder?: string = 'Search';\r\n}\r\n\r\nexport class InputConfig {\r\n type: 'text' | 'email' | 'password' | 'number' = 'text';\r\n placeholder?: string = 'Enter here';\r\n label?: string = 'label';\r\n}\r\n\r\nexport class AutoCompleteSingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n customInput: boolean = false;\r\n}\r\nexport class AutoCompleteMultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n colorField?: string = '';\r\n iconField?: string = '';\r\n selectAll?: boolean = true;\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n chipLimit: number = 2;\r\n customInput?: boolean = false;\r\n pattern?: string = '';\r\n infoText?: string = '';\r\n selectionLimit?: number = 0;\r\n}\r\nexport class ToggleConfig {\r\n checked: boolean = false;\r\n disabled?: boolean = false;\r\n}\r\nexport class CheckBoxSubtask {\r\n idField: string = '';\r\n textField: string = '';\r\n checked?: boolean = false;\r\n}\r\n\r\nexport class CheckBoxConfig {\r\n idField: string = '';\r\n textField: string = '';\r\n disabledField?: string = '';\r\n name: string = '';\r\n checked?: boolean = false;\r\n subtasks?: CheckBoxSubtask[];\r\n}\r\nexport interface RadioButtonConfig {\r\n label?: string;\r\n disabled?: string;\r\n valueField?: string;\r\n textField?: string;\r\n name: string;\r\n layout?: 'horizontal' | 'vertical';\r\n}\r\nexport interface DialogConfig {\r\n id?: string;\r\n title?: string;\r\n closeOnBackdropClick?: boolean;\r\n showBackdrop?: boolean;\r\n class?: string;\r\n showHeader?: boolean;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { SingleSelectConfig } from '../../modal/cats-ui.modal';\r\n\r\nconst noop = () => {};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-single-select',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './single-select.component.html',\r\n styleUrl: './single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: SingleSelectComponent,\r\n multi: true,\r\n },\r\n SINGLE_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class SingleSelectComponent\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() singleSelectConfig: SingleSelectConfig = new SingleSelectConfig();\r\n @Input() selectedOption: any;\r\n @Output() onSelection = new EventEmitter();\r\n\r\n showDropdown = false;\r\n searchText: string = '';\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n disableControl: boolean = false;\r\n @Output() onScroll: any = new EventEmitter();\r\n @Input() parentNativeElement: any;\r\n\r\n @ContentChild('selectedData') selectedData!: TemplateRef<any>;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n private el: ElementRef,\r\n ) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n this.optionList = [];\r\n } else {\r\n if (this.optionList.length > 10)\r\n this.singleSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n // this.parentNativeElement.scrollIntoView({\r\n // behavior: 'smooth',\r\n // block: 'center',\r\n // });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n if (typeof obj == 'string' || typeof obj == 'number') return true;\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n this.selectedOption = item;\r\n this.toggleDropdown();\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(item);\r\n }\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param obj this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(obj: any): void {\r\n this.selectedOption = '';\r\n\r\n if (this.optionList.length && obj) {\r\n if (typeof obj === 'string' || typeof obj === 'number') {\r\n if (\r\n typeof this.optionList?.[0] === 'string' ||\r\n typeof this.optionList?.[0] === 'number'\r\n ) {\r\n if (this.optionList.includes(obj)) {\r\n this.selectedOption = obj;\r\n }\r\n } else if (obj != '') {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] == obj ||\r\n option[this.singleSelectConfig.textField] == obj\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n obj?.hasOwnProperty(this.singleSelectConfig.idField) &&\r\n !this.isObjEmpty(this.optionList[0])\r\n ) {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] ==\r\n obj[this.singleSelectConfig.idField]\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n setTimeout(() => {\r\n this.onChangeCallback(this.selectedOption);\r\n }, 0);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.singleSelectConfig.required) {\r\n this.inValid =\r\n this.selectedOption == '' ||\r\n JSON.stringify(this.selectedOption) == '{}';\r\n }\r\n this.searchText = '';\r\n if (this.showDropdown) this.onTouchedCallback();\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) => {\r\n if (typeof option != 'object') {\r\n return option?.toLowerCase().includes(this.searchText.toLowerCase());\r\n } else {\r\n return option[this.singleSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase());\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"cats-main-wrapper\" id=\"main-wrapper-single-select\">\r\n <div\r\n class=\"cats-single-select-dropdown\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n invalid:\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-input': !selectedOption && disableControl,\r\n 'selected-disable': selectedOption && disableControl,\r\n }\"\r\n >\r\n <div class=\"cats-left-details\">\r\n @if (singleSelectConfig.prefixLabel) {\r\n <span class=\"predefine-label\">\r\n <p class=\"prefix-text textTruncate\">{{ singleSelectConfig.prefixLabel }}</p>\r\n </span>\r\n }\r\n @if (\r\n !isObjEmpty(selectedOption) &&\r\n selectedOption[singleSelectConfig.textField]\r\n ) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n <ng-template #defaultTemplate let-data=\"data\">\r\n <!-- COLOR -->\r\n @if (singleSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n selectedOption[singleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (singleSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"selectedOption[singleSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n\r\n <!-- TEXT -->\r\n <span class=\"textTruncate\">\r\n {{ selectedOption[singleSelectConfig.textField] }}\r\n </span>\r\n </ng-template>\r\n } @else if (selectedOption && isObjEmpty(selectedOption)) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate1\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultTemplate1 let-data=\"data\">\r\n <span class=\"textTruncate\">\r\n {{ selectedOption }}\r\n </span>\r\n </ng-template>\r\n } @else {\r\n <span class=\"placeholderColor textTruncate\">{{\r\n singleSelectConfig.placeholder\r\n }}</span>\r\n }\r\n </div>\r\n <span >\r\n <img class=\"cats-arrow-icon\"\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img class=\"cats-arrow-icon\"\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div\r\n class=\"cats-dropdown-list\"\r\n id=\"container_scroll\"\r\n (scroll)=\"onDivScroll($event)\"\r\n >\r\n @if (singleSelectConfig.enableSearch) {\r\n <div class=\"cats-search-bar\">\r\n <div class=\"cats-input-box\">\r\n <img src=\"images/search.svg\" class=\"cats-search-icon\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter-search-box\"\r\n name=\"\"\r\n id=\"\"\r\n [placeholder]=\"\r\n singleSelectConfig.searchPlaceholder || 'Search here'\r\n \"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cats-cross-icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @if (isObjEmpty(this.optionList[0] || \"\")) {\r\n @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"cats-item\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField],\r\n }\"\r\n >\r\n <span class=\"textTruncate\">{{ option }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no-data cats-item\">No Data Found.</li>\r\n }\r\n } @else {\r\n @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"cats-item\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField],\r\n }\"\r\n >\r\n <!-- COLOR BADGE -->\r\n @if (singleSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color': option[singleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (singleSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"option[singleSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\">{{\r\n option[singleSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no-data cats-item\">No Data Found.</li>\r\n }\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass, NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { MultiSelectConfig } from '../../modal/cats-ui.modal';\r\nconst noop = () => {};\r\nexport const MULTI_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\nexport const MULTI_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-multi-select',\r\n imports: [NgClass, FormsModule, NgStyle],\r\n templateUrl: './multi-select.component.html',\r\n styleUrl: './multi-select.component.scss',\r\n providers: [\r\n MULTI_SELECT_CONTROL_VALUE_ACCESSOR,\r\n MULTI_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class MultiSelectComponent\r\n implements OnChanges, OnInit, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() multiSelectConfig: MultiSelectConfig = new MultiSelectConfig();\r\n\r\n @Input() selectedOptions: any[] = [];\r\n\r\n @Output() onSelection = new EventEmitter();\r\n\r\n control!: FormControl<any> | null;\r\n\r\n showDropdown = false;\r\n isListArrayOfObject = false;\r\n isSelectedAll = false;\r\n inValid: boolean = false;\r\n searchText: string = '';\r\n disabledControl: boolean = false;\r\n\r\n constructor(\r\n private cd: ChangeDetectorRef,\r\n private el: ElementRef,\r\n ) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (\r\n _changes['optionList'].currentValue &&\r\n _changes['optionList'].currentValue.length > 0\r\n ) {\r\n if (\r\n typeof this.optionList[0] === 'string' ||\r\n typeof this.optionList[0] === 'number'\r\n ) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n const item: any = {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n isSelected: false,\r\n };\r\n\r\n if (this.multiSelectConfig.disabledField) {\r\n item[this.multiSelectConfig.disabledField] = false;\r\n }\r\n\r\n return item;\r\n });\r\n } else {\r\n this.isListArrayOfObject = true;\r\n this.optionList = this.optionList.map((option: any) => {\r\n return {\r\n ...option,\r\n isSelected: false,\r\n };\r\n });\r\n }\r\n if (this.optionList.length > 10)\r\n this.multiSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n item.isSelected = !item.isSelected;\r\n if (!item.isSelected) {\r\n let ind = this.selectedOptions.findIndex(\r\n (option: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField],\r\n );\r\n if (ind >= 0) this.selectedOptions.splice(ind, 1);\r\n } else {\r\n this.selectedOptions.push(item);\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true,\r\n );\r\n\r\n this.inValid = false;\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param controlValue this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(controlValue: any[]): void {\r\n if (this.optionList.length) {\r\n this.selectedOptions = [];\r\n if (controlValue && controlValue.length > 0) {\r\n if (\r\n typeof controlValue[0] === 'string' ||\r\n typeof controlValue[0] === 'number'\r\n ) {\r\n controlValue = controlValue.map((option: string | number) => {\r\n return {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n };\r\n });\r\n }\r\n for (const option of controlValue) {\r\n let ind = this.optionList.findIndex(\r\n (item: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField] ||\r\n item[this.multiSelectConfig.textField] ==\r\n option[this.multiSelectConfig.textField],\r\n );\r\n if (ind >= 0) {\r\n this.optionList[ind] = {\r\n ...this.optionList[ind],\r\n isSelected: true,\r\n };\r\n this.selectedOptions.push(this.optionList[ind]);\r\n }\r\n }\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true,\r\n );\r\n this.onChangeCallback(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.multiSelectConfig.required) {\r\n this.inValid = this.selectedOptions.length < 0;\r\n }\r\n this.searchText = '';\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n checkUncheckAll(): void {\r\n if (this.isSelectedAll) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: false };\r\n });\r\n\r\n this.isSelectedAll = false;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n } else {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: true };\r\n });\r\n\r\n this.isSelectedAll = true;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n }\r\n\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onSelection.emit(this.selectedOptions);\r\n }\r\n\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) =>\r\n option[this.multiSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase()),\r\n );\r\n }\r\n}\r\n","<div class=\"cats-main-wrapper\">\r\n <div\r\n class=\"cats-display-div\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n invalid:\r\n control?.touched &&\r\n control?.dirty &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-input': !selectedOptions && disabledControl,\r\n 'selected-disable': selectedOptions && disabledControl,\r\n }\"\r\n >\r\n <div class=\"cats-left-details\">\r\n @if (multiSelectConfig.prefixLabel) {\r\n <span class=\"predefine-label\">\r\n <p class=\"textTruncate predefine-label-text\">\r\n {{ multiSelectConfig.prefixLabel }}\r\n </p>\r\n </span>\r\n }\r\n <div class=\"multi-label-wrapper\">\r\n @if (selectedOptions.length > 0) {\r\n @for (item of selectedOptions; track $index) {\r\n @if (multiSelectConfig.chipLimit >= $index + 1) {\r\n <div class=\"cats-input-text\">\r\n <!-- SHOW ONLY WHEN SELECTED -->\r\n @if (item.isSelected) {\r\n <ng-container>\r\n <!-- COLOR BADGE -->\r\n @if (multiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[multiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (multiSelectConfig.iconField) {\r\n <span>\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[multiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <!-- TEXT -->\r\n <span class=\"textTruncate cats-span-text\">\r\n {{ item[multiSelectConfig.textField] }}\r\n </span>\r\n <!-- <span class=\"textTruncate\">{{\r\n item[multiSelectConfig.textField]\r\n }}</span> -->\r\n <!-- <i-feather name=\"x\" (click)=\"$event.stopPropagation();updateSelectedOption(item)\"></i-feather> -->\r\n <img\r\n src=\"images/x-circle.svg\"\r\n (click)=\"$event.stopPropagation(); updateSelectedOption(item)\"\r\n class=\"cats-cross-icon\"\r\n alt=\"\"\r\n />\r\n </div>\r\n }\r\n }\r\n } @else {\r\n <span class=\"placeholderColor textTruncate\">{{\r\n multiSelectConfig.placeholder\r\n }}</span>\r\n }\r\n @if (multiSelectConfig.chipLimit < selectedOptions.length) {\r\n <div class=\"cats-view-more\">\r\n +{{ selectedOptions.length - multiSelectConfig.chipLimit }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <span class=\"arrow-icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div class=\"cats-dropdown-list\" id=\"container_scroll\">\r\n @if (multiSelectConfig.enableSearch) {\r\n <div class=\"cats-search-bar\">\r\n <div class=\"cats-input-box\">\r\n <img class=\"cats-search-img\" src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter-search-box\"\r\n name=\"\"\r\n id=\"\"\r\n [placeholder]=\"\r\n multiSelectConfig.searchPlaceholder || 'Search here'\r\n \"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cats-cross-icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @if (multiSelectConfig.selectAll && optionList.length > 0) {\r\n <li class=\"cats-multiitem\" (click)=\"checkUncheckAll()\">\r\n <span class=\"cats-checkbox-container\">\r\n <input type=\"checkbox\" [checked]=\"isSelectedAll\" />\r\n @if (isSelectedAll) {\r\n UnSelectAll\r\n } @else {\r\n SelectAll\r\n }\r\n </span>\r\n </li>\r\n }\r\n @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"cats-checkbox-container cats-multiitem\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n multiSelectConfig.disabledField &&\r\n option[multiSelectConfig.disabledField],\r\n }\"\r\n >\r\n <input type=\"checkbox\" [checked]=\"option.isSelected\" />\r\n <!-- COLOR BADGE -->\r\n @if (multiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color': option[multiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (multiSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"option[multiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\"\r\n >{{ option[multiSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n } @empty {\r\n <li class=\"no-data cats-multiitem\">No Data Found.</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n} from '@angular/forms';\r\nimport { SearchConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-search-box',\r\n imports: [FormsModule],\r\n templateUrl: './search-box.component.html',\r\n styleUrl: './search-box.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SearchBoxComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SearchBoxComponent implements ControlValueAccessor {\r\n searchParam: string = '';\r\n @Input() searchConfig: SearchConfig = new SearchConfig();\r\n @Output() onClose = new EventEmitter<void>();\r\n @Output() searchParamValue = new EventEmitter<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n public onTouched: () => void = () => {};\r\n isDisabled = false;\r\n\r\n ngOnInit(): void {\r\n this.searchParam = this.searchConfig?.serachValue || '';\r\n }\r\n /**\r\n * @description Method to Called when input changes\r\n * @author Shiva Kant\r\n */\r\n\r\n onInputChange(event: any) {\r\n const value = (event.target as HTMLInputElement)?.value;\r\n this.searchParam = value;\r\n this.onChange(value);\r\n this.searchParamValue.emit(value);\r\n }\r\n /**\r\n * @description Method to closeSearchBar\r\n * @author Shiva Kant\r\n */\r\n closeSearchBar(): void {\r\n this.searchParam = '';\r\n this.onChange('');\r\n this.searchParamValue.emit('');\r\n this.onClose.emit();\r\n }\r\n\r\n // -------- ControlValueAccessor methods --------\r\n writeValue(value: string): void {\r\n this.searchParam = value || '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"cats-search-input\">\r\n <img class=\"cats-search-icon\" src=\"images/search.svg\" alt=\"\" srcset=\"\" />\r\n <input\r\n [placeholder]=\"searchConfig.placeholder\"\r\n type=\"text\"\r\n class=\"cats-search-text\"\r\n [value]=\"searchParam\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n @if (searchParam.length > 0) {\r\n <div class=\"cats-cross-icon\">\r\n <img class=\"cats-clear-icon\" src=\"images/x-cancel-btn.svg\" alt=\"\" srcset=\"\" (click)=\"closeSearchBar()\" />\r\n </div>\r\n }\r\n</div>\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: '[catsOutsideClick]',\r\n standalone: true,\r\n})\r\nexport class OutsideClickDirective {\r\n @Output() public clickOutSide = new EventEmitter<MouseEvent>();\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * @description Hosts listener\r\n * @author Shiva Kant\r\n * @param event \r\n * @returns click \r\n */\r\n @HostListener('document:click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n const targetElement = event.target as HTMLElement | null;\r\n\r\n // Guard clause: exit early if no target or not an element\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickInside) {\r\n this.clickOutSide.emit(event);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { AutoCompleteSingleSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nconst noop = () => {};\r\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const DROPDOWN_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-input-single-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-single-select.component.html',\r\n styleUrl: './auto-complete-single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutoCompleteSingleSelectComponent,\r\n multi: true,\r\n },\r\n DROPDOWN_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteSingleSelectComponent implements OnInit {\r\n @Input() autoSingleSelectConfig: AutoCompleteSingleSelectConfig =\r\n new AutoCompleteSingleSelectConfig();\r\n @Input() placeholder = 'Enter or Select Option';\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOption: any;\r\n constructor() {}\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n disableControl: boolean = false;\r\n ngOnInit(): void {}\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionsList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string): void {\r\n if (type == 'object') {\r\n this.selectedItem = item;\r\n this.inputValue = item[this.autoSingleSelectConfig.textField];\r\n } else {\r\n this.inputValue = item;\r\n }\r\n this.selectedOption = item;\r\n this.showDropdown = false;\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(this.selectedOption);\r\n }\r\n\r\n writeValue(obj: any): void {\r\n this.syncSelectionWithValue(obj);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // ---------- Helpers ----------\r\n private syncSelectionWithValue(value: any): void {\r\n this.selectedOption = null;\r\n this.inputValue = '';\r\n\r\n if (!value || !this.optionsList?.length) return;\r\n\r\n if (typeof value !== 'object') {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o === value ||\r\n o?.[this.autoSingleSelectConfig.idField] === value ||\r\n o?.[this.autoSingleSelectConfig.textField] === value,\r\n ) ?? value;\r\n } else {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o[this.autoSingleSelectConfig.idField] ===\r\n value[this.autoSingleSelectConfig.idField],\r\n ) ?? value;\r\n }\r\n this.selectedItem = this.selectedOption;\r\n this.inputValue = this.isObject(this.selectedOption)\r\n ? this.selectedOption[this.autoSingleSelectConfig.textField]\r\n : this.selectedOption;\r\n }\r\n /**\r\n * @description this method is use to update input value\r\n */\r\n updateInputValue(): void {\r\n let data: any = null;\r\n\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.selectedOption = null;\r\n this.onChangeCallback(null);\r\n } else {\r\n if (this.isObject(this.optionsList?.[0])) {\r\n // Try to find existing option\r\n const matchedOption = this.optionsList.find(\r\n (o) =>\r\n o[this.autoSingleSelectConfig.textField]?.toLowerCase()?.trim() ===\r\n this.inputValue.toLowerCase().trim(),\r\n );\r\n\r\n if (matchedOption) {\r\n //Use existing object (keeps ID)\r\n data = matchedOption;\r\n } else {\r\n // New custom value\r\n data = {\r\n [this.autoSingleSelectConfig.idField]: null,\r\n [this.autoSingleSelectConfig.textField]: this.inputValue,\r\n };\r\n }\r\n } else {\r\n data = this.inputValue;\r\n }\r\n\r\n this.selectedOption = data;\r\n this.onChangeCallback(data);\r\n }\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(data);\r\n this.control?.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus(): void {\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.updateInputValue(); // reuse logic\r\n this.showDropdown = false;\r\n return;\r\n }\r\n\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on click outside\r\n */\r\n outsideClicked(): void {\r\n if (this.showDropdown) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n this.showDropdown = false;\r\n }\r\n onClickEnter(control: any) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"cats-main-container\"\r\n catsOutsideClick\r\n (clickOutSide)=\"outsideClicked()\"\r\n>\r\n <div\r\n class=\"cats-input-container\"\r\n [ngClass]=\"{\r\n invalid:\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-input': !selectedItem && disableControl,\r\n 'selected-disable': selectedItem && disableControl,\r\n }\"\r\n >\r\n <div class=\"cats-input-box\">\r\n @if (selectedItem && autoSingleSelectConfig.colorField && inputValue) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color': selectedItem[autoSingleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n @if (selectedItem && autoSingleSelectConfig.iconField && inputValue) {\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"selectedItem[autoSingleSelectConfig.iconField]\"\r\n />\r\n }\r\n <input\r\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\r\n class=\"textTruncate cats-input-text\"\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n (keyup.enter)=\"onClickEnter(inputValue)\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n (input)=\"updateDropdownStatus()\"\r\n [placeholder]=\"autoSingleSelectConfig.placeholder\"\r\n />\r\n </div>\r\n <div (click)=\"toggleDropdown()\">\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-up.svg\"\r\n alt=\"up-arrow\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-down.svg\"\r\n alt=\"down-arrow\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (showDropdown) {\r\n <div class=\"dropdown-list-single-auto-select\">\r\n <!-- if optionList is an array of object-->\r\n @if (isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if (\r\n item[autoSingleSelectConfig.textField]\r\n .toLowerCase()\r\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\r\n ) {\r\n <li\r\n class=\"cats-item\"\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled-option'\r\n : ''\r\n \"\r\n >\r\n <!-- COLOR BADGE -->\r\n @if (autoSingleSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[autoSingleSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n <!-- ICON -->\r\n @if (autoSingleSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[autoSingleSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\">\r\n {{ item[autoSingleSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n }\r\n </ng-container>\r\n }\r\n </ul>\r\n </ng-container>\r\n }\r\n\r\n <!-- if optionList is an array of string-->\r\n @if (!isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul class=\"cats-dropdown-list-wrapper\">\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if (item.includes(inputValue) || inputValue == \"\") {\r\n <li\r\n class=\"cats-item\"\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled-option'\r\n : ''\r\n \"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n {{ item }}\r\n </li>\r\n }\r\n </ng-container>\r\n }\r\n </ul></ng-container\r\n >\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { AutoCompleteMultiSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { SafeHtml, DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'cats-ui-input-multi-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-multi-select.component.html',\r\n styleUrl: './auto-complete-multi-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteMultiSelectComponent\r\n implements OnInit, ControlValueAccessor\r\n{\r\n @Input() autoCompleteMultiSelectConfig!: AutoCompleteMultiSelectConfig;\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOptions: any[] = [];\r\n isSelectedAll: boolean = false;\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n isDisabled = false;\r\n safePlaceholder!: SafeHtml;\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n ngOnInit() {\r\n this.safePlaceholder = this.sanitizer.bypassSecurityTrustHtml(\r\n this.autoCompleteMultiSelectConfig?.placeholder as string,\r\n );\r\n }\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionsList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n private onChange: (_: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n this.parentNativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n writeValue(value: any[]): void {\r\n if (Array.isArray(value)) {\r\n this.selectedOptions = value;\r\n\r\n // sync optionsList selection\r\n this.optionsList.forEach((opt) => {\r\n opt.isSelected = value.some((v) =>\r\n this.isObject(v)\r\n ? v[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField]\r\n : v === opt,\r\n );\r\n });\r\n this.onChange(this.selectedOptions);\r\n this.updateSelectAllState();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.inputValue = target.value;\r\n }\r\n handleBlur() {\r\n this.onTouched();\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string) {\r\n if (type === 'object') {\r\n // Toggle the option's isSelected\r\n item.isSelected = !item.isSelected;\r\n\r\n if (item.isSelected) {\r\n // add to selectedOptions if not already present\r\n const exists = this.selectedOptions.some(\r\n (opt) =>\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (!exists) this.selectedOptions.push(item);\r\n } else {\r\n // remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter(\r\n (opt) =>\r\n !(\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField]\r\n ),\r\n );\r\n }\r\n } else {\r\n // string type\r\n const existsIndex = this.selectedOptions.findIndex((opt) => opt === item);\r\n if (existsIndex > -1) {\r\n // remove\r\n this.selectedOptions.splice(existsIndex, 1);\r\n } else {\r\n // add\r\n this.selectedOptions.push(item);\r\n }\r\n\r\n // If optionsList contains this string, also toggle its isSelected there\r\n const idxInOptions = this.optionsList.findIndex(\r\n (o) => typeof o === 'string' && o === item,\r\n );\r\n if (idxInOptions > -1) {\r\n // toggle corresponding option's isSelected\r\n const opt = this.optionsList[idxInOptions] as any;\r\n opt.isSelected = !opt.isSelected;\r\n }\r\n }\r\n\r\n // keep select all state consistent\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to checkUncheckAll\r\n * @author Shiva Kant\r\n */\r\n\r\n checkUncheckAll(event: any) {\r\n if (event) event.stopPropagation();\r\n this.isSelectedAll = !this.isSelectedAll;\r\n\r\n this.optionsList.forEach((item) => {\r\n if (\r\n !this.autoCompleteMultiSelectConfig.disabledField ||\r\n !item[this.autoCompleteMultiSelectConfig.disabledField]\r\n ) {\r\n item.isSelected = this.isSelectedAll;\r\n }\r\n });\r\n\r\n // Keep custom values intact\r\n const customChips = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? !this.optionsList.some(\r\n (o) =>\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField],\r\n )\r\n : !this.optionsList.includes(opt),\r\n );\r\n\r\n const selectedOptionItems = this.optionsList.filter(\r\n (opt) => opt.isSelected,\r\n );\r\n\r\n this.selectedOptions = [...customChips, ...selectedOptionItems];\r\n this.onChange(this.selectedOptions);\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to removeChip\r\n * @author Shiva Kant\r\n */\r\n removeChip(item: any) {\r\n // Remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] !==\r\n (this.isObject(item)\r\n ? item[this.autoCompleteMultiSelectConfig.textField]\r\n : item)\r\n : opt !== item,\r\n );\r\n\r\n // If item corresponds to an optionsList entry, unselect it there too\r\n if (this.isObject(item)) {\r\n const idx = this.optionsList.findIndex(\r\n (o: any) =>\r\n this.isObject(o) &&\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n } else {\r\n // string case\r\n const idx = this.optionsList.findIndex((o) => o === item);\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n }\r\n\r\n // update select all state & emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions); // 🔥 THIS updates formControl\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus() {\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on onClickEnter\r\n * @author Shiva Kant\r\n */\r\n\r\n onClickEnter(control?: any): void {\r\n if (!this.inputValue.trim()) return;\r\n\r\n // pattern check\r\n if (this.autoCompleteMultiSelectConfig.pattern) {\r\n const regex = new RegExp(this.autoCompleteMultiSelectConfig.pattern);\r\n if (!regex.test(this.inputValue)) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n }\r\n\r\n const val = this.inputValue.trim();\r\n const valLower = val.toLowerCase();\r\n\r\n // Avoid duplicate\r\n const exists = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower\r\n : opt.toLowerCase() === valLower,\r\n );\r\n if (exists) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n\r\n // Try find matched item in optionsList\r\n const matchedItem = this.isObject(this.optionsList?.[0])\r\n ? this.optionsList.find(\r\n (opt: any) =>\r\n opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower,\r\n )\r\n : this.optionsList.find((opt: any) => opt.toLowerCase() === valLower);\r\n\r\n if (matchedItem) {\r\n // If matched, ensure option is marked selected and present in selectedOptions\r\n matchedItem.isSelected = true;\r\n const already = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n matchedItem[this.autoCompleteMultiSelectConfig.textField]\r\n : opt === matchedItem,\r\n );\r\n if (!already) this.selectedOptions.push(matchedItem);\r\n } else if (this.autoCompleteMultiSelectConfig.customInput) {\r\n // create custom item and mark it selected\r\n let newItem: any = val;\r\n if (this.isObject(this.optionsList?.[0])) {\r\n newItem = {\r\n [this.autoCompleteMultiSelectConfig.idField]: null,\r\n [this.autoCompleteMultiSelectConfig.textField]: val,\r\n isSelected: true, // mark selected for consistency\r\n __isCustom: true, // optional flag to identify custom items\r\n };\r\n }\r\n this.selectedOptions.push(newItem);\r\n }\r\n\r\n // reset input but keep dropdown open (as you wanted)\r\n this.inputValue = '';\r\n\r\n // update select all state and emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n outsideClicked(): void {\r\n this.showDropdown = false;\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n\r\n updateSelectAllState() {\r\n // only consider non-disabled items for select-all state\r\n const selectable = this.optionsList.filter(\r\n (opt: any) =>\r\n !(\r\n this.autoCompleteMultiSelectConfig.disabledField &&\r\n opt[this.autoCompleteMultiSelectConfig.disabledField]\r\n ),\r\n );\r\n this.isSelectedAll =\r\n selectable.length > 0 && selectable.every((opt: any) => !!opt.isSelected);\r\n }\r\n}\r\n","<div class=\"cats-main-container\">\r\n <div\r\n class=\"cats-input-container\"\r\n [class.active]=\"showDropdown\"\r\n [ngClass]=\"{\r\n invalid: control?.touched && control?.invalid && control?.errors,\r\n 'disable-input': !selectedOptions && isDisabled,\r\n 'selected-disable': selectedOptions && isDisabled,\r\n }\"\r\n catsOutsideClick\r\n (clickOutSide)=\"outsideClicked()\"\r\n >\r\n <div class=\"cats-chips-wrapper\">\r\n <!-- Chips -->\r\n @for (item of selectedOptions; track $index) {\r\n @if ($index < autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"cats-chip\" (click)=\"$event.stopPropagation()\">\r\n <!-- <span class=\"textTruncate chip-text\">\r\n {{\r\n isObject(item)\r\n ? item[autoCompleteMultiSelectConfig.textField]\r\n : item\r\n }}\r\n </span> -->\r\n <!-- SHOW ONLY WHEN SELECTED -->\r\n @if (\r\n isObject(item) ? item.isSelected : selectedOptions.includes(item)\r\n ) {\r\n <ng-container>\r\n <!-- COLOR BADGE -->\r\n @if (autoCompleteMultiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[autoCompleteMultiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (autoCompleteMultiSelectConfig.iconField) {\r\n <span>\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <!-- TEXT -->\r\n <span class=\"textTruncate chip-text\">\r\n {{\r\n isObject(item)\r\n ? item[autoCompleteMultiSelectConfig.textField]\r\n : item\r\n }}\r\n </span>\r\n <img\r\n src=\"images/x-circle.svg\"\r\n class=\"cats-cross-icon\"\r\n (click)=\"$event.stopPropagation(); removeChip(item)\"\r\n />\r\n </div>\r\n }\r\n }\r\n <!-- +N counter -->\r\n @if (selectedOptions.length > autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"cats-view-more\">\r\n +{{\r\n selectedOptions.length - autoCompleteMultiSelectConfig.chipLimit\r\n }}\r\n </div>\r\n }\r\n <!-- Input Box (always available) -->\r\n <div\r\n class=\"cats-input-box\"\r\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\r\n >\r\n <input\r\n type=\"text\"\r\n class=\"multi-select-input\"\r\n [value]=\"inputValue\"\r\n (input)=\"onInput($event)\"\r\n (keyup.enter)=\"onClickEnter()\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n @if (selectedOptions.length === 0 && !inputValue) {\r\n <div class=\"fake-placeholder\" [innerHTML]=\"safePlaceholder\"></div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown toggle -->\r\n <div (click)=\"toggleDropdown()\">\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-up.svg\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n class=\"cats-arrow-icon\"\r\n src=\"images/chevron-down.svg\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown list -->\r\n @if (showDropdown) {\r\n <div\r\n class=\"dropdown-list-multi-auto-select\"\r\n id=\"container_scroll\"\r\n (click)=\"onDivScroll($event)\"\r\n >\r\n @if (\r\n autoCompleteMultiSelectConfig.infoText ||\r\n autoCompleteMultiSelectConfig.selectionLimit\r\n ) {\r\n <div class=\"cats-headerRow\">\r\n @if (autoCompleteMultiSelectConfig.infoText) {\r\n <span class=\"cats-infoText textTruncate\">\r\n {{ autoCompleteMultiSelectConfig.infoText }}\r\n </span>\r\n }\r\n\r\n @if (autoCompleteMultiSelectConfig.selectionLimit) {\r\n <span class=\"cats-countText textTruncate\">\r\n {{ selectedOptions.length }}/{{\r\n autoCompleteMultiSelectConfig.selectionLimit\r\n }}\r\n are Selected\r\n </span>\r\n }\r\n </div>\r\n }\r\n <ul class=\"cats-ul-multi-select\">\r\n <!-- infotext -->\r\n <!-- Select All -->\r\n @if (autoCompleteMultiSelectConfig.selectAll) {\r\n <li\r\n class=\"cats-checkbox-container select-all-item\"\r\n (click)=\"checkUncheckAll($event)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-input-checkbox\"\r\n [checked]=\"isSelectedAll\"\r\n (click)=\"$event.stopPropagation(); checkUncheckAll($event)\"\r\n />\r\n <span>{{ isSelectedAll ? \"Unselect All\" : \"Select All\" }}</span>\r\n </li>\r\n }\r\n\r\n <!-- Object Options -->\r\n @if (isObject(optionsList[0])) {\r\n @for (item of optionsList; track $index) {\r\n @if (\r\n item[autoCompleteMultiSelectConfig.textField]\r\n .toLowerCase()\r\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\r\n ) {\r\n <li\r\n class=\"cats-checkbox-container\"\r\n [ngClass]=\"{\r\n 'disabled-option':\r\n autoCompleteMultiSelectConfig.disabledField &&\r\n item[autoCompleteMultiSelectConfig.disabledField],\r\n }\"\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-input-checkbox\"\r\n [checked]=\"item.isSelected\"\r\n (click)=\"\r\n $event.stopPropagation(); updateSelectedItem(item, 'object')\r\n \"\r\n />\r\n <!-- COLOR BADGE -->\r\n @if (autoCompleteMultiSelectConfig.colorField) {\r\n <span\r\n class=\"cats-color-badge\"\r\n [ngStyle]=\"{\r\n 'background-color':\r\n item[autoCompleteMultiSelectConfig.colorField],\r\n }\"\r\n ></span>\r\n }\r\n\r\n <!-- ICON -->\r\n @if (autoCompleteMultiSelectConfig.iconField) {\r\n <span class=\"cats-icon-wrapper\">\r\n <img\r\n class=\"cats-option-icon\"\r\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\r\n alt=\"icon\"\r\n />\r\n </span>\r\n }\r\n <span class=\"textTruncate\">{{\r\n item[autoCompleteMultiSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n }\r\n }\r\n }\r\n\r\n <!-- String Options -->\r\n @if (!isObject(optionsList[0])) {\r\n @for (item of optionsList; track $index) {\r\n @if (\r\n item.toLowerCase().includes(inputValue.toLowerCase()) ||\r\n inputValue == \"\"\r\n ) {\r\n <li\r\n class=\"cats-checkbox-container\"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-input-checkbox\"\r\n [checked]=\"selectedOptions.includes(item)\"\r\n (click)=\"\r\n $event.stopPropagation(); updateSelectedItem(item, 'string')\r\n \"\r\n />\r\n <span class=\"textTruncate\">{{ item }}</span>\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { ToggleConfig } from '../../modal/cats-ui.modal';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-ui-toogle-button',\r\n imports: [],\r\n templateUrl: './toogle-button.component.html',\r\n styleUrl: './toogle-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ToogleButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ToogleButtonComponent {\r\n @Input() toggleConfig!: ToggleConfig;\r\n @Output() onToggled: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n toggle() {\r\n if (!this.toggleConfig.disabled) {\r\n this.toggleConfig.checked = !this.toggleConfig.checked;\r\n this.onToggled.emit(this.toggleConfig.checked);\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: boolean): void {\r\n this.toggleConfig.checked = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.toggleConfig.disabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"cats-toggle-button\">\r\n <label class=\"cats-switch\">\r\n <input \r\n type=\"checkbox\" \r\n class=\"cats-toggle-input\"\r\n [checked]=\"toggleConfig.checked\" \r\n [disabled]=\"toggleConfig.disabled\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"cats-slider round\"></span>\r\n </label>\r\n</div>\r\n","import { Component,EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { CheckBoxConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-checkbox-button',\r\n imports: [],\r\n templateUrl: './checkbox-button.component.html',\r\n styleUrl: './checkbox-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxButtonComponent\r\n implements ControlValueAccessor, OnChanges\r\n{\r\n @Input() checkBoxConfig!: CheckBoxConfig;\r\n @Output() onCheckBoxSelection = new EventEmitter<any>();\r\n @Input() optionList: any[] = [];\r\n @Input() selectedOptions: any[] = [];\r\n\r\n private onChange: (value: any[]) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n get idField(): string {\r\n return this.checkBoxConfig?.idField || 'id';\r\n }\r\n\r\n get textField(): string {\r\n return this.checkBoxConfig?.textField || 'name';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedOptions'] && this.selectedOptions?.length) {\r\n this.applySelectedOptions();\r\n }\r\n }\r\n\r\n /**\r\n * @description normalizeSelectedValue the value according t\r\n * @param item\r\n * @returns\r\n */\r\n normalizeSelectedValue(item: any): string {\r\n if (item == null) return '';\r\n\r\n if (typeof item === 'string') return item; // case 1: string of id or name\r\n if (item.id) return item.id; // case 2: object with id\r\n if (item.name) return item.name; // case 3: object with name\r\n\r\n return ''; // fallback\r\n }\r\n\r\n /**\r\n * @description Method is to Apply selectedOptions on input change\r\n * @author Shiva Kant\r\n */\r\n private applySelectedOptions() {\r\n const normalized = this.selectedOptions.map((s: any) =>\r\n this.normalizeSelectedValue(s)\r\n );\r\n this.optionList = this.optionList.map((task) => {\r\n const taskId = task.id;\r\n const taskName = task.name;\r\n\r\n const isParentSelected =\r\n normalized.includes(taskId) || normalized.includes(taskName);\r\n\r\n const updatedSubtasks = (task.subtasks ?? []).map((sub: any) => {\r\n const subId = sub.id;\r\n const subName = sub.name;\r\n\r\n return {\r\n ...sub,\r\n checked: normalized.includes(subId) || normalized.includes(subName),\r\n };\r\n });\r\n\r\n return {\r\n ...task,\r\n checked:\r\n isParentSelected || updatedSubtasks.every((s: any) => s.checked),\r\n subtasks: updatedSubtasks,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method is to Checkbox change handler\r\n * @author Shiva Kant\r\n * @param event\r\n * @param parentIndex\r\n * @param subIndex\r\n */\r\n onCheckboxChange(event: Event, parentIndex: number, subIndex?: number) {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n\r\n this.optionList = this.optionList.map((task, i) => {\r\n const safeTask = {\r\n ...task,\r\n checked: task.checked ?? false,\r\n subtasks: task.subtasks ?? [],\r\n };\r\n\r\n if (i === parentIndex) {\r\n if (subIndex === undefined) {\r\n // Parent checkbox toggled\r\n safeTask.checked = checked;\r\n safeTask.subtasks = safeTask.subtasks.map((sub: any) => ({\r\n ...sub,\r\n checked,\r\n }));\r\n } else if (safeTask.subtasks[subIndex]) {\r\n // Subtask toggled\r\n safeTask.subtasks[subIndex].checked = checked;\r\n // Parent checked only if all subtasks are checked\r\n safeTask.checked = safeTask.subtasks.every((sub: any) => sub.checked);\r\n }\r\n }\r\n\r\n return safeTask;\r\n });\r\n\r\n const checkedTasks = this.optionList\r\n .filter(\r\n (task) =>\r\n (task.checked ?? false) ||\r\n task.subtasks?.some((s: any) => s.checked ?? false)\r\n )\r\n .map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks?.filter((s: any) => s.checked ?? false) || [],\r\n }));\r\n\r\n const selectedObjects = checkedTasks.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks.filter((s: any) => s.checked),\r\n }));\r\n\r\n this.onCheckBoxSelection.emit(selectedObjects);\r\n this.onChange(this.optionList);\r\n this.onTouched();\r\n }\r\n /**\r\n * @description Indeterminate state for parent on option checked\r\n * @param task\r\n * @returns\r\n */\r\n partiallyComplete(task: any): boolean {\r\n if (!task?.subtasks?.length) return false;\r\n const done = task.subtasks.filter((t: any) => t.checked).length;\r\n return done > 0 && done < task.subtasks.length;\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.optionList = value.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks ? [...task.subtasks] : [],\r\n }));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.optionList.forEach((task) => {\r\n task.checked = false;\r\n task.subtasks?.forEach((sub: any) => (sub.checked = false));\r\n });\r\n }\r\n }\r\n}\r\n","<div class=\"cats-parent-container\">\r\n @for (task of optionList; let parentIndex = $index; track $index) {\r\n <!-- Parent Checkbox -->\r\n <label class=\"cats-checkbox-container\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-checkbox-input\"\r\n [name]=\"checkBoxConfig.name\"\r\n [checked]=\"task.checked\"\r\n [disabled]=\"\r\n checkBoxConfig.disabledField\r\n ? task[checkBoxConfig.disabledField]\r\n : false\r\n \"\r\n [indeterminate]=\"partiallyComplete(task)\"\r\n (change)=\"onCheckboxChange($event, parentIndex)\"\r\n />\r\n <span class=\"textTruncate\">{{ task[textField] }}</span>\r\n </label>\r\n\r\n <!-- Subtasks -->\r\n @if (task.subtasks && task.subtasks.length > 0) {\r\n <ul class=\"cats-sub\">\r\n @for (sub of task.subtasks; let idx = $index; track $index) {\r\n <li>\r\n <label class=\"cats-checkbox-container\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"cats-checkbox-input\"\r\n [checked]=\"sub.checked\"\r\n (change)=\"onCheckboxChange($event, parentIndex, idx)\"\r\n />\r\n <!-- <span class=\"checkmark\"></span> -->\r\n <span class=\"cats-label-text\">{{ sub[textField] }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { RadioButtonConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-radio-button',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './radio-button.component.html',\r\n styleUrl: './radio-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadioButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RadioButtonComponent implements ControlValueAccessor {\r\n @Input() config!: RadioButtonConfig;\r\n @Input() optionList: any[] = [];\r\n @Output() selectionChange = new EventEmitter<any>();\r\n // selectedRadio pass id in number or name in string or full object\r\n @Input() selectedRadio: any;\r\n\r\n value: any = null;\r\n isDisabled = false;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedRadio'] && this.optionList?.length) {\r\n if (!this.selectedRadio) return;\r\n\r\n const selected = this.selectedRadio;\r\n\r\n const match = this.optionList.find((opt) => {\r\n const optValue = this.extractValue(opt);\r\n const optLabel = this.extractLabel(opt);\r\n\r\n if (typeof selected === 'string' || typeof selected === 'number') {\r\n // Match primitive against value or label\r\n return selected === optValue || selected === optLabel;\r\n } else if (typeof selected === 'object') {\r\n // Match object against option's value or label\r\n const selValue = this.extractValue(selected);\r\n const selLabel = this.extractLabel(selected);\r\n return selValue === optValue || selLabel === optLabel;\r\n }\r\n return false;\r\n });\r\n\r\n if (match) {\r\n this.value = this.extractValue(match);\r\n this.onChange(this.value);\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n /**\r\n * @description method to handle change of toggle button\r\n * @author Shiva Kant\r\n * @param option\r\n */\r\n handleChange(option: any) {\r\n this.value = this.extractValue(option);\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.selectionChange.emit(option);\r\n }\r\n /**\r\n * @description method to extractValue\r\n * @author Shiva Kant\r\n * @param option\r\n * @returns\r\n */\r\n extractValue(option: any): any {\r\n if (typeof option === 'string' || typeof option === 'number') {\r\n return option;\r\n }\r\n\r\n const key = this.config.valueField ?? 'id'; // ALWAYS a string\r\n return option[key];\r\n }\r\n\r\n extractLabel(option: any): string {\r\n if (typeof option === 'string') return option;\r\n\r\n const key = this.config.textField ?? 'label';\r\n return option[key];\r\n }\r\n\r\n /**\r\n * * @description method to normalizeValue\r\n * @author Shiva Kant\r\n * @param value\r\n * @returns\r\n */\r\n normalizeValue(value: any): any {\r\n if (value == null) return null;\r\n\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n // object case → return id or valueField\r\n const key = this.config.valueField ?? 'id';\r\n return value[key];\r\n }\r\n}\r\n","<div class=\"cats-radio-group\" [ngClass]=\"config.layout\">\r\n @if (config.label) {\r\n <div class=\"cats-group-label\">{{ config.label }}</div>\r\n }\r\n\r\n <div class=\"cats-radio-option-container\">\r\n @for (option of optionList; track $index) {\r\n <div class=\"cats-radio-option\">\r\n <input\r\n type=\"radio\"\r\n class=\"cats-radio-input\"\r\n [name]=\"config.name\"\r\n [id]=\"extractValue(option)\"\r\n [disabled]=\"config.disabled ? option[config.disabled] : false\"\r\n [value]=\"extractValue(option)\"\r\n [(ngModel)]=\"value\"\r\n (change)=\"handleChange(option)\"\r\n />\r\n <label class=\"cats-label\" [for]=\"extractValue(option)\">{{ extractLabel(option) }}</label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'custom-calendar-grid',\r\n templateUrl: './calendar-grid.component.html',\r\n styleUrls: ['./calendar-grid.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\nexport class CalendarGridComponent {\r\n @Input() month!: number;\r\n @Input() year!: number;\r\n @Input() calendarDays!: (number | null)[];\r\n @Input() weekDays!: string[];\r\n @Input() parent!: any;\r\n\r\n @Output() daySelected = new EventEmitter<number | null>();\r\n\r\n selectDay(day: number | null) {\r\n this.daySelected.emit(day);\r\n }\r\n\r\n isSelected(day: number | null): boolean {\r\n return this.parent.isSelected(day, this.month, this.year);\r\n }\r\n\r\n isInRange(day: number | null): boolean {\r\n return this.parent.isInRange(day, this.month, this.year);\r\n }\r\n\r\n isRangeStart(day: number | null): boolean {\r\n return this.parent.isRangeStart(day, this.month, this.year);\r\n }\r\n\r\n isRangeEnd(day: number | null): boolean {\r\n return this.parent.isRangeEnd(day, this.month, this.year);\r\n }\r\n\r\n isToday(day: number | null): boolean {\r\n return this.parent.isToday(day, this.month, this.year);\r\n }\r\n\r\n isDayDisabled(day: number | null): boolean {\r\n return this.parent.isDayDisabled(day, this.month, this.year);\r\n }\r\n\r\n isOtherMonth(day: number | null): boolean {\r\n return this.parent.isOtherMonth(day);\r\n }\r\n\r\n getDayDisplay(day: number | null): string {\r\n return this.parent.getDayDisplay(day);\r\n }\r\n}","<div class=\"calendar-grid sp-t-12 sm-b-8\">\r\n @for (d of weekDays; track $index) {\r\n <div class=\"weekday-header meta-regular-emphasized\">{{ d }}</div>\r\n }\r\n\r\n <!-- Days -->\r\n @for (day of calendarDays; track $index) {\r\n <div class=\"calendar-day body-medium\" [class.other-month]=\"isOtherMonth(day)\" [class.selected]=\"isSelected(day)\"\r\n [class.in-range]=\"isInRange(day)\" [class.range-start]=\"isRangeStart(day)\" [class.range-end]=\"isRangeEnd(day)\"\r\n [class.today]=\"isToday(day)\" [class.disabled]=\"isDayDisabled(day)\" (click)=\"selectDay(day)\">\r\n <span>{{ getDayDisplay(day) }}</span>\r\n </div>\r\n }\r\n</div>","import { Component, EventEmitter, forwardRef, Output } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n FormControl,\r\n Validator,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-time-input',\r\n templateUrl: './time-input.component.html',\r\n styleUrls: ['./time-input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TimeInputComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TimeInputComponent implements ControlValueAccessor, Validator {\r\n timeValue = '';\r\n timeMeridiem: 'AM' | 'PM' = 'AM';\r\n control!: FormControl;\r\n\r\n @Output() timeChange = new EventEmitter<{\r\n time: string;\r\n meridiem: 'AM' | 'PM';\r\n }>();\r\n\r\n private onChangeCallback: (_: any) => void = () => {};\r\n private onTouchedCallback: () => void = () => {};\r\n\r\n // ------------------ Input Handling ------------------\r\n handleTimeInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n // Allow only digits + colon\r\n value = value.replace(/[^0-9:]/g, '');\r\n\r\n // CASE: user typed \"1:\" shorthand → treat leading digit as \"0X\"\r\n if (/^\\d:$/.test(value)) {\r\n this.timeValue = `0${value[0]}:`;\r\n input.value = this.timeValue;\r\n this.updateControlValue();\r\n this.emitTime();\r\n return;\r\n }\r\n\r\n // Strip all colons → work purely with raw digits\r\n let raw = value.replace(/:/g, '');\r\n\r\n // Limit to 4 digits max\r\n raw = raw.slice(0, 4);\r\n\r\n // Only auto-insert colon once we have exactly 4 digits\r\n // This prevents colon from disrupting cursor position mid-typing\r\n if (raw.length === 4) {\r\n this.timeValue = raw.slice(0, 2) + ':' + raw.slice(2, 4);\r\n } else {\r\n this.timeValue = raw;\r\n }\r\n\r\n // Sync the actual input element value to prevent browser\r\n // from showing stale/mis-formatted text\r\n input.value = this.timeValue;\r\n\r\n this.updateControlValue();\r\n this.emitTime();\r\n }\r\n\r\n setPeriod(period: 'AM' | 'PM') {\r\n this.timeMeridiem = period;\r\n this.updateControlValue();\r\n this.emitTime();\r\n }\r\n\r\n private emitTime() {\r\n this.timeChange.emit({ time: this.timeValue, meridiem: this.timeMeridiem });\r\n }\r\n\r\n private updateControlValue() {\r\n if (!this.isValidTime(this.timeValue)) {\r\n this.onChangeCallback(null);\r\n return;\r\n }\r\n\r\n let [hours, minutes] = this.timeValue.split(':').map(Number);\r\n\r\n // Convert to 24h\r\n if (this.timeMeridiem === 'PM' && hours < 12) hours += 12;\r\n if (this.timeMeridiem === 'AM' && hours === 12) hours = 0;\r\n\r\n this.onChangeCallback(hours * 3600 + minutes * 60);\r\n }\r\n\r\n // ------------------ Validation ------------------\r\n private isValidTime(value: string): boolean {\r\n // Must be fully formatted HH:MM to be valid\r\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\r\n\r\n const [hStr, mStr] = value.split(':');\r\n const hours = Number(hStr);\r\n const minutes = Number(mStr);\r\n\r\n return (\r\n !isNaN(hours) &&\r\n !isNaN(minutes) &&\r\n hours >= 1 &&\r\n hours <= 12 &&\r\n minutes >= 0 &&\r\n minutes <= 59\r\n );\r\n }\r\n\r\n validate(control: FormControl) {\r\n this.control = control;\r\n return this.isValidTime(this.timeValue) ? null : { timePattern: true };\r\n }\r\n\r\n // ------------------ ControlValueAccessor ------------------\r\n writeValue(obj: any): void {\r\n if (typeof obj === 'number') {\r\n let hours = Math.floor(obj / 3600);\r\n const minutes = Math.floor((obj % 3600) / 60);\r\n\r\n this.timeMeridiem = hours >= 12 ? 'PM' : 'AM';\r\n if (hours > 12) hours -= 12;\r\n if (hours === 0) hours = 12;\r\n\r\n this.timeValue = `${hours.toString().padStart(2, '0')}:${minutes\r\n .toString()\r\n .padStart(2, '0')}`;\r\n } else {\r\n this.timeValue = '';\r\n this.timeMeridiem = 'AM';\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n setDisabledState?(_isDisabled: boolean): void {}\r\n\r\n onFocusOut() {\r\n this.formatTimeOnBlur();\r\n this.onTouchedCallback();\r\n }\r\n\r\n private formatTimeOnBlur() {\r\n if (!this.timeValue) return;\r\n\r\n // Strip colon and parse raw digits (handles both \"115\" and \"11:5\")\r\n const raw = this.timeValue.replace(/:/g, '');\r\n\r\n if (raw.length < 1) {\r\n this.clearValue();\r\n return;\r\n }\r\n\r\n const hours = Number(raw.slice(0, 2));\r\n // If only 1–2 digits typed (e.g. \"11\"), default minutes to 0\r\n const minutes = raw.length >= 3 ? Number(raw.slice(2, 4)) : 0;\r\n\r\n // Validate hour\r\n if (isNaN(hours) || hours < 1 || hours > 12) {\r\n this.clearValue();\r\n return;\r\n }\r\n\r\n // Validate minutes\r\n if (isNaN(minutes) || minutes < 0 || minutes > 59) {\r\n this.clearValue();\r\n return;\r\n }\r\n\r\n // Format properly\r\n this.timeValue =\r\n `${hours.toString().padStart(2, '0')}:` +\r\n `${minutes.toString().padStart(2, '0')}`;\r\n\r\n this.updateControlValue();\r\n this.emitTime();\r\n }\r\n\r\n private clearValue() {\r\n this.timeValue = '';\r\n this.onChangeCallback(null);\r\n this.emitTime();\r\n }\r\n\r\n clear() {\r\n this.writeValue(null);\r\n this.onChangeCallback(null);\r\n this.emitTime();\r\n }\r\n}\r\n","<div class=\"footer-row time-row\">\r\n <span class=\"footer-label body-large sp-x-12\">Time</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <div class=\"time-input-wrapper\">\r\n <input\r\n class=\"time-input body-large\"\r\n type=\"text\"\r\n [value]=\"timeValue\"\r\n placeholder=\"HH:MM\"\r\n (input)=\"handleTimeInput($event)\"\r\n (blur)=\"onFocusOut()\"\r\n maxlength=\"5\"\r\n autocomplete=\"off\"\r\n />\r\n <div class=\"period-toggle\">\r\n <button\r\n type=\"button\"\r\n class=\"period-btn body-medium\"\r\n [class.active]=\"timeMeridiem === 'AM'\"\r\n (click)=\"setPeriod('AM')\"\r\n >\r\n AM\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"period-btn body-medium\"\r\n [class.active]=\"timeMeridiem === 'PM'\"\r\n (click)=\"setPeriod('PM')\"\r\n >\r\n PM\r\n </button>\r\n </div>\r\n </div>\r\n <img\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"Clear\"\r\n class=\"cancel-btn\"\r\n (click)=\"clear();\"\r\n />\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n HostListener,\r\n ElementRef,\r\n forwardRef,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\n\r\nexport type DatePickerMode = 'single' | 'range' | 'dual';\r\n\r\nexport interface DatePickerConfig {\r\n mode?: DatePickerMode; // 'single' | 'range' | 'dual'\r\n time?: boolean;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n placeholder?: string;\r\n fromPlaceholder?: string;\r\n toPlaceholder?: string;\r\n dateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\r\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\r\n disabledDates?: Date[];\r\n disablePastDays?: number;\r\n showDateLabel?: boolean;\r\n showTimeLabel?: boolean;\r\n}\r\n\r\nexport interface DateRange {\r\n from: string | null;\r\n fromTime: string;\r\n to: string | null;\r\n toTime: string;\r\n}\r\n\r\nexport interface DateTimeResult {\r\n date: string | null;\r\n time: string; // \"HH:mm\"\r\n meridiem: 'AM' | 'PM';\r\n}\r\n\r\nexport type CalenderView = 'day' | 'year' | 'month';\r\n\r\nimport { CalendarGridComponent } from './calendar-grid.component';\r\nimport { TimeInputComponent } from './time-input.component';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\n\r\n@Component({\r\n selector: 'cats-ui-custom-date-picker',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CustomDatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n templateUrl: './custom-date-picker.component.html',\r\n styleUrls: ['./custom-date-picker.component.scss'],\r\n imports: [\r\n CommonModule,\r\n CalendarGridComponent,\r\n TimeInputComponent,\r\n FormsModule,\r\n OutsideClickDirective,\r\n ],\r\n})\r\nexport class CustomDatePickerComponent\r\n implements OnInit, ControlValueAccessor, OnChanges\r\n{\r\n @Input() config: DatePickerConfig = {};\r\n @Input() label: string = '';\r\n @Input() showHeader: boolean = true;\r\n @Input() showTrigger: boolean = true;\r\n @Input() parentNativeElement: any;\r\n // Single / datetime\r\n\r\n @Output() applied = new EventEmitter<\r\n Date | DateRange | DateTimeResult | string\r\n >();\r\n @Output() cancelled = new EventEmitter<void>();\r\n\r\n // Range\r\n @Output() rangeSelected = new EventEmitter<DateRange>();\r\n\r\n private onChange: (val: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n // ─── State ────────────────────────────────────────────────────────────────\r\n isOpen = false;\r\n\r\n // Single / DateTime\r\n selectedDate: Date | null = null;\r\n tempDate: Date | null = null;\r\n\r\n // Range\r\n rangeFrom: Date | null = null;\r\n rangeTo: Date | null = null;\r\n tempFrom: Date | null = null;\r\n tempTo: Date | null = null;\r\n\r\n // DateTime\r\n timeValue = '';\r\n timeMeridiem: 'AM' | 'PM' = 'AM';\r\n fromTimeValue = '';\r\n fromTimeMeridiem: 'AM' | 'PM' = 'AM';\r\n toTimeValue = '';\r\n toTimeMeridiem: 'AM' | 'PM' = 'AM';\r\n\r\n // Calendar\r\n currentMonth: number = new Date().getMonth();\r\n currentYear: number = new Date().getFullYear();\r\n weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\n calendarDays: (number | null)[] = [];\r\n\r\n // Dual mode (two calendars)\r\n currentMonth2: number = new Date().getMonth();\r\n currentYear2: number = new Date().getFullYear();\r\n calendarDays2: (number | null)[] = [];\r\n\r\n yearRange: number[] = [];\r\n calenderView: CalenderView = 'day';\r\n activeCalendar: 'primary' | 'secondary' = 'primary';\r\n\r\n monthNames = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n ];\r\n\r\n constructor(private elRef: ElementRef) {}\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config']?.currentValue) {\r\n if (!this.showTrigger) {\r\n this.toggleCalendar();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.generateYearRange();\r\n if (!this.showTrigger) {\r\n this.toggleCalendar();\r\n }\r\n }\r\n\r\n // ─── Getters ──────────────────────────────────────────────────────────────\r\n\r\n get mode(): DatePickerMode {\r\n return this.config.mode || 'single';\r\n }\r\n\r\n get showDateLabel(): boolean {\r\n return this.config.showDateLabel !== false;\r\n }\r\n\r\n get time(): boolean {\r\n return this.config.time ?? false;\r\n }\r\n\r\n get currentMonthYear(): string {\r\n return `${this.monthNames[this.currentMonth]} ${this.currentYear}`;\r\n }\r\n\r\n get currentMonthName() {\r\n return this.monthNames[this.currentMonth];\r\n }\r\n\r\n get activeMonthName(): string {\r\n return this.activeCalendar === 'secondary'\r\n ? this.monthNames[this.currentMonth2]\r\n : this.monthNames[this.currentMonth];\r\n }\r\n\r\n get activeYearValue(): number {\r\n return this.activeCalendar === 'secondary'\r\n ? this.currentYear2\r\n : this.currentYear;\r\n }\r\n\r\n get displayValue(): string {\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (this.rangeFrom && this.rangeTo) {\r\n return `${this.formatDate(this.rangeFrom)} – ${this.formatDate(this.rangeTo)}`;\r\n }\r\n if (this.rangeFrom) return this.formatDate(this.rangeFrom);\r\n return '';\r\n }\r\n return this.selectedDate ? this.formatDate(this.selectedDate) : '';\r\n }\r\n\r\n get tempDisplayValue(): string {\r\n if (!this.tempDate) return this.config.placeholder || 'Select date';\r\n return this.formatDate(this.tempDate);\r\n }\r\n\r\n get tempFromDisplay(): string {\r\n if (!this.tempFrom) return this.config.fromPlaceholder || 'Select date';\r\n return this.formatDate(this.tempFrom);\r\n }\r\n\r\n get tempToDisplay(): string {\r\n if (!this.tempTo) return this.config.toPlaceholder || 'Select date';\r\n return this.formatDate(this.tempTo);\r\n }\r\n\r\n // ─── ControlValueAccessor ─────────────────────────────────────────────────\r\n\r\n // writeValue(val: any): void {\r\n // if (!val) {\r\n // this.selectedDate = null;\r\n // this.tempDate = null;\r\n\r\n // this.rangeFrom = null;\r\n // this.rangeTo = null;\r\n // this.tempFrom = null;\r\n // this.tempTo = null;\r\n\r\n // this.timeValue = '';\r\n // this.timeMeridiem = 'AM';\r\n\r\n // this.fromTimeValue = '';\r\n // this.fromTimeMeridiem = 'AM';\r\n\r\n // this.toTimeValue = '';\r\n // this.toTimeMeridiem = 'AM';\r\n // }\r\n // if (this.mode === 'range' || this.mode === 'dual') {\r\n // const from = val.from ? new Date(val.from) : null;\r\n // const to = val.to ? new Date(val.to) : null;\r\n\r\n // this.rangeFrom = from;\r\n // this.rangeTo = to;\r\n // this.tempFrom = from;\r\n // this.tempTo = to;\r\n\r\n // if (this.time) {\r\n // if (val.fromTime) {\r\n // const [time, meridiem] = val.fromTime.split(' ');\r\n // this.fromTimeValue = time;\r\n // this.fromTimeMeridiem = meridiem || 'AM';\r\n // }\r\n\r\n // if (val.toTime) {\r\n // const [time, meridiem] = val.toTime.split(' ');\r\n // this.toTimeValue = time;\r\n // this.toTimeMeridiem = meridiem || 'AM';\r\n // }\r\n // }\r\n // }\r\n // // Single mode with time\r\n // else if (this.time && val?.date) {\r\n // this.selectedDate = new Date(val.date);\r\n // this.tempDate = new Date(val.date);\r\n // if (val.time) {\r\n // const [time, meridiem] = val.time.split(' ');\r\n // this.timeValue = time;\r\n // this.timeMeridiem = meridiem || 'AM';\r\n // }\r\n // }\r\n // // Single mode without time\r\n // else {\r\n // this.selectedDate = new Date(val);\r\n // this.tempDate = new Date(val);\r\n // }\r\n // // this.initializeCurrentMonthYear()\r\n // }\r\n writeValue(val: any): void {\r\n // Guard: reset and exit early if no value\r\n if (!val) {\r\n this.selectedDate = null;\r\n this.tempDate = null;\r\n this.rangeFrom = null;\r\n this.rangeTo = null;\r\n this.tempFrom = null;\r\n this.tempTo = null;\r\n this.timeValue = '';\r\n this.timeMeridiem = 'AM';\r\n this.fromTimeValue = '';\r\n this.fromTimeMeridiem = 'AM';\r\n this.toTimeValue = '';\r\n this.toTimeMeridiem = 'AM';\r\n return;\r\n }\r\n\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n const from = val.from ? new Date(val.from) : null;\r\n const to = val.to ? new Date(val.to) : null;\r\n\r\n this.rangeFrom = from;\r\n this.rangeTo = to;\r\n this.tempFrom = from;\r\n this.tempTo = to;\r\n\r\n // Remove \"if (this.time)\" — check val directly instead\r\n if (val.fromTime) {\r\n const [time, meridiem] = val.fromTime.split(' ');\r\n this.fromTimeValue = time;\r\n this.fromTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\r\n // Also convert to seconds so ngModel patches the child correctly\r\n this.fromTimeInSeconds = this.convertToSeconds(\r\n time,\r\n meridiem as 'AM' | 'PM',\r\n );\r\n }\r\n\r\n if (val.toTime) {\r\n const [time, meridiem] = val.toTime.split(' ');\r\n this.toTimeValue = time;\r\n this.toTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\r\n // Also convert to seconds so ngModel patches the child correctly\r\n this.toTimeInSeconds = this.convertToSeconds(\r\n time,\r\n meridiem as 'AM' | 'PM',\r\n );\r\n }\r\n }\r\n // Single with time\r\n else if (this.time && val?.date) {\r\n this.selectedDate = new Date(val.date);\r\n this.tempDate = new Date(val.date);\r\n if (val.time) {\r\n const [time, meridiem] = val.time.split(' ');\r\n this.timeValue = time;\r\n this.timeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\r\n this.singleTimeInSeconds = this.convertToSeconds(\r\n time,\r\n meridiem as 'AM' | 'PM',\r\n );\r\n }\r\n }\r\n // Single without time\r\n else if (val) {\r\n this.selectedDate = new Date(val);\r\n this.tempDate = new Date(val);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // ─── Toggle ───────────────────────────────────────────────────────────────\r\n\r\n toggleCalendar(): void {\r\n this.isOpen = !this.isOpen;\r\n this.initializeCurrentMonthYear();\r\n\r\n if (this.parentNativeElement) {\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('date-input-container');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 0);\r\n }\r\n\r\n // this.onTouched();\r\n }\r\n initializeCurrentMonthYear(): void {\r\n const refDate =\r\n (this.mode === 'range' || this.mode === 'dual') && this.rangeFrom\r\n ? this.rangeFrom\r\n : this.selectedDate || new Date();\r\n\r\n this.currentMonth = refDate.getMonth();\r\n this.currentYear = refDate.getFullYear();\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n if (this.mode === 'dual' && this.rangeFrom && this.rangeTo) {\r\n const sameMonth = this.rangeFrom.getMonth() === this.rangeTo.getMonth();\r\n\r\n if (sameMonth) {\r\n const { month, year } = this.getNextMonthYear(\r\n this.currentMonth,\r\n this.currentYear,\r\n );\r\n this.currentMonth2 = month;\r\n this.currentYear2 = year;\r\n } else {\r\n this.currentMonth2 = this.rangeTo.getMonth();\r\n this.currentYear2 = this.rangeTo.getFullYear();\r\n }\r\n }\r\n\r\n this.buildCalendar();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.elRef.nativeElement.contains(event.target)) {\r\n // this.onCancel();\r\n }\r\n }\r\n\r\n // ─── Calendar Build ───────────────────────────────────────────────────────\r\n\r\n buildCalendar(): void {\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n\r\n this.calendarDays = this.buildCalendarDays(\r\n this.currentMonth,\r\n this.currentYear,\r\n );\r\n\r\n this.calendarDays2 = this.buildCalendarDays(\r\n this.currentMonth2,\r\n this.currentYear2,\r\n );\r\n } else {\r\n this.calendarDays = this.buildCalendarDays(\r\n this.currentMonth,\r\n this.currentYear,\r\n );\r\n }\r\n }\r\n\r\n private buildCalendarDays(month: number, year: number): (number | null)[] {\r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n\r\n const days: (number | null)[] = [];\r\n\r\n // Leading days from prev month (greyed out)\r\n for (let i = firstDay - 1; i >= 0; i--) {\r\n days.push(-(prevMonthDays - i)); // negative = prev month\r\n }\r\n\r\n // Current month days\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n days.push(d);\r\n }\r\n\r\n // Trailing days from next month\r\n let trailing = 1;\r\n while (days.length % 7 !== 0) {\r\n days.push(1000 + trailing++); // 1000+ = next month\r\n }\r\n\r\n return days;\r\n }\r\n\r\n private getNextMonthYear(\r\n month: number,\r\n year: number,\r\n ): { month: number; year: number } {\r\n if (month === 11) {\r\n return { month: 0, year: year + 1 };\r\n }\r\n return { month: month + 1, year };\r\n }\r\n\r\n private getPrevMonthYear(\r\n month: number,\r\n year: number,\r\n ): { month: number; year: number } {\r\n if (month === 0) {\r\n return { month: 11, year: year - 1 };\r\n }\r\n return { month: month - 1, year };\r\n }\r\n\r\n generateYearRange(year: number = this.currentYear): void {\r\n const startYear = year - (year % 20);\r\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\r\n }\r\n\r\n openView(calendar: 'primary' | 'secondary', view: CalenderView): void {\r\n this.activeCalendar = calendar;\r\n this.calenderView = view;\r\n if (view === 'year') {\r\n this.generateYearRange(\r\n calendar === 'secondary' ? this.currentYear2 : this.currentYear,\r\n );\r\n }\r\n }\r\n\r\n getDayDisplay(day: number | null): string {\r\n if (day === null) return '';\r\n if (day < 0) return String(Math.abs(day));\r\n if (day > 999) return String(day - 1000);\r\n return String(day);\r\n }\r\n\r\n isOtherMonth(day: number | null): boolean {\r\n if (day === null) return false;\r\n return day < 0 || day > 999;\r\n }\r\n\r\n getActualDay(day: number | null): number | null {\r\n if (day === null) return null;\r\n if (day < 0 || day > 999) return null; // other month — not selectable\r\n return day;\r\n }\r\n\r\n // ─── Navigation ───────────────────────────────────────────────────────────\r\n\r\n // Fix — secondary is always exactly 1 month ahead of primary\r\n prevMonth(): void {\r\n const prev = this.getPrevMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth = prev.month;\r\n this.currentYear = prev.year;\r\n\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n this.buildCalendar();\r\n }\r\n\r\n nextMonth(): void {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth = next.month;\r\n this.currentYear = next.year;\r\n\r\n if (this.mode === 'dual') {\r\n const next2 = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next2.month;\r\n this.currentYear2 = next2.year;\r\n }\r\n this.buildCalendar();\r\n }\r\n\r\n selectMonth(month: string) {\r\n const index = this.monthNames.indexOf(month);\r\n if (this.activeCalendar === 'primary') {\r\n this.currentMonth = index;\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n } else {\r\n this.currentMonth2 = index;\r\n if (this.mode === 'dual') {\r\n const prev = this.getPrevMonthYear(\r\n this.currentMonth2,\r\n this.currentYear2,\r\n );\r\n this.currentMonth = prev.month;\r\n this.currentYear = prev.year;\r\n }\r\n }\r\n this.buildCalendar();\r\n this.calenderView = 'day';\r\n }\r\n\r\n previousYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year - 18);\r\n }\r\n\r\n nextYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year + 18);\r\n }\r\n\r\n selectYear(year: number) {\r\n if (this.activeCalendar === 'primary') {\r\n this.currentYear = year;\r\n if (this.mode === 'dual') {\r\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\r\n this.currentMonth2 = next.month;\r\n this.currentYear2 = next.year;\r\n }\r\n } else {\r\n this.currentYear2 = year;\r\n if (this.mode === 'dual') {\r\n const prev = this.getPrevMonthYear(\r\n this.currentMonth2,\r\n this.currentYear2,\r\n );\r\n this.currentMonth = prev.month;\r\n this.currentYear = prev.year;\r\n }\r\n }\r\n this.generateYearRange(\r\n this.activeCalendar === 'secondary'\r\n ? this.currentYear2\r\n : this.currentYear,\r\n );\r\n this.buildCalendar();\r\n this.calenderView = 'day';\r\n }\r\n\r\n // ─── Day Selection ────────────────────────────────────────────────────────\r\n\r\n selectDay(\r\n day: number | null,\r\n calendar: 'primary' | 'secondary' = 'primary',\r\n ): void {\r\n const month =\r\n calendar === 'secondary' ? this.currentMonth2 : this.currentMonth;\r\n const year =\r\n calendar === 'secondary' ? this.currentYear2 : this.currentYear;\r\n\r\n const actual = this.getActualDay(day);\r\n if (!actual || this.isDayDisabled(actual, month, year)) return;\r\n\r\n const date = new Date(year, month, actual);\r\n\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (!this.tempFrom && !this.tempTo) {\r\n this.tempFrom = date;\r\n } else if (this.tempFrom && !this.tempTo) {\r\n if (date < this.tempFrom) {\r\n this.tempTo = this.tempFrom;\r\n this.tempFrom = date;\r\n } else {\r\n this.tempTo = date;\r\n }\r\n } else {\r\n this.tempFrom = date;\r\n this.tempTo = null;\r\n }\r\n } else {\r\n this.tempDate = date;\r\n }\r\n }\r\n\r\n // ─── Day State Checks ─────────────────────────────────────────────────────\r\n\r\n isSelected(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n const date = new Date(year, month, actual);\r\n return (\r\n this.isSameDay(date, this.tempFrom) || this.isSameDay(date, this.tempTo)\r\n );\r\n }\r\n\r\n if (!this.tempDate) return false;\r\n return (\r\n this.tempDate.getDate() === actual &&\r\n this.tempDate.getMonth() === month &&\r\n this.tempDate.getFullYear() === year\r\n );\r\n }\r\n\r\n isInRange(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\r\n const actual = this.getActualDay(day);\r\n if (!actual || !this.tempFrom || !this.tempTo) return false;\r\n const date = new Date(year, month, actual);\r\n return date > this.tempFrom && date < this.tempTo;\r\n }\r\n\r\n isRangeStart(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n return this.isSameDay(new Date(year, month, actual), this.tempFrom);\r\n }\r\n\r\n isRangeEnd(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n return this.isSameDay(new Date(year, month, actual), this.tempTo);\r\n }\r\n\r\n isToday(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n const actual = this.getActualDay(day);\r\n if (!actual) return false;\r\n const today = new Date();\r\n return (\r\n today.getDate() === actual &&\r\n today.getMonth() === month &&\r\n today.getFullYear() === year\r\n );\r\n }\r\n\r\n isDayDisabled(\r\n day: number | null,\r\n month: number = this.currentMonth,\r\n year: number = this.currentYear,\r\n ): boolean {\r\n const actual = this.getActualDay(day);\r\n if (!actual) return true;\r\n const date = new Date(year, month, actual);\r\n\r\n // disablePastDays: disable last N days from today\r\n if (this.config.disablePastDays) {\r\n const cutoff = new Date();\r\n cutoff.setDate(cutoff.getDate() - this.config.disablePastDays);\r\n cutoff.setHours(0, 0, 0, 0);\r\n if (date < cutoff) return true;\r\n }\r\n\r\n if (this.config.minDate) {\r\n const min = new Date(this.config.minDate);\r\n min.setHours(0, 0, 0, 0);\r\n if (date < min) return true;\r\n }\r\n\r\n if (this.config.maxDate) {\r\n const max = new Date(this.config.maxDate);\r\n max.setHours(23, 59, 59, 999);\r\n if (date > max) return true;\r\n }\r\n\r\n if (this.config.disabledDates?.length) {\r\n return this.config.disabledDates.some((d) => this.isSameDay(d, date));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // ─── Time (datetime mode) ─────────────────────────────────────────────────\r\n\r\n // handleTimeInput(event: Event, field: 'timeValue' | 'fromTimeValue' | 'toTimeValue') {\r\n // const input = event.target as HTMLInputElement;\r\n // let value = input.value.replace(/[^0-9]/g, '');\r\n\r\n // if (value.length > 2) {\r\n // value = value.slice(0, 2) + ':' + value.slice(2, 4);\r\n // }\r\n\r\n // this[field] = value.slice(0, 5);\r\n // }\r\n\r\n // setPeriod(value: 'AM' | 'PM', field: 'timeMeridiem' | 'fromTimeMeridiem' | 'toTimeMeridiem'): void {\r\n // this[field] = value;\r\n // }\r\n\r\n setTime(event: any) {\r\n console.log(event);\r\n }\r\n singleTimeInSeconds: number | null = null;\r\n fromTimeInSeconds: number | null = null;\r\n toTimeInSeconds: number | null = null;\r\n\r\n private convertToSeconds(time: string, meridiem: 'AM' | 'PM'): number | null {\r\n if (!time) return null;\r\n\r\n let [hours, minutes] = time.split(':').map(Number);\r\n\r\n if (isNaN(hours) || isNaN(minutes)) return null;\r\n\r\n if (meridiem === 'PM' && hours < 12) hours += 12;\r\n if (meridiem === 'AM' && hours === 12) hours = 0;\r\n\r\n return hours * 3600 + minutes * 60;\r\n }\r\n onSingleTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\r\n this.timeValue = event.time;\r\n this.timeMeridiem = event.meridiem;\r\n\r\n // store for patch\r\n this.singleTimeInSeconds = this.convertToSeconds(\r\n event.time,\r\n event.meridiem,\r\n );\r\n }\r\n\r\n onFromTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\r\n this.fromTimeValue = event.time;\r\n this.fromTimeMeridiem = event.meridiem;\r\n\r\n this.fromTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\r\n }\r\n\r\n onToTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\r\n this.toTimeValue = event.time;\r\n this.toTimeMeridiem = event.meridiem;\r\n\r\n this.toTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\r\n }\r\n // ─── Actions ──────────────────────────────────────────────────────────────\r\n onApply(): void {\r\n const parentDateFormat = this.config.parentDateFormat;\r\n\r\n // ---------------- RANGE / DUAL ----------------\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (!this.tempFrom || !this.tempTo) return;\r\n\r\n let fromTime = '';\r\n let toTime = '';\r\n\r\n if (this.time) {\r\n const normalizedFrom = this.normalizeTime(this.fromTimeValue);\r\n const normalizedTo = this.normalizeTime(this.toTimeValue);\r\n\r\n // block apply if invalid\r\n if (!normalizedFrom || !normalizedTo) return;\r\n\r\n fromTime = `${normalizedFrom} ${this.fromTimeMeridiem}`;\r\n toTime = `${normalizedTo} ${this.toTimeMeridiem}`;\r\n }\r\n\r\n this.rangeFrom = this.tempFrom;\r\n this.rangeTo = this.tempTo;\r\n\r\n const result: DateRange = {\r\n from: this.formatDate(this.rangeFrom, parentDateFormat),\r\n to: this.formatDate(this.rangeTo, parentDateFormat),\r\n fromTime,\r\n toTime,\r\n };\r\n\r\n this.onChange(result);\r\n this.applied.emit(result);\r\n }\r\n\r\n // ---------------- SINGLE ----------------\r\n else if (this.mode === 'single') {\r\n if (!this.tempDate) return;\r\n\r\n this.selectedDate = this.tempDate;\r\n const finalDate = this.formatDate(this.tempDate, parentDateFormat);\r\n\r\n if (this.time) {\r\n const normalized = this.normalizeTime(this.timeValue);\r\n\r\n // block invalid time\r\n if (!normalized) return;\r\n\r\n const result: DateTimeResult = {\r\n date: finalDate,\r\n time: `${normalized} ${this.timeMeridiem}`,\r\n meridiem: this.timeMeridiem,\r\n };\r\n\r\n this.onChange(result);\r\n this.applied.emit(result);\r\n } else {\r\n this.onChange(finalDate);\r\n this.applied.emit(finalDate);\r\n }\r\n }\r\n\r\n this.isOpen = false;\r\n }\r\n private normalizeTime(value: string): string | null {\r\n if (!value) return null;\r\n\r\n let [h, m] = value.split(':');\r\n\r\n let hours = Number(h);\r\n let minutes = Number(m ?? 0);\r\n\r\n // Invalid hour (block 00 also)\r\n if (!hours || hours < 1 || hours > 12) return null;\r\n\r\n // Invalid minutes\r\n if (minutes < 0 || minutes > 59) return null;\r\n\r\n //\r\n return `${hours.toString().padStart(2, '0')}:${minutes\r\n .toString()\r\n .padStart(2, '0')}`;\r\n }\r\n\r\n appendTimeInDate(time: string, date: Date, timeMeridiem: string) {\r\n const [hours, minutes] = time.split(':').map(Number);\r\n const dateWithTime = new Date(date);\r\n if (!isNaN(hours) && !isNaN(minutes)) {\r\n let h = hours;\r\n if (timeMeridiem === 'PM' && h < 12) h += 12;\r\n if (timeMeridiem === 'AM' && h === 12) h = 0;\r\n dateWithTime.setHours(h, minutes, 0, 0);\r\n }\r\n\r\n return dateWithTime;\r\n }\r\n\r\n onCancel(): void {\r\n //Reset values to last applied state\r\n this.tempDate = this.selectedDate ? new Date(this.selectedDate) : null;\r\n this.tempFrom = this.rangeFrom ? new Date(this.rangeFrom) : null;\r\n this.tempTo = this.rangeTo ? new Date(this.rangeTo) : null;\r\n this.calenderView = 'day';\r\n\r\n this.isOpen = false;\r\n this.cancelled.emit();\r\n }\r\n\r\n clearDate(): void {\r\n this.selectedDate = null;\r\n this.tempDate = null;\r\n this.rangeFrom = null;\r\n this.rangeTo = null;\r\n this.tempFrom = null;\r\n this.tempTo = null;\r\n this.onChange(null);\r\n // this.applied.emit(null);\r\n }\r\n cancelDate(source: string) {\r\n if (source == 'from') {\r\n this.tempFrom = null;\r\n this.rangeFrom = null;\r\n } else if (source == 'to') {\r\n this.tempTo = null;\r\n this.rangeTo = null;\r\n } else {\r\n this.tempDate = null;\r\n }\r\n }\r\n onDaySelected(day: number | null, calendar: 'primary' | 'secondary') {\r\n this.selectDay(day, calendar);\r\n }\r\n\r\n // ─── Helpers ──────────────────────────────────────────────────────────────\r\n\r\n isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return (\r\n a.getDate() === b.getDate() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getFullYear() === b.getFullYear()\r\n );\r\n }\r\n\r\n formatDate(\r\n date: Date,\r\n dateFormat: string = this.config.dateFormat ?? '',\r\n ): string {\r\n const day = date.getDate();\r\n const monthShort = this.monthNames[date.getMonth()].slice(0, 3);\r\n const year = date.getFullYear();\r\n\r\n switch (dateFormat) {\r\n case 'MM/dd/yyyy':\r\n return `${String(date.getMonth() + 1).padStart(2, '0')}/${String(day).padStart(2, '0')}/${year}`;\r\n case 'yyyy-MM-dd':\r\n return `${year}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\r\n default:\r\n return `${day} ${monthShort} ${year}`;\r\n }\r\n }\r\n\r\n get canApply(): boolean {\r\n if (this.mode === 'range' || this.mode === 'dual') {\r\n if (!this.tempFrom || !this.tempTo) return false;\r\n if (this.tempFrom > this.tempTo) return false;\r\n if (this.time) {\r\n if (!this.isValidTime(this.fromTimeValue)) return false;\r\n if (!this.isValidTime(this.toTimeValue)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (this.mode === 'single') {\r\n if (!this.tempDate) return false;\r\n let finalDate = new Date(this.tempDate);\r\n\r\n if (this.time) {\r\n if (!this.isValidTime(this.timeValue)) return false;\r\n const [hours, minutes] = this.timeValue.split(':').map(Number);\r\n let h = hours;\r\n if (this.timeMeridiem === 'PM' && h < 12) h += 12;\r\n if (this.timeMeridiem === 'AM' && h === 12) h = 0;\r\n finalDate.setHours(h, minutes, 0, 0);\r\n }\r\n\r\n if (this.config?.maxDate && finalDate > this.config.maxDate) {\r\n return false;\r\n }\r\n\r\n if (this.config?.minDate && finalDate < this.config.minDate) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n private isValidTime(value: string): boolean {\r\n const [hStr, mStr] = value.split(':');\r\n if (!hStr) return false;\r\n const hours = Number(hStr);\r\n const minutes = Number(mStr ?? '0');\r\n return !(\r\n isNaN(hours) ||\r\n isNaN(minutes) ||\r\n hours < 1 ||\r\n hours > 12 ||\r\n minutes < 0 ||\r\n minutes > 59\r\n );\r\n }\r\n}\r\n","<div class=\"date-picker-wrapper\" id=\"custom-date\">\r\n <!-- Label -->\r\n @if (label) {\r\n <label class=\"date-label\">{{ label }}</label>\r\n }\r\n\r\n <!-- Input Trigger -->\r\n @if (showTrigger) {\r\n <div\r\n class=\"date-input\"\r\n [class.is-open]=\"isOpen\"\r\n [class.has-value]=\"displayValue\"\r\n (click)=\"toggleCalendar()\"\r\n >\r\n <span class=\"date-input-text\" [class.custom-placeholder]=\"!displayValue\">\r\n {{ displayValue || config.placeholder || \"Select date\" }}\r\n </span>\r\n\r\n <svg\r\n class=\"calendar-icon\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\r\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\r\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\r\n </svg>\r\n\r\n <!-- @if (displayValue) {\r\n <span class=\"clear-btn\" (click)=\"$event.stopPropagation(); clearDate()\">\r\n <img src=\"images/x.svg\" alt=\"\" />\r\n </span>\r\n } -->\r\n </div>\r\n }\r\n\r\n <!-- Calendar Dropdown -->\r\n @if (!showTrigger || isOpen) {\r\n <div\r\n catsOutsideClick\r\n (clickOutSide)=\"isOpen = false\"\r\n id=\"date-input-container\"\r\n class=\"calendar-dropdown sp-16 br-8\"\r\n [ngClass]=\"{ 'month-year-view': calenderView != 'day' }\"\r\n >\r\n <div class=\"calendar-header sm-b-12\">\r\n <div class=\"nav-btn br-4\" (click)=\"prevMonth()\" type=\"button\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </div>\r\n <div class=\"month-year body-medium\">\r\n @if (mode === \"dual\") {\r\n @if (calenderView == \"day\" || activeCalendar != \"secondary\") {\r\n <div class=\"month-year-wrapper\">\r\n <span class=\"month\" (click)=\"openView('primary', 'month')\">{{\r\n currentMonthName\r\n }}</span>\r\n <span class=\"year\" (click)=\"openView('primary', 'year')\">{{\r\n currentYear\r\n }}</span>\r\n </div>\r\n }\r\n\r\n @if (calenderView == \"day\" || activeCalendar != \"primary\") {\r\n <div class=\"month-year-wrapper\">\r\n <span class=\"month\" (click)=\"openView('secondary', 'month')\">{{\r\n monthNames[currentMonth2]\r\n }}</span>\r\n <span class=\"year\" (click)=\"openView('secondary', 'year')\">{{\r\n currentYear2\r\n }}</span>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"month-year-wrapper\">\r\n <span class=\"month\" (click)=\"calenderView = 'month'\">{{\r\n currentMonthName\r\n }}</span>\r\n <span class=\"year\" (click)=\"calenderView = 'year'\">{{\r\n currentYear\r\n }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"nav-btn br-4\" (click)=\"nextMonth()\" type=\"button\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </div>\r\n </div>\r\n\r\n @if (calenderView == \"month\") {\r\n <div class=\"month-grid\">\r\n @for (month of monthNames; track month) {\r\n <span\r\n class=\"month\"\r\n (click)=\"selectMonth(month)\"\r\n [ngClass]=\"{ selected: month == activeMonthName }\"\r\n >{{ month }}</span\r\n >\r\n }\r\n </div>\r\n } @else if (calenderView == \"year\") {\r\n <div class=\"year-selector\">\r\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"year-grid\">\r\n @for (year of yearRange; track year) {\r\n <span\r\n class=\"year\"\r\n (click)=\"selectYear(year)\"\r\n [ngClass]=\"{ selected: year == activeYearValue }\"\r\n >{{ year }}</span\r\n >\r\n }\r\n </div>\r\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n } @else {\r\n <!-- Weekday Headers -->\r\n <div class=\"day_wrapper\">\r\n @if (mode === \"dual\") {\r\n <div class=\"dual-calendar\">\r\n <div class=\"calendar-panel\">\r\n <custom-calendar-grid\r\n [month]=\"currentMonth\"\r\n [year]=\"currentYear\"\r\n [calendarDays]=\"calendarDays\"\r\n [weekDays]=\"weekDays\"\r\n [parent]=\"this\"\r\n (daySelected)=\"onDaySelected($event, 'primary')\"\r\n ></custom-calendar-grid>\r\n </div>\r\n\r\n <div class=\"calendar-panel\">\r\n <custom-calendar-grid\r\n [month]=\"currentMonth2\"\r\n [year]=\"currentYear2\"\r\n [calendarDays]=\"calendarDays2\"\r\n [weekDays]=\"weekDays\"\r\n [parent]=\"this\"\r\n (daySelected)=\"onDaySelected($event, 'secondary')\"\r\n ></custom-calendar-grid>\r\n </div>\r\n </div>\r\n } @else {\r\n <custom-calendar-grid\r\n [month]=\"currentMonth\"\r\n [year]=\"currentYear\"\r\n [calendarDays]=\"calendarDays\"\r\n [weekDays]=\"weekDays\"\r\n [parent]=\"this\"\r\n (daySelected)=\"onDaySelected($event, 'primary')\"\r\n ></custom-calendar-grid>\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n class=\"calendar-footer sm-b-16\"\r\n [ngClass]=\"{ 'dual-calendar': config.mode === 'dual' }\"\r\n >\r\n <!-- SINGLE MODE footer -->\r\n @if (mode === \"single\" && showDateLabel) {\r\n <div class=\"calendar-footer-wrapper\">\r\n <div class=\"footer-row label-row\">\r\n <span class=\"footer-label body-large sp-x-12\">Date</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <span class=\"footer-value body-large\">{{\r\n tempDisplayValue\r\n }}</span>\r\n <img\r\n (click)=\"cancelDate('single')\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n @if (time) {\r\n <cats-time-input\r\n [(ngModel)]=\"singleTimeInSeconds\"\r\n (timeChange)=\"onSingleTimeChange($event)\"\r\n ></cats-time-input>\r\n }\r\n }\r\n\r\n <!-- RANGE MODE footer -->\r\n @if (mode === \"range\" || mode === \"dual\") {\r\n <div\r\n class=\"calendar-footer-wrapper\"\r\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\r\n >\r\n <div class=\"footer-row label-row\">\r\n <span class=\"footer-label body-large sp-x-12\">From</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <span class=\"footer-value body-large\">{{\r\n tempFromDisplay\r\n }}</span>\r\n <img\r\n (click)=\"cancelDate('from')\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n @if (time) {\r\n <cats-time-input\r\n [(ngModel)]=\"fromTimeInSeconds\"\r\n (timeChange)=\"onFromTimeChange($event)\"\r\n ></cats-time-input>\r\n }\r\n </div>\r\n <div\r\n class=\"dual-calendar-border-top\"\r\n [ngClass]=\"{ 'calendar-footer-wrapper': time, 'sp-t-12': time }\"\r\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\r\n >\r\n <div class=\"footer-row label-row\" [class.muted]=\"!tempTo\">\r\n <span class=\"footer-label body-large sp-x-12\">To</span>\r\n <div class=\"footer-value-wrapper sp-x-12\">\r\n <span class=\"footer-value body-large\">{{\r\n tempToDisplay\r\n }}</span>\r\n <img\r\n (click)=\"cancelDate('to')\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n @if (time) {\r\n <cats-time-input\r\n [(ngModel)]=\"toTimeInSeconds\"\r\n (timeChange)=\"onToTimeChange($event)\"\r\n ></cats-time-input>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- Action Buttons -->\r\n <div class=\"footer-actions\">\r\n <button\r\n class=\"btn-cancel footer-btn body-medium\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n class=\"btn-apply footer-btn body-medium\"\r\n (click)=\"onApply()\"\r\n type=\"button\"\r\n [disabled]=\"!canApply\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[catsUiTooltip]',\r\n})\r\nexport class CatsUiTooltipDirective implements OnInit, OnDestroy {\r\n @Input('catsUiTooltip') tooltipText = '';\r\n @Input() tooltipClass?: string = '';\r\n\r\n private tooltipEl!: HTMLElement;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit(): void {\r\n this.showTooltip();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('mouseenter')\r\n showTooltip() {\r\n this.createTooltip();\r\n this.positionTooltip();\r\n }\r\n\r\n @HostListener('mouseleave')\r\n hideTooltip() {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('window:resize')\r\n @HostListener('window:scroll')\r\n adjustOnWindowChange() {\r\n if (this.tooltipEl) this.positionTooltip();\r\n }\r\n\r\n /**\r\n * @description Creates tooltip\r\n * @author Shiva Kant\r\n * @returns\r\n */\r\n private createTooltip() {\r\n if (this.tooltipEl) return;\r\n\r\n this.tooltipEl = this.renderer.createElement('div');\r\n this.tooltipEl.innerText = this.tooltipText;\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'position', 'fixed');\r\n // this.renderer.setStyle(this.tooltipEl, 'padding', '6px 10px');\r\n // this.renderer.setStyle(this.tooltipEl, 'background', '#ffffff');\r\n // this.renderer.setStyle(this.tooltipEl, 'color', '#434a51');\r\n // this.renderer.setStyle(this.tooltipEl, 'borderRadius', '4px');\r\n // this.renderer.setStyle(this.tooltipEl, 'zIndex', '9999');\r\n // this.renderer.setStyle(this.tooltipEl, 'whiteSpace', 'nowrap');\r\n // Add a custom class if provided\r\n if (this.tooltipClass) {\r\n this.renderer.addClass(this.tooltipEl, this.tooltipClass);\r\n } else {\r\n // Optionally, you can add a default class here\r\n this.renderer.addClass(this.tooltipEl, 'default-tooltip-class');\r\n }\r\n\r\n document.body.appendChild(this.tooltipEl);\r\n }\r\n\r\n /**\r\n * @description Removes tooltip\r\n * @author Shiva Kant\r\n */\r\n private removeTooltip() {\r\n if (this.tooltipEl) {\r\n this.tooltipEl.remove();\r\n this.tooltipEl = null as any;\r\n }\r\n }\r\n\r\n /**\r\n * @description Positions tooltip\r\n * @author Shiva Kant\r\n */\r\n private positionTooltip() {\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\r\n\r\n const spacing = 8; // distance from host element\r\n\r\n const fitsAbove = hostRect.top >= tooltipRect.height + spacing;\r\n const fitsBelow =\r\n window.innerHeight - hostRect.bottom >= tooltipRect.height + spacing;\r\n const fitsLeft = hostRect.left >= tooltipRect.width + spacing;\r\n const fitsRight =\r\n window.innerWidth - hostRect.right >= tooltipRect.width + spacing;\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n // Priority: bottom → top → right → left\r\n if (fitsBelow) {\r\n top = hostRect.bottom + spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsAbove) {\r\n top = hostRect.top - tooltipRect.height - spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsRight) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.right + spacing;\r\n } else if (fitsLeft) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.left - tooltipRect.width - spacing;\r\n } else {\r\n // fallback → bottom with clamped position\r\n top = hostRect.bottom + spacing;\r\n left = Math.min(\r\n Math.max(10, hostRect.left),\r\n window.innerWidth - tooltipRect.width - 10\r\n );\r\n }\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'top', `${top}px`);\r\n this.renderer.setStyle(this.tooltipEl, 'left', `${left}px`);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion',\r\n imports: [],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss',\r\n})\r\nexport class AccordionComponent {\r\n openedIndex: number | null = null;\r\n\r\n /**\r\n * @description Toggles accordion component\r\n * @author Shiva Kant\r\n * @param index \r\n */\r\n toggle(index: number): void {\r\n this.openedIndex = this.openedIndex === index ? null : index;\r\n }\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @param index \r\n * @returns true if open \r\n */\r\n isOpen(index: number): boolean {\r\n return this.openedIndex === index;\r\n }\r\n}\r\n","<div class=\"accordion\">\r\n <ng-content></ng-content> <!-- Will contain AccordionItem components -->\r\n</div>\r\n","import {\r\n Component,\r\n ContentChild,\r\n Inject,\r\n Input,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { AccordionComponent } from '../accordion.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion-item',\r\n imports: [CommonModule],\r\n templateUrl: './accordion-item.component.html',\r\n styleUrl: './accordion-item.component.scss',\r\n})\r\nexport class AccordionItemComponent {\r\n @Input() title: string = '';\r\n @Input() index: number = 0;\r\n\r\n // Change this to allow null instead of undefined\r\n @ContentChild(TemplateRef) contentTemplate: TemplateRef<any> | null = null;\r\n\r\n constructor(\r\n @Inject(AccordionComponent) private accordion: AccordionComponent\r\n ) {}\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @returns true if open\r\n */\r\n isOpen(): boolean {\r\n return this.accordion.isOpen(this.index);\r\n }\r\n\r\n /**\r\n * @description Toggles accordion item component\r\n * @author Shiva Kant\r\n */\r\n toggle(): void {\r\n this.accordion.toggle(this.index);\r\n }\r\n\r\n /**\r\n * @description perform any initialization after content is injected\r\n * @author Shiva Kant\r\n */\r\n ngAfterContentInit(): void {\r\n if (!this.contentTemplate) {\r\n console.error(\r\n 'No content template provided for accordion item:',\r\n this.title\r\n );\r\n }\r\n }\r\n}\r\n","<div class=\"accordion-item\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <div class=\"title\">{{ title }}</div>\r\n <img\r\n class=\"arrow_icon\"\r\n [src]=\"isOpen() ? 'images/chevron-up.svg' : 'images/chevron-down.svg'\"\r\n alt=\"\"\r\n />\r\n </div>\r\n\r\n <!-- <div class=\"accordion-body\" [class.open]=\"isOpen()\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n </div> -->\r\n\r\n <div class=\"accordion-body\" [class.open]=\"isOpen()\">\r\n <div class=\"inner\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cats-ui-tab-content',\r\n imports: [],\r\n templateUrl: './tab-content.component.html',\r\n styleUrl: './tab-content.component.scss',\r\n})\r\nexport class TabContentComponent {\r\n @Input() active = false;\r\n @Input() tabId!: number;\r\n}\r\n"," @if (active) {\r\n\r\n <ng-container >\r\n <ng-content></ng-content>\r\n </ng-container>\r\n }","import {\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { TabContentComponent } from './tab-content/tab-content.component';\r\nimport { NgClass } from '@angular/common';\r\n\r\nexport interface TabConfig {\r\n type?: 'Default' | 'Stroke' | string;\r\n addTab?: boolean;\r\n closeTab?: boolean;\r\n homeTab?: boolean;\r\n}\r\nexport interface TabItem {\r\n id: number;\r\n title: string;\r\n leadingIcon?: string;\r\n tralingIocn?: string;\r\n count?: number | string;\r\n isDisable?: boolean;\r\n isHome?: boolean;\r\n}\r\n@Component({\r\n selector: 'cats-ui-tabset',\r\n imports: [NgClass],\r\n templateUrl: './tabset.component.html',\r\n styleUrl: './tabset.component.scss',\r\n})\r\nexport class TabsetComponent {\r\n @Input() tabs: TabItem[] = [];\r\n\r\n @Input() activeTab!: number | null;\r\n @Output() activeTabChange = new EventEmitter<number | null>();\r\n\r\n @Input() tabConfig: TabConfig = {};\r\n\r\n @Output() tabAdded = new EventEmitter<TabItem>();\r\n @Output() tabClosed = new EventEmitter<number>();\r\n\r\n @ContentChildren(TabContentComponent)\r\n contents!: QueryList<TabContentComponent>;\r\n\r\n counter = 1;\r\n\r\n ngAfterContentInit() {\r\n // if (this.tabs.length) {\r\n // // this.activeTab = this.tabs[0].id;\r\n // this.counter = this.tabs.length + 1;\r\n // this.updateContentActivation();\r\n // }\r\n if (this.tabs.length) {\r\n if (this.activeTab === null || this.activeTab === undefined) {\r\n this.activeTab = this.tabs[0].id;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n\r\n this.counter = this.tabs.length + 1;\r\n this.updateContentActivation();\r\n }\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['tabs'] || changes['tabConfig']) {\r\n this.addHomeTabIfNeeded();\r\n\r\n // Set default active tab if not provided\r\n if (\r\n (this.activeTab === null || this.activeTab === undefined) &&\r\n this.tabs.length\r\n ) {\r\n this.activeTab = this.tabs[0].id;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n\r\n this.updateContentActivation();\r\n }\r\n\r\n if (changes['activeTab']) {\r\n this.updateContentActivation();\r\n }\r\n }\r\n addHomeTabIfNeeded() {\r\n if (!this.tabConfig?.homeTab) return;\r\n\r\n const alreadyExists = this.tabs?.some((t) => t.isHome);\r\n\r\n if (!alreadyExists) {\r\n const homeTab = {\r\n id: 0,\r\n title: '',\r\n closable: false,\r\n isHome: true,\r\n };\r\n\r\n this.tabs = [homeTab, ...(this.tabs || [])];\r\n }\r\n }\r\n setActive(id: number) {\r\n this.activeTab = id;\r\n this.activeTabChange.emit(id);\r\n this.updateContentActivation();\r\n }\r\n\r\n closeTab(event: Event, id: number, index: number) {\r\n event.stopPropagation();\r\n\r\n if (!this.tabConfig.closeTab) return;\r\n\r\n this.tabs.splice(index, 1);\r\n\r\n if (this.activeTab === id) {\r\n this.activeTab = this.tabs.length ? this.tabs[0].id : null;\r\n this.activeTabChange.emit(this.activeTab);\r\n }\r\n\r\n this.updateContentActivation();\r\n this.tabClosed.emit(id);\r\n }\r\n\r\n addTab(event: Event) {\r\n event.stopPropagation();\r\n\r\n if (!this.tabConfig.addTab) return;\r\n\r\n this.tabAdded.emit(); // \r\n }\r\n updateContentActivation() {\r\n if (!this.contents) return;\r\n\r\n this.contents.forEach((content) => {\r\n content.active = content.tabId === this.activeTab;\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"cats_tab_container\"\r\n [ngClass]=\"{\r\n stroke_tab: tabConfig.type?.toLowerCase() === 'stroke',\r\n ipro_tab: tabConfig.type?.toLowerCase() === 'file',\r\n ipro_tab_large: tabConfig.type?.toLowerCase() === 'filelarge',\r\n }\"\r\n>\r\n <ul class=\"cats_tab_header\">\r\n @for (t of tabs; track t.id; let i = $index) {\r\n <li\r\n class=\"cats_tab_item sp-x-12\"\r\n [class.active]=\"t.id === activeTab\"\r\n [class.disabled]=\"t.isDisable\"\r\n (click)=\"setActive(t.id)\"\r\n >\r\n <!-- Home Icon -->\r\n @if (t.isHome) {\r\n <img src=\"images/home.svg\" class=\"cats_home_icon\" />\r\n }\r\n <!-- <ng-container ></ng-container> -->\r\n @else {\r\n <div class=\"cats_tab_item_container\">\r\n <!-- leadingIcon -->\r\n @if (t.leadingIcon) {\r\n <img [src]=\"t.leadingIcon\" class=\"cats_leading_icon\" />\r\n }\r\n\r\n <!-- Title -->\r\n <span class=\"cats_title\">{{ t.title }}</span>\r\n <!-- tralingIocn -->\r\n @if (t.tralingIocn) {\r\n <img [src]=\"t.tralingIocn\" class=\"cats_trailng_icon\" />\r\n }\r\n <!-- tab_count -->\r\n @if (t.count) {\r\n <span class=\"cats_tab_count\">{{ t.count }}</span>\r\n }\r\n </div>\r\n }\r\n <!-- Close (NOT for first tab) -->\r\n @if (tabConfig.closeTab && i !== 0) {\r\n <img\r\n class=\"cats_close_icon pointer\"\r\n (click)=\"closeTab($event, t.id, i)\"\r\n src=\"images/x.svg\"\r\n alt=\"\"\r\n />\r\n }\r\n </li>\r\n }\r\n\r\n <!-- Add Button -->\r\n @if (tabConfig.addTab) {\r\n <li class=\"add_more_tab cats_tab_item sp-x-12\" (click)=\"addTab($event)\">\r\n <img src=\"images/plus.svg\" alt=\"\" />\r\n </li>\r\n }\r\n </ul>\r\n <div class=\"cats_tab_content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n Input,\r\n AfterViewInit,\r\n Renderer2,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[autoPosition]',\r\n})\r\nexport class AutoPositionDirective implements AfterViewInit {\r\n @Input() overlay!: HTMLElement;\r\n @Input() trigger!: HTMLElement; \r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.setPosition(), 0);\r\n }\r\n\r\n setPosition() {\r\n if (!this.overlay || !this.trigger) return;\r\n\r\n const triggerRect = this.trigger.getBoundingClientRect();\r\n const overlayRect = this.overlay.getBoundingClientRect();\r\n\r\n const spaceRight = window.innerWidth - triggerRect.right;\r\n const spaceLeft = triggerRect.left;\r\n const spaceBottom = window.innerHeight - triggerRect.bottom;\r\n const spaceTop = triggerRect.top;\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n // smarter: pick best space\r\n const positions = [\r\n { type: 'right', space: spaceRight },\r\n { type: 'left', space: spaceLeft },\r\n { type: 'bottom', space: spaceBottom },\r\n { type: 'top', space: spaceTop },\r\n ].sort((a, b) => b.space - a.space);\r\n\r\n switch (positions[0].type) {\r\n case 'right':\r\n left = triggerRect.right;\r\n top = triggerRect.top;\r\n break;\r\n case 'left':\r\n left = triggerRect.left - overlayRect.width;\r\n top = triggerRect.top;\r\n break;\r\n case 'bottom':\r\n left = triggerRect.left;\r\n top = triggerRect.bottom;\r\n break;\r\n case 'top':\r\n left = triggerRect.left;\r\n top = triggerRect.top - overlayRect.height;\r\n break;\r\n }\r\n\r\n Object.assign(this.overlay.style, {\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n zIndex: '1000',\r\n });\r\n }\r\n}\r\n","\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport {\r\n CustomDatePickerComponent,\r\n DatePickerConfig,\r\n DatePickerMode,\r\n} from '../custom-date-picker';\r\nimport { AutoPositionDirective } from '../../directives/auto-position.directive';\r\n\r\n/* ===================== MODELS ===================== */\r\n\r\nexport type FilterType =\r\n | 'live'\r\n | 'today'\r\n | 'week'\r\n | 'month'\r\n | 'fy'\r\n | 'last'\r\n | 'customRange'\r\n | 'customDate';\r\n\r\nexport interface TimeFilterOption {\r\n label: string;\r\n value: string;\r\n type?: 'radio' | 'input' | 'submenu';\r\n children?: TimeFilterOption[];\r\n default?: boolean;\r\n custom?: boolean;\r\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\r\n pickerMode?: DatePickerMode;\r\n time?: boolean;\r\n extraConfig?: Partial<DatePickerConfig>;\r\n}\r\n\r\nexport interface TimeFilterConfig {\r\n title?: string;\r\n showReset?: boolean;\r\n options: TimeFilterOption[];\r\n}\r\n\r\nexport interface TimeFilterOutput {\r\n type: FilterType;\r\n label?: string;\r\n startDate?: string;\r\n endDate?: string;\r\n value?: number;\r\n unit?: 'Hours' | 'Days';\r\n key?: string;\r\n dates?: any;\r\n}\r\nexport interface TimeFilterValue {\r\n type: string;\r\n dates?: any;\r\n lastValue?: number;\r\n lastUnit?: 'seconds' | 'minutes' | 'hours' | 'days';\r\n}\r\n\r\n/* ===================== COMPONENT ===================== */\r\n\r\n@Component({\r\n selector: 'cats-ui-timestamp-filter',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CustomDatePickerComponent,\r\n AutoPositionDirective,\r\n ],\r\n templateUrl: './timestamp-filter.component.html',\r\n styleUrl: './timestamp-filter.component.scss',\r\n})\r\nexport class TimestampFilterComponent implements OnInit {\r\n @Input({ required: true }) config!: TimeFilterConfig;\r\n @Output() selectionChange = new EventEmitter<TimeFilterOutput>();\r\n @Input() selectedValue: TimeFilterValue | null = null;\r\n\r\n // Internal radio binding\r\n radioValue: string | null = null;\r\n previousRadioValue: string | null = null;\r\n activePicker: TimeFilterOption | null = null;\r\n\r\n lastValue: number = 24;\r\n lastUnit: 'seconds' | 'minutes' | 'hours' | 'days' = 'hours';\r\n selectedDateLabels: Record<string, string> = {};\r\n dateControls: Record<string, FormControl> = {};\r\n\r\n /* ===================== GETTERS ===================== */\r\n\r\n get normalOptions(): TimeFilterOption[] {\r\n return this.config?.options?.filter((o) => !o.custom) || [];\r\n }\r\n\r\n get customOptions(): TimeFilterOption[] {\r\n return this.config?.options?.filter((o) => o.custom) || [];\r\n }\r\n\r\n /** Returns the FormControl for the currently active picker. */\r\n get activePickerControl(): FormControl | null {\r\n if (!this.activePicker) return null;\r\n return this.dateControls[this.activePicker.value] ?? null;\r\n }\r\n\r\n /* ===================== INIT ===================== */\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n \r\n this.customOptions\r\n .filter((o) => o.type === 'submenu')\r\n .forEach((opt) => {\r\n this.dateControls[opt.value] = new FormControl(null);\r\n });\r\n\r\n if (!this.config?.options?.length) return;\r\n\r\n if (this.selectedValue?.type) {\r\n this.applyPreset(this.selectedValue);\r\n } else {\r\n const defaultOption = this.config.options.find((o) => o.default);\r\n if (defaultOption) this.selectOption(defaultOption);\r\n }\r\n }\r\n\r\n /* ===================== PRESET RESTORE ===================== */\r\n\r\n private applyPreset(preset: TimeFilterValue): void {\r\n const option = this.config.options.find((o) => o.value === preset.type);\r\n if (!option) return;\r\n\r\n if (option.custom && option.type === 'submenu') {\r\n this.radioValue = option.value;\r\n\r\n const rawDates = preset.dates; // original raw picker payload\r\n\r\n if (rawDates != null) {\r\n this.dateControls[option.value]?.patchValue(rawDates, {\r\n emitEvent: false,\r\n });\r\n\r\n // Rebuild the display label from the raw payload\r\n this.selectedDateLabels[option.value] = this.buildDateLabel(\r\n rawDates,\r\n option,\r\n );\r\n }\r\n\r\n const isRange =\r\n option.pickerMode === 'range' || option.pickerMode === 'dual';\r\n\r\n const startDate = this.extractStartDate(rawDates, isRange);\r\n const endDate = this.extractEndDate(rawDates, isRange);\r\n\r\n this.emit({\r\n type: isRange ? 'customRange' : 'customDate',\r\n label: option.label,\r\n key: option.value,\r\n ...(startDate ? { startDate } : {}),\r\n ...(endDate ? { endDate } : {}),\r\n dates: rawDates,\r\n });\r\n } else if (option.value === 'last') {\r\n if (preset.lastValue != null) this.lastValue = preset.lastValue;\r\n if (preset.lastUnit) this.lastUnit = preset.lastUnit;\r\n this.selectOption(option);\r\n } else {\r\n this.selectOption(option);\r\n }\r\n }\r\n\r\n /* ===================== PICKER CONFIG ===================== */\r\n\r\n getPickerConfig(option: TimeFilterOption): DatePickerConfig {\r\n const mode: DatePickerMode = option.pickerMode || 'dual';\r\n\r\n const isTimeType =\r\n option.value.toLowerCase().includes('time') || !!option.time;\r\n\r\n return {\r\n mode,\r\n ...(isTimeType ? { time: true } : {}),\r\n ...(option.parentDateFormat\r\n ? { dateFormat: option.parentDateFormat }\r\n : {}),\r\n ...(option.extraConfig ?? {}),\r\n };\r\n }\r\n\r\n /* ===================== MAIN HANDLER ===================== */\r\n\r\n selectOption(option: TimeFilterOption): void {\r\n if (!option) return;\r\n\r\n if (option.custom && option.type === 'submenu') {\r\n this.previousRadioValue = this.radioValue;\r\n this.radioValue = option.value;\r\n this.activePicker = option;\r\n\r\n Object.keys(this.selectedDateLabels).forEach((key) => {\r\n if (key !== option.value) {\r\n delete this.selectedDateLabels[key];\r\n this.dateControls[key]?.reset(null, { emitEvent: false });\r\n }\r\n });\r\n\r\n return; // NO emit here — wait for onDateApplied\r\n }\r\n\r\n this.previousRadioValue = this.radioValue;\r\n this.radioValue = option.value;\r\n this.activePicker = null;\r\n\r\n const defaultDate = new Date();\r\n let start: Date | undefined;\r\n const end: Date = defaultDate;\r\n\r\n const formatDate = (date: Date): string => {\r\n const format = option.parentDateFormat;\r\n if (!format) return date.toISOString();\r\n\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n\r\n switch (format) {\r\n case 'dd MMM yyyy': {\r\n const monthNames = [\r\n 'Jan',\r\n 'Feb',\r\n 'Mar',\r\n 'Apr',\r\n 'May',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Oct',\r\n 'Nov',\r\n 'Dec',\r\n ];\r\n return `${day} ${monthNames[date.getMonth()]} ${year}`;\r\n }\r\n case 'MM/dd/yyyy':\r\n return `${month}/${day}/${year}`;\r\n case 'yyyy-MM-dd':\r\n return `${year}-${month}-${day}`;\r\n default:\r\n return date.toISOString();\r\n }\r\n };\r\n\r\n switch (option.value) {\r\n case 'live':\r\n return this.emit({ type: 'live', label: option.label, key: 'live' });\r\n\r\n case 'today':\r\n start = this.startOfDay(defaultDate);\r\n break;\r\n\r\n case 'week':\r\n start = this.startOfWeek(defaultDate);\r\n break;\r\n\r\n case 'month':\r\n start = new Date(defaultDate.getFullYear(), defaultDate.getMonth(), 1);\r\n break;\r\n\r\n case 'fy':\r\n start = this.startOfFinancialYear(defaultDate);\r\n break;\r\n\r\n case '24h':\r\n start = this.subtractTime(defaultDate, 24, 'hours');\r\n break;\r\n\r\n case '7d':\r\n start = this.subtractTime(defaultDate, 7, 'days');\r\n break;\r\n\r\n case '30d':\r\n start = this.subtractTime(defaultDate, 30, 'days');\r\n break;\r\n\r\n case 'last':\r\n if (this.lastValue && this.lastUnit) {\r\n return this.emitLast();\r\n }\r\n return;\r\n\r\n default:\r\n return this.emit({\r\n type: option.value as FilterType,\r\n label: option.label,\r\n key: option.value,\r\n });\r\n }\r\n\r\n this.emit({\r\n type: option.value as FilterType,\r\n label: option.label,\r\n startDate: start ? formatDate(start) : undefined,\r\n endDate: formatDate(end),\r\n key: option.value,\r\n });\r\n }\r\n\r\n /* ===================== DATE PICKER EVENTS ===================== */\r\n\r\n onDateApplied(event: any): void {\r\n if (!this.activePicker) return;\r\n\r\n const option = this.activePicker;\r\n this.radioValue = option.value;\r\n const ctrl = this.dateControls[option.value];\r\n if (ctrl) {\r\n ctrl.patchValue(event, { emitEvent: false });\r\n }\r\n this.selectedDateLabels[option.value] = this.buildDateLabel(event, option);\r\n\r\n const isRange =\r\n option.pickerMode === 'range' || option.pickerMode === 'dual';\r\n\r\n const startDate = this.extractStartDate(event, isRange);\r\n const endDate = this.extractEndDate(event, isRange);\r\n\r\n this.emit({\r\n type: isRange ? 'customRange' : 'customDate',\r\n label: option.label,\r\n key: option.value,\r\n ...(startDate ? { startDate } : {}),\r\n ...(endDate ? { endDate } : {}),\r\n dates: event, \r\n });\r\n\r\n this.activePicker = null;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Cancel: restore radio to whatever was selected before picker opened.\r\n */\r\n onCancel(_event: any): void {\r\n this.radioValue = this.previousRadioValue;\r\n this.activePicker = null;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /* ===================== LAST X ===================== */\r\n\r\n emitLast(): void {\r\n const unitMap: Record<string, 'Hours' | 'Days'> = {\r\n seconds: 'Hours',\r\n minutes: 'Hours',\r\n hours: 'Hours',\r\n days: 'Days',\r\n };\r\n this.emit({\r\n type: 'last',\r\n label: `Last ${this.lastValue} ${this.lastUnit}`,\r\n value: this.lastValue,\r\n unit: unitMap[this.lastUnit],\r\n key: 'last',\r\n });\r\n }\r\n\r\n onLastChange(): void {\r\n if (this.radioValue === 'last') {\r\n this.emitLast();\r\n }\r\n }\r\n\r\n /* ===================== RESET ===================== */\r\n\r\n reset(): void {\r\n this.selectedDateLabels = {};\r\n Object.values(this.dateControls).forEach((ctrl) =>\r\n ctrl.reset(null, { emitEvent: false }),\r\n );\r\n\r\n const defaultOption = this.config.options.find((o) => o.default);\r\n if (defaultOption) {\r\n this.selectOption(defaultOption);\r\n }\r\n }\r\n\r\n /* ===================== PRIVATE HELPERS ===================== */\r\n\r\n private extractStartDate(event: any, isRange: boolean): string | undefined {\r\n if (!event) return undefined;\r\n\r\n if (isRange) {\r\n // range / datetimerange → { from, to, fromTime?, toTime? }\r\n if (!event.from) return undefined;\r\n return event.fromTime ? `${event.from} ${event.fromTime}` : event.from;\r\n }\r\n\r\n // single date → plain string\r\n if (typeof event === 'string') return event;\r\n\r\n // datetime → { date, time, meridiem }\r\n if (event.date) {\r\n return event.time ? `${event.date} ${event.time}` : event.date;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private extractEndDate(event: any, isRange: boolean): string | undefined {\r\n if (!event || !isRange) return undefined;\r\n\r\n if (!event.to) return undefined;\r\n return event.toTime ? `${event.to} ${event.toTime}` : event.to;\r\n }\r\n\r\n private buildDateLabel(event: any, option: TimeFilterOption): string {\r\n if (!event) return option.label;\r\n\r\n // range / datetimerange → { from, to, fromTime?, toTime? }\r\n if (event?.from != null || event?.to != null) {\r\n const from = event.fromTime\r\n ? `${event.from} ${event.fromTime}`\r\n : event.from;\r\n const to = event.toTime ? `${event.to} ${event.toTime}` : event.to;\r\n return from && to ? `${from} – ${to}` : (from ?? to ?? option.label);\r\n }\r\n\r\n // datetime → { date, time, meridiem }\r\n if (event?.date && event?.time) {\r\n return `${event.date} ${event.time}`;\r\n }\r\n if (event?.date) return event.date;\r\n\r\n // plain string (single date)\r\n if (typeof event === 'string') return event;\r\n\r\n // legacy fallback\r\n if (event?.startDate && event?.endDate)\r\n return `${event.startDate} – ${event.endDate}`;\r\n if (event?.startDate) return event.startDate;\r\n\r\n return option.label;\r\n }\r\n\r\n private emit(payload: TimeFilterOutput): void {\r\n this.selectionChange.emit(payload);\r\n }\r\n\r\n private startOfDay(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n }\r\n\r\n private startOfWeek(date: Date): Date {\r\n const d = new Date(date);\r\n const day = d.getDay();\r\n const diff = day === 0 ? 6 : day - 1; // Monday start\r\n d.setDate(d.getDate() - diff);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n }\r\n\r\n private startOfFinancialYear(date: Date): Date {\r\n const year =\r\n date.getMonth() >= 3 ? date.getFullYear() : date.getFullYear() - 1;\r\n return new Date(year, 3, 1); // April 1\r\n }\r\n\r\n private subtractTime(date: Date, value: number, unit: string): Date {\r\n const newDate = new Date(date);\r\n switch (unit) {\r\n case 'seconds':\r\n newDate.setSeconds(newDate.getSeconds() - value);\r\n break;\r\n case 'minutes':\r\n newDate.setMinutes(newDate.getMinutes() - value);\r\n break;\r\n case 'hours':\r\n newDate.setHours(newDate.getHours() - value);\r\n break;\r\n case 'days':\r\n newDate.setDate(newDate.getDate() - value);\r\n break;\r\n }\r\n return newDate;\r\n }\r\n}","<div class=\"filter-card\" autoAdjust>\r\n <div class=\"header\">\r\n <span class=\"title\">{{ config.title || \"Timestamp Filter\" }}</span>\r\n\r\n @if (config.showReset) {\r\n <span class=\"reset\" (click)=\"reset()\">Reset to Default</span>\r\n }\r\n </div>\r\n\r\n <div class=\"options\">\r\n\r\n <!-- NORMAL OPTIONS -->\r\n <div class=\"normal\">\r\n @for (option of normalOptions; track $index) {\r\n <div class=\"option\" (click)=\"selectOption(option)\">\r\n <label class=\"label\">\r\n <input\r\n type=\"radio\"\r\n [value]=\"option.value\"\r\n [(ngModel)]=\"radioValue\"\r\n />\r\n <span class=\"label-text\">{{ option.label }}</span>\r\n </label>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- CUSTOM SECTION HEADER -->\r\n <div class=\"custom-wrapper\">\r\n <div class=\"custom-header\">\r\n <span class=\"custom-title\">Custom</span>\r\n </div>\r\n </div>\r\n\r\n <!-- CUSTOM OPTIONS -->\r\n <div class=\"customs\" #trigger>\r\n @for (custom of customOptions; track custom.value) {\r\n <div\r\n class=\"custom\"\r\n (click)=\"selectOption(custom)\"\r\n >\r\n <label class=\"label\">\r\n <input\r\n type=\"radio\"\r\n [value]=\"custom.value\"\r\n [(ngModel)]=\"radioValue\"\r\n />\r\n <span class=\"label-text\">{{ custom.label }}</span>\r\n </label>\r\n\r\n <!-- INPUT BELOW OPTION (type: 'input') -->\r\n @if (custom.type === 'input') {\r\n <div class=\"last-input\">\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"lastValue\"\r\n (change)=\"onLastChange()\"\r\n />\r\n <select [(ngModel)]=\"lastUnit\" (change)=\"onLastChange()\">\r\n <option value=\"hours\">Hours</option>\r\n <option value=\"minutes\">Minutes</option>\r\n <option value=\"seconds\">Seconds</option>\r\n </select>\r\n </div>\r\n }\r\n\r\n <!-- SUBMENU ARROW + APPLIED DATE LABEL (type: 'submenu') -->\r\n @if (custom.type === 'submenu') {\r\n <span class=\"arrow\">\r\n <img src=\"/images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n\r\n <!-- @if (selectedDateLabels[custom.value]) {\r\n <div class=\"applied-date-label\">\r\n <span class=\"applied-date-text\">\r\n {{ selectedDateLabels[custom.value] }}\r\n </span>\r\n </div>\r\n } -->\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- DATE PICKER OVERLAY -->\r\n\r\n@if (activePicker) {\r\n <div\r\n class=\"picker-overlay\"\r\n autoPosition\r\n [overlay]=\"pickerRef\"\r\n [trigger]=\"trigger\"\r\n >\r\n <div class=\"picker-container\" #pickerRef (click)=\"$event.stopPropagation()\">\r\n \r\n @if (activePickerControl) {\r\n <cats-ui-custom-date-picker\r\n [formControl]=\"activePickerControl\"\r\n [config]=\"getPickerConfig(activePicker)\"\r\n (applied)=\"onDateApplied($event)\"\r\n (cancelled)=\"onCancel($event)\"\r\n [showTrigger]=\"false\"\r\n ></cats-ui-custom-date-picker>\r\n } @else {\r\n <cats-ui-custom-date-picker\r\n [config]=\"getPickerConfig(activePicker)\"\r\n (applied)=\"onDateApplied($event)\"\r\n (cancelled)=\"onCancel($event)\"\r\n [showTrigger]=\"false\"\r\n ></cats-ui-custom-date-picker>\r\n }\r\n </div>\r\n </div>\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[wizardStep]',\r\n})\r\nexport class WizardStepDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Injectable, signal, computed } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class WizardService {\r\n // Map of wizardId -> WizardInstance\r\n private wizards = signal<Record<string, any>>({});\r\n activeStep = signal<any>({});\r\n stepConfig = signal<any>({});\r\n // ─── Open ───────────────────────────────────────────\r\n open(wizardId: string, config: any) {\r\n document.body.style.overflow = 'hidden';\r\n this.wizards.update((all) => ({\r\n ...all,\r\n [wizardId]: {\r\n config,\r\n currentStepIndex: 0,\r\n isOpen: true,\r\n },\r\n }));\r\n }\r\n\r\n // ─── Close ──────────────────────────────────────────\r\n close(wizardId: string) {\r\n this.wizards.update((all) => {\r\n const updated = { ...all };\r\n delete updated[wizardId];\r\n return updated;\r\n });\r\n\r\n this.stepConfig.update((config: any) => {\r\n delete config[wizardId];\r\n return config;\r\n });\r\n\r\n this.activeStep.update((obj: any) => {\r\n delete obj[wizardId];\r\n return obj;\r\n });\r\n document.body.style.overflow = 'auto';\r\n }\r\n nextStep(wizardId: string): void {\r\n let step = this.activeStep()?.[wizardId];\r\n this.stepConfig.update((config: any) => {\r\n let stepConfig = config?.[wizardId];\r\n if (step < stepConfig?.length) {\r\n stepConfig[step - 1].state = 'done';\r\n stepConfig[step].state = 'active';\r\n step++;\r\n return config;\r\n } else {\r\n stepConfig[stepConfig?.length - 1].state = 'active';\r\n step = stepConfig?.length;\r\n return config;\r\n }\r\n });\r\n this.activeStep.update((obj: any) => {\r\n obj[wizardId] = step;\r\n return obj;\r\n });\r\n }\r\n\r\n previousStep(wizardId: string): void {\r\n let step = this.activeStep()?.[wizardId];\r\n this.stepConfig.update((config: any) => {\r\n let stepConfig = config?.[wizardId];\r\n if (step > 1) {\r\n stepConfig[step - 1].state = 'normal';\r\n stepConfig[step - 2].state = 'active';\r\n step--;\r\n return config;\r\n }\r\n stepConfig[0].state = 'active';\r\n step = 1;\r\n return config;\r\n });\r\n this.activeStep.update((obj: any) => {\r\n obj[wizardId] = step;\r\n return obj;\r\n });\r\n }\r\n\r\n gotoStep(step: number, wizardId: string): void {\r\n this.stepConfig.update((config) => {\r\n let stepConfig = config?.[wizardId];\r\n\r\n if (step > 0 && step <= stepConfig?.length) {\r\n stepConfig = stepConfig.map((stepData: any, index: number) => {\r\n if (index < step - 1) {\r\n return { ...stepData, state: 'done' };\r\n } else if (index == step - 1) {\r\n return { ...stepData, state: 'active' };\r\n }\r\n return stepData;\r\n });\r\n config[wizardId] = stepConfig;\r\n this.activeStep.update((obj: any) => {\r\n obj[wizardId] = step;\r\n return obj;\r\n });\r\n }\r\n return config;\r\n });\r\n }\r\n // ─── Getters ─────────────────────────────────────────\r\n isOpen(wizardId: string) {\r\n return computed(() => this.wizards()[wizardId]?.isOpen ?? false);\r\n }\r\n\r\n getConfig(wizardId: string) {\r\n return computed(() => this.wizards()[wizardId]?.config ?? null);\r\n }\r\n\r\n getCurrentStepIndex(wizardId: string) {\r\n return computed(() => this.wizards()[wizardId]?.currentStepIndex ?? 0);\r\n }\r\n\r\n getCurrentStep(wizardId: string) {\r\n return computed(() => {\r\n const w = this.wizards()[wizardId];\r\n if (!w) return null;\r\n return w.config.steps[w.currentStepIndex];\r\n });\r\n }\r\n\r\n getProgress(wizardId: string) {\r\n return computed(() => {\r\n const w = this.wizards()[wizardId];\r\n if (!w) return 0;\r\n return ((w.currentStepIndex + 1) / w.config.steps.length) * 100;\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n ContentChildren,\r\n effect,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n QueryList,\r\n} from '@angular/core';\r\nimport { WizardService } from './wizard.service';\r\nimport { WizardStepDirective } from './wizard.directive';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-wizard',\r\n imports: [CommonModule],\r\n templateUrl: './wizard.component.html',\r\n styleUrl: './wizard.component.scss',\r\n})\r\nexport class WizardComponent {\r\n @Input() wizardId!: string;\r\n @Input() title: string = 'Wizard';\r\n @Output() closed = new EventEmitter<void>();\r\n @ContentChildren(WizardStepDirective)\r\n stepTemplates!: QueryList<WizardStepDirective>;\r\n @Input() showProgressBar: boolean = true;\r\n @Input() showStepBadge: boolean = true;\r\n expandable: boolean = true;\r\n\r\n isExpanded = false;\r\n\r\n steps: any = {};\r\n activeStep: any = {};\r\n\r\n templates: WizardStepDirective[] = [];\r\n\r\n constructor(private commonService: WizardService) {\r\n effect(() => {\r\n this.steps = this.commonService.stepConfig();\r\n this.activeStep = this.commonService.activeStep();\r\n });\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.templates = this.stepTemplates.toArray();\r\n\r\n // React if templates change dynamically\r\n this.stepTemplates.changes.subscribe(() => {\r\n this.templates = this.stepTemplates.toArray();\r\n });\r\n }\r\n toggleExpand() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n @HostListener('document:keydown.escape')\r\n onEscPressed() {\r\n if (this.isExpanded) {\r\n this.isExpanded = false;\r\n }\r\n }\r\n get currentStepIndex(): number {\r\n return (this.activeStep?.[this.wizardId] ?? 1) - 1;\r\n }\r\n\r\n get wizardSteps(): any[] {\r\n return this.steps?.[this.wizardId] ?? [];\r\n }\r\n\r\n get currentTemplate() {\r\n return this.templates[this.currentStepIndex]?.templateRef ?? null;\r\n }\r\n\r\n get currentStepLabel(): string {\r\n return this.wizardSteps[this.currentStepIndex]?.title ?? '';\r\n }\r\n\r\n get currentStepNumber(): number {\r\n return this.activeStep?.[this.wizardId] ?? 1;\r\n }\r\n\r\n goToStep(step: number) {\r\n this.commonService.gotoStep(step, this.wizardId);\r\n }\r\n closeModal(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<div class=\"cats-modal-overlay\">\r\n <!-- Stop closing when clicking inside modal -->\r\n <div class=\"cats-modal\" [class.expanded]=\"isExpanded\">\r\n <!-- PROGRESS BAR (TOP STRIP) -->\r\n @if (showProgressBar) {\r\n <div class=\"cats-modal-progress-bar\">\r\n @for (step of wizardSteps; track $index) {\r\n <div\r\n class=\"cats-progress-step\"\r\n [class.progres-done]=\"step.state === 'done'\"\r\n [class.progress-active]=\"step.state === 'active'\"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n <!-- Title -->\r\n\r\n <!-- HEADER -->\r\n <div class=\"cats-modal-header\">\r\n <div class=\"cats-header-left\">\r\n <span class=\"cats-title textTruncate\">{{ title }}</span>\r\n @if (showStepBadge && currentStepNumber) {\r\n <span class=\"cats-step textTruncate\">\r\n Step {{ currentStepNumber }}: {{ currentStepLabel }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"cats-header-right\">\r\n @if (expandable) {\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"toggleExpand()\"\r\n [src]=\"\r\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\r\n \"\r\n alt=\"\"\r\n />\r\n }\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"closeModal()\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- BODY -->\r\n <div class=\"cats-modal-body\" [class.collapsed]=\"!isExpanded && expandable\">\r\n @if (currentTemplate) {\r\n <ng-container *ngTemplateOutlet=\"currentTemplate\"></ng-container>\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 forwardRef,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-ui-file-upload',\r\n standalone: true,\r\n imports: [ReactiveFormsModule],\r\n templateUrl: './file-upload.component.html',\r\n styleUrls: ['./file-upload.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FileUploadComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FileUploadComponent implements ControlValueAccessor {\r\n // ─── Config Inputs ───────────────────────────────────────────────────────────\r\n @Input() placeholder: string = 'Drop files here';\r\n @Input() errorMessage: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() multiple: boolean = false;\r\n\r\n /** Button position: 'left' (prefix) | 'right' (suffix) */\r\n @Input() buttonPosition: 'left' | 'right' = 'left';\r\n\r\n @Input() maxSize: number | null = null;\r\n @Input() minSize: number | null = null;\r\n @Input() helperText: string = '';\r\n @Output() onfileChange = new EventEmitter<any>();\r\n @Output() onfileRemove = new EventEmitter<any>();\r\n\r\n /**\r\n * Accepted MIME types or extensions, comma-separated.\r\n * e.g. 'image/png,image/jpeg' or '.png,.jpg,.pdf'\r\n * Passed directly to the hidden <input accept=\"...\"> attribute.\r\n * Also used for runtime validation.\r\n * null = accept all\r\n */\r\n @Input() accept: string | null = null;\r\n\r\n // ─── Internal State ──────────────────────────────────────────────────────────\r\n value: File[] = [];\r\n isFocused = false;\r\n validationError: string = '';\r\n control!: FormControl<any> | null;\r\n\r\n // ─── ControlValueAccessor hooks ──────────────────────────────────────────────\r\n onChange: (value: File[]) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n writeValue(files: File[] | null | undefined): void {\r\n this.value = Array.isArray(files) ? files : [];\r\n }\r\n\r\n registerOnChange(fn: (value: File[]) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n validate(control: FormControl): any {\r\n this.control = control;\r\n }\r\n // ─── Validation ──────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Validates a single file against minSize, maxSize, and accept rules.\r\n * Returns an error string, or empty string if valid.\r\n */\r\n private validateFile(file: File): string {\r\n if (this.minSize !== null && file.size < this.minSize) {\r\n return `\"${file.name}\" is too small (min: ${this.formatBytes(this.minSize)}).`;\r\n }\r\n\r\n if (this.maxSize !== null && file.size > this.maxSize) {\r\n return `\"${file.name}\" exceeds max size (max: ${this.formatBytes(this.maxSize)}).`;\r\n }\r\n\r\n if (this.accept) {\r\n const accepted = this.accept\r\n .split(',')\r\n .map((t) => t.trim().toLowerCase());\r\n const fileExt = '.' + file.name.split('.').pop()!.toLowerCase();\r\n const fileMime = file.type.toLowerCase();\r\n\r\n const isAllowed = accepted.some((token) => {\r\n if (token.startsWith('.')) return token === fileExt; // extension match\r\n if (token.endsWith('/*'))\r\n return fileMime.startsWith(token.slice(0, -1)); // wildcard MIME e.g. image/*\r\n return token === fileMime; // exact MIME match\r\n });\r\n\r\n if (!isAllowed) {\r\n return `\"${file.name}\" has an unsupported file type.`;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /** Validates a batch; sets validationError and returns only valid files. */\r\n private processFiles(files: File[]): File[] {\r\n this.validationError = '';\r\n\r\n const valid: File[] = [];\r\n for (const file of files) {\r\n const err = this.validateFile(file);\r\n if (err) {\r\n this.validationError = err; // show the first error (or accumulate if preferred)\r\n break;\r\n }\r\n valid.push(file);\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n // ─── File Select (via button click) ──────────────────────────────────────────\r\n onFileSelect(event: Event, input: HTMLInputElement): void {\r\n if (this.disabled) return;\r\n\r\n const target = event.target as HTMLInputElement;\r\n const raw = Array.from(target.files ?? []);\r\n const files = this.multiple ? raw : raw.slice(0, 1);\r\n\r\n const valid = this.processFiles(files);\r\n if (valid.length) {\r\n this.value = valid;\r\n this.onChange(this.value);\r\n }\r\n this.onfileChange.emit(this.value);\r\n this.onTouched();\r\n\r\n input.value = '';\r\n this.isFocused = false;\r\n }\r\n\r\n // ─── Drag & Drop ─────────────────────────────────────────────────────────────\r\n onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n if (this.disabled) return;\r\n\r\n const raw = Array.from(event.dataTransfer?.files ?? []);\r\n const files = this.multiple ? raw : [raw[0]].filter(Boolean);\r\n\r\n const valid = this.processFiles(files);\r\n if (valid.length) {\r\n this.value = valid;\r\n this.onChange(this.value);\r\n }\r\n this.onfileChange.emit(this.value);\r\n this.onTouched();\r\n this.isFocused = false;\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n // ─── Remove File ─────────────────────────────────────────────────────────────\r\n removeFile(index: number, input?: HTMLInputElement): void {\r\n this.value = this.value.filter((_, i) => i !== index);\r\n this.validationError = '';\r\n this.onChange(this.value);\r\n this.onfileRemove.emit(this.value);\r\n if (input) input.value = '';\r\n }\r\n\r\n // ─── Helpers ─────────────────────────────────────────────────────────────────\r\n\r\n /** Human-readable byte string: 1024 → \"1 KB\", 5242880 → \"5 MB\" */\r\n formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\r\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\r\n return `${(bytes / 1024 ** 3).toFixed(1)} GB`;\r\n }\r\n\r\n /**\r\n * Builds a human-readable hint string from the current constraints.\r\n * e.g. \"PNG, JPG • Max 5 MB • Min 10 KB\"\r\n */\r\n // get helperText(): string {\r\n // const parts: string[] = [];\r\n\r\n // if (this.accept) {\r\n // const labels = this.accept\r\n // .split(',')\r\n // .map((t) =>\r\n // t.trim().replace('image/', '').replace('.', '').toUpperCase(),\r\n // )\r\n // .join(', ');\r\n // parts.push(labels);\r\n // }\r\n\r\n // if (this.maxSize !== null)\r\n // parts.push(`Max ${this.formatBytes(this.maxSize)}`);\r\n // if (this.minSize !== null)\r\n // parts.push(`Min ${this.formatBytes(this.minSize)}`);\r\n\r\n // return parts.join(' • ');\r\n // }\r\n\r\n // ─── Computed Getters ────────────────────────────────────────────────────────\r\n get isFilled(): boolean {\r\n return this.value?.length > 0;\r\n }\r\n\r\n /** Combines external errorMessage prop with internal validation errors. */\r\n get displayError(): string {\r\n return this.validationError || this.errorMessage;\r\n }\r\n\r\n get hasError(): boolean {\r\n return !!this.displayError;\r\n }\r\n}\r\n","<div class=\"file-wrapper\">\r\n <div\r\n class=\"file-upload-box\"\r\n (focus)=\"isFocused = true\"\r\n [class.focused]=\"isFocused\"\r\n [class.error]=\"hasError\"\r\n [class.disabled]=\"disabled\"\r\n [class.filled]=\"isFilled\"\r\n (drop)=\"onDrop($event)\"\r\n (dragover)=\"onDragOver($event)\"\r\n >\r\n <!-- PREFIX BUTTON -->\r\n @if (buttonPosition === \"left\") {\r\n <button\r\n type=\"button\"\r\n class=\"file-btn\"\r\n (click)=\"fileInput.click(); isFocused = true\"\r\n [disabled]=\"disabled\"\r\n >\r\n Choose File\r\n </button>\r\n }\r\n\r\n <!-- CONTENT -->\r\n <div class=\"file-content\">\r\n @if (!isFilled) {\r\n <span class=\"file-placeholder\">{{ placeholder }}</span>\r\n }\r\n\r\n @if (isFilled) {\r\n <div class=\"file-list\">\r\n @for (file of value; track $index; let i = $index) {\r\n <span class=\"file-chip\">\r\n {{ file.name }}\r\n <img\r\n class=\"remove-file\"\r\n src=\"images/x.svg\"\r\n alt=\"Remove file\"\r\n (click)=\"removeFile(i, fileInput)\"\r\n />\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- SUFFIX BUTTON -->\r\n @if (buttonPosition === \"right\") {\r\n <button\r\n type=\"button\"\r\n class=\"file-btn\"\r\n (click)=\"fileInput.click(); isFocused = true\"\r\n [disabled]=\"disabled\"\r\n >\r\n Choose File\r\n </button>\r\n }\r\n\r\n <!-- Hidden Input — accept wired dynamically -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [attr.accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n (change)=\"onFileSelect($event, fileInput)\"\r\n (cancel)=\"isFocused = false\"\r\n hidden\r\n />\r\n </div>\r\n\r\n <!-- CONSTRAINT HINT (shown when not filled and constraints exist) -->\r\n @if (helperText && !hasError) {\r\n <div class=\"file-hint-text\">{{ helperText }}</div>\r\n }\r\n\r\n <!-- ERROR (validation or external) -->\r\n @if (hasError && !disabled) {\r\n <div class=\"file-error-text\">\r\n <img src=\"images/error-info.svg\" alt=\"\" />{{ displayError }}\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nexport interface HeaderConfig {\r\n brandLogo: string;\r\n productLogo: string;\r\n showDropdown?: boolean;\r\n showGlobalIcon?: boolean;\r\n showAiAgent?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cats-ui-header',\r\n imports: [],\r\n templateUrl: './header.component.html',\r\n styleUrl: './header.component.scss',\r\n})\r\nexport class HeaderComponent {\r\n @Input() headerConfig!: HeaderConfig;\r\n @Input() dropdownItems: any[] = [];\r\n @Output() onDropdownSelection = new EventEmitter<any>();\r\n profileOpen = false;\r\n dropdownOpen = false;\r\n\r\n selectedItem: any;\r\n\r\n ngOnInit() {\r\n if (this.dropdownItems.length) {\r\n this.selectedItem = this.dropdownItems[0];\r\n }\r\n }\r\n\r\n onSelect(item: any) {\r\n this.selectedItem = item;\r\n this.dropdownOpen = false;\r\n this.onDropdownSelection.emit(this.selectedItem);\r\n }\r\n\r\n toggleMenu() {\r\n this.profileOpen = !this.profileOpen;\r\n }\r\n\r\n toggleDropdown() {\r\n this.dropdownOpen = !this.dropdownOpen;\r\n }\r\n\r\n closeMenu() {\r\n this.profileOpen = false;\r\n }\r\n}\r\n","<header class=\"app-header\">\r\n <!-- Left Section -->\r\n <div class=\"header-left\">\r\n <!-- <button class=\"app-launcher\" aria-label=\"App Launcher\">\r\n <span class=\"grid-icon\"></span>\r\n </button> -->\r\n <img src=\"images/Waffle.svg\" alt=\"\" />\r\n <img [src]=\"headerConfig.brandLogo\" alt=\"Brand Logo\" class=\"brand-logo\" />\r\n\r\n <img\r\n [src]=\"headerConfig.productLogo\"\r\n alt=\"Product Logo\"\r\n class=\"product-logo\"\r\n />\r\n </div>\r\n\r\n <!-- Right Section -->\r\n <div class=\"header-right\">\r\n @if (headerConfig.showGlobalIcon) {\r\n <img src=\"images/global-logo.svg\" alt=\"\" />\r\n }\r\n\r\n <img src=\"images/nodification.svg\" alt=\"\" class=\"icon-btn notification\" />\r\n @if (headerConfig.showDropdown && dropdownItems.length) {\r\n <div class=\"dropdown control-panel\">\r\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown()\">\r\n <span>{{ selectedItem.label }}</span>\r\n <span>\r\n <img src=\"images/chevron-down-white.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n @if (dropdownOpen) {\r\n <div class=\"dropdown-panel\">\r\n <ul>\r\n @for (item of dropdownItems; track item) {\r\n <li (click)=\"onSelect(item)\">{{ item.label }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @if (headerConfig.showAiAgent) {\r\n <div class=\"ai-agent\">\r\n <img src=\"images/star-yellow.svg\" alt=\"\" />\r\n <span class=\"ai-agent-btn\"> AI Agent</span>\r\n </div>\r\n }\r\n <div class=\"profile\">\r\n <div class=\"profile-wrapper\" (click)=\"toggleMenu()\">\r\n <img src=\"images/user-image.svg\" alt=\"User\" />\r\n <div class=\"profile-info\">\r\n <span class=\"name textTruncate\">Maximillian Thomas Broadwater</span>\r\n <span class=\"role textTruncate\">Super Admin User</span>\r\n </div>\r\n </div>\r\n\r\n @if (profileOpen) {\r\n <div class=\"loggedin-profile-list\">\r\n <!-- profile start -->\r\n\r\n <div class=\"profile-box\">\r\n <div class=\"for-edit-icon\">\r\n <img src=\"images/user-image.svg\" class=\"profile-img\" />\r\n <img src=\"images/edit.svg\" alt=\"edit\" class=\"on-hover\" />\r\n </div>\r\n\r\n <div>\r\n <div class=\"profile-heading textTruncate\">John Doe</div>\r\n <div class=\"profile-txt textTruncate\">Admin</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"switch-box\">\r\n <div class=\"switch-role\">\r\n <img src=\"images/users-01.svg\" class=\"edit-img\" />\r\n <div class=\"switch-txt\">Switch Role</div>\r\n\r\n <!-- drop down -->\r\n <div class=\"switching-role-dropdown\">\r\n <div class=\"text-title\">Switch Role</div>\r\n\r\n <div class=\"item-list active\">\r\n <input\r\n class=\"radio-input\"\r\n checked\r\n type=\"radio\"\r\n name=\"tracking\"\r\n />\r\n <span class=\"text\">Admin</span>\r\n </div>\r\n\r\n <div class=\"item-list\">\r\n <input class=\"radio-input\" type=\"radio\" name=\"tracking\" />\r\n <span class=\"text\">User</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"right-side-arrow\">\r\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"switch-box\">\r\n <div class=\"switch-role\">\r\n <img src=\"images/building-07.svg\" class=\"edit-img\" />\r\n <div class=\"switch-txt\">Switch Environment</div>\r\n </div>\r\n\r\n <div class=\"right-side-arrow\">\r\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">Identity & Access</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img class=\"fix-img-size\" src=\"images/user.svg\" alt=\"user\" />\r\n <div class=\"txt-align\">My Profile</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/key-01.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Change Password</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">Account & Preferences</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/shield.svg\" alt=\"bell\" />\r\n <div class=\"txt-align\">Account & Security</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box preference-dropdown-txt\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/settings-04.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Preference</div>\r\n\r\n <!-- dropdown -->\r\n <div class=\"preference-section\">\r\n <div class=\"preference-dropdown\">\r\n <!-- Language -->\r\n <div class=\"language-dropdown\">\r\n <div class=\"preference-dropdown-item\">\r\n <div class=\"text\">Languages</div>\r\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\r\n </div>\r\n\r\n <div class=\"language-section-wrapper\">\r\n <div class=\"language-heading\">\r\n <span>Change Language</span>\r\n </div>\r\n <div class=\"input-search-wrapper\">\r\n <div class=\"input-search\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input type=\"text\" placeholder=\"Enter or Search\" />\r\n </div>\r\n </div>\r\n <div class=\"language-section\">\r\n <div class=\"language-item\">\r\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\r\n <span>English</span>\r\n </div>\r\n <div class=\"language-item\">\r\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\r\n <span>English</span>\r\n </div>\r\n <div class=\"language-item\">\r\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\r\n <span>English</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"language-footer\">\r\n <button class=\"reset\">Reset</button>\r\n <button class=\"apply\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Timezone -->\r\n <div class=\"timezone-dropdown\">\r\n <div class=\"preference-dropdown-item\">\r\n <div class=\"text\">Timezone</div>\r\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\r\n </div>\r\n\r\n <div class=\"timezone-section-wrapper\">\r\n <div class=\"timezone-heading\">\r\n <span>Change Timezone</span>\r\n </div>\r\n <div class=\"input-search-wrapper\">\r\n <div class=\"input-search\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input type=\"text\" placeholder=\"Enter or Search\" />\r\n </div>\r\n </div>\r\n <div class=\"timezone-section\">\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" />\r\n <span class=\"bold-text\">\r\n Nouakchott\r\n <span class=\"light-text\">(GMT+00:00)</span>\r\n </span>\r\n </div>\r\n\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" />\r\n <span class=\"bold-text\">\r\n Beirut <span class=\"light-text\">(GMT+02:00)</span>\r\n </span>\r\n </div>\r\n\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" />\r\n <span class=\"bold-text\">\r\n Kuwait, Riyadh\r\n <span class=\"light-text\">(GMT+03:00)</span>\r\n </span>\r\n </div>\r\n\r\n <div class=\"timezone-dropdown-item\">\r\n <input type=\"radio\" name=\"timezone\" checked />\r\n <span class=\"bold-text\">\r\n Kolkata, India\r\n <span class=\"light-text\">(GMT+05:30)</span>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"timezone-footer\">\r\n <button class=\"reset\">Reset</button>\r\n <button class=\"apply\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/bell.svg\" alt=\"bell\" />\r\n <div class=\"txt-align\">Notification Settings</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">Help & Support</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/file-check-02.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Knowledge Base</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/help-circle.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Help/Support Center</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/info.svg\" alt=\"info\" />\r\n <div class=\"txt-align\">Report Issue</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/message-smile-square.svg\" class=\"fix-img-size\" />\r\n <div class=\"txt-align\">Feedback</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"preference-txt\">System</div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/settings.svg\" alt=\"settings\" />\r\n <div class=\"txt-align\">Settings</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/clock-refresh.svg\" alt=\"info\" />\r\n <div class=\"txt-align\">\r\n About <span class=\"light-grey\">(Version 2.14.3)</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"for-border\"></div>\r\n\r\n <div class=\"txt-box\">\r\n <div class=\"fix-space\">\r\n <img src=\"images/log-out-04.svg\" alt=\"log-out\" class=\"red\" />\r\n <div class=\"txt-align red\">Sign Out</div>\r\n </div>\r\n\r\n <div class=\"right-side-arrow\">\r\n <img src=\"images/chevron-right-red.svg\" alt=\"chevron-right\" />\r\n </div>\r\n </div>\r\n\r\n <!-- profile end -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</header>\r\n","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { DialogRef } from './dialog-ref';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DialogConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-dialog-box',\r\n imports: [CommonModule],\r\n templateUrl: './dialog-box.component.html',\r\n styleUrl: './dialog-box.component.scss',\r\n})\r\nexport class DialogBoxComponent {\r\n @Input() content!: any;\r\n @Input() config: DialogConfig = {};\r\n @Input() dialogRef!: DialogRef;\r\n @Input() expandable: boolean = true;\r\n\r\n @ViewChild('vc', { read: ViewContainerRef, static: true })\r\n vc!: ViewContainerRef;\r\n\r\n isExpanded = false;\r\n\r\n ngAfterViewInit() {\r\n this.vc.clear();\r\n\r\n if (this.content instanceof TemplateRef) {\r\n this.vc.createEmbeddedView(this.content, { dialogRef: this.dialogRef });\r\n } else {\r\n this.vc.createComponent(this.content);\r\n }\r\n }\r\n\r\n toggleExpand() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n\r\n onBackdropClick() {\r\n if (this.config?.closeOnBackdropClick) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n closeModal(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div class=\"cats-dialog-overlay\">\r\n <div\r\n class=\"cats-dialog\"\r\n [ngClass]=\"config.class\"\r\n [class.expanded]=\"isExpanded\"\r\n >\r\n <!-- Header -->\r\n @if (config.showHeader) {\r\n <div class=\"cats-dialog-header\">\r\n <div class=\"cats-header-left\">\r\n @if (config.title) {\r\n <span class=\"cats-title textTruncate\">{{ config.title }}</span>\r\n }\r\n </div>\r\n <div class=\"cats-header-right\">\r\n @if (expandable) {\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"toggleExpand()\"\r\n [src]=\"\r\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\r\n \"\r\n alt=\"expand\"\r\n />\r\n }\r\n <img\r\n class=\"cats-icon-btn\"\r\n (click)=\"closeModal()\"\r\n src=\"images/x-cancel-btn.svg\"\r\n alt=\"close\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Body -->\r\n <div class=\"cats-dialog-body\" [class.collapsed]=\"!isExpanded && expandable\">\r\n <ng-container #vc></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Subject, Observable } from 'rxjs';\r\n\r\nexport class DialogRef<T = any> {\r\n private afterClosed$ = new Subject<T | undefined>();\r\n\r\n constructor(public id: string) {}\r\n\r\n close(result?: T) {\r\n this.afterClosed$.next(result);\r\n this.afterClosed$.complete();\r\n }\r\n\r\n afterClosed(): Observable<T | undefined> {\r\n return this.afterClosed$.asObservable();\r\n }\r\n}\r\n","import {\r\n ApplicationRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n} from '@angular/core';\r\nimport { DialogRef } from './dialog-ref';\r\nimport { DialogBoxComponent } from './dialog-box.component';\r\nimport { DialogConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogBoxService {\r\n private dialogs = new Map<string, DialogRef>();\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector,\r\n ) {}\r\n\r\n open(componentOrTemplate: any, config: DialogConfig = {}): DialogRef {\r\n const id = config.id || this.generateId();\r\n\r\n const dialogRef = new DialogRef(id);\r\n this.dialogs.set(id, dialogRef);\r\n\r\n const componentRef = createComponent(DialogBoxComponent, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n componentRef.instance.content = componentOrTemplate;\r\n componentRef.instance.config = config;\r\n componentRef.instance.dialogRef = dialogRef;\r\n\r\n this.appRef.attachView(componentRef.hostView);\r\n\r\n const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;\r\n document.body.appendChild(domElem);\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this.appRef.detachView(componentRef.hostView);\r\n componentRef.destroy();\r\n this.dialogs.delete(id);\r\n });\r\n\r\n return dialogRef;\r\n }\r\n\r\n close(id: string) {\r\n this.dialogs.get(id)?.close();\r\n }\r\n\r\n closeAll() {\r\n this.dialogs.forEach((dialog) => dialog.close());\r\n }\r\n\r\n private generateId(): string {\r\n return 'dialog-' + Math.random().toString(36).substring(2, 9);\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nexport interface SidebarConfig {\r\n sidebarType?: 'sectional' | string;\r\n switchOrganiser?: boolean;\r\n}\r\nexport interface SidebarAttribute {\r\n attributeId?: number;\r\n attributeName: string;\r\n icon?: string;\r\n activeIcon?: string;\r\n url?: string;\r\n}\r\n\r\nexport interface SidebarFeature {\r\n featureId?: number;\r\n moduleId?: number;\r\n featuresName: string;\r\n icon?: string;\r\n activeIcon?: string;\r\n expandable?: boolean;\r\n url?: string;\r\n isEnable?: boolean;\r\n attributes?: SidebarAttribute[];\r\n}\r\n\r\nexport interface SidebarModule {\r\n moduleName: string;\r\n icon?: string;\r\n activeIcon?: string;\r\n expandable?: boolean;\r\n url?: string;\r\n isEnable?: boolean;\r\n features: SidebarFeature[];\r\n}\r\n@Component({\r\n selector: 'cats-ui-sidebar',\r\n imports: [NgClass],\r\n templateUrl: './sidebar.component.html',\r\n styleUrl: './sidebar.component.scss',\r\n})\r\nexport class SidebarComponent {\r\n @Input() appMenus: SidebarModule[] = [];\r\n isCollapsed = false;\r\n @Input() sidebarConfig!: SidebarConfig;\r\n expandedFeatures: Set<string> = new Set();\r\n @Output() activeSidebar = new EventEmitter<any>();\r\n\r\n collapsedOpenModule: number | null = null;\r\n collapsedOpenFeature: string | null = null;\r\n activeItem: {\r\n moduleIndex: number;\r\n featureIndex: number;\r\n attrIndex: number;\r\n } | null = null;\r\n constructor(private router: Router) {}\r\n /** A feature is expandable if it has at least one attribute */\r\n isExpandable(feature: SidebarFeature): boolean {\r\n return (feature.attributes?.length ?? 0) > 0;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.appMenus?.length) return;\r\n\r\n const moduleIndex = 0;\r\n const firstModule = this.appMenus[moduleIndex];\r\n\r\n if (!firstModule?.features?.length) return;\r\n\r\n const featureIndex = 0;\r\n const firstFeature = firstModule.features[featureIndex];\r\n\r\n // CASE 1: Feature has attributes → activate first attribute\r\n if (this.isExpandable(firstFeature)) {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: 0,\r\n };\r\n\r\n this.activeSidebar.emit({\r\n module: firstModule,\r\n feature: firstFeature,\r\n attribute: firstFeature.attributes?.[0],\r\n });\r\n }\r\n // CASE 2: No attributes → activate feature\r\n else {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: -1,\r\n };\r\n\r\n this.activeSidebar.emit({\r\n module: firstModule,\r\n feature: firstFeature,\r\n attribute: null,\r\n });\r\n }\r\n\r\n // Expand defaults (only for non-sectional)\r\n if (this.sidebarConfig.sidebarType !== 'sectional') {\r\n this.expandedModules.add(moduleIndex);\r\n\r\n if (this.isExpandable(firstFeature)) {\r\n this.expandedFeatures.add(`${moduleIndex}-${featureIndex}`);\r\n }\r\n }\r\n }\r\n\r\n toggleCollapse(): void {\r\n this.isCollapsed = !this.isCollapsed;\r\n // Reset collapsed panel state when toggling\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n }\r\n expandedModules: Set<number> = new Set();\r\n\r\n toggleModule(moduleIndex: number): void {\r\n const module = this.appMenus[moduleIndex];\r\n\r\n if (this.expandedModules.has(moduleIndex)) {\r\n this.expandedModules.delete(moduleIndex);\r\n } else {\r\n this.expandedModules.add(moduleIndex);\r\n }\r\n\r\n // If module has direct URL → navigate\r\n if (module?.url) {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex: -1,\r\n attrIndex: -1,\r\n };\r\n\r\n this.navigateToItem(module);\r\n\r\n this.activeSidebar.emit({\r\n module,\r\n feature: null,\r\n attribute: null,\r\n });\r\n\r\n return;\r\n }\r\n\r\n // fallback logic (your existing)\r\n const firstFeature = module.features?.[0];\r\n if (!firstFeature) return;\r\n\r\n if (this.isExpandable(firstFeature)) {\r\n this.setActiveItem(moduleIndex, 0, 0);\r\n } else {\r\n this.setActiveItem(moduleIndex, 0, -1);\r\n }\r\n }\r\n isModuleExpanded(moduleIndex: number): boolean {\r\n return this.expandedModules.has(moduleIndex);\r\n }\r\n toggleFeature(moduleIndex: number, featureIndex: number): void {\r\n const key = `${moduleIndex}-${featureIndex}`;\r\n if (this.expandedFeatures.has(key)) {\r\n this.expandedFeatures.delete(key);\r\n } else {\r\n this.expandedFeatures.add(key);\r\n }\r\n }\r\n\r\n isFeatureExpanded(moduleIndex: number, featureIndex: number): boolean {\r\n return this.expandedFeatures.has(`${moduleIndex}-${featureIndex}`);\r\n }\r\n\r\n setActiveItem(\r\n moduleIndex: number,\r\n featureIndex: number,\r\n attrIndex: number,\r\n ): void {\r\n this.openAttributeFeatureIndex = null;\r\n this.activeItem = { moduleIndex, featureIndex, attrIndex };\r\n\r\n const selectedModule = this.appMenus[moduleIndex];\r\n const selectedFeature = selectedModule?.features[featureIndex];\r\n const selectedAttribute = selectedFeature?.attributes?.[attrIndex];\r\n this.navigateToItem(selectedModule, selectedFeature, selectedAttribute);\r\n\r\n this.activeSidebar.emit({\r\n module: selectedModule,\r\n feature: selectedFeature,\r\n attribute: selectedAttribute,\r\n });\r\n }\r\n\r\n onFeatureClick(\r\n moduleIndex: number,\r\n featureIndex: number,\r\n feature: SidebarFeature,\r\n ) {\r\n const module = this.appMenus[moduleIndex];\r\n\r\n if (this.isExpandable(feature)) {\r\n this.toggleFeature(moduleIndex, featureIndex);\r\n\r\n // Optional: auto-select first attribute\r\n const attribute = feature.attributes?.[0];\r\n\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: 0,\r\n };\r\n\r\n this.navigateToItem(module, feature, attribute);\r\n\r\n this.activeSidebar.emit({ module, feature, attribute });\r\n } else {\r\n this.activeItem = {\r\n moduleIndex,\r\n featureIndex,\r\n attrIndex: -1,\r\n };\r\n\r\n this.navigateToItem(module, feature);\r\n\r\n this.activeSidebar.emit({ module, feature, attribute: null });\r\n }\r\n }\r\n\r\n isActiveItem(\r\n moduleIndex: number,\r\n featureIndex?: number,\r\n attrIndex?: number,\r\n ): boolean {\r\n if (!this.activeItem) return false;\r\n\r\n const module = this.appMenus[moduleIndex];\r\n const hasFeatures = module?.features?.length > 0;\r\n\r\n // MODULE ACTIVE\r\n if (featureIndex === undefined) {\r\n return (\r\n this.activeItem.moduleIndex === moduleIndex &&\r\n (!hasFeatures || this.activeItem.featureIndex === -1)\r\n );\r\n }\r\n\r\n // FEATURE ACTIVE\r\n if (attrIndex === undefined) {\r\n return (\r\n this.activeItem.moduleIndex === moduleIndex &&\r\n this.activeItem.featureIndex === featureIndex &&\r\n this.activeItem.attrIndex === -1\r\n );\r\n }\r\n\r\n // ATTRIBUTE ACTIVE\r\n return (\r\n this.activeItem.moduleIndex === moduleIndex &&\r\n this.activeItem.featureIndex === featureIndex &&\r\n this.activeItem.attrIndex === attrIndex\r\n );\r\n }\r\n\r\n collapsedModuleIndex: number | null = null;\r\n collapsedFeatureIndex: number | null = null;\r\n openAttributeFeatureIndex: number | null = null;\r\n isCollapsedIconActive(mIdx: number, fIdx?: number): boolean {\r\n if (!this.activeItem) return false;\r\n\r\n if (this.sidebarConfig?.sidebarType === 'sectional') {\r\n return (\r\n this.activeItem.moduleIndex === mIdx &&\r\n this.activeItem.featureIndex === fIdx\r\n );\r\n }\r\n\r\n // Non-sectional: if fIdx provided, match both; else match module only\r\n if (fIdx !== undefined) {\r\n return (\r\n this.activeItem.moduleIndex === mIdx &&\r\n this.activeItem.featureIndex === fIdx\r\n );\r\n }\r\n\r\n return this.activeItem.moduleIndex === mIdx;\r\n }\r\n\r\n onCollapsedSectionalIconClick(\r\n mIdx: number,\r\n fIdx: number,\r\n source?: string,\r\n ): void {\r\n const isAlreadyOpen =\r\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\r\n\r\n if (source == 'fIdx') {\r\n this.openAttributeFeatureIndex =\r\n this.openAttributeFeatureIndex === fIdx ? null : fIdx;\r\n }\r\n if (isAlreadyOpen && source !== 'fIdx') {\r\n // Close the flyout but keep the item active\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n return;\r\n }\r\n // Open this feature's flyout\r\n this.collapsedModuleIndex = mIdx;\r\n this.collapsedFeatureIndex = fIdx;\r\n\r\n // Set active\r\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\r\n if (!feature) return;\r\n\r\n if (this.isExpandable(feature)) {\r\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\r\n this.navigateToItem(\r\n this.appMenus[mIdx],\r\n feature,\r\n feature.attributes?.[0],\r\n );\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: feature.attributes?.[0],\r\n });\r\n } else {\r\n this.activeItem = {\r\n moduleIndex: mIdx,\r\n featureIndex: fIdx,\r\n attrIndex: -1,\r\n };\r\n\r\n this.navigateToItem(this.appMenus[mIdx], feature);\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: null,\r\n });\r\n }\r\n }\r\n\r\n onCollapsedModuleIconClick(mIdx: number): void {\r\n if (this.collapsedModuleIndex === mIdx) {\r\n // Toggle closed\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n return;\r\n }\r\n\r\n // Open this module's flyout, close any other\r\n this.collapsedModuleIndex = mIdx;\r\n this.collapsedFeatureIndex = null;\r\n }\r\n onCollapsedFeatureClick(mIdx: number, fIdx: number): void {\r\n this.openAttributeFeatureIndex = null;\r\n const isAlreadyOpen =\r\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\r\n\r\n if (isAlreadyOpen) {\r\n this.collapsedFeatureIndex = null;\r\n return;\r\n }\r\n\r\n this.collapsedModuleIndex = mIdx;\r\n this.collapsedFeatureIndex = fIdx;\r\n\r\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\r\n if (!feature) return;\r\n\r\n if (this.isExpandable(feature)) {\r\n this.openAttributeFeatureIndex = fIdx;\r\n\r\n // Set activeItem so isCollapsedIconActive(mIdx, fIdx) returns true\r\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\r\n this.navigateToItem(\r\n this.appMenus[mIdx],\r\n feature,\r\n feature.attributes?.[0],\r\n );\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: feature.attributes?.[0],\r\n });\r\n } else {\r\n this.activeItem = {\r\n moduleIndex: mIdx,\r\n featureIndex: fIdx,\r\n attrIndex: -1,\r\n };\r\n this.navigateToItem(this.appMenus[mIdx], feature);\r\n this.activeSidebar.emit({\r\n module: this.appMenus[mIdx],\r\n feature,\r\n attribute: null,\r\n });\r\n }\r\n }\r\n\r\n navigateToItem(\r\n module: SidebarModule,\r\n feature?: SidebarFeature,\r\n attribute?: SidebarAttribute,\r\n ) {\r\n let targetUrl: string | null = null;\r\n\r\n if (module?.url) {\r\n targetUrl = module.url;\r\n } else if (feature?.url) {\r\n targetUrl = feature.url;\r\n } else if (attribute?.url) {\r\n targetUrl = attribute.url;\r\n }\r\n\r\n if (targetUrl) {\r\n this.router.navigate([targetUrl]);\r\n }\r\n // else {\r\n // console.warn('No URL found for navigation');\r\n // }\r\n }\r\n @HostListener('document:click', ['$event'])\r\n handleOutsideClick(event: Event) {\r\n const target = event.target as HTMLElement;\r\n\r\n if (!target.closest('.cats-sidebar-panel')) {\r\n this.collapsedOpenModule = null;\r\n this.collapsedOpenFeature = null;\r\n this.collapsedModuleIndex = null;\r\n this.collapsedFeatureIndex = null;\r\n }\r\n }\r\n}\r\n","<div class=\"cats-sidebar-panel\" [class.collapsed]=\"isCollapsed\">\r\n <!-- Header -->\r\n <div class=\"group-header\">\r\n <div class=\"header-wrapper\" (click)=\"toggleCollapse()\">\r\n <img\r\n class=\"menu-icon\"\r\n [src]=\"\r\n isCollapsed ? 'images/menu-expand.svg' : 'images/menu-collapsed.svg'\r\n \"\r\n alt=\"Toggle menu\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Main Menu -->\r\n <ul class=\"main-menu-list\">\r\n @for (module of appMenus; track mIdx; let mIdx = $index) {\r\n <li class=\"menu-item-wrapper\" [class.disabled]=\"!module.isEnable\">\r\n <!-- Module Header -->\r\n @if (sidebarConfig.sidebarType === \"sectional\") {\r\n <div class=\"head-content\">\r\n <img class=\"img-dropdown\" src=\"images/filled-dropdown.svg\" alt=\"\" />\r\n <span class=\"menu-head\">{{ module.moduleName }}</span>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"head-content\"\r\n [class.active]=\"isActiveItem(mIdx)\"\r\n (click)=\"toggleModule(mIdx)\"\r\n >\r\n <img class=\"img-dropdown\" [src]=\"module.icon\" alt=\"\" />\r\n <span class=\"menu-head\">{{ module.moduleName }}</span>\r\n </div>\r\n }\r\n\r\n <!-- Features List -->\r\n @if (\r\n sidebarConfig.sidebarType === \"sectional\" || isModuleExpanded(mIdx)\r\n ) {\r\n <ul class=\"items-wrapper\">\r\n @for (feature of module.features; track fIdx; let fIdx = $index) {\r\n <li\r\n class=\"items-list\"\r\n [class.disabled]=\"!feature.isEnable\"\r\n [class.cats-show-nested-menu]=\"\r\n isExpandable(feature) &&\r\n isFeatureExpanded(mIdx, fIdx) &&\r\n !isCollapsed\r\n \"\r\n >\r\n <!-- Expanded view -->\r\n <div\r\n class=\"menu-item\"\r\n [class.active]=\"\r\n isActiveItem(mIdx, fIdx) && !isExpandable(feature)\r\n \"\r\n (click)=\"onFeatureClick(mIdx, fIdx, feature)\"\r\n >\r\n <div class=\"item-content\">\r\n <img\r\n class=\"left-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx)\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n alt=\"\"\r\n />\r\n <span class=\"menu-text\">{{ feature.featuresName }}</span>\r\n </div>\r\n\r\n <!-- Chevron: only when feature has attributes -->\r\n @if (isExpandable(feature)) {\r\n @if (isFeatureExpanded(mIdx, fIdx)) {\r\n <img\r\n class=\"chevron-up-icon\"\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n />\r\n } @else {\r\n <img\r\n class=\"chevron-right-icon\"\r\n src=\"images/chevron-right.svg\"\r\n alt=\"\"\r\n />\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Nested Sub-menu -->\r\n @if (isExpandable(feature) && isFeatureExpanded(mIdx, fIdx)) {\r\n <ul class=\"nested-sub-menu\">\r\n @for (\r\n attr of feature.attributes;\r\n track aIdx;\r\n let aIdx = $index\r\n ) {\r\n <li\r\n class=\"nested-item\"\r\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\r\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\r\n >\r\n <img\r\n class=\"attribute-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx, aIdx)\r\n ? attr?.activeIcon\r\n : attr?.icon\r\n \"\r\n alt=\"\"\r\n />\r\n <span class=\"menu-text\">{{ attr.attributeName }}</span>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n\r\n <div class=\"collapsed-menu\">\r\n <!-- Collapsed view (icon only) -->\r\n @if (sidebarConfig.sidebarType === \"sectional\") {\r\n @for (module of appMenus; track mIdx; let mIdx = $index) {\r\n @for (feature of module.features; track fIdx; let fIdx = $index) {\r\n <!-- Feature Icon (sectional: each feature gets its own icon) -->\r\n <div\r\n class=\"menu-item2\"\r\n [ngClass]=\"{\r\n active: isCollapsedIconActive(mIdx, fIdx),\r\n 'open-feature':\r\n collapsedModuleIndex === mIdx && collapsedFeatureIndex === fIdx,\r\n }\"\r\n >\r\n <div\r\n class=\"item-content\"\r\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx)\"\r\n >\r\n <img\r\n class=\"left-icon\"\r\n [src]=\"\r\n isCollapsedIconActive(mIdx, fIdx)\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n />\r\n </div>\r\n\r\n <div class=\"feature-section\">\r\n <div class=\"feature-dropdown\">\r\n <div class=\"feature-heading\">\r\n {{ module.moduleName }}\r\n </div>\r\n\r\n <!-- [class.active]=\"collapsedFeatureIndex === fIdx\" -->\r\n <div\r\n class=\"feature-item\"\r\n [ngClass]=\"{\r\n active: isCollapsedIconActive(mIdx, fIdx),\r\n 'open-attribute':\r\n openAttributeFeatureIndex === fIdx &&\r\n collapsedFeatureIndex === fIdx,\r\n }\"\r\n >\r\n <div\r\n class=\"feature-item-wrapper\"\r\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx, 'fIdx')\"\r\n >\r\n <div class=\"img-text-wrapper\">\r\n <img\r\n class=\"feature-icon\"\r\n [src]=\"\r\n collapsedFeatureIndex === fIdx\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n />\r\n <span class=\"text\">{{ feature.featuresName }}</span>\r\n </div>\r\n\r\n @if (isExpandable(feature)) {\r\n <img src=\"images/chevron-right.svg\" />\r\n }\r\n </div>\r\n\r\n <!-- Attributes -->\r\n @if (\r\n collapsedFeatureIndex === fIdx && isExpandable(feature)\r\n ) {\r\n <div class=\"attribute-section-wrapper\">\r\n <div class=\"attribute-heading\">\r\n {{ feature.featuresName }}\r\n </div>\r\n <div class=\"attribute-section\">\r\n @for (\r\n attr of feature.attributes;\r\n track aIdx;\r\n let aIdx = $index\r\n ) {\r\n <!-- [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\" -->\r\n <div\r\n class=\"attribute-item\"\r\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\r\n >\r\n <img\r\n class=\"attribute-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx, aIdx)\r\n ? attr.activeIcon\r\n : attr.icon\r\n \"\r\n />\r\n <span class=\"text\">{{ attr.attributeName }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n } @else {\r\n @for (module of appMenus; track mIdx; let mIdx = $index) {\r\n <!-- Module Icon (non-sectional: each module gets its own icon) -->\r\n <div\r\n class=\"menu-item2\"\r\n [ngClass]=\"{\r\n active: isCollapsedIconActive(mIdx),\r\n 'open-feature': collapsedModuleIndex === mIdx,\r\n }\"\r\n >\r\n <div class=\"item-content\" (click)=\"onCollapsedModuleIconClick(mIdx)\">\r\n <img\r\n class=\"left-icon\"\r\n [src]=\"\r\n isCollapsedIconActive(mIdx) ? module.activeIcon : module.icon\r\n \"\r\n alt=\"\"\r\n />\r\n </div>\r\n <div class=\"feature-section\">\r\n <div class=\"feature-dropdown\">\r\n <div class=\"feature-heading\">\r\n <span>\r\n {{ module.moduleName }}\r\n </span>\r\n </div>\r\n\r\n @for (feature of module.features; track fIdx; let fIdx = $index) {\r\n <div\r\n class=\"feature-item\"\r\n [ngClass]=\"{\r\n active:\r\n isCollapsedIconActive(mIdx, fIdx) ||\r\n (collapsedModuleIndex === mIdx &&\r\n collapsedFeatureIndex === fIdx),\r\n 'open-attribute':\r\n openAttributeFeatureIndex === fIdx &&\r\n collapsedFeatureIndex === fIdx,\r\n }\"\r\n >\r\n <div\r\n class=\"feature-item-wrapper\"\r\n (click)=\"onCollapsedFeatureClick(mIdx, fIdx)\"\r\n >\r\n <div class=\"img-text-wrapper\">\r\n <img\r\n class=\"feature-icon\"\r\n [src]=\"\r\n isCollapsedIconActive(mIdx, fIdx)\r\n ? feature.activeIcon\r\n : feature.icon\r\n \"\r\n alt=\"\"\r\n />\r\n <span class=\"text\">\r\n {{ feature.featuresName }}\r\n </span>\r\n </div>\r\n\r\n @if (isExpandable(feature)) {\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n }\r\n </div>\r\n\r\n <!-- Attributes -->\r\n @if (\r\n collapsedModuleIndex === mIdx &&\r\n collapsedFeatureIndex === fIdx &&\r\n isExpandable(feature)\r\n ) {\r\n <div class=\"attribute-section-wrapper\">\r\n <div class=\"attribute-heading\">\r\n <span>{{ feature.featuresName }}</span>\r\n </div>\r\n\r\n <div class=\"attribute-section\">\r\n @for (\r\n attr of feature.attributes;\r\n track aIdx;\r\n let aIdx = $index\r\n ) {\r\n <div\r\n class=\"attribute-item\"\r\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\r\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\r\n >\r\n <img\r\n class=\"attribute-icon\"\r\n [src]=\"\r\n isActiveItem(mIdx, fIdx, aIdx)\r\n ? attr.activeIcon\r\n : attr.icon\r\n \"\r\n />\r\n <span class=\"text\">{{ attr.attributeName }}</span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n @if (sidebarConfig.switchOrganiser) {\r\n <div class=\"group-footer\">\r\n <img class=\"footer-icon\" src=\"images/shuffle-01.svg\" alt=\"\" />\r\n <span class=\"footer-text\">Switch Organiser</span>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cats-ui\r\n */\r\n\r\nexport * from './lib/services/cats-ui.service';\r\nexport * from './lib/components/input';\r\nexport * from './lib/components/single-select';\r\nexport * from './lib/components/multi-select';\r\nexport * from './lib/components/search-box';\r\nexport * from './lib/components/auto-complete-single-select';\r\nexport * from './lib/directives/outside-click.directive';\r\nexport * from './lib/components/auto-complete-multi-select';\r\nexport * from './lib/modal/cats-ui.modal';\r\nexport * from './lib/components/toogle-button';\r\nexport * from './lib/components/checkbox-button';\r\nexport * from './lib/components/radio-button';\r\nexport * from './lib/components/custom-date-picker';\r\nexport * from './lib/directives/cats-ui-tooltip.directive';\r\nexport * from './lib/components/accordion';\r\nexport * from './lib/components/tabset';\r\nexport * from './lib/components/timestamp-filter';\r\nexport * from './lib/components/wizard';\r\nexport * from './lib/components/file-upload';\r\nexport * from './lib/components/header';\r\nexport * from './lib/components/dialog-box';\r\nexport * from './lib/components/sidebar';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["noop","i1","i2","i1.WizardService"],"mappings":"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"}
|