cats-ui-lib 2.2.5 → 2.2.6
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.
|
@@ -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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatsUiService {\n\n constructor() { }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n FormControl,\n NG_VALIDATORS,\n Validator,\n Validators,\n} from '@angular/forms';\nimport { InputConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n ],\n host: { tabindex: '0' },\n})\nexport class InputComponent implements ControlValueAccessor, Validator {\n @Input() inputConfig!: InputConfig;\n @Output() onKeyDown = new EventEmitter<{ value: string } & KeyboardEvent>();\n @Output() onKeyUp = new EventEmitter<{ value: string } & KeyboardEvent>();\n\n value: string = '';\n disabled = false;\n touched = false;\n control!: FormControl<any> | null;\n showPassword = false;\n private onChange = (value: any) => {};\n private onTouched = () => {};\n\n /**\n * @description Method to when value changes\n * @author Shiva Kant\n */\n handleInput(event: Event) {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.onChange(this.value);\n\n if (this.control) {\n this.control.markAsDirty();\n this.control.updateValueAndValidity();\n }\n }\n /**\n * @description Method to Handle key down event\n * @author Shiva Kant\n */\n handleKeyDown(event: KeyboardEvent) {\n this.onKeyDown.emit({ value: this.value, ...event });\n }\n\n /**\n * @description Method to handle key up event\n * @author Shiva Kant\n */\n handleKeyUp(event: KeyboardEvent) {\n this.onKeyUp.emit({ value: this.value, ...event });\n }\n\n /**\n * @description Method to Handle blur (touched\n * @author Shiva Kant\n */\n\n handleBlur(event: FocusEvent): void {\n this.touched = true;\n this.onTouched();\n const control = (event.target as any)?.control;\n control?.markAsTouched?.();\n }\n /**\n * @description Method to ControlValueAccessor methods\n * @author Shiva Kant\n */\n\n writeValue(value: any): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * @description Method to Validator interface\n * @author Shiva Kant\n */\n\n validate(control: FormControl): any {\n this.control = control;\n if (this.inputConfig?.type === 'email') {\n return Validators.email(control);\n }\n return null;\n }\n /**\n * @description method to use show password\n * @author Shiva Kant\n */\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n}\n","<div class=\"cats-input-container\">\n @if (inputConfig.label) {\n <label class=\"cats-label-text\">{{ inputConfig.label }}</label>\n }\n <div class=\"cats-custom-input\">\n <input\n [ngClass]=\"{\n invalid:\n (control?.touched || control?.dirty) &&\n control?.invalid &&\n control?.errors,\n }\"\n class=\"cats-input-box\"\n [type]=\"showPassword ? 'text' : inputConfig.type\"\n [placeholder]=\"inputConfig.placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (keyup)=\"handleKeyUp($event)\"\n />\n <!-- Eye Icon Only When Type Is Password -->\n @if (inputConfig.type === \"password\") {\n <span class=\"cats-eye-icon\" (click)=\"togglePassword()\">\n <img\n class=\"cats-eye-img\"\n [src]=\"showPassword ? 'images/eye.svg' : 'images/eye-off.svg'\"\n alt=\"toggle password visibility\"\n />\n </span>\n }\n </div>\n</div>\n","export class SingleSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n disabledField?: string = '';\n colorField?: string = '';\n iconField?: string = '';\n placeholder?: string = 'Select Option';\n prefixLabel?: string = '';\n enableSearch?: boolean = false;\n searchPlaceholder?: string = 'Search Here';\n required?: boolean = false;\n}\n\nexport class MultiSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n disabledField?: string = '';\n colorField?: string = '';\n iconField?: string = '';\n placeholder?: string = 'Select Option';\n prefixLabel?: string = '';\n enableSearch?: boolean = false;\n searchPlaceholder?: string = 'Search Here';\n chipLimit: number = 2;\n selectAll?: boolean = true;\n required?: boolean = false;\n}\n\nexport class SearchConfig {\n serachValue: string = '';\n placeholder?: string = 'Search';\n}\n\nexport class InputConfig {\n type: 'text' | 'email' | 'password' | 'number' = 'text';\n placeholder?: string = 'Enter here';\n label?: string = 'label';\n}\n\nexport class AutoCompleteSingleSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n colorField?: string = '';\n iconField?: string = '';\n disabledField?: string = '';\n placeholder?: string = 'Enter or Select';\n required?: boolean = false;\n customInput: boolean = false;\n}\nexport class AutoCompleteMultiSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n disabledField?: string = '';\n colorField?: string = '';\n iconField?: string = '';\n selectAll?: boolean = true;\n placeholder?: string = 'Enter or Select';\n required?: boolean = false;\n chipLimit: number = 2;\n customInput?: boolean = false;\n pattern?: string = '';\n infoText?: string = '';\n selectionLimit?: number = 0;\n}\nexport class ToggleConfig {\n checked: boolean = false;\n disabled?: boolean = false;\n}\nexport class CheckBoxSubtask {\n idField: string = '';\n textField: string = '';\n checked?: boolean = false;\n}\n\nexport class CheckBoxConfig {\n idField: string = '';\n textField: string = '';\n disabledField?: string = '';\n name: string = '';\n checked?: boolean = false;\n subtasks?: CheckBoxSubtask[];\n}\nexport interface RadioButtonConfig {\n label?: string;\n disabled?: string;\n valueField?: string;\n textField?: string;\n name: string;\n layout?: 'horizontal' | 'vertical';\n}\nexport interface DialogConfig {\n id?: string;\n title?: string;\n closeOnBackdropClick?: boolean;\n showBackdrop?: boolean;\n class?: string;\n showHeader?: boolean;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { SingleSelectConfig } from '../../modal/cats-ui.modal';\n\nconst noop = () => {};\nexport const SINGLE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SingleSelectComponent),\n multi: true,\n};\nexport const SINGLE_SELECT_CONTROL_VALUE_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SingleSelectComponent),\n multi: true,\n};\n@Component({\n selector: 'cats-ui-single-select',\n imports: [CommonModule, FormsModule],\n templateUrl: './single-select.component.html',\n styleUrl: './single-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SingleSelectComponent,\n multi: true,\n },\n SINGLE_SELECT_CONTROL_VALUE_VALIDATOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { tabindex: '0' },\n})\nexport class SingleSelectComponent\n implements OnInit, OnChanges, ControlValueAccessor\n{\n @Input() optionList: any[] = [];\n @Input() singleSelectConfig: SingleSelectConfig = new SingleSelectConfig();\n @Input() selectedOption: any;\n @Output() onSelection = new EventEmitter();\n @Input() returnType: 'object' | 'text' = 'object';\n showDropdown = false;\n searchText: string = '';\n inValid: boolean = false;\n control!: FormControl<any> | null;\n disableControl: boolean = false;\n @Output() onScroll: any = new EventEmitter();\n @Input() parentNativeElement: any;\n selectedObj: any = {};\n\n @ContentChild('selectedData') selectedData!: TemplateRef<any>;\n\n constructor(\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n ) {}\n\n // These lifecycle hooks will be in use for further implementation\n ngOnInit(): void {}\n ngOnChanges(_changes: SimpleChanges): void {\n if (!_changes['optionList']?.currentValue) {\n this.optionList = [];\n } else {\n if (this.optionList.length > 10)\n this.singleSelectConfig.enableSearch = true;\n this.writeValue(this.control?.value);\n }\n }\n\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n if (this.parentNativeElement) {\n // this.parentNativeElement.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // });\n let parentDiv = document.getElementById(this.parentNativeElement);\n setTimeout(() => {\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\n let dropdonwList: any = document.getElementById('container_scroll');\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\n dropdonwList.style['transform'] = `translate(0px,-${\n elBoundary?.['height'] + 54\n }px`;\n }\n }, 20);\n }\n }\n\n /**\n * @description Method to check if provide arg is an object or not\n * @author Shiva Kant\n * @param Obj:any\n * @returns boolean\n */\n isObjEmpty(obj: any): boolean {\n if (typeof obj == 'string' || typeof obj == 'number') return true;\n return !(obj && Object.keys(obj).length > 0);\n }\n\n /**\n * @description Method is to update selected option and then\n * update formcontrol by call onChangeCallback.\n * @author Shiva Kant\n * @param item\n * @returns void\n */\n updateSelectedOption(item: any): void {\n let selectedValue = this.returnType === 'object' ? item : item[this.singleSelectConfig.idField];\n this.selectedOption = selectedValue;\n this.selectedObj = item;\n this.toggleDropdown();\n this.inValid = false;\n this.onChangeCallback(selectedValue);\n this.onTouchedCallback();\n this.onSelection.emit(selectedValue);\n }\n\n validate(control: FormControl): void {\n this.control = control;\n }\n\n // Below Methods are used to register form API methods in these variable to use them later\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\n\n /**\n * @description method to update value of selectedOption\n * @author Shiva Kant\n * @param obj this is provided by formcontrol\n * @returns void\n */\n writeValue(obj: any): void {\n this.selectedOption = '';\n this.selectedObj = '';\n if (this.optionList.length && obj) {\n if (typeof obj === 'string' || typeof obj === 'number') {\n if (\n typeof this.optionList?.[0] === 'string' ||\n typeof this.optionList?.[0] === 'number'\n ) {\n if (this.optionList.includes(obj)) {\n this.selectedOption = obj;\n this.selectedObj = obj;\n }\n } else if (obj != '') {\n for (const option of this.optionList) {\n if (\n option[this.singleSelectConfig.idField] == obj ||\n option[this.singleSelectConfig.textField] == obj\n ) {\n this.selectedOption = option;\n this.selectedObj = option;\n break;\n }\n }\n }\n } else {\n if (\n obj?.hasOwnProperty(this.singleSelectConfig.idField) &&\n !this.isObjEmpty(this.optionList[0])\n ) {\n for (const option of this.optionList) {\n if (\n option[this.singleSelectConfig.idField] ==\n obj[this.singleSelectConfig.idField]\n ) {\n this.selectedOption = option;\n this.selectedObj = option;\n break;\n }\n }\n }\n }\n setTimeout(() => {\n this.onChangeCallback(this.selectedOption);\n }, 0);\n this.cd.markForCheck();\n }\n }\n\n /**\n * @description method to register on change callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * @description method to register on touch callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n //willbe used in further implementation\n setDisabledState(isDisabled: boolean): void {\n this.disableControl = isDisabled;\n }\n\n /**\n * @description method to update ontouchcallback on blur\n * @author Shiva Kant\n */\n @HostListener('blur')\n public onTouched() {\n this.onTouchedCallback();\n }\n\n /**\n * @description method to toggle dropdown on outside click\n * @author Shiva Kant\n */\n @HostListener('document:click', ['$event'])\n public closeDropdown(event: any) {\n if (!this.el.nativeElement.contains(event.target)) {\n if (this.showDropdown && this.singleSelectConfig.required) {\n this.inValid =\n this.selectedOption == '' ||\n JSON.stringify(this.selectedOption) == '{}';\n }\n this.searchText = '';\n if (this.showDropdown) this.onTouchedCallback();\n this.showDropdown = false;\n }\n }\n\n /**\n * @description method to load more list\n * @author Shiva Kant\n * @param event\n */\n onDivScroll(event: any): void {\n if (\n event.target.offsetHeight + event.target.scrollTop >=\n event.target.scrollHeight - 1 &&\n this.optionList.length\n ) {\n this.onScroll.emit();\n }\n }\n get filteredOptionsValue(): any[] {\n if (!this.searchText || this.searchText.trim() === '') {\n return this.optionList;\n }\n return this.optionList.filter((option) => {\n if (typeof option != 'object') {\n return option?.toLowerCase().includes(this.searchText.toLowerCase());\n } else {\n return option[this.singleSelectConfig.textField]\n ?.toLowerCase()\n .includes(this.searchText.toLowerCase());\n }\n });\n }\n}\n","<div class=\"cats-main-wrapper\" id=\"main-wrapper-single-select\">\n <div\n class=\"cats-single-select-dropdown\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{\n invalid:\n (control?.touched || control?.dirty) &&\n control?.invalid &&\n control?.errors,\n 'disable-input': !selectedOption && disableControl,\n 'selected-disable': selectedOption && disableControl,\n }\"\n >\n <div class=\"cats-left-details\">\n @if (singleSelectConfig.prefixLabel) {\n <span class=\"predefine-label\">\n <p class=\"prefix-text textTruncate\">{{ singleSelectConfig.prefixLabel }}</p>\n </span>\n }\n @if (\n !isObjEmpty(selectedOption) &&\n selectedOption[singleSelectConfig.textField]\n ) {\n <ng-container\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate\"\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\n ></ng-container>\n <ng-template #defaultTemplate let-data=\"data\">\n <!-- COLOR -->\n @if (singleSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n selectedOption[singleSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (singleSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"selectedOption[singleSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n\n <!-- TEXT -->\n <span class=\"textTruncate\">\n {{ selectedOption[singleSelectConfig.textField] }}\n </span>\n </ng-template>\n } @else if (selectedOption && isObjEmpty(selectedOption)) {\n <ng-container\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate1\"\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\n ></ng-container>\n\n <ng-template #defaultTemplate1 let-data=\"data\">\n <span class=\"textTruncate\">\n {{ selectedObj[singleSelectConfig.textField] || selectedObj }}\n </span>\n </ng-template>\n } @else {\n <span class=\"placeholderColor textTruncate\">{{\n singleSelectConfig.placeholder\n }}</span>\n }\n </div>\n <span >\n <img class=\"cats-arrow-icon\"\n src=\"images/chevron-up.svg\"\n alt=\"\"\n srcset=\"\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img class=\"cats-arrow-icon\"\n src=\"images/chevron-down.svg\"\n alt=\"\"\n srcset=\"\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </span>\n </div>\n @if (showDropdown) {\n <div\n class=\"cats-dropdown-list\"\n id=\"container_scroll\"\n (scroll)=\"onDivScroll($event)\"\n >\n @if (singleSelectConfig.enableSearch) {\n <div class=\"cats-search-bar\">\n <div class=\"cats-input-box\">\n <img src=\"images/search.svg\" class=\"cats-search-icon\" alt=\"\" />\n <input\n type=\"text\"\n class=\"filter-search-box\"\n name=\"\"\n id=\"\"\n [placeholder]=\"\n singleSelectConfig.searchPlaceholder || 'Search here'\n \"\n [(ngModel)]=\"searchText\"\n />\n <img\n src=\"images/x.svg\"\n class=\"cats-cross-icon\"\n alt=\"\"\n (click)=\"searchText = ''\"\n />\n </div>\n </div>\n }\n <ul class=\"cats-dropdown-list-wrapper\">\n @if (isObjEmpty(this.optionList[0] || \"\")) {\n @for (option of filteredOptionsValue; track $index) {\n <li\n class=\"cats-item\"\n (click)=\"updateSelectedOption(option)\"\n [ngClass]=\"{\n 'disabled-option':\n singleSelectConfig.disabledField &&\n option[singleSelectConfig.disabledField],\n }\"\n >\n <span class=\"textTruncate\">{{ option }}</span>\n </li>\n } @empty {\n <li class=\"no-data cats-item\">No Data Found.</li>\n }\n } @else {\n @for (option of filteredOptionsValue; track $index) {\n <li\n class=\"cats-item\"\n (click)=\"updateSelectedOption(option)\"\n [ngClass]=\"{\n 'disabled-option':\n singleSelectConfig.disabledField &&\n option[singleSelectConfig.disabledField],\n }\"\n >\n <!-- COLOR BADGE -->\n @if (singleSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color': option[singleSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (singleSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"option[singleSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\">{{\n option[singleSelectConfig.textField]\n }}</span>\n </li>\n } @empty {\n <li class=\"no-data cats-item\">No Data Found.</li>\n }\n }\n </ul>\n </div>\n }\n</div>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n ControlValueAccessor,\n FormControl,\n FormsModule,\n} from '@angular/forms';\nimport { MultiSelectConfig } from '../../modal/cats-ui.modal';\nconst noop = () => {};\nexport const MULTI_SELECT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectComponent),\n multi: true,\n};\nexport const MULTI_SELECT_CONTROL_VALUE_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MultiSelectComponent),\n multi: true,\n};\n@Component({\n selector: 'cats-ui-multi-select',\n imports: [NgClass, FormsModule, NgStyle],\n templateUrl: './multi-select.component.html',\n styleUrl: './multi-select.component.scss',\n providers: [\n MULTI_SELECT_CONTROL_VALUE_ACCESSOR,\n MULTI_SELECT_CONTROL_VALUE_VALIDATOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { tabindex: '0' },\n})\nexport class MultiSelectComponent\n implements OnChanges, OnInit, ControlValueAccessor\n{\n @Input() optionList: any[] = [];\n @Input() multiSelectConfig: MultiSelectConfig = new MultiSelectConfig();\n\n @Input() selectedOptions: any[] = [];\n\n @Output() onSelection = new EventEmitter();\n\n control!: FormControl<any> | null;\n\n showDropdown = false;\n isListArrayOfObject = false;\n isSelectedAll = false;\n inValid: boolean = false;\n searchText: string = '';\n disabledControl: boolean = false;\n\n constructor(\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n ) {}\n\n // These lifecycle hooks will be in use for further implementation\n ngOnInit(): void {}\n ngOnChanges(_changes: SimpleChanges): void {\n if (\n _changes['optionList'].currentValue &&\n _changes['optionList'].currentValue.length > 0\n ) {\n if (\n typeof this.optionList[0] === 'string' ||\n typeof this.optionList[0] === 'number'\n ) {\n this.optionList = this.optionList.map((option: any) => {\n const item: any = {\n [this.multiSelectConfig.idField]: option,\n [this.multiSelectConfig.textField]: option,\n isSelected: false,\n };\n\n if (this.multiSelectConfig.disabledField) {\n item[this.multiSelectConfig.disabledField] = false;\n }\n\n return item;\n });\n } else {\n this.isListArrayOfObject = true;\n this.optionList = this.optionList.map((option: any) => {\n return {\n ...option,\n isSelected: false,\n };\n });\n }\n if (this.optionList.length > 10)\n this.multiSelectConfig.enableSearch = true;\n this.writeValue(this.control?.value);\n }\n }\n\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n /**\n * @description Method to check if provide arg is an object or not\n * @author Shiva Kant\n * @param Obj:any\n * @returns boolean\n */\n isObjEmpty(obj: any): boolean {\n return !(obj && Object.keys(obj).length > 0);\n }\n\n /**\n * @description Method is to update selected option and then\n * update formcontrol by call onChangeCallback.\n * @author Shiva Kant\n * @param item\n * @returns void\n */\n updateSelectedOption(item: any): void {\n item.isSelected = !item.isSelected;\n if (!item.isSelected) {\n let ind = this.selectedOptions.findIndex(\n (option: any) =>\n item[this.multiSelectConfig.idField] ==\n option[this.multiSelectConfig.idField],\n );\n if (ind >= 0) this.selectedOptions.splice(ind, 1);\n } else {\n this.selectedOptions.push(item);\n }\n this.isSelectedAll = this.optionList.every(\n (option: any) => option.isSelected == true,\n );\n\n this.inValid = false;\n this.onChangeCallback(this.selectedOptions);\n this.onTouchedCallback();\n this.onSelection.emit(this.selectedOptions);\n this.cd.markForCheck();\n }\n\n // Below Methods are used to register form API methods in these variable to use them later\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n\n validate(control: FormControl): void {\n this.control = control;\n }\n\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\n\n /**\n * @description method to update value of selectedOption\n * @author Shiva Kant\n * @param controlValue this is provided by formcontrol\n * @returns void\n */\n writeValue(controlValue: any[]): void {\n if (this.optionList.length) {\n this.selectedOptions = [];\n if (controlValue && controlValue.length > 0) {\n if (\n typeof controlValue[0] === 'string' ||\n typeof controlValue[0] === 'number'\n ) {\n controlValue = controlValue.map((option: string | number) => {\n return {\n [this.multiSelectConfig.idField]: option,\n [this.multiSelectConfig.textField]: option,\n };\n });\n }\n for (const option of controlValue) {\n let ind = this.optionList.findIndex(\n (item: any) =>\n item[this.multiSelectConfig.idField] ==\n option[this.multiSelectConfig.idField] ||\n item[this.multiSelectConfig.textField] ==\n option[this.multiSelectConfig.textField],\n );\n if (ind >= 0) {\n this.optionList[ind] = {\n ...this.optionList[ind],\n isSelected: true,\n };\n this.selectedOptions.push(this.optionList[ind]);\n }\n }\n }\n this.isSelectedAll = this.optionList.every(\n (option: any) => option.isSelected == true,\n );\n this.onChangeCallback(this.selectedOptions);\n this.cd.markForCheck();\n }\n }\n\n /**\n * @description method to register on change callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * @description method to register on touch callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n //willbe used in further implementation\n setDisabledState(isDisabled: boolean): void {\n this.disabledControl = isDisabled;\n }\n\n /**\n * @description method to update ontouchcallback on blur\n * @author Shiva Kant\n */\n @HostListener('blur')\n public onTouched() {\n this.onTouchedCallback();\n }\n\n /**\n * @description method to toggle dropdown on outside click\n * @author Shiva Kant\n */\n @HostListener('document:click', ['$event'])\n public closeDropdown(event: any) {\n if (!this.el.nativeElement.contains(event.target)) {\n if (this.showDropdown && this.multiSelectConfig.required) {\n this.inValid = this.selectedOptions.length < 0;\n }\n this.searchText = '';\n this.showDropdown = false;\n }\n }\n\n checkUncheckAll(): void {\n if (this.isSelectedAll) {\n this.optionList = this.optionList.map((option: any) => {\n if (\n this.multiSelectConfig.disabledField &&\n option[this.multiSelectConfig.disabledField]\n ) {\n return option;\n }\n return { ...option, isSelected: false };\n });\n\n this.isSelectedAll = false;\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\n } else {\n this.optionList = this.optionList.map((option: any) => {\n if (\n this.multiSelectConfig.disabledField &&\n option[this.multiSelectConfig.disabledField]\n ) {\n return option;\n }\n return { ...option, isSelected: true };\n });\n\n this.isSelectedAll = true;\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\n }\n\n this.onChangeCallback(this.selectedOptions);\n this.onSelection.emit(this.selectedOptions);\n }\n\n get filteredOptionsValue(): any[] {\n if (!this.searchText || this.searchText.trim() === '') {\n return this.optionList;\n }\n return this.optionList.filter((option) =>\n option[this.multiSelectConfig.textField]\n ?.toLowerCase()\n .includes(this.searchText.toLowerCase()),\n );\n }\n}\n","<div class=\"cats-main-wrapper\">\n <div\n class=\"cats-display-div\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{\n invalid:\n control?.touched &&\n control?.dirty &&\n control?.invalid &&\n control?.errors,\n 'disable-input': !selectedOptions && disabledControl,\n 'selected-disable': selectedOptions && disabledControl,\n }\"\n >\n <div class=\"cats-left-details\">\n @if (multiSelectConfig.prefixLabel) {\n <span class=\"predefine-label\">\n <p class=\"textTruncate predefine-label-text\">\n {{ multiSelectConfig.prefixLabel }}\n </p>\n </span>\n }\n <div class=\"multi-label-wrapper\">\n @if (selectedOptions.length > 0) {\n @for (item of selectedOptions; track $index) {\n @if (multiSelectConfig.chipLimit >= $index + 1) {\n <div class=\"cats-input-text\">\n <!-- SHOW ONLY WHEN SELECTED -->\n @if (item.isSelected) {\n <ng-container>\n <!-- COLOR BADGE -->\n @if (multiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[multiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (multiSelectConfig.iconField) {\n <span>\n <img\n class=\"cats-option-icon\"\n [src]=\"item[multiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n </ng-container>\n }\n\n <!-- TEXT -->\n <span class=\"textTruncate cats-span-text\">\n {{ item[multiSelectConfig.textField] }}\n </span>\n <!-- <span class=\"textTruncate\">{{\n item[multiSelectConfig.textField]\n }}</span> -->\n <!-- <i-feather name=\"x\" (click)=\"$event.stopPropagation();updateSelectedOption(item)\"></i-feather> -->\n <img\n src=\"images/x-circle.svg\"\n (click)=\"$event.stopPropagation(); updateSelectedOption(item)\"\n class=\"cats-cross-icon\"\n alt=\"\"\n />\n </div>\n }\n }\n } @else {\n <span class=\"placeholderColor textTruncate\">{{\n multiSelectConfig.placeholder\n }}</span>\n }\n @if (multiSelectConfig.chipLimit < selectedOptions.length) {\n <div class=\"cats-view-more\">\n +{{ selectedOptions.length - multiSelectConfig.chipLimit }}\n </div>\n }\n </div>\n </div>\n <span class=\"arrow-icon\">\n <img\n src=\"images/chevron-up.svg\"\n alt=\"\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img\n src=\"images/chevron-down.svg\"\n alt=\"\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </span>\n </div>\n @if (showDropdown) {\n <div class=\"cats-dropdown-list\" id=\"container_scroll\">\n @if (multiSelectConfig.enableSearch) {\n <div class=\"cats-search-bar\">\n <div class=\"cats-input-box\">\n <img class=\"cats-search-img\" src=\"images/search.svg\" alt=\"\" />\n <input\n type=\"text\"\n class=\"filter-search-box\"\n name=\"\"\n id=\"\"\n [placeholder]=\"\n multiSelectConfig.searchPlaceholder || 'Search here'\n \"\n [(ngModel)]=\"searchText\"\n />\n <img\n src=\"images/x.svg\"\n class=\"cats-cross-icon\"\n alt=\"\"\n (click)=\"searchText = ''\"\n />\n </div>\n </div>\n }\n <ul class=\"cats-dropdown-list-wrapper\">\n @if (multiSelectConfig.selectAll && optionList.length > 0) {\n <li class=\"cats-multiitem\" (click)=\"checkUncheckAll()\">\n <span class=\"cats-checkbox-container\">\n <input type=\"checkbox\" [checked]=\"isSelectedAll\" />\n @if (isSelectedAll) {\n UnSelectAll\n } @else {\n SelectAll\n }\n </span>\n </li>\n }\n @for (option of filteredOptionsValue; track $index) {\n <li\n class=\"cats-checkbox-container cats-multiitem\"\n (click)=\"updateSelectedOption(option)\"\n [ngClass]=\"{\n 'disabled-option':\n multiSelectConfig.disabledField &&\n option[multiSelectConfig.disabledField],\n }\"\n >\n <input type=\"checkbox\" [checked]=\"option.isSelected\" />\n <!-- COLOR BADGE -->\n @if (multiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color': option[multiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (multiSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"option[multiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\"\n >{{ option[multiSelectConfig.textField] }}\n </span>\n </li>\n } @empty {\n <li class=\"no-data cats-multiitem\">No Data Found.</li>\n }\n </ul>\n </div>\n }\n</div>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n} from '@angular/forms';\nimport { SearchConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-search-box',\n imports: [FormsModule],\n templateUrl: './search-box.component.html',\n styleUrl: './search-box.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SearchBoxComponent),\n multi: true,\n },\n ],\n})\nexport class SearchBoxComponent implements ControlValueAccessor {\n searchParam: string = '';\n @Input() searchConfig: SearchConfig = new SearchConfig();\n @Output() onClose = new EventEmitter<void>();\n @Output() searchParamValue = new EventEmitter<string>();\n\n private onChange: (value: string) => void = () => {};\n public onTouched: () => void = () => {};\n isDisabled = false;\n\n ngOnInit(): void {\n this.searchParam = this.searchConfig?.serachValue || '';\n }\n /**\n * @description Method to Called when input changes\n * @author Shiva Kant\n */\n\n onInputChange(event: any) {\n const value = (event.target as HTMLInputElement)?.value;\n this.searchParam = value;\n this.onChange(value);\n this.searchParamValue.emit(value);\n }\n /**\n * @description Method to closeSearchBar\n * @author Shiva Kant\n */\n closeSearchBar(): void {\n this.searchParam = '';\n this.onChange('');\n this.searchParamValue.emit('');\n this.onClose.emit();\n }\n\n // -------- ControlValueAccessor methods --------\n writeValue(value: string): void {\n this.searchParam = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n}\n","<div class=\"cats-search-input\">\n <img class=\"cats-search-icon\" src=\"images/search.svg\" alt=\"\" srcset=\"\" />\n <input\n [placeholder]=\"searchConfig.placeholder\"\n type=\"text\"\n class=\"cats-search-text\"\n [value]=\"searchParam\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onTouched()\"\n />\n @if (searchParam.length > 0) {\n <div class=\"cats-cross-icon\">\n <img class=\"cats-clear-icon\" src=\"images/x-cancel-btn.svg\" alt=\"\" srcset=\"\" (click)=\"closeSearchBar()\" />\n </div>\n }\n</div>\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from \"@angular/core\";\n\n@Directive({\n selector: '[catsOutsideClick]',\n standalone: true,\n})\nexport class OutsideClickDirective {\n @Output() public clickOutSide = new EventEmitter<MouseEvent>();\n\n constructor(private elementRef: ElementRef) {}\n /**\n * @description Hosts listener\n * @author Shiva Kant\n * @param event \n * @returns click \n */\n @HostListener('document:click', ['$event'])\n public onClick(event: MouseEvent): void {\n const targetElement = event.target as HTMLElement | null;\n\n // Guard clause: exit early if no target or not an element\n if (!targetElement) {\n return;\n }\n\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\n if (!clickInside) {\n this.clickOutSide.emit(event);\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n} from '@angular/forms';\nimport { AutoCompleteSingleSelectConfig } from '../../modal/cats-ui.modal';\nimport { CommonModule } from '@angular/common';\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\nconst noop = () => {};\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\n multi: true,\n};\nexport const DROPDOWN_CONTROL_VALUE_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\n multi: true,\n};\n@Component({\n selector: 'cats-ui-input-single-select',\n imports: [CommonModule, FormsModule, OutsideClickDirective],\n templateUrl: './auto-complete-single-select.component.html',\n styleUrl: './auto-complete-single-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AutoCompleteSingleSelectComponent,\n multi: true,\n },\n DROPDOWN_CONTROL_VALUE_VALIDATOR,\n ],\n host: { tabindex: '0' },\n})\nexport class AutoCompleteSingleSelectComponent implements OnInit {\n @Input() autoSingleSelectConfig: AutoCompleteSingleSelectConfig =\n new AutoCompleteSingleSelectConfig();\n @Input() placeholder = 'Enter or Select Option';\n @Input() selectedItem: any;\n @Input() optionsList: any[] = [];\n @Input() parentNativeElement: any;\n @Output() onItemSelection = new EventEmitter();\n @Output() onScroll: any = new EventEmitter();\n showDropdown: boolean = false;\n inputValue: string = '';\n selectedOption: any;\n constructor() {}\n inValid: boolean = false;\n control!: FormControl<any> | null;\n disableControl: boolean = false;\n ngOnInit(): void {}\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n ngOnChanges(_changes: SimpleChanges): void {\n if (!_changes['optionsList']?.currentValue) {\n } else {\n this.writeValue(this.control?.value);\n }\n }\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n /**\n * @description method to update selected item\n * @author Shiva Kant\n * @param item this is selected item from list\n * @param type type of list\n * @returns none\n */\n updateSelectedItem(item: any, type: string): void {\n if (type == 'object') {\n this.selectedItem = item;\n this.inputValue = item[this.autoSingleSelectConfig.textField];\n } else {\n this.inputValue = item;\n }\n this.selectedOption = item;\n this.showDropdown = false;\n this.inValid = false;\n this.onChangeCallback(item);\n\n this.onTouchedCallback();\n this.onItemSelection.emit(this.selectedOption);\n }\n\n writeValue(obj: any): void {\n this.syncSelectionWithValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disableControl = isDisabled;\n }\n validate(control: FormControl): void {\n this.control = control;\n }\n\n // ---------- Helpers ----------\n private syncSelectionWithValue(value: any): void {\n this.selectedOption = null;\n this.inputValue = '';\n\n if (!value || !this.optionsList?.length) return;\n\n if (typeof value !== 'object') {\n this.selectedOption =\n this.optionsList.find(\n (o) =>\n o === value ||\n o?.[this.autoSingleSelectConfig.idField] === value ||\n o?.[this.autoSingleSelectConfig.textField] === value,\n ) ?? value;\n } else {\n this.selectedOption =\n this.optionsList.find(\n (o) =>\n o[this.autoSingleSelectConfig.idField] ===\n value[this.autoSingleSelectConfig.idField],\n ) ?? value;\n }\n this.selectedItem = this.selectedOption;\n this.inputValue = this.isObject(this.selectedOption)\n ? this.selectedOption[this.autoSingleSelectConfig.textField]\n : this.selectedOption;\n }\n /**\n * @description this method is use to update input value\n */\n updateInputValue(): void {\n let data: any = null;\n\n if (!this.inputValue || this.inputValue.trim() === '') {\n this.selectedOption = null;\n this.onChangeCallback(null);\n } else {\n if (this.isObject(this.optionsList?.[0])) {\n // Try to find existing option\n const matchedOption = this.optionsList.find(\n (o) =>\n o[this.autoSingleSelectConfig.textField]?.toLowerCase()?.trim() ===\n this.inputValue.toLowerCase().trim(),\n );\n\n if (matchedOption) {\n //Use existing object (keeps ID)\n data = matchedOption;\n } else {\n // New custom value\n data = {\n [this.autoSingleSelectConfig.idField]: null,\n [this.autoSingleSelectConfig.textField]: this.inputValue,\n };\n }\n } else {\n data = this.inputValue;\n }\n\n this.selectedOption = data;\n this.onChangeCallback(data);\n }\n\n this.onTouchedCallback();\n this.onItemSelection.emit(data);\n this.control?.updateValueAndValidity();\n }\n\n /**\n * @description method to update dropdown list state on input type\n * @author Shiva Kant\n */\n updateDropdownStatus(): void {\n if (!this.inputValue || this.inputValue.trim() === '') {\n this.updateInputValue(); // reuse logic\n this.showDropdown = false;\n return;\n }\n\n this.showDropdown = true;\n }\n\n /**\n * @description method to check if the list is Array of string or object\n * @author Shiva Kant\n * @param data this is the any one one item of list\n * @returns boolean\n */\n isObject(data: any): boolean {\n const type = typeof data;\n return data && type != 'string';\n }\n /**\n * @description This method is use to close dropdown on click outside\n */\n outsideClicked(): void {\n if (this.showDropdown) {\n if (this.autoSingleSelectConfig.customInput) {\n this.updateInputValue();\n }\n }\n this.showDropdown = false;\n }\n onClickEnter(control: any) {\n if (this.autoSingleSelectConfig.customInput) {\n this.updateInputValue();\n }\n }\n /**\n * @description method to load more list\n * @author Shiva Kant\n * @param event\n */\n onDivScroll(event: any): void {\n if (\n event.target.offsetHeight + event.target.scrollTop >=\n event.target.scrollHeight - 1 &&\n this.optionsList.length\n ) {\n this.onScroll.emit();\n }\n }\n}\n","<div\n class=\"cats-main-container\"\n catsOutsideClick\n (clickOutSide)=\"outsideClicked()\"\n>\n <div\n class=\"cats-input-container\"\n [ngClass]=\"{\n invalid:\n (control?.touched || control?.dirty) &&\n control?.invalid &&\n control?.errors,\n 'disable-input': !selectedItem && disableControl,\n 'selected-disable': selectedItem && disableControl,\n }\"\n >\n <div class=\"cats-input-box\">\n @if (selectedItem && autoSingleSelectConfig.colorField && inputValue) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color': selectedItem[autoSingleSelectConfig.colorField],\n }\"\n ></span>\n }\n\n @if (selectedItem && autoSingleSelectConfig.iconField && inputValue) {\n <img\n class=\"cats-option-icon\"\n [src]=\"selectedItem[autoSingleSelectConfig.iconField]\"\n />\n }\n <input\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n class=\"textTruncate cats-input-text\"\n type=\"text\"\n [(ngModel)]=\"inputValue\"\n (keyup.enter)=\"onClickEnter(inputValue)\"\n (keyup)=\"updateDropdownStatus()\"\n (input)=\"updateDropdownStatus()\"\n [placeholder]=\"autoSingleSelectConfig.placeholder\"\n />\n </div>\n <div (click)=\"toggleDropdown()\">\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-up.svg\"\n alt=\"up-arrow\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-down.svg\"\n alt=\"down-arrow\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </div>\n </div>\n\n @if (showDropdown) {\n <div class=\"dropdown-list-single-auto-select\">\n <!-- if optionList is an array of object-->\n @if (isObject(optionsList[0])) {\n <ng-container>\n <ul class=\"cats-dropdown-list-wrapper\">\n @for (item of optionsList; track $index) {\n <ng-container>\n @if (\n item[autoSingleSelectConfig.textField]\n .toLowerCase()\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\n ) {\n <li\n class=\"cats-item\"\n (click)=\"updateSelectedItem(item, 'object')\"\n [ngClass]=\"\n autoSingleSelectConfig.disabledField &&\n item[autoSingleSelectConfig.disabledField]\n ? 'disabled-option'\n : ''\n \"\n >\n <!-- COLOR BADGE -->\n @if (autoSingleSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[autoSingleSelectConfig.colorField],\n }\"\n ></span>\n }\n <!-- ICON -->\n @if (autoSingleSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"item[autoSingleSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\">\n {{ item[autoSingleSelectConfig.textField] }}\n </span>\n </li>\n }\n </ng-container>\n }\n </ul>\n </ng-container>\n }\n\n <!-- if optionList is an array of string-->\n @if (!isObject(optionsList[0])) {\n <ng-container>\n <ul class=\"cats-dropdown-list-wrapper\">\n @for (item of optionsList; track $index) {\n <ng-container>\n @if (item.includes(inputValue) || inputValue == \"\") {\n <li\n class=\"cats-item\"\n [ngClass]=\"\n autoSingleSelectConfig.disabledField &&\n item[autoSingleSelectConfig.disabledField]\n ? 'disabled-option'\n : ''\n \"\n (click)=\"updateSelectedItem(item, 'string')\"\n >\n {{ item }}\n </li>\n }\n </ng-container>\n }\n </ul></ng-container\n >\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n Validator,\n} from '@angular/forms';\nimport { AutoCompleteMultiSelectConfig } from '../../modal/cats-ui.modal';\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\nimport { SafeHtml, DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'cats-ui-input-multi-select',\n imports: [CommonModule, FormsModule, OutsideClickDirective],\n templateUrl: './auto-complete-multi-select.component.html',\n styleUrl: './auto-complete-multi-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\n multi: true,\n },\n ],\n host: { tabindex: '0' },\n})\nexport class AutoCompleteMultiSelectComponent\n implements OnInit, ControlValueAccessor\n{\n @Input() autoCompleteMultiSelectConfig!: AutoCompleteMultiSelectConfig;\n @Input() selectedItem: any;\n @Input() optionsList: any[] = [];\n @Input() parentNativeElement: any;\n @Output() onItemSelection = new EventEmitter();\n @Output() onScroll: any = new EventEmitter();\n showDropdown: boolean = false;\n inputValue: string = '';\n selectedOptions: any[] = [];\n isSelectedAll: boolean = false;\n inValid: boolean = false;\n control!: FormControl<any> | null;\n isDisabled = false;\n safePlaceholder!: SafeHtml;\n\n constructor(private sanitizer: DomSanitizer) {}\n ngOnInit() {\n this.safePlaceholder = this.sanitizer.bypassSecurityTrustHtml(\n this.autoCompleteMultiSelectConfig?.placeholder as string,\n );\n }\n ngOnChanges(_changes: SimpleChanges): void {\n if (!_changes['optionsList']?.currentValue) {\n } else {\n this.writeValue(this.control?.value);\n }\n }\n private onChange: (_: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n if (this.parentNativeElement) {\n this.parentNativeElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n let parentDiv = document.getElementById(this.parentNativeElement);\n setTimeout(() => {\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\n let dropdonwList: any = document.getElementById('container_scroll');\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\n dropdonwList.style['transform'] = `translate(0px,-${\n elBoundary?.['height'] + 54\n }px`;\n }\n }, 20);\n }\n }\n writeValue(value: any[]): void {\n if (Array.isArray(value)) {\n this.selectedOptions = value;\n\n // sync optionsList selection\n this.optionsList.forEach((opt) => {\n opt.isSelected = value.some((v) =>\n this.isObject(v)\n ? v[this.autoCompleteMultiSelectConfig.textField] ===\n opt[this.autoCompleteMultiSelectConfig.textField]\n : v === opt,\n );\n });\n this.onChange(this.selectedOptions);\n this.updateSelectAllState();\n }\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n validate(control: FormControl): void {\n this.control = control;\n }\n\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n this.inputValue = target.value;\n }\n handleBlur() {\n this.onTouched();\n }\n /**\n * @description method to update selected item\n * @author Shiva Kant\n * @param item this is selected item from list\n * @param type type of list\n * @returns none\n */\n updateSelectedItem(item: any, type: string) {\n if (type === 'object') {\n // Toggle the option's isSelected\n item.isSelected = !item.isSelected;\n\n if (item.isSelected) {\n // add to selectedOptions if not already present\n const exists = this.selectedOptions.some(\n (opt) =>\n this.isObject(opt) &&\n opt[this.autoCompleteMultiSelectConfig.textField] ===\n item[this.autoCompleteMultiSelectConfig.textField],\n );\n if (!exists) this.selectedOptions.push(item);\n } else {\n // remove from selectedOptions\n this.selectedOptions = this.selectedOptions.filter(\n (opt) =>\n !(\n this.isObject(opt) &&\n opt[this.autoCompleteMultiSelectConfig.textField] ===\n item[this.autoCompleteMultiSelectConfig.textField]\n ),\n );\n }\n } else {\n // string type\n const existsIndex = this.selectedOptions.findIndex((opt) => opt === item);\n if (existsIndex > -1) {\n // remove\n this.selectedOptions.splice(existsIndex, 1);\n } else {\n // add\n this.selectedOptions.push(item);\n }\n\n // If optionsList contains this string, also toggle its isSelected there\n const idxInOptions = this.optionsList.findIndex(\n (o) => typeof o === 'string' && o === item,\n );\n if (idxInOptions > -1) {\n // toggle corresponding option's isSelected\n const opt = this.optionsList[idxInOptions] as any;\n opt.isSelected = !opt.isSelected;\n }\n }\n\n // keep select all state consistent\n this.updateSelectAllState();\n this.onChange(this.selectedOptions);\n this.onItemSelection.emit(this.selectedOptions);\n }\n\n /**\n * @description method to checkUncheckAll\n * @author Shiva Kant\n */\n\n checkUncheckAll(event: any) {\n if (event) event.stopPropagation();\n this.isSelectedAll = !this.isSelectedAll;\n\n this.optionsList.forEach((item) => {\n if (\n !this.autoCompleteMultiSelectConfig.disabledField ||\n !item[this.autoCompleteMultiSelectConfig.disabledField]\n ) {\n item.isSelected = this.isSelectedAll;\n }\n });\n\n // Keep custom values intact\n const customChips = this.selectedOptions.filter((opt) =>\n this.isObject(opt)\n ? !this.optionsList.some(\n (o) =>\n o[this.autoCompleteMultiSelectConfig.textField] ===\n opt[this.autoCompleteMultiSelectConfig.textField],\n )\n : !this.optionsList.includes(opt),\n );\n\n const selectedOptionItems = this.optionsList.filter(\n (opt) => opt.isSelected,\n );\n\n this.selectedOptions = [...customChips, ...selectedOptionItems];\n this.onChange(this.selectedOptions);\n\n this.onItemSelection.emit(this.selectedOptions);\n }\n\n /**\n * @description method to removeChip\n * @author Shiva Kant\n */\n removeChip(item: any) {\n // Remove from selectedOptions\n this.selectedOptions = this.selectedOptions.filter((opt) =>\n this.isObject(opt)\n ? opt[this.autoCompleteMultiSelectConfig.textField] !==\n (this.isObject(item)\n ? item[this.autoCompleteMultiSelectConfig.textField]\n : item)\n : opt !== item,\n );\n\n // If item corresponds to an optionsList entry, unselect it there too\n if (this.isObject(item)) {\n const idx = this.optionsList.findIndex(\n (o: any) =>\n this.isObject(o) &&\n o[this.autoCompleteMultiSelectConfig.textField] ===\n item[this.autoCompleteMultiSelectConfig.textField],\n );\n if (idx > -1) {\n this.optionsList[idx].isSelected = false;\n }\n } else {\n // string case\n const idx = this.optionsList.findIndex((o) => o === item);\n if (idx > -1) {\n this.optionsList[idx].isSelected = false;\n }\n }\n\n // update select all state & emit\n this.updateSelectAllState();\n this.onChange(this.selectedOptions); // 🔥 THIS updates formControl\n this.onItemSelection.emit(this.selectedOptions);\n }\n /**\n * @description method to update dropdown list state on input type\n * @author Shiva Kant\n */\n updateDropdownStatus() {\n this.showDropdown = true;\n }\n\n /**\n * @description method to check if the list is Array of string or object\n * @author Shiva Kant\n * @param data this is the any one one item of list\n * @returns boolean\n */\n isObject(data: any): boolean {\n const type = typeof data;\n return data && type != 'string';\n }\n /**\n * @description This method is use to close dropdown on onClickEnter\n * @author Shiva Kant\n */\n\n onClickEnter(control?: any): void {\n if (!this.inputValue.trim()) return;\n\n // pattern check\n if (this.autoCompleteMultiSelectConfig.pattern) {\n const regex = new RegExp(this.autoCompleteMultiSelectConfig.pattern);\n if (!regex.test(this.inputValue)) {\n this.inputValue = '';\n return;\n }\n }\n\n const val = this.inputValue.trim();\n const valLower = val.toLowerCase();\n\n // Avoid duplicate\n const exists = this.selectedOptions.some((opt) =>\n this.isObject(opt)\n ? opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\n valLower\n : opt.toLowerCase() === valLower,\n );\n if (exists) {\n this.inputValue = '';\n return;\n }\n\n // Try find matched item in optionsList\n const matchedItem = this.isObject(this.optionsList?.[0])\n ? this.optionsList.find(\n (opt: any) =>\n opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\n valLower,\n )\n : this.optionsList.find((opt: any) => opt.toLowerCase() === valLower);\n\n if (matchedItem) {\n // If matched, ensure option is marked selected and present in selectedOptions\n matchedItem.isSelected = true;\n const already = this.selectedOptions.some((opt) =>\n this.isObject(opt)\n ? opt[this.autoCompleteMultiSelectConfig.textField] ===\n matchedItem[this.autoCompleteMultiSelectConfig.textField]\n : opt === matchedItem,\n );\n if (!already) this.selectedOptions.push(matchedItem);\n } else if (this.autoCompleteMultiSelectConfig.customInput) {\n // create custom item and mark it selected\n let newItem: any = val;\n if (this.isObject(this.optionsList?.[0])) {\n newItem = {\n [this.autoCompleteMultiSelectConfig.idField]: null,\n [this.autoCompleteMultiSelectConfig.textField]: val,\n isSelected: true, // mark selected for consistency\n __isCustom: true, // optional flag to identify custom items\n };\n }\n this.selectedOptions.push(newItem);\n }\n\n // reset input but keep dropdown open (as you wanted)\n this.inputValue = '';\n\n // update select all state and emit\n this.updateSelectAllState();\n this.onChange(this.selectedOptions);\n this.onTouched();\n this.onItemSelection.emit(this.selectedOptions);\n }\n outsideClicked(): void {\n this.showDropdown = false;\n }\n /**\n * @description method to load more list\n * @author Shiva Kant\n * @param event\n */\n onDivScroll(event: any): void {\n if (\n event.target.offsetHeight + event.target.scrollTop >=\n event.target.scrollHeight - 1 &&\n this.optionsList.length\n ) {\n this.onScroll.emit();\n }\n }\n\n updateSelectAllState() {\n // only consider non-disabled items for select-all state\n const selectable = this.optionsList.filter(\n (opt: any) =>\n !(\n this.autoCompleteMultiSelectConfig.disabledField &&\n opt[this.autoCompleteMultiSelectConfig.disabledField]\n ),\n );\n this.isSelectedAll =\n selectable.length > 0 && selectable.every((opt: any) => !!opt.isSelected);\n }\n}\n","<div class=\"cats-main-container\">\n <div\n class=\"cats-input-container\"\n [class.active]=\"showDropdown\"\n [ngClass]=\"{\n invalid: control?.touched && control?.invalid && control?.errors,\n 'disable-input': !selectedOptions && isDisabled,\n 'selected-disable': selectedOptions && isDisabled,\n }\"\n catsOutsideClick\n (clickOutSide)=\"outsideClicked()\"\n >\n <div class=\"cats-chips-wrapper\">\n <!-- Chips -->\n @for (item of selectedOptions; track $index) {\n @if ($index < autoCompleteMultiSelectConfig.chipLimit) {\n <div class=\"cats-chip\" (click)=\"$event.stopPropagation()\">\n <!-- <span class=\"textTruncate chip-text\">\n {{\n isObject(item)\n ? item[autoCompleteMultiSelectConfig.textField]\n : item\n }}\n </span> -->\n <!-- SHOW ONLY WHEN SELECTED -->\n @if (\n isObject(item) ? item.isSelected : selectedOptions.includes(item)\n ) {\n <ng-container>\n <!-- COLOR BADGE -->\n @if (autoCompleteMultiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[autoCompleteMultiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (autoCompleteMultiSelectConfig.iconField) {\n <span>\n <img\n class=\"cats-option-icon\"\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n </ng-container>\n }\n\n <!-- TEXT -->\n <span class=\"textTruncate chip-text\">\n {{\n isObject(item)\n ? item[autoCompleteMultiSelectConfig.textField]\n : item\n }}\n </span>\n <img\n src=\"images/x-circle.svg\"\n class=\"cats-cross-icon\"\n (click)=\"$event.stopPropagation(); removeChip(item)\"\n />\n </div>\n }\n }\n <!-- +N counter -->\n @if (selectedOptions.length > autoCompleteMultiSelectConfig.chipLimit) {\n <div class=\"cats-view-more\">\n +{{\n selectedOptions.length - autoCompleteMultiSelectConfig.chipLimit\n }}\n </div>\n }\n <!-- Input Box (always available) -->\n <div\n class=\"cats-input-box\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n >\n <input\n type=\"text\"\n class=\"multi-select-input\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (keyup.enter)=\"onClickEnter()\"\n (keyup)=\"updateDropdownStatus()\"\n (blur)=\"handleBlur()\"\n />\n @if (selectedOptions.length === 0 && !inputValue) {\n <div class=\"fake-placeholder\" [innerHTML]=\"safePlaceholder\"></div>\n }\n </div>\n </div>\n\n <!-- Dropdown toggle -->\n <div (click)=\"toggleDropdown()\">\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-up.svg\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-down.svg\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </div>\n </div>\n\n <!-- Dropdown list -->\n @if (showDropdown) {\n <div\n class=\"dropdown-list-multi-auto-select\"\n id=\"container_scroll\"\n (click)=\"onDivScroll($event)\"\n >\n @if (\n autoCompleteMultiSelectConfig.infoText ||\n autoCompleteMultiSelectConfig.selectionLimit\n ) {\n <div class=\"cats-headerRow\">\n @if (autoCompleteMultiSelectConfig.infoText) {\n <span class=\"cats-infoText textTruncate\">\n {{ autoCompleteMultiSelectConfig.infoText }}\n </span>\n }\n\n @if (autoCompleteMultiSelectConfig.selectionLimit) {\n <span class=\"cats-countText textTruncate\">\n {{ selectedOptions.length }}/{{\n autoCompleteMultiSelectConfig.selectionLimit\n }}\n are Selected\n </span>\n }\n </div>\n }\n <ul class=\"cats-ul-multi-select\">\n <!-- infotext -->\n <!-- Select All -->\n @if (autoCompleteMultiSelectConfig.selectAll) {\n <li\n class=\"cats-checkbox-container select-all-item\"\n (click)=\"checkUncheckAll($event)\"\n >\n <input\n type=\"checkbox\"\n class=\"cats-input-checkbox\"\n [checked]=\"isSelectedAll\"\n (click)=\"$event.stopPropagation(); checkUncheckAll($event)\"\n />\n <span>{{ isSelectedAll ? \"Unselect All\" : \"Select All\" }}</span>\n </li>\n }\n\n <!-- Object Options -->\n @if (isObject(optionsList[0])) {\n @for (item of optionsList; track $index) {\n @if (\n item[autoCompleteMultiSelectConfig.textField]\n .toLowerCase()\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\n ) {\n <li\n class=\"cats-checkbox-container\"\n [ngClass]=\"{\n 'disabled-option':\n autoCompleteMultiSelectConfig.disabledField &&\n item[autoCompleteMultiSelectConfig.disabledField],\n }\"\n (click)=\"updateSelectedItem(item, 'object')\"\n >\n <input\n type=\"checkbox\"\n class=\"cats-input-checkbox\"\n [checked]=\"item.isSelected\"\n (click)=\"\n $event.stopPropagation(); updateSelectedItem(item, 'object')\n \"\n />\n <!-- COLOR BADGE -->\n @if (autoCompleteMultiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[autoCompleteMultiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (autoCompleteMultiSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\">{{\n item[autoCompleteMultiSelectConfig.textField]\n }}</span>\n </li>\n }\n }\n }\n\n <!-- String Options -->\n @if (!isObject(optionsList[0])) {\n @for (item of optionsList; track $index) {\n @if (\n item.toLowerCase().includes(inputValue.toLowerCase()) ||\n inputValue == \"\"\n ) {\n <li\n class=\"cats-checkbox-container\"\n (click)=\"updateSelectedItem(item, 'string')\"\n >\n <input\n type=\"checkbox\"\n class=\"cats-input-checkbox\"\n [checked]=\"selectedOptions.includes(item)\"\n (click)=\"\n $event.stopPropagation(); updateSelectedItem(item, 'string')\n \"\n />\n <span class=\"textTruncate\">{{ item }}</span>\n </li>\n }\n }\n }\n </ul>\n </div>\n }\n</div>\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ToggleConfig } from '../../modal/cats-ui.modal';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cats-ui-toogle-button',\n imports: [],\n templateUrl: './toogle-button.component.html',\n styleUrl: './toogle-button.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToogleButtonComponent),\n multi: true,\n },\n ],\n})\nexport class ToogleButtonComponent {\n @Input() toggleConfig!: ToggleConfig;\n @Output() onToggled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n toggle() {\n if (!this.toggleConfig.disabled) {\n this.toggleConfig.checked = !this.toggleConfig.checked;\n this.onToggled.emit(this.toggleConfig.checked);\n }\n }\n\n // ControlValueAccessor methods\n writeValue(value: boolean): void {\n this.toggleConfig.checked = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.toggleConfig.disabled = isDisabled;\n }\n}\n","<div class=\"cats-toggle-button\">\n <label class=\"cats-switch\">\n <input \n type=\"checkbox\" \n class=\"cats-toggle-input\"\n [checked]=\"toggleConfig.checked\" \n [disabled]=\"toggleConfig.disabled\"\n (change)=\"toggle()\"\n />\n <span class=\"cats-slider round\"></span>\n </label>\n</div>\n","import { Component,EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { CheckBoxConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-checkbox-button',\n imports: [],\n templateUrl: './checkbox-button.component.html',\n styleUrl: './checkbox-button.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxButtonComponent),\n multi: true,\n },\n ],\n})\nexport class CheckboxButtonComponent\n implements ControlValueAccessor, OnChanges\n{\n @Input() checkBoxConfig!: CheckBoxConfig;\n @Output() onCheckBoxSelection = new EventEmitter<any>();\n @Input() optionList: any[] = [];\n @Input() selectedOptions: any[] = [];\n\n private onChange: (value: any[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n get idField(): string {\n return this.checkBoxConfig?.idField || 'id';\n }\n\n get textField(): string {\n return this.checkBoxConfig?.textField || 'name';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedOptions'] && this.selectedOptions?.length) {\n this.applySelectedOptions();\n }\n }\n\n /**\n * @description normalizeSelectedValue the value according t\n * @param item\n * @returns\n */\n normalizeSelectedValue(item: any): string {\n if (item == null) return '';\n\n if (typeof item === 'string') return item; // case 1: string of id or name\n if (item.id) return item.id; // case 2: object with id\n if (item.name) return item.name; // case 3: object with name\n\n return ''; // fallback\n }\n\n /**\n * @description Method is to Apply selectedOptions on input change\n * @author Shiva Kant\n */\n private applySelectedOptions() {\n const normalized = this.selectedOptions.map((s: any) =>\n this.normalizeSelectedValue(s)\n );\n this.optionList = this.optionList.map((task) => {\n const taskId = task.id;\n const taskName = task.name;\n\n const isParentSelected =\n normalized.includes(taskId) || normalized.includes(taskName);\n\n const updatedSubtasks = (task.subtasks ?? []).map((sub: any) => {\n const subId = sub.id;\n const subName = sub.name;\n\n return {\n ...sub,\n checked: normalized.includes(subId) || normalized.includes(subName),\n };\n });\n\n return {\n ...task,\n checked:\n isParentSelected || updatedSubtasks.every((s: any) => s.checked),\n subtasks: updatedSubtasks,\n };\n });\n }\n\n /**\n * @description Method is to Checkbox change handler\n * @author Shiva Kant\n * @param event\n * @param parentIndex\n * @param subIndex\n */\n onCheckboxChange(event: Event, parentIndex: number, subIndex?: number) {\n const checked = (event.target as HTMLInputElement).checked;\n\n this.optionList = this.optionList.map((task, i) => {\n const safeTask = {\n ...task,\n checked: task.checked ?? false,\n subtasks: task.subtasks ?? [],\n };\n\n if (i === parentIndex) {\n if (subIndex === undefined) {\n // Parent checkbox toggled\n safeTask.checked = checked;\n safeTask.subtasks = safeTask.subtasks.map((sub: any) => ({\n ...sub,\n checked,\n }));\n } else if (safeTask.subtasks[subIndex]) {\n // Subtask toggled\n safeTask.subtasks[subIndex].checked = checked;\n // Parent checked only if all subtasks are checked\n safeTask.checked = safeTask.subtasks.every((sub: any) => sub.checked);\n }\n }\n\n return safeTask;\n });\n\n const checkedTasks = this.optionList\n .filter(\n (task) =>\n (task.checked ?? false) ||\n task.subtasks?.some((s: any) => s.checked ?? false)\n )\n .map((task) => ({\n ...task,\n subtasks: task.subtasks?.filter((s: any) => s.checked ?? false) || [],\n }));\n\n const selectedObjects = checkedTasks.map((task) => ({\n ...task,\n subtasks: task.subtasks.filter((s: any) => s.checked),\n }));\n\n this.onCheckBoxSelection.emit(selectedObjects);\n this.onChange(this.optionList);\n this.onTouched();\n }\n /**\n * @description Indeterminate state for parent on option checked\n * @param task\n * @returns\n */\n partiallyComplete(task: any): boolean {\n if (!task?.subtasks?.length) return false;\n const done = task.subtasks.filter((t: any) => t.checked).length;\n return done > 0 && done < task.subtasks.length;\n }\n\n // ControlValueAccessor methods\n writeValue(value: any[]): void {\n if (value) {\n this.optionList = value.map((task) => ({\n ...task,\n subtasks: task.subtasks ? [...task.subtasks] : [],\n }));\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled) {\n this.optionList.forEach((task) => {\n task.checked = false;\n task.subtasks?.forEach((sub: any) => (sub.checked = false));\n });\n }\n }\n}\n","<div class=\"cats-parent-container\">\n @for (task of optionList; let parentIndex = $index; track $index) {\n <!-- Parent Checkbox -->\n <label class=\"cats-checkbox-container\">\n <input\n type=\"checkbox\"\n class=\"cats-checkbox-input\"\n [name]=\"checkBoxConfig.name\"\n [checked]=\"task.checked\"\n [disabled]=\"\n checkBoxConfig.disabledField\n ? task[checkBoxConfig.disabledField]\n : false\n \"\n [indeterminate]=\"partiallyComplete(task)\"\n (change)=\"onCheckboxChange($event, parentIndex)\"\n />\n <span class=\"textTruncate\">{{ task[textField] }}</span>\n </label>\n\n <!-- Subtasks -->\n @if (task.subtasks && task.subtasks.length > 0) {\n <ul class=\"cats-sub\">\n @for (sub of task.subtasks; let idx = $index; track $index) {\n <li>\n <label class=\"cats-checkbox-container\">\n <input\n type=\"checkbox\"\n class=\"cats-checkbox-input\"\n [checked]=\"sub.checked\"\n (change)=\"onCheckboxChange($event, parentIndex, idx)\"\n />\n <!-- <span class=\"checkmark\"></span> -->\n <span class=\"cats-label-text\">{{ sub[textField] }}</span>\n </label>\n </li>\n }\n </ul>\n }\n }\n</div>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n FormsModule,\n} from '@angular/forms';\nimport { RadioButtonConfig } from '../../modal/cats-ui.modal';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'cats-ui-radio-button',\n imports: [CommonModule, FormsModule],\n templateUrl: './radio-button.component.html',\n styleUrl: './radio-button.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioButtonComponent),\n multi: true,\n },\n ],\n})\nexport class RadioButtonComponent implements ControlValueAccessor {\n @Input() config!: RadioButtonConfig;\n @Input() optionList: any[] = [];\n @Output() selectionChange = new EventEmitter<any>();\n // selectedRadio pass id in number or name in string or full object\n @Input() selectedRadio: any;\n\n value: any = null;\n isDisabled = false;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedRadio'] && this.optionList?.length) {\n if (!this.selectedRadio) return;\n\n const selected = this.selectedRadio;\n\n const match = this.optionList.find((opt) => {\n const optValue = this.extractValue(opt);\n const optLabel = this.extractLabel(opt);\n\n if (typeof selected === 'string' || typeof selected === 'number') {\n // Match primitive against value or label\n return selected === optValue || selected === optLabel;\n } else if (typeof selected === 'object') {\n // Match object against option's value or label\n const selValue = this.extractValue(selected);\n const selLabel = this.extractLabel(selected);\n return selValue === optValue || selLabel === optLabel;\n }\n return false;\n });\n\n if (match) {\n this.value = this.extractValue(match);\n this.onChange(this.value);\n }\n }\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n /**\n * @description method to handle change of toggle button\n * @author Shiva Kant\n * @param option\n */\n handleChange(option: any) {\n this.value = this.extractValue(option);\n this.onChange(this.value);\n this.onTouched();\n this.selectionChange.emit(option);\n }\n /**\n * @description method to extractValue\n * @author Shiva Kant\n * @param option\n * @returns\n */\n extractValue(option: any): any {\n if (typeof option === 'string' || typeof option === 'number') {\n return option;\n }\n\n const key = this.config.valueField ?? 'id'; // ALWAYS a string\n return option[key];\n }\n\n extractLabel(option: any): string {\n if (typeof option === 'string') return option;\n\n const key = this.config.textField ?? 'label';\n return option[key];\n }\n\n /**\n * * @description method to normalizeValue\n * @author Shiva Kant\n * @param value\n * @returns\n */\n normalizeValue(value: any): any {\n if (value == null) return null;\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n // object case → return id or valueField\n const key = this.config.valueField ?? 'id';\n return value[key];\n }\n}\n","<div class=\"cats-radio-group\" [ngClass]=\"config.layout\">\n @if (config.label) {\n <div class=\"cats-group-label\">{{ config.label }}</div>\n }\n\n <div class=\"cats-radio-option-container\">\n @for (option of optionList; track $index) {\n <div class=\"cats-radio-option\">\n <input\n type=\"radio\"\n class=\"cats-radio-input\"\n [name]=\"config.name\"\n [id]=\"extractValue(option)\"\n [disabled]=\"config.disabled ? option[config.disabled] : false\"\n [value]=\"extractValue(option)\"\n [(ngModel)]=\"value\"\n (change)=\"handleChange(option)\"\n />\n <label class=\"cats-label\" [for]=\"extractValue(option)\">{{ extractLabel(option) }}</label>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'custom-calendar-grid',\n templateUrl: './calendar-grid.component.html',\n styleUrls: ['./calendar-grid.component.scss'],\n standalone: true,\n imports: [CommonModule]\n})\nexport class CalendarGridComponent {\n @Input() month!: number;\n @Input() year!: number;\n @Input() calendarDays!: (number | null)[];\n @Input() weekDays!: string[];\n @Input() parent!: any;\n\n @Output() daySelected = new EventEmitter<number | null>();\n\n selectDay(day: number | null) {\n this.daySelected.emit(day);\n }\n\n isSelected(day: number | null): boolean {\n return this.parent.isSelected(day, this.month, this.year);\n }\n\n isInRange(day: number | null): boolean {\n return this.parent.isInRange(day, this.month, this.year);\n }\n\n isRangeStart(day: number | null): boolean {\n return this.parent.isRangeStart(day, this.month, this.year);\n }\n\n isRangeEnd(day: number | null): boolean {\n return this.parent.isRangeEnd(day, this.month, this.year);\n }\n\n isToday(day: number | null): boolean {\n return this.parent.isToday(day, this.month, this.year);\n }\n\n isDayDisabled(day: number | null): boolean {\n return this.parent.isDayDisabled(day, this.month, this.year);\n }\n\n isOtherMonth(day: number | null): boolean {\n return this.parent.isOtherMonth(day);\n }\n\n getDayDisplay(day: number | null): string {\n return this.parent.getDayDisplay(day);\n }\n}","<div class=\"calendar-grid sp-t-12 sm-b-8\">\n @for (d of weekDays; track $index) {\n <div class=\"weekday-header meta-regular-emphasized\">{{ d }}</div>\n }\n\n <!-- Days -->\n @for (day of calendarDays; track $index) {\n <div class=\"calendar-day body-medium\" [class.other-month]=\"isOtherMonth(day)\" [class.selected]=\"isSelected(day)\"\n [class.in-range]=\"isInRange(day)\" [class.range-start]=\"isRangeStart(day)\" [class.range-end]=\"isRangeEnd(day)\"\n [class.today]=\"isToday(day)\" [class.disabled]=\"isDayDisabled(day)\" (click)=\"selectDay(day)\">\n <span>{{ getDayDisplay(day) }}</span>\n </div>\n }\n</div>","import { Component, EventEmitter, forwardRef, Output } from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n FormControl,\n Validator,\n} from '@angular/forms';\n\n@Component({\n selector: 'cats-time-input',\n templateUrl: './time-input.component.html',\n styleUrls: ['./time-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeInputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => TimeInputComponent),\n multi: true,\n },\n ],\n})\nexport class TimeInputComponent implements ControlValueAccessor, Validator {\n timeValue = '';\n timeMeridiem: 'AM' | 'PM' = 'AM';\n control!: FormControl;\n\n @Output() timeChange = new EventEmitter<{\n time: string;\n meridiem: 'AM' | 'PM';\n }>();\n\n private onChangeCallback: (_: any) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n // ------------------ Input Handling ------------------\n handleTimeInput(event: Event) {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n // Allow only digits + colon\n value = value.replace(/[^0-9:]/g, '');\n\n // CASE: user typed \"1:\" shorthand → treat leading digit as \"0X\"\n if (/^\\d:$/.test(value)) {\n this.timeValue = `0${value[0]}:`;\n input.value = this.timeValue;\n this.updateControlValue();\n this.emitTime();\n return;\n }\n\n // Strip all colons → work purely with raw digits\n let raw = value.replace(/:/g, '');\n\n // Limit to 4 digits max\n raw = raw.slice(0, 4);\n\n // Only auto-insert colon once we have exactly 4 digits\n // This prevents colon from disrupting cursor position mid-typing\n if (raw.length === 4) {\n this.timeValue = raw.slice(0, 2) + ':' + raw.slice(2, 4);\n } else {\n this.timeValue = raw;\n }\n\n // Sync the actual input element value to prevent browser\n // from showing stale/mis-formatted text\n input.value = this.timeValue;\n\n this.updateControlValue();\n this.emitTime();\n }\n\n setPeriod(period: 'AM' | 'PM') {\n this.timeMeridiem = period;\n this.updateControlValue();\n this.emitTime();\n }\n\n private emitTime() {\n this.timeChange.emit({ time: this.timeValue, meridiem: this.timeMeridiem });\n }\n\n private updateControlValue() {\n if (!this.isValidTime(this.timeValue)) {\n this.onChangeCallback(null);\n return;\n }\n\n let [hours, minutes] = this.timeValue.split(':').map(Number);\n\n // Convert to 24h\n if (this.timeMeridiem === 'PM' && hours < 12) hours += 12;\n if (this.timeMeridiem === 'AM' && hours === 12) hours = 0;\n\n this.onChangeCallback(hours * 3600 + minutes * 60);\n }\n\n // ------------------ Validation ------------------\n private isValidTime(value: string): boolean {\n // Must be fully formatted HH:MM to be valid\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n\n const [hStr, mStr] = value.split(':');\n const hours = Number(hStr);\n const minutes = Number(mStr);\n\n return (\n !isNaN(hours) &&\n !isNaN(minutes) &&\n hours >= 1 &&\n hours <= 12 &&\n minutes >= 0 &&\n minutes <= 59\n );\n }\n\n validate(control: FormControl) {\n this.control = control;\n return this.isValidTime(this.timeValue) ? null : { timePattern: true };\n }\n\n // ------------------ ControlValueAccessor ------------------\n writeValue(obj: any): void {\n if (typeof obj === 'number') {\n let hours = Math.floor(obj / 3600);\n const minutes = Math.floor((obj % 3600) / 60);\n\n this.timeMeridiem = hours >= 12 ? 'PM' : 'AM';\n if (hours > 12) hours -= 12;\n if (hours === 0) hours = 12;\n\n this.timeValue = `${hours.toString().padStart(2, '0')}:${minutes\n .toString()\n .padStart(2, '0')}`;\n } else {\n this.timeValue = '';\n this.timeMeridiem = 'AM';\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n setDisabledState?(_isDisabled: boolean): void {}\n\n onFocusOut() {\n this.formatTimeOnBlur();\n this.onTouchedCallback();\n }\n\n private formatTimeOnBlur() {\n if (!this.timeValue) return;\n\n // Strip colon and parse raw digits (handles both \"115\" and \"11:5\")\n const raw = this.timeValue.replace(/:/g, '');\n\n if (raw.length < 1) {\n this.clearValue();\n return;\n }\n\n const hours = Number(raw.slice(0, 2));\n // If only 1–2 digits typed (e.g. \"11\"), default minutes to 0\n const minutes = raw.length >= 3 ? Number(raw.slice(2, 4)) : 0;\n\n // Validate hour\n if (isNaN(hours) || hours < 1 || hours > 12) {\n this.clearValue();\n return;\n }\n\n // Validate minutes\n if (isNaN(minutes) || minutes < 0 || minutes > 59) {\n this.clearValue();\n return;\n }\n\n // Format properly\n this.timeValue =\n `${hours.toString().padStart(2, '0')}:` +\n `${minutes.toString().padStart(2, '0')}`;\n\n this.updateControlValue();\n this.emitTime();\n }\n\n private clearValue() {\n this.timeValue = '';\n this.onChangeCallback(null);\n this.emitTime();\n }\n\n clear() {\n this.writeValue(null);\n this.onChangeCallback(null);\n this.emitTime();\n }\n}\n","<div class=\"footer-row time-row\">\n <span class=\"footer-label body-large sp-x-12\">Time</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <div class=\"time-input-wrapper\">\n <input\n class=\"time-input body-large\"\n type=\"text\"\n [value]=\"timeValue\"\n placeholder=\"HH:MM\"\n (input)=\"handleTimeInput($event)\"\n (blur)=\"onFocusOut()\"\n maxlength=\"5\"\n autocomplete=\"off\"\n />\n <div class=\"period-toggle\">\n <button\n type=\"button\"\n class=\"period-btn body-medium\"\n [class.active]=\"timeMeridiem === 'AM'\"\n (click)=\"setPeriod('AM')\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"period-btn body-medium\"\n [class.active]=\"timeMeridiem === 'PM'\"\n (click)=\"setPeriod('PM')\"\n >\n PM\n </button>\n </div>\n </div>\n @if (timeValue) {\n <img\n src=\"images/x-cancel-btn.svg\"\n alt=\"Clear\"\n class=\"cancel-btn\"\n (click)=\"clear()\"\n />\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n HostListener,\n ElementRef,\n forwardRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nexport type DatePickerMode = 'single' | 'range' | 'dual';\n\nexport interface DatePickerConfig {\n mode?: DatePickerMode; // 'single' | 'range' | 'dual'\n time?: boolean;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n fromPlaceholder?: string;\n toPlaceholder?: string;\n dateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\n disabledDates?: Date[];\n disablePastDays?: number;\n showDateLabel?: boolean;\n showTimeLabel?: boolean;\n}\n\nexport interface DateRange {\n from: string | null;\n fromTime: string;\n to: string | null;\n toTime: string;\n}\n\nexport interface DateTimeResult {\n date: string | null;\n time: string; // \"HH:mm\"\n meridiem: 'AM' | 'PM';\n}\n\nexport type CalenderView = 'day' | 'year' | 'month';\n\nimport { CalendarGridComponent } from './calendar-grid.component';\nimport { TimeInputComponent } from './time-input.component';\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\n\n@Component({\n selector: 'cats-ui-custom-date-picker',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CustomDatePickerComponent),\n multi: true,\n },\n ],\n standalone: true,\n templateUrl: './custom-date-picker.component.html',\n styleUrls: ['./custom-date-picker.component.scss'],\n imports: [\n CommonModule,\n CalendarGridComponent,\n TimeInputComponent,\n FormsModule,\n OutsideClickDirective,\n ],\n})\nexport class CustomDatePickerComponent\n implements OnInit, ControlValueAccessor, OnChanges\n{\n @Input() config: DatePickerConfig = {};\n @Input() label: string = '';\n @Input() showHeader: boolean = true;\n @Input() showTrigger: boolean = true;\n @Input() parentNativeElement: any;\n // Single / datetime\n\n @Output() applied = new EventEmitter<\n Date | DateRange | DateTimeResult | string\n >();\n @Output() cancelled = new EventEmitter<void>();\n\n // Range\n @Output() rangeSelected = new EventEmitter<DateRange>();\n\n private onChange: (val: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ─── State ────────────────────────────────────────────────────────────────\n isOpen = false;\n\n // Single / DateTime\n selectedDate: Date | null = null;\n tempDate: Date | null = null;\n\n // Range\n rangeFrom: Date | null = null;\n rangeTo: Date | null = null;\n tempFrom: Date | null = null;\n tempTo: Date | null = null;\n\n // DateTime\n timeValue = '';\n timeMeridiem: 'AM' | 'PM' = 'AM';\n fromTimeValue = '';\n fromTimeMeridiem: 'AM' | 'PM' = 'AM';\n toTimeValue = '';\n toTimeMeridiem: 'AM' | 'PM' = 'AM';\n\n // Calendar\n currentMonth: number = new Date().getMonth();\n currentYear: number = new Date().getFullYear();\n weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n calendarDays: (number | null)[] = [];\n\n // Dual mode (two calendars)\n currentMonth2: number = new Date().getMonth();\n currentYear2: number = new Date().getFullYear();\n calendarDays2: (number | null)[] = [];\n\n yearRange: number[] = [];\n calenderView: CalenderView = 'day';\n activeCalendar: 'primary' | 'secondary' = 'primary';\n\n monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n constructor(private elRef: ElementRef) {}\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config']?.currentValue) {\n if (!this.showTrigger) {\n this.toggleCalendar();\n }\n }\n }\n\n ngOnInit(): void {\n this.generateYearRange();\n if (!this.showTrigger) {\n this.toggleCalendar();\n }\n }\n\n // ─── Getters ──────────────────────────────────────────────────────────────\n\n get mode(): DatePickerMode {\n return this.config.mode || 'single';\n }\n\n get showDateLabel(): boolean {\n return this.config.showDateLabel !== false;\n }\n\n get time(): boolean {\n return this.config.time ?? false;\n }\n\n get currentMonthYear(): string {\n return `${this.monthNames[this.currentMonth]} ${this.currentYear}`;\n }\n\n get currentMonthName() {\n return this.monthNames[this.currentMonth];\n }\n\n get activeMonthName(): string {\n return this.activeCalendar === 'secondary'\n ? this.monthNames[this.currentMonth2]\n : this.monthNames[this.currentMonth];\n }\n\n get activeYearValue(): number {\n return this.activeCalendar === 'secondary'\n ? this.currentYear2\n : this.currentYear;\n }\n\n get displayValue(): string {\n if (this.mode === 'range' || this.mode === 'dual') {\n if (this.rangeFrom && this.rangeTo) {\n return `${this.formatDate(this.rangeFrom)} – ${this.formatDate(this.rangeTo)}`;\n }\n if (this.rangeFrom) return this.formatDate(this.rangeFrom);\n return '';\n }\n return this.selectedDate ? this.formatDate(this.selectedDate) : '';\n }\n\n get tempDisplayValue(): string {\n if (!this.tempDate) return this.config.placeholder || 'Select date';\n return this.formatDate(this.tempDate);\n }\n\n get tempFromDisplay(): string {\n if (!this.tempFrom) return this.config.fromPlaceholder || 'Select date';\n return this.formatDate(this.tempFrom);\n }\n\n get tempToDisplay(): string {\n if (!this.tempTo) return this.config.toPlaceholder || 'Select date';\n return this.formatDate(this.tempTo);\n }\n\n // ─── ControlValueAccessor ─────────────────────────────────────────────────\n\n // writeValue(val: any): void {\n // if (!val) {\n // this.selectedDate = null;\n // this.tempDate = null;\n\n // this.rangeFrom = null;\n // this.rangeTo = null;\n // this.tempFrom = null;\n // this.tempTo = null;\n\n // this.timeValue = '';\n // this.timeMeridiem = 'AM';\n\n // this.fromTimeValue = '';\n // this.fromTimeMeridiem = 'AM';\n\n // this.toTimeValue = '';\n // this.toTimeMeridiem = 'AM';\n // }\n // if (this.mode === 'range' || this.mode === 'dual') {\n // const from = val.from ? new Date(val.from) : null;\n // const to = val.to ? new Date(val.to) : null;\n\n // this.rangeFrom = from;\n // this.rangeTo = to;\n // this.tempFrom = from;\n // this.tempTo = to;\n\n // if (this.time) {\n // if (val.fromTime) {\n // const [time, meridiem] = val.fromTime.split(' ');\n // this.fromTimeValue = time;\n // this.fromTimeMeridiem = meridiem || 'AM';\n // }\n\n // if (val.toTime) {\n // const [time, meridiem] = val.toTime.split(' ');\n // this.toTimeValue = time;\n // this.toTimeMeridiem = meridiem || 'AM';\n // }\n // }\n // }\n // // Single mode with time\n // else if (this.time && val?.date) {\n // this.selectedDate = new Date(val.date);\n // this.tempDate = new Date(val.date);\n // if (val.time) {\n // const [time, meridiem] = val.time.split(' ');\n // this.timeValue = time;\n // this.timeMeridiem = meridiem || 'AM';\n // }\n // }\n // // Single mode without time\n // else {\n // this.selectedDate = new Date(val);\n // this.tempDate = new Date(val);\n // }\n // // this.initializeCurrentMonthYear()\n // }\n writeValue(val: any): void {\n // Guard: reset and exit early if no value\n if (!val) {\n this.selectedDate = null;\n this.tempDate = null;\n this.rangeFrom = null;\n this.rangeTo = null;\n this.tempFrom = null;\n this.tempTo = null;\n this.timeValue = '';\n this.timeMeridiem = 'AM';\n this.fromTimeValue = '';\n this.fromTimeMeridiem = 'AM';\n this.toTimeValue = '';\n this.toTimeMeridiem = 'AM';\n return;\n }\n\n if (this.mode === 'range' || this.mode === 'dual') {\n const from = val.from ? new Date(val.from) : null;\n const to = val.to ? new Date(val.to) : null;\n\n this.rangeFrom = from;\n this.rangeTo = to;\n this.tempFrom = from;\n this.tempTo = to;\n\n // Remove \"if (this.time)\" — check val directly instead\n if (val.fromTime) {\n const [time, meridiem] = val.fromTime.split(' ');\n this.fromTimeValue = time;\n this.fromTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\n // Also convert to seconds so ngModel patches the child correctly\n this.fromTimeInSeconds = this.convertToSeconds(\n time,\n meridiem as 'AM' | 'PM',\n );\n }\n\n if (val.toTime) {\n const [time, meridiem] = val.toTime.split(' ');\n this.toTimeValue = time;\n this.toTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\n // Also convert to seconds so ngModel patches the child correctly\n this.toTimeInSeconds = this.convertToSeconds(\n time,\n meridiem as 'AM' | 'PM',\n );\n }\n }\n // Single with time\n else if (this.time && val?.date) {\n this.selectedDate = new Date(val.date);\n this.tempDate = new Date(val.date);\n if (val.time) {\n const [time, meridiem] = val.time.split(' ');\n this.timeValue = time;\n this.timeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\n this.singleTimeInSeconds = this.convertToSeconds(\n time,\n meridiem as 'AM' | 'PM',\n );\n }\n }\n // Single without time\n else if (val) {\n this.selectedDate = new Date(val);\n this.tempDate = new Date(val);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n // ─── Toggle ───────────────────────────────────────────────────────────────\n\n toggleCalendar(): void {\n this.isOpen = !this.isOpen;\n this.initializeCurrentMonthYear();\n\n if (this.parentNativeElement) {\n let parentDiv = document.getElementById(this.parentNativeElement);\n setTimeout(() => {\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\n let dropdonwList: any = document.getElementById('date-input-container');\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\n dropdonwList.style['transform'] = `translate(0px,-${\n elBoundary?.['height'] + 54\n }px`;\n }\n }, 0);\n }\n\n // this.onTouched();\n }\n initializeCurrentMonthYear(): void {\n const refDate =\n (this.mode === 'range' || this.mode === 'dual') && this.rangeFrom\n ? this.rangeFrom\n : this.selectedDate || new Date();\n\n this.currentMonth = refDate.getMonth();\n this.currentYear = refDate.getFullYear();\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n if (this.mode === 'dual' && this.rangeFrom && this.rangeTo) {\n const sameMonth = this.rangeFrom.getMonth() === this.rangeTo.getMonth();\n\n if (sameMonth) {\n const { month, year } = this.getNextMonthYear(\n this.currentMonth,\n this.currentYear,\n );\n this.currentMonth2 = month;\n this.currentYear2 = year;\n } else {\n this.currentMonth2 = this.rangeTo.getMonth();\n this.currentYear2 = this.rangeTo.getFullYear();\n }\n }\n\n this.buildCalendar();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elRef.nativeElement.contains(event.target)) {\n // this.onCancel();\n }\n }\n\n // ─── Calendar Build ───────────────────────────────────────────────────────\n\n buildCalendar(): void {\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n\n this.calendarDays = this.buildCalendarDays(\n this.currentMonth,\n this.currentYear,\n );\n\n this.calendarDays2 = this.buildCalendarDays(\n this.currentMonth2,\n this.currentYear2,\n );\n } else {\n this.calendarDays = this.buildCalendarDays(\n this.currentMonth,\n this.currentYear,\n );\n }\n }\n\n private buildCalendarDays(month: number, year: number): (number | null)[] {\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const prevMonthDays = new Date(year, month, 0).getDate();\n\n const days: (number | null)[] = [];\n\n // Leading days from prev month (greyed out)\n for (let i = firstDay - 1; i >= 0; i--) {\n days.push(-(prevMonthDays - i)); // negative = prev month\n }\n\n // Current month days\n for (let d = 1; d <= daysInMonth; d++) {\n days.push(d);\n }\n\n // Trailing days from next month\n let trailing = 1;\n while (days.length % 7 !== 0) {\n days.push(1000 + trailing++); // 1000+ = next month\n }\n\n return days;\n }\n\n private getNextMonthYear(\n month: number,\n year: number,\n ): { month: number; year: number } {\n if (month === 11) {\n return { month: 0, year: year + 1 };\n }\n return { month: month + 1, year };\n }\n\n private getPrevMonthYear(\n month: number,\n year: number,\n ): { month: number; year: number } {\n if (month === 0) {\n return { month: 11, year: year - 1 };\n }\n return { month: month - 1, year };\n }\n\n generateYearRange(year: number = this.currentYear): void {\n const startYear = year - (year % 20);\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\n }\n\n openView(calendar: 'primary' | 'secondary', view: CalenderView): void {\n this.activeCalendar = calendar;\n this.calenderView = view;\n if (view === 'year') {\n this.generateYearRange(\n calendar === 'secondary' ? this.currentYear2 : this.currentYear,\n );\n }\n }\n\n getDayDisplay(day: number | null): string {\n if (day === null) return '';\n if (day < 0) return String(Math.abs(day));\n if (day > 999) return String(day - 1000);\n return String(day);\n }\n\n isOtherMonth(day: number | null): boolean {\n if (day === null) return false;\n return day < 0 || day > 999;\n }\n\n getActualDay(day: number | null): number | null {\n if (day === null) return null;\n if (day < 0 || day > 999) return null; // other month — not selectable\n return day;\n }\n\n // ─── Navigation ───────────────────────────────────────────────────────────\n\n // Fix — secondary is always exactly 1 month ahead of primary\n prevMonth(): void {\n const prev = this.getPrevMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth = prev.month;\n this.currentYear = prev.year;\n\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n this.buildCalendar();\n }\n\n nextMonth(): void {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth = next.month;\n this.currentYear = next.year;\n\n if (this.mode === 'dual') {\n const next2 = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next2.month;\n this.currentYear2 = next2.year;\n }\n this.buildCalendar();\n }\n\n selectMonth(month: string) {\n const index = this.monthNames.indexOf(month);\n if (this.activeCalendar === 'primary') {\n this.currentMonth = index;\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n } else {\n this.currentMonth2 = index;\n if (this.mode === 'dual') {\n const prev = this.getPrevMonthYear(\n this.currentMonth2,\n this.currentYear2,\n );\n this.currentMonth = prev.month;\n this.currentYear = prev.year;\n }\n }\n this.buildCalendar();\n this.calenderView = 'day';\n }\n\n previousYearRange(): void {\n this.yearRange = this.yearRange.map((year) => year - 18);\n }\n\n nextYearRange(): void {\n this.yearRange = this.yearRange.map((year) => year + 18);\n }\n\n selectYear(year: number) {\n if (this.activeCalendar === 'primary') {\n this.currentYear = year;\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n } else {\n this.currentYear2 = year;\n if (this.mode === 'dual') {\n const prev = this.getPrevMonthYear(\n this.currentMonth2,\n this.currentYear2,\n );\n this.currentMonth = prev.month;\n this.currentYear = prev.year;\n }\n }\n this.generateYearRange(\n this.activeCalendar === 'secondary'\n ? this.currentYear2\n : this.currentYear,\n );\n this.buildCalendar();\n this.calenderView = 'day';\n }\n\n // ─── Day Selection ────────────────────────────────────────────────────────\n\n selectDay(\n day: number | null,\n calendar: 'primary' | 'secondary' = 'primary',\n ): void {\n const month =\n calendar === 'secondary' ? this.currentMonth2 : this.currentMonth;\n const year =\n calendar === 'secondary' ? this.currentYear2 : this.currentYear;\n\n const actual = this.getActualDay(day);\n if (!actual || this.isDayDisabled(actual, month, year)) return;\n\n const date = new Date(year, month, actual);\n\n if (this.mode === 'range' || this.mode === 'dual') {\n if (!this.tempFrom && !this.tempTo) {\n this.tempFrom = date;\n } else if (this.tempFrom && !this.tempTo) {\n if (date < this.tempFrom) {\n this.tempTo = this.tempFrom;\n this.tempFrom = date;\n } else {\n this.tempTo = date;\n }\n } else {\n this.tempFrom = date;\n this.tempTo = null;\n }\n } else {\n this.tempDate = date;\n }\n }\n\n // ─── Day State Checks ─────────────────────────────────────────────────────\n\n isSelected(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n const actual = this.getActualDay(day);\n if (!actual) return false;\n\n if (this.mode === 'range' || this.mode === 'dual') {\n const date = new Date(year, month, actual);\n return (\n this.isSameDay(date, this.tempFrom) || this.isSameDay(date, this.tempTo)\n );\n }\n\n if (!this.tempDate) return false;\n return (\n this.tempDate.getDate() === actual &&\n this.tempDate.getMonth() === month &&\n this.tempDate.getFullYear() === year\n );\n }\n\n isInRange(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\n const actual = this.getActualDay(day);\n if (!actual || !this.tempFrom || !this.tempTo) return false;\n const date = new Date(year, month, actual);\n return date > this.tempFrom && date < this.tempTo;\n }\n\n isRangeStart(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\n const actual = this.getActualDay(day);\n if (!actual) return false;\n return this.isSameDay(new Date(year, month, actual), this.tempFrom);\n }\n\n isRangeEnd(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\n const actual = this.getActualDay(day);\n if (!actual) return false;\n return this.isSameDay(new Date(year, month, actual), this.tempTo);\n }\n\n isToday(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n const actual = this.getActualDay(day);\n if (!actual) return false;\n const today = new Date();\n return (\n today.getDate() === actual &&\n today.getMonth() === month &&\n today.getFullYear() === year\n );\n }\n\n isDayDisabled(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n const actual = this.getActualDay(day);\n if (!actual) return true;\n const date = new Date(year, month, actual);\n\n // disablePastDays: disable last N days from today\n if (this.config.disablePastDays) {\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - this.config.disablePastDays);\n cutoff.setHours(0, 0, 0, 0);\n if (date < cutoff) return true;\n }\n\n if (this.config.minDate) {\n const min = new Date(this.config.minDate);\n min.setHours(0, 0, 0, 0);\n if (date < min) return true;\n }\n\n if (this.config.maxDate) {\n const max = new Date(this.config.maxDate);\n max.setHours(23, 59, 59, 999);\n if (date > max) return true;\n }\n\n if (this.config.disabledDates?.length) {\n return this.config.disabledDates.some((d) => this.isSameDay(d, date));\n }\n\n return false;\n }\n\n // ─── Time (datetime mode) ─────────────────────────────────────────────────\n\n // handleTimeInput(event: Event, field: 'timeValue' | 'fromTimeValue' | 'toTimeValue') {\n // const input = event.target as HTMLInputElement;\n // let value = input.value.replace(/[^0-9]/g, '');\n\n // if (value.length > 2) {\n // value = value.slice(0, 2) + ':' + value.slice(2, 4);\n // }\n\n // this[field] = value.slice(0, 5);\n // }\n\n // setPeriod(value: 'AM' | 'PM', field: 'timeMeridiem' | 'fromTimeMeridiem' | 'toTimeMeridiem'): void {\n // this[field] = value;\n // }\n\n setTime(event: any) {\n console.log(event);\n }\n singleTimeInSeconds: number | null = null;\n fromTimeInSeconds: number | null = null;\n toTimeInSeconds: number | null = null;\n\n private convertToSeconds(time: string, meridiem: 'AM' | 'PM'): number | null {\n if (!time) return null;\n\n let [hours, minutes] = time.split(':').map(Number);\n\n if (isNaN(hours) || isNaN(minutes)) return null;\n\n if (meridiem === 'PM' && hours < 12) hours += 12;\n if (meridiem === 'AM' && hours === 12) hours = 0;\n\n return hours * 3600 + minutes * 60;\n }\n onSingleTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\n this.timeValue = event.time;\n this.timeMeridiem = event.meridiem;\n\n // store for patch\n this.singleTimeInSeconds = this.convertToSeconds(\n event.time,\n event.meridiem,\n );\n }\n\n onFromTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\n this.fromTimeValue = event.time;\n this.fromTimeMeridiem = event.meridiem;\n\n this.fromTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\n }\n\n onToTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\n this.toTimeValue = event.time;\n this.toTimeMeridiem = event.meridiem;\n\n this.toTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\n }\n // ─── Actions ──────────────────────────────────────────────────────────────\n onApply(): void {\n const parentDateFormat = this.config.parentDateFormat;\n\n // ---------------- RANGE / DUAL ----------------\n if (this.mode === 'range' || this.mode === 'dual') {\n if (!this.tempFrom || !this.tempTo) return;\n\n let fromTime = '';\n let toTime = '';\n\n if (this.time) {\n const normalizedFrom = this.normalizeTime(this.fromTimeValue);\n const normalizedTo = this.normalizeTime(this.toTimeValue);\n\n // block apply if invalid\n if (!normalizedFrom || !normalizedTo) return;\n\n fromTime = `${normalizedFrom} ${this.fromTimeMeridiem}`;\n toTime = `${normalizedTo} ${this.toTimeMeridiem}`;\n }\n\n this.rangeFrom = this.tempFrom;\n this.rangeTo = this.tempTo;\n\n const result: DateRange = {\n from: this.formatDate(this.rangeFrom, parentDateFormat),\n to: this.formatDate(this.rangeTo, parentDateFormat),\n fromTime,\n toTime,\n };\n\n this.onChange(result);\n this.applied.emit(result);\n }\n\n // ---------------- SINGLE ----------------\n else if (this.mode === 'single') {\n if (!this.tempDate) return;\n\n this.selectedDate = this.tempDate;\n const finalDate = this.formatDate(this.tempDate, parentDateFormat);\n\n if (this.time) {\n const normalized = this.normalizeTime(this.timeValue);\n\n // block invalid time\n if (!normalized) return;\n\n const result: DateTimeResult = {\n date: finalDate,\n time: `${normalized} ${this.timeMeridiem}`,\n meridiem: this.timeMeridiem,\n };\n\n this.onChange(result);\n this.applied.emit(result);\n } else {\n this.onChange(finalDate);\n this.applied.emit(finalDate);\n }\n }\n\n this.isOpen = false;\n }\n private normalizeTime(value: string): string | null {\n if (!value) return null;\n\n let [h, m] = value.split(':');\n\n let hours = Number(h);\n let minutes = Number(m ?? 0);\n\n // Invalid hour (block 00 also)\n if (!hours || hours < 1 || hours > 12) return null;\n\n // Invalid minutes\n if (minutes < 0 || minutes > 59) return null;\n\n //\n return `${hours.toString().padStart(2, '0')}:${minutes\n .toString()\n .padStart(2, '0')}`;\n }\n\n appendTimeInDate(time: string, date: Date, timeMeridiem: string) {\n const [hours, minutes] = time.split(':').map(Number);\n const dateWithTime = new Date(date);\n if (!isNaN(hours) && !isNaN(minutes)) {\n let h = hours;\n if (timeMeridiem === 'PM' && h < 12) h += 12;\n if (timeMeridiem === 'AM' && h === 12) h = 0;\n dateWithTime.setHours(h, minutes, 0, 0);\n }\n\n return dateWithTime;\n }\n\n onCancel(): void {\n //Reset values to last applied state\n this.tempDate = this.selectedDate ? new Date(this.selectedDate) : null;\n this.tempFrom = this.rangeFrom ? new Date(this.rangeFrom) : null;\n this.tempTo = this.rangeTo ? new Date(this.rangeTo) : null;\n this.calenderView = 'day';\n\n this.isOpen = false;\n this.cancelled.emit();\n }\n\n clearDate(): void {\n this.selectedDate = null;\n this.tempDate = null;\n this.rangeFrom = null;\n this.rangeTo = null;\n this.tempFrom = null;\n this.tempTo = null;\n this.onChange(null);\n // this.applied.emit(null);\n }\n cancelDate(source: string) {\n if (source == 'from') {\n this.tempFrom = null;\n this.rangeFrom = null;\n } else if (source == 'to') {\n this.tempTo = null;\n this.rangeTo = null;\n } else {\n this.tempDate = null;\n }\n }\n onDaySelected(day: number | null, calendar: 'primary' | 'secondary') {\n this.selectDay(day, calendar);\n }\n\n // ─── Helpers ──────────────────────────────────────────────────────────────\n\n isSameDay(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return (\n a.getDate() === b.getDate() &&\n a.getMonth() === b.getMonth() &&\n a.getFullYear() === b.getFullYear()\n );\n }\n\n formatDate(\n date: Date,\n dateFormat: string = this.config.dateFormat ?? '',\n ): string {\n const day = date.getDate();\n const monthShort = this.monthNames[date.getMonth()].slice(0, 3);\n const year = date.getFullYear();\n\n switch (dateFormat) {\n case 'MM/dd/yyyy':\n return `${String(date.getMonth() + 1).padStart(2, '0')}/${String(day).padStart(2, '0')}/${year}`;\n case 'yyyy-MM-dd':\n return `${year}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n default:\n return `${day} ${monthShort} ${year}`;\n }\n }\n\n get canApply(): boolean {\n if (this.mode === 'range' || this.mode === 'dual') {\n if (!this.tempFrom || !this.tempTo) return false;\n if (this.tempFrom > this.tempTo) return false;\n if (this.time) {\n if (!this.isValidTime(this.fromTimeValue)) return false;\n if (!this.isValidTime(this.toTimeValue)) return false;\n }\n return true;\n }\n\n if (this.mode === 'single') {\n if (!this.tempDate) return false;\n let finalDate = new Date(this.tempDate);\n\n if (this.time) {\n if (!this.isValidTime(this.timeValue)) return false;\n const [hours, minutes] = this.timeValue.split(':').map(Number);\n let h = hours;\n if (this.timeMeridiem === 'PM' && h < 12) h += 12;\n if (this.timeMeridiem === 'AM' && h === 12) h = 0;\n finalDate.setHours(h, minutes, 0, 0);\n }\n\n if (this.config?.maxDate && finalDate > this.config.maxDate) {\n return false;\n }\n\n if (this.config?.minDate && finalDate < this.config.minDate) {\n return false;\n }\n\n return true;\n }\n\n return false;\n }\n private isValidTime(value: string): boolean {\n const [hStr, mStr] = value.split(':');\n if (!hStr) return false;\n const hours = Number(hStr);\n const minutes = Number(mStr ?? '0');\n return !(\n isNaN(hours) ||\n isNaN(minutes) ||\n hours < 1 ||\n hours > 12 ||\n minutes < 0 ||\n minutes > 59\n );\n }\n}\n","<div class=\"date-picker-wrapper\" id=\"custom-date\">\n <!-- Label -->\n @if (label) {\n <label class=\"date-label\">{{ label }}</label>\n }\n\n <!-- Input Trigger -->\n @if (showTrigger) {\n <div\n class=\"date-input\"\n [class.is-open]=\"isOpen\"\n [class.has-value]=\"displayValue\"\n (click)=\"toggleCalendar()\"\n >\n <span class=\"date-input-text\" [class.custom-placeholder]=\"!displayValue\">\n {{ displayValue || config.placeholder || \"Select date\" }}\n </span>\n\n <svg\n class=\"calendar-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n\n <!-- @if (displayValue) {\n <span class=\"clear-btn\" (click)=\"$event.stopPropagation(); clearDate()\">\n <img src=\"images/x.svg\" alt=\"\" />\n </span>\n } -->\n </div>\n }\n\n <!-- Calendar Dropdown -->\n @if (!showTrigger || isOpen) {\n <div\n catsOutsideClick\n (clickOutSide)=\"isOpen = false\"\n id=\"date-input-container\"\n class=\"calendar-dropdown sp-16 br-8\"\n [ngClass]=\"{ 'month-year-view': calenderView != 'day' }\"\n >\n <div class=\"calendar-header sm-b-12\">\n <div class=\"nav-btn br-4\" (click)=\"prevMonth()\" type=\"button\">\n <img src=\"images/chevron-left.svg\" alt=\"\" />\n </div>\n <div class=\"month-year body-medium\">\n @if (mode === \"dual\") {\n @if (calenderView == \"day\" || activeCalendar != \"secondary\") {\n <div class=\"month-year-wrapper\">\n <span class=\"month\" (click)=\"openView('primary', 'month')\">{{\n currentMonthName\n }}</span>\n <span class=\"year\" (click)=\"openView('primary', 'year')\">{{\n currentYear\n }}</span>\n </div>\n }\n\n @if (calenderView == \"day\" || activeCalendar != \"primary\") {\n <div class=\"month-year-wrapper\">\n <span class=\"month\" (click)=\"openView('secondary', 'month')\">{{\n monthNames[currentMonth2]\n }}</span>\n <span class=\"year\" (click)=\"openView('secondary', 'year')\">{{\n currentYear2\n }}</span>\n </div>\n }\n } @else {\n <div class=\"month-year-wrapper\">\n <span class=\"month\" (click)=\"calenderView = 'month'\">{{\n currentMonthName\n }}</span>\n <span class=\"year\" (click)=\"calenderView = 'year'\">{{\n currentYear\n }}</span>\n </div>\n }\n </div>\n <div class=\"nav-btn br-4\" (click)=\"nextMonth()\" type=\"button\">\n <img src=\"images/chevron-right.svg\" alt=\"\" />\n </div>\n </div>\n\n @if (calenderView == \"month\") {\n <div class=\"month-grid\">\n @for (month of monthNames; track month) {\n <span\n class=\"month\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{ selected: month == activeMonthName }\"\n >{{ month }}</span\n >\n }\n </div>\n } @else if (calenderView == \"year\") {\n <div class=\"year-selector\">\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\n <img src=\"images/chevron-left.svg\" alt=\"\" />\n </span>\n <div class=\"year-grid\">\n @for (year of yearRange; track year) {\n <span\n class=\"year\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{ selected: year == activeYearValue }\"\n >{{ year }}</span\n >\n }\n </div>\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\n <img src=\"images/chevron-right.svg\" alt=\"\" />\n </span>\n </div>\n } @else {\n <!-- Weekday Headers -->\n <div class=\"day_wrapper\">\n @if (mode === \"dual\") {\n <div class=\"dual-calendar\">\n <div class=\"calendar-panel\">\n <custom-calendar-grid\n [month]=\"currentMonth\"\n [year]=\"currentYear\"\n [calendarDays]=\"calendarDays\"\n [weekDays]=\"weekDays\"\n [parent]=\"this\"\n (daySelected)=\"onDaySelected($event, 'primary')\"\n ></custom-calendar-grid>\n </div>\n\n <div class=\"calendar-panel\">\n <custom-calendar-grid\n [month]=\"currentMonth2\"\n [year]=\"currentYear2\"\n [calendarDays]=\"calendarDays2\"\n [weekDays]=\"weekDays\"\n [parent]=\"this\"\n (daySelected)=\"onDaySelected($event, 'secondary')\"\n ></custom-calendar-grid>\n </div>\n </div>\n } @else {\n <custom-calendar-grid\n [month]=\"currentMonth\"\n [year]=\"currentYear\"\n [calendarDays]=\"calendarDays\"\n [weekDays]=\"weekDays\"\n [parent]=\"this\"\n (daySelected)=\"onDaySelected($event, 'primary')\"\n ></custom-calendar-grid>\n }\n </div>\n\n <!-- Footer -->\n <div\n class=\"calendar-footer sm-b-16\"\n [ngClass]=\"{ 'dual-calendar': config.mode === 'dual' }\"\n >\n <!-- SINGLE MODE footer -->\n @if (mode === \"single\" && showDateLabel) {\n <div class=\"calendar-footer-wrapper\">\n <div class=\"footer-row label-row\">\n <span class=\"footer-label body-large sp-x-12\">Date</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <span class=\"footer-value body-large\">{{\n tempDisplayValue\n }}</span>\n @if (tempDate) {\n <img\n (click)=\"cancelDate('single')\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n }\n </div>\n </div>\n </div>\n @if (time) {\n <cats-time-input\n [(ngModel)]=\"singleTimeInSeconds\"\n (timeChange)=\"onSingleTimeChange($event)\"\n ></cats-time-input>\n }\n }\n\n <!-- RANGE MODE footer -->\n @if (mode === \"range\" || mode === \"dual\") {\n <div\n class=\"calendar-footer-wrapper\"\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\n >\n <div class=\"footer-row label-row\">\n <span class=\"footer-label body-large sp-x-12\">From</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <span class=\"footer-value body-large\">{{\n tempFromDisplay\n }}</span>\n @if (tempFrom) {\n <img\n (click)=\"cancelDate('from')\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n }\n </div>\n </div>\n @if (time) {\n <cats-time-input\n [(ngModel)]=\"fromTimeInSeconds\"\n (timeChange)=\"onFromTimeChange($event)\"\n ></cats-time-input>\n }\n </div>\n <div\n class=\"dual-calendar-border-top\"\n [ngClass]=\"{ 'calendar-footer-wrapper': time, 'sp-t-12': time }\"\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\n >\n <div class=\"footer-row label-row\" [class.muted]=\"!tempTo\">\n <span class=\"footer-label body-large sp-x-12\">To</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <span class=\"footer-value body-large\">{{\n tempToDisplay\n }}</span>\n @if (tempTo) {\n <img\n (click)=\"cancelDate('to')\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n }\n </div>\n </div>\n @if (time) {\n <cats-time-input\n [(ngModel)]=\"toTimeInSeconds\"\n (timeChange)=\"onToTimeChange($event)\"\n ></cats-time-input>\n }\n </div>\n }\n </div>\n <!-- Action Buttons -->\n <div class=\"footer-actions\">\n <button\n class=\"btn-cancel footer-btn body-medium\"\n (click)=\"onCancel()\"\n type=\"button\"\n >\n Cancel\n </button>\n <button\n class=\"btn-apply footer-btn body-medium\"\n (click)=\"onApply()\"\n type=\"button\"\n [disabled]=\"!canApply\"\n >\n Apply\n </button>\n </div>\n }\n </div>\n }\n</div>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Renderer2,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[catsUiTooltip]',\n})\nexport class CatsUiTooltipDirective implements OnInit, OnDestroy {\n @Input('catsUiTooltip') tooltipText = '';\n @Input() tooltipClass?: string = '';\n\n private tooltipEl!: HTMLElement;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit(): void {\n this.showTooltip();\n }\n\n ngOnDestroy(): void {\n this.removeTooltip();\n }\n\n @HostListener('mouseenter')\n showTooltip() {\n this.createTooltip();\n this.positionTooltip();\n }\n\n @HostListener('mouseleave')\n hideTooltip() {\n this.removeTooltip();\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n adjustOnWindowChange() {\n if (this.tooltipEl) this.positionTooltip();\n }\n\n /**\n * @description Creates tooltip\n * @author Shiva Kant\n * @returns\n */\n private createTooltip() {\n if (this.tooltipEl) return;\n\n this.tooltipEl = this.renderer.createElement('div');\n this.tooltipEl.innerText = this.tooltipText;\n\n this.renderer.setStyle(this.tooltipEl, 'position', 'fixed');\n // this.renderer.setStyle(this.tooltipEl, 'padding', '6px 10px');\n // this.renderer.setStyle(this.tooltipEl, 'background', '#ffffff');\n // this.renderer.setStyle(this.tooltipEl, 'color', '#434a51');\n // this.renderer.setStyle(this.tooltipEl, 'borderRadius', '4px');\n // this.renderer.setStyle(this.tooltipEl, 'zIndex', '9999');\n // this.renderer.setStyle(this.tooltipEl, 'whiteSpace', 'nowrap');\n // Add a custom class if provided\n if (this.tooltipClass) {\n this.renderer.addClass(this.tooltipEl, this.tooltipClass);\n } else {\n // Optionally, you can add a default class here\n this.renderer.addClass(this.tooltipEl, 'default-tooltip-class');\n }\n\n document.body.appendChild(this.tooltipEl);\n }\n\n /**\n * @description Removes tooltip\n * @author Shiva Kant\n */\n private removeTooltip() {\n if (this.tooltipEl) {\n this.tooltipEl.remove();\n this.tooltipEl = null as any;\n }\n }\n\n /**\n * @description Positions tooltip\n * @author Shiva Kant\n */\n private positionTooltip() {\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\n\n const spacing = 8; // distance from host element\n\n const fitsAbove = hostRect.top >= tooltipRect.height + spacing;\n const fitsBelow =\n window.innerHeight - hostRect.bottom >= tooltipRect.height + spacing;\n const fitsLeft = hostRect.left >= tooltipRect.width + spacing;\n const fitsRight =\n window.innerWidth - hostRect.right >= tooltipRect.width + spacing;\n\n let top = 0;\n let left = 0;\n\n // Priority: bottom → top → right → left\n if (fitsBelow) {\n top = hostRect.bottom + spacing;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n } else if (fitsAbove) {\n top = hostRect.top - tooltipRect.height - spacing;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n } else if (fitsRight) {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.right + spacing;\n } else if (fitsLeft) {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.left - tooltipRect.width - spacing;\n } else {\n // fallback → bottom with clamped position\n top = hostRect.bottom + spacing;\n left = Math.min(\n Math.max(10, hostRect.left),\n window.innerWidth - tooltipRect.width - 10\n );\n }\n\n this.renderer.setStyle(this.tooltipEl, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipEl, 'left', `${left}px`);\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'cats-ui-accordion',\n imports: [],\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n})\nexport class AccordionComponent {\n openedIndex: number | null = null;\n\n /**\n * @description Toggles accordion component\n * @author Shiva Kant\n * @param index \n */\n toggle(index: number): void {\n this.openedIndex = this.openedIndex === index ? null : index;\n }\n\n /**\n * @description Determines whether open is\n * @author Shiva Kant\n * @param index \n * @returns true if open \n */\n isOpen(index: number): boolean {\n return this.openedIndex === index;\n }\n}\n","<div class=\"accordion\">\n <ng-content></ng-content> <!-- Will contain AccordionItem components -->\n</div>\n","import {\n Component,\n ContentChild,\n Inject,\n Input,\n TemplateRef,\n} from '@angular/core';\nimport { AccordionComponent } from '../accordion.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'cats-ui-accordion-item',\n imports: [CommonModule],\n templateUrl: './accordion-item.component.html',\n styleUrl: './accordion-item.component.scss',\n})\nexport class AccordionItemComponent {\n @Input() title: string = '';\n @Input() index: number = 0;\n\n // Change this to allow null instead of undefined\n @ContentChild(TemplateRef) contentTemplate: TemplateRef<any> | null = null;\n\n constructor(\n @Inject(AccordionComponent) private accordion: AccordionComponent\n ) {}\n\n /**\n * @description Determines whether open is\n * @author Shiva Kant\n * @returns true if open\n */\n isOpen(): boolean {\n return this.accordion.isOpen(this.index);\n }\n\n /**\n * @description Toggles accordion item component\n * @author Shiva Kant\n */\n toggle(): void {\n this.accordion.toggle(this.index);\n }\n\n /**\n * @description perform any initialization after content is injected\n * @author Shiva Kant\n */\n ngAfterContentInit(): void {\n if (!this.contentTemplate) {\n console.error(\n 'No content template provided for accordion item:',\n this.title\n );\n }\n }\n}\n","<div class=\"accordion-item\">\n <div class=\"accordion-header\" (click)=\"toggle()\">\n <div class=\"title\">{{ title }}</div>\n <img\n class=\"arrow_icon\"\n [src]=\"isOpen() ? 'images/chevron-up.svg' : 'images/chevron-down.svg'\"\n alt=\"\"\n />\n </div>\n\n <!-- <div class=\"accordion-body\" [class.open]=\"isOpen()\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </div> -->\n\n <div class=\"accordion-body\" [class.open]=\"isOpen()\">\n <div class=\"inner\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cats-ui-tab-content',\n imports: [],\n templateUrl: './tab-content.component.html',\n styleUrl: './tab-content.component.scss',\n})\nexport class TabContentComponent {\n @Input() active = false;\n @Input() tabId!: number;\n}\n"," @if (active) {\n\n <ng-container >\n <ng-content></ng-content>\n </ng-container>\n }","import {\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\nimport { TabContentComponent } from './tab-content/tab-content.component';\nimport { NgClass } from '@angular/common';\n\nexport interface TabConfig {\n type?: 'Default' | 'Stroke' | string;\n addTab?: boolean;\n closeTab?: boolean;\n homeTab?: boolean;\n}\nexport interface TabItem {\n id: number;\n title: string;\n leadingIcon?: string;\n tralingIocn?: string;\n count?: number | string;\n isDisable?: boolean;\n isHome?: boolean;\n}\n@Component({\n selector: 'cats-ui-tabset',\n imports: [NgClass],\n templateUrl: './tabset.component.html',\n styleUrl: './tabset.component.scss',\n})\nexport class TabsetComponent {\n @Input() tabs: TabItem[] = [];\n\n @Input() activeTab!: number | null;\n @Output() activeTabChange = new EventEmitter<number | null>();\n\n @Input() tabConfig: TabConfig = {};\n\n @Output() tabAdded = new EventEmitter<TabItem>();\n @Output() tabClosed = new EventEmitter<number>();\n\n @ContentChildren(TabContentComponent)\n contents!: QueryList<TabContentComponent>;\n\n counter = 1;\n\n ngAfterContentInit() {\n // if (this.tabs.length) {\n // // this.activeTab = this.tabs[0].id;\n // this.counter = this.tabs.length + 1;\n // this.updateContentActivation();\n // }\n if (this.tabs.length) {\n if (this.activeTab === null || this.activeTab === undefined) {\n this.activeTab = this.tabs[0].id;\n this.activeTabChange.emit(this.activeTab);\n }\n\n this.counter = this.tabs.length + 1;\n this.updateContentActivation();\n }\n }\n ngOnChanges(changes: SimpleChanges) {\n if (changes['tabs'] || changes['tabConfig']) {\n this.addHomeTabIfNeeded();\n\n // Set default active tab if not provided\n if (\n (this.activeTab === null || this.activeTab === undefined) &&\n this.tabs.length\n ) {\n this.activeTab = this.tabs[0].id;\n this.activeTabChange.emit(this.activeTab);\n }\n\n this.updateContentActivation();\n }\n\n if (changes['activeTab']) {\n this.updateContentActivation();\n }\n }\n addHomeTabIfNeeded() {\n if (!this.tabConfig?.homeTab) return;\n\n const alreadyExists = this.tabs?.some((t) => t.isHome);\n\n if (!alreadyExists) {\n const homeTab = {\n id: 0,\n title: '',\n closable: false,\n isHome: true,\n };\n\n this.tabs = [homeTab, ...(this.tabs || [])];\n }\n }\n setActive(id: number) {\n this.activeTab = id;\n this.activeTabChange.emit(id);\n this.updateContentActivation();\n }\n\n closeTab(event: Event, id: number, index: number) {\n event.stopPropagation();\n\n if (!this.tabConfig.closeTab) return;\n\n this.tabs.splice(index, 1);\n\n if (this.activeTab === id) {\n this.activeTab = this.tabs.length ? this.tabs[0].id : null;\n this.activeTabChange.emit(this.activeTab);\n }\n\n this.updateContentActivation();\n this.tabClosed.emit(id);\n }\n\n addTab(event: Event) {\n event.stopPropagation();\n\n if (!this.tabConfig.addTab) return;\n\n this.tabAdded.emit(); // \n }\n updateContentActivation() {\n if (!this.contents) return;\n\n this.contents.forEach((content) => {\n content.active = content.tabId === this.activeTab;\n });\n }\n}\n","<div\n class=\"cats_tab_container\"\n [ngClass]=\"{\n stroke_tab: tabConfig.type?.toLowerCase() === 'stroke',\n ipro_tab: tabConfig.type?.toLowerCase() === 'file',\n ipro_tab_large: tabConfig.type?.toLowerCase() === 'filelarge',\n }\"\n>\n <ul class=\"cats_tab_header\">\n @for (t of tabs; track t.id; let i = $index) {\n <li\n class=\"cats_tab_item sp-x-12\"\n [class.active]=\"t.id === activeTab\"\n [class.disabled]=\"t.isDisable\"\n (click)=\"setActive(t.id)\"\n >\n <!-- Home Icon -->\n @if (t.isHome) {\n <img src=\"images/home.svg\" class=\"cats_home_icon\" />\n }\n <!-- <ng-container ></ng-container> -->\n @else {\n <div class=\"cats_tab_item_container\">\n <!-- leadingIcon -->\n @if (t.leadingIcon) {\n <img [src]=\"t.leadingIcon\" class=\"cats_leading_icon\" />\n }\n\n <!-- Title -->\n <span class=\"cats_title\">{{ t.title }}</span>\n <!-- tralingIocn -->\n @if (t.tralingIocn) {\n <img [src]=\"t.tralingIocn\" class=\"cats_trailng_icon\" />\n }\n <!-- tab_count -->\n @if (t.count) {\n <span class=\"cats_tab_count\">{{ t.count }}</span>\n }\n </div>\n }\n <!-- Close (NOT for first tab) -->\n @if (tabConfig.closeTab && i !== 0) {\n <img\n class=\"cats_close_icon pointer\"\n (click)=\"closeTab($event, t.id, i)\"\n src=\"images/x.svg\"\n alt=\"\"\n />\n }\n </li>\n }\n\n <!-- Add Button -->\n @if (tabConfig.addTab) {\n <li class=\"add_more_tab cats_tab_item sp-x-12\" (click)=\"addTab($event)\">\n <img src=\"images/plus.svg\" alt=\"\" />\n </li>\n }\n </ul>\n <div class=\"cats_tab_content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n Input,\n AfterViewInit,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[autoPosition]',\n})\nexport class AutoPositionDirective implements AfterViewInit {\n @Input() overlay!: HTMLElement;\n @Input() trigger!: HTMLElement; \n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) { }\n\n ngAfterViewInit() {\n setTimeout(() => this.setPosition(), 0);\n }\n\n setPosition() {\n if (!this.overlay || !this.trigger) return;\n\n const triggerRect = this.trigger.getBoundingClientRect();\n const overlayRect = this.overlay.getBoundingClientRect();\n\n const spaceRight = window.innerWidth - triggerRect.right;\n const spaceLeft = triggerRect.left;\n const spaceBottom = window.innerHeight - triggerRect.bottom;\n const spaceTop = triggerRect.top;\n\n let top = 0;\n let left = 0;\n\n // smarter: pick best space\n const positions = [\n { type: 'right', space: spaceRight },\n { type: 'left', space: spaceLeft },\n { type: 'bottom', space: spaceBottom },\n { type: 'top', space: spaceTop },\n ].sort((a, b) => b.space - a.space);\n\n switch (positions[0].type) {\n case 'right':\n left = triggerRect.right;\n top = triggerRect.top;\n break;\n case 'left':\n left = triggerRect.left - overlayRect.width;\n top = triggerRect.top;\n break;\n case 'bottom':\n left = triggerRect.left;\n top = triggerRect.bottom;\n break;\n case 'top':\n left = triggerRect.left;\n top = triggerRect.top - overlayRect.height;\n break;\n }\n\n Object.assign(this.overlay.style, {\n position: 'fixed',\n left: `${left}px`,\n top: `${top}px`,\n zIndex: '1000',\n });\n }\n}\n","\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n CustomDatePickerComponent,\n DatePickerConfig,\n DatePickerMode,\n} from '../custom-date-picker';\nimport { AutoPositionDirective } from '../../directives/auto-position.directive';\n\n/* ===================== MODELS ===================== */\n\nexport type FilterType =\n | 'live'\n | 'today'\n | 'week'\n | 'month'\n | 'fy'\n | 'last'\n | 'customRange'\n | 'customDate';\n\nexport interface TimeFilterOption {\n label: string;\n value: string;\n type?: 'radio' | 'input' | 'submenu';\n children?: TimeFilterOption[];\n default?: boolean;\n custom?: boolean;\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\n pickerMode?: DatePickerMode;\n time?: boolean;\n extraConfig?: Partial<DatePickerConfig>;\n}\n\nexport interface TimeFilterConfig {\n title?: string;\n showReset?: boolean;\n options: TimeFilterOption[];\n}\n\nexport interface TimeFilterOutput {\n type: FilterType;\n label?: string;\n startDate?: string;\n endDate?: string;\n value?: number;\n unit?: 'Hours' | 'Days';\n key?: string;\n dates?: any;\n}\nexport interface TimeFilterValue {\n type: string;\n dates?: any;\n lastValue?: number;\n lastUnit?: 'seconds' | 'minutes' | 'hours' | 'days';\n}\n\n/* ===================== COMPONENT ===================== */\n\n@Component({\n selector: 'cats-ui-timestamp-filter',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CustomDatePickerComponent,\n AutoPositionDirective,\n ],\n templateUrl: './timestamp-filter.component.html',\n styleUrl: './timestamp-filter.component.scss',\n})\nexport class TimestampFilterComponent implements OnInit {\n @Input({ required: true }) config!: TimeFilterConfig;\n @Output() selectionChange = new EventEmitter<TimeFilterOutput>();\n @Input() selectedValue: TimeFilterValue | null = null;\n\n // Internal radio binding\n radioValue: string | null = null;\n previousRadioValue: string | null = null;\n activePicker: TimeFilterOption | null = null;\n\n lastValue: number = 24;\n lastUnit: 'seconds' | 'minutes' | 'hours' | 'days' = 'hours';\n selectedDateLabels: Record<string, string> = {};\n dateControls: Record<string, FormControl> = {};\n\n /* ===================== GETTERS ===================== */\n\n get normalOptions(): TimeFilterOption[] {\n return this.config?.options?.filter((o) => !o.custom) || [];\n }\n\n get customOptions(): TimeFilterOption[] {\n return this.config?.options?.filter((o) => o.custom) || [];\n }\n\n /** Returns the FormControl for the currently active picker. */\n get activePickerControl(): FormControl | null {\n if (!this.activePicker) return null;\n return this.dateControls[this.activePicker.value] ?? null;\n }\n\n /* ===================== INIT ===================== */\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n \n this.customOptions\n .filter((o) => o.type === 'submenu')\n .forEach((opt) => {\n this.dateControls[opt.value] = new FormControl(null);\n });\n\n if (!this.config?.options?.length) return;\n\n if (this.selectedValue?.type) {\n this.applyPreset(this.selectedValue);\n } else {\n const defaultOption = this.config.options.find((o) => o.default);\n if (defaultOption) this.selectOption(defaultOption);\n }\n }\n\n /* ===================== PRESET RESTORE ===================== */\n\n private applyPreset(preset: TimeFilterValue): void {\n const option = this.config.options.find((o) => o.value === preset.type);\n if (!option) return;\n\n if (option.custom && option.type === 'submenu') {\n this.radioValue = option.value;\n\n const rawDates = preset.dates; // original raw picker payload\n\n if (rawDates != null) {\n this.dateControls[option.value]?.patchValue(rawDates, {\n emitEvent: false,\n });\n\n // Rebuild the display label from the raw payload\n this.selectedDateLabels[option.value] = this.buildDateLabel(\n rawDates,\n option,\n );\n }\n\n const isRange =\n option.pickerMode === 'range' || option.pickerMode === 'dual';\n\n const startDate = this.extractStartDate(rawDates, isRange);\n const endDate = this.extractEndDate(rawDates, isRange);\n\n this.emit({\n type: isRange ? 'customRange' : 'customDate',\n label: option.label,\n key: option.value,\n ...(startDate ? { startDate } : {}),\n ...(endDate ? { endDate } : {}),\n dates: rawDates,\n });\n } else if (option.value === 'last') {\n if (preset.lastValue != null) this.lastValue = preset.lastValue;\n if (preset.lastUnit) this.lastUnit = preset.lastUnit;\n this.selectOption(option);\n } else {\n this.selectOption(option);\n }\n }\n\n /* ===================== PICKER CONFIG ===================== */\n\n getPickerConfig(option: TimeFilterOption): DatePickerConfig {\n const mode: DatePickerMode = option.pickerMode || 'dual';\n\n const isTimeType =\n option.value.toLowerCase().includes('time') || !!option.time;\n\n return {\n mode,\n ...(isTimeType ? { time: true } : {}),\n ...(option.parentDateFormat\n ? { dateFormat: option.parentDateFormat }\n : {}),\n ...(option.extraConfig ?? {}),\n };\n }\n\n /* ===================== MAIN HANDLER ===================== */\n\n selectOption(option: TimeFilterOption): void {\n if (!option) return;\n\n if (option.custom && option.type === 'submenu') {\n this.previousRadioValue = this.radioValue;\n this.radioValue = option.value;\n this.activePicker = option;\n\n Object.keys(this.selectedDateLabels).forEach((key) => {\n if (key !== option.value) {\n delete this.selectedDateLabels[key];\n this.dateControls[key]?.reset(null, { emitEvent: false });\n }\n });\n\n return; // NO emit here — wait for onDateApplied\n }\n\n this.previousRadioValue = this.radioValue;\n this.radioValue = option.value;\n this.activePicker = null;\n\n const defaultDate = new Date();\n let start: Date | undefined;\n const end: Date = defaultDate;\n\n const formatDate = (date: Date): string => {\n const format = option.parentDateFormat;\n if (!format) return date.toISOString();\n\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n\n switch (format) {\n case 'dd MMM yyyy': {\n const monthNames = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${day} ${monthNames[date.getMonth()]} ${year}`;\n }\n case 'MM/dd/yyyy':\n return `${month}/${day}/${year}`;\n case 'yyyy-MM-dd':\n return `${year}-${month}-${day}`;\n default:\n return date.toISOString();\n }\n };\n\n switch (option.value) {\n case 'live':\n return this.emit({ type: 'live', label: option.label, key: 'live' });\n\n case 'today':\n start = this.startOfDay(defaultDate);\n break;\n\n case 'week':\n start = this.startOfWeek(defaultDate);\n break;\n\n case 'month':\n start = new Date(defaultDate.getFullYear(), defaultDate.getMonth(), 1);\n break;\n\n case 'fy':\n start = this.startOfFinancialYear(defaultDate);\n break;\n\n case '24h':\n start = this.subtractTime(defaultDate, 24, 'hours');\n break;\n\n case '7d':\n start = this.subtractTime(defaultDate, 7, 'days');\n break;\n\n case '30d':\n start = this.subtractTime(defaultDate, 30, 'days');\n break;\n\n case 'last':\n if (this.lastValue && this.lastUnit) {\n return this.emitLast();\n }\n return;\n\n default:\n return this.emit({\n type: option.value as FilterType,\n label: option.label,\n key: option.value,\n });\n }\n\n this.emit({\n type: option.value as FilterType,\n label: option.label,\n startDate: start ? formatDate(start) : undefined,\n endDate: formatDate(end),\n key: option.value,\n });\n }\n\n /* ===================== DATE PICKER EVENTS ===================== */\n\n onDateApplied(event: any): void {\n if (!this.activePicker) return;\n\n const option = this.activePicker;\n this.radioValue = option.value;\n const ctrl = this.dateControls[option.value];\n if (ctrl) {\n ctrl.patchValue(event, { emitEvent: false });\n }\n this.selectedDateLabels[option.value] = this.buildDateLabel(event, option);\n\n const isRange =\n option.pickerMode === 'range' || option.pickerMode === 'dual';\n\n const startDate = this.extractStartDate(event, isRange);\n const endDate = this.extractEndDate(event, isRange);\n\n this.emit({\n type: isRange ? 'customRange' : 'customDate',\n label: option.label,\n key: option.value,\n ...(startDate ? { startDate } : {}),\n ...(endDate ? { endDate } : {}),\n dates: event, \n });\n\n this.activePicker = null;\n this.cdr.markForCheck();\n }\n\n /**\n * Cancel: restore radio to whatever was selected before picker opened.\n */\n onCancel(_event: any): void {\n this.radioValue = this.previousRadioValue;\n this.activePicker = null;\n this.cdr.markForCheck();\n }\n\n /* ===================== LAST X ===================== */\n\n emitLast(): void {\n const unitMap: Record<string, 'Hours' | 'Days'> = {\n seconds: 'Hours',\n minutes: 'Hours',\n hours: 'Hours',\n days: 'Days',\n };\n this.emit({\n type: 'last',\n label: `Last ${this.lastValue} ${this.lastUnit}`,\n value: this.lastValue,\n unit: unitMap[this.lastUnit],\n key: 'last',\n });\n }\n\n onLastChange(): void {\n if (this.radioValue === 'last') {\n this.emitLast();\n }\n }\n\n /* ===================== RESET ===================== */\n\n reset(): void {\n this.selectedDateLabels = {};\n Object.values(this.dateControls).forEach((ctrl) =>\n ctrl.reset(null, { emitEvent: false }),\n );\n\n const defaultOption = this.config.options.find((o) => o.default);\n if (defaultOption) {\n this.selectOption(defaultOption);\n }\n }\n\n /* ===================== PRIVATE HELPERS ===================== */\n\n private extractStartDate(event: any, isRange: boolean): string | undefined {\n if (!event) return undefined;\n\n if (isRange) {\n // range / datetimerange → { from, to, fromTime?, toTime? }\n if (!event.from) return undefined;\n return event.fromTime ? `${event.from} ${event.fromTime}` : event.from;\n }\n\n // single date → plain string\n if (typeof event === 'string') return event;\n\n // datetime → { date, time, meridiem }\n if (event.date) {\n return event.time ? `${event.date} ${event.time}` : event.date;\n }\n\n return undefined;\n }\n\n private extractEndDate(event: any, isRange: boolean): string | undefined {\n if (!event || !isRange) return undefined;\n\n if (!event.to) return undefined;\n return event.toTime ? `${event.to} ${event.toTime}` : event.to;\n }\n\n private buildDateLabel(event: any, option: TimeFilterOption): string {\n if (!event) return option.label;\n\n // range / datetimerange → { from, to, fromTime?, toTime? }\n if (event?.from != null || event?.to != null) {\n const from = event.fromTime\n ? `${event.from} ${event.fromTime}`\n : event.from;\n const to = event.toTime ? `${event.to} ${event.toTime}` : event.to;\n return from && to ? `${from} – ${to}` : (from ?? to ?? option.label);\n }\n\n // datetime → { date, time, meridiem }\n if (event?.date && event?.time) {\n return `${event.date} ${event.time}`;\n }\n if (event?.date) return event.date;\n\n // plain string (single date)\n if (typeof event === 'string') return event;\n\n // legacy fallback\n if (event?.startDate && event?.endDate)\n return `${event.startDate} – ${event.endDate}`;\n if (event?.startDate) return event.startDate;\n\n return option.label;\n }\n\n private emit(payload: TimeFilterOutput): void {\n this.selectionChange.emit(payload);\n }\n\n private startOfDay(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n private startOfWeek(date: Date): Date {\n const d = new Date(date);\n const day = d.getDay();\n const diff = day === 0 ? 6 : day - 1; // Monday start\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n private startOfFinancialYear(date: Date): Date {\n const year =\n date.getMonth() >= 3 ? date.getFullYear() : date.getFullYear() - 1;\n return new Date(year, 3, 1); // April 1\n }\n\n private subtractTime(date: Date, value: number, unit: string): Date {\n const newDate = new Date(date);\n switch (unit) {\n case 'seconds':\n newDate.setSeconds(newDate.getSeconds() - value);\n break;\n case 'minutes':\n newDate.setMinutes(newDate.getMinutes() - value);\n break;\n case 'hours':\n newDate.setHours(newDate.getHours() - value);\n break;\n case 'days':\n newDate.setDate(newDate.getDate() - value);\n break;\n }\n return newDate;\n }\n}","<div class=\"filter-card\" autoAdjust>\n <div class=\"header\">\n <span class=\"title\">{{ config.title || \"Timestamp Filter\" }}</span>\n\n @if (config.showReset) {\n <span class=\"reset\" (click)=\"reset()\">Reset to Default</span>\n }\n </div>\n\n <div class=\"options\">\n\n <!-- NORMAL OPTIONS -->\n <div class=\"normal\">\n @for (option of normalOptions; track $index) {\n <div class=\"option\" (click)=\"selectOption(option)\">\n <label class=\"label\">\n <input\n type=\"radio\"\n [value]=\"option.value\"\n [(ngModel)]=\"radioValue\"\n />\n <span class=\"label-text\">{{ option.label }}</span>\n </label>\n </div>\n }\n </div>\n\n <!-- CUSTOM SECTION HEADER -->\n <div class=\"custom-wrapper\">\n <div class=\"custom-header\">\n <span class=\"custom-title\">Custom</span>\n </div>\n </div>\n\n <!-- CUSTOM OPTIONS -->\n <div class=\"customs\" #trigger>\n @for (custom of customOptions; track custom.value) {\n <div\n class=\"custom\"\n (click)=\"selectOption(custom)\"\n >\n <label class=\"label\">\n <input\n type=\"radio\"\n [value]=\"custom.value\"\n [(ngModel)]=\"radioValue\"\n />\n <span class=\"label-text\">{{ custom.label }}</span>\n </label>\n\n <!-- INPUT BELOW OPTION (type: 'input') -->\n @if (custom.type === 'input') {\n <div class=\"last-input\">\n <input\n type=\"number\"\n [(ngModel)]=\"lastValue\"\n (change)=\"onLastChange()\"\n />\n <select [(ngModel)]=\"lastUnit\" (change)=\"onLastChange()\">\n <option value=\"hours\">Hours</option>\n <option value=\"minutes\">Minutes</option>\n <option value=\"seconds\">Seconds</option>\n </select>\n </div>\n }\n\n <!-- SUBMENU ARROW + APPLIED DATE LABEL (type: 'submenu') -->\n @if (custom.type === 'submenu') {\n <span class=\"arrow\">\n <img src=\"/images/chevron-right.svg\" alt=\"\" />\n </span>\n\n <!-- @if (selectedDateLabels[custom.value]) {\n <div class=\"applied-date-label\">\n <span class=\"applied-date-text\">\n {{ selectedDateLabels[custom.value] }}\n </span>\n </div>\n } -->\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n<!-- DATE PICKER OVERLAY -->\n\n@if (activePicker) {\n <div\n class=\"picker-overlay\"\n autoPosition\n [overlay]=\"pickerRef\"\n [trigger]=\"trigger\"\n >\n <div class=\"picker-container\" #pickerRef (click)=\"$event.stopPropagation()\">\n \n @if (activePickerControl) {\n <cats-ui-custom-date-picker\n [formControl]=\"activePickerControl\"\n [config]=\"getPickerConfig(activePicker)\"\n (applied)=\"onDateApplied($event)\"\n (cancelled)=\"onCancel($event)\"\n [showTrigger]=\"false\"\n ></cats-ui-custom-date-picker>\n } @else {\n <cats-ui-custom-date-picker\n [config]=\"getPickerConfig(activePicker)\"\n (applied)=\"onDateApplied($event)\"\n (cancelled)=\"onCancel($event)\"\n [showTrigger]=\"false\"\n ></cats-ui-custom-date-picker>\n }\n </div>\n </div>\n}","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[wizardStep]',\n})\nexport class WizardStepDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class WizardService {\n // Map of wizardId -> WizardInstance\n private wizards = signal<Record<string, any>>({});\n activeStep = signal<any>({});\n stepConfig = signal<any>({});\n // ─── Open ───────────────────────────────────────────\n open(wizardId: string, config: any) {\n document.body.style.overflow = 'hidden';\n this.wizards.update((all) => ({\n ...all,\n [wizardId]: {\n config,\n currentStepIndex: 0,\n isOpen: true,\n },\n }));\n }\n\n // ─── Close ──────────────────────────────────────────\n close(wizardId: string) {\n this.wizards.update((all) => {\n const updated = { ...all };\n delete updated[wizardId];\n return updated;\n });\n\n this.stepConfig.update((config: any) => {\n delete config[wizardId];\n return config;\n });\n\n this.activeStep.update((obj: any) => {\n delete obj[wizardId];\n return obj;\n });\n document.body.style.overflow = 'auto';\n }\n nextStep(wizardId: string): void {\n let step = this.activeStep()?.[wizardId];\n this.stepConfig.update((config: any) => {\n let stepConfig = config?.[wizardId];\n if (step < stepConfig?.length) {\n stepConfig[step - 1].state = 'done';\n stepConfig[step].state = 'active';\n step++;\n return config;\n } else {\n stepConfig[stepConfig?.length - 1].state = 'active';\n step = stepConfig?.length;\n return config;\n }\n });\n this.activeStep.update((obj: any) => {\n obj[wizardId] = step;\n return obj;\n });\n }\n\n previousStep(wizardId: string): void {\n let step = this.activeStep()?.[wizardId];\n this.stepConfig.update((config: any) => {\n let stepConfig = config?.[wizardId];\n if (step > 1) {\n stepConfig[step - 1].state = 'normal';\n stepConfig[step - 2].state = 'active';\n step--;\n return config;\n }\n stepConfig[0].state = 'active';\n step = 1;\n return config;\n });\n this.activeStep.update((obj: any) => {\n obj[wizardId] = step;\n return obj;\n });\n }\n\n gotoStep(step: number, wizardId: string): void {\n this.stepConfig.update((config) => {\n let stepConfig = config?.[wizardId];\n\n if (step > 0 && step <= stepConfig?.length) {\n stepConfig = stepConfig.map((stepData: any, index: number) => {\n if (index < step - 1) {\n return { ...stepData, state: 'done' };\n } else if (index == step - 1) {\n return { ...stepData, state: 'active' };\n }\n return stepData;\n });\n config[wizardId] = stepConfig;\n this.activeStep.update((obj: any) => {\n obj[wizardId] = step;\n return obj;\n });\n }\n return config;\n });\n }\n // ─── Getters ─────────────────────────────────────────\n isOpen(wizardId: string) {\n return computed(() => this.wizards()[wizardId]?.isOpen ?? false);\n }\n\n getConfig(wizardId: string) {\n return computed(() => this.wizards()[wizardId]?.config ?? null);\n }\n\n getCurrentStepIndex(wizardId: string) {\n return computed(() => this.wizards()[wizardId]?.currentStepIndex ?? 0);\n }\n\n getCurrentStep(wizardId: string) {\n return computed(() => {\n const w = this.wizards()[wizardId];\n if (!w) return null;\n return w.config.steps[w.currentStepIndex];\n });\n }\n\n getProgress(wizardId: string) {\n return computed(() => {\n const w = this.wizards()[wizardId];\n if (!w) return 0;\n return ((w.currentStepIndex + 1) / w.config.steps.length) * 100;\n });\n }\n}\n","import {\n Component,\n ContentChildren,\n effect,\n EventEmitter,\n HostListener,\n Input,\n Output,\n QueryList,\n} from '@angular/core';\nimport { WizardService } from './wizard.service';\nimport { WizardStepDirective } from './wizard.directive';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'cats-ui-wizard',\n imports: [CommonModule],\n templateUrl: './wizard.component.html',\n styleUrl: './wizard.component.scss',\n})\nexport class WizardComponent {\n @Input() wizardId!: string;\n @Input() title: string = 'Wizard';\n @Output() closed = new EventEmitter<void>();\n @ContentChildren(WizardStepDirective)\n stepTemplates!: QueryList<WizardStepDirective>;\n @Input() showProgressBar: boolean = true;\n @Input() showStepBadge: boolean = true;\n expandable: boolean = true;\n\n isExpanded = false;\n\n steps: any = {};\n activeStep: any = {};\n\n templates: WizardStepDirective[] = [];\n\n constructor(private commonService: WizardService) {\n effect(() => {\n this.steps = this.commonService.stepConfig();\n this.activeStep = this.commonService.activeStep();\n });\n }\n\n ngAfterContentInit(): void {\n this.templates = this.stepTemplates.toArray();\n\n // React if templates change dynamically\n this.stepTemplates.changes.subscribe(() => {\n this.templates = this.stepTemplates.toArray();\n });\n }\n toggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n @HostListener('document:keydown.escape')\n onEscPressed() {\n if (this.isExpanded) {\n this.isExpanded = false;\n }\n }\n get currentStepIndex(): number {\n return (this.activeStep?.[this.wizardId] ?? 1) - 1;\n }\n\n get wizardSteps(): any[] {\n return this.steps?.[this.wizardId] ?? [];\n }\n\n get currentTemplate() {\n return this.templates[this.currentStepIndex]?.templateRef ?? null;\n }\n\n get currentStepLabel(): string {\n return this.wizardSteps[this.currentStepIndex]?.title ?? '';\n }\n\n get currentStepNumber(): number {\n return this.activeStep?.[this.wizardId] ?? 1;\n }\n\n goToStep(step: number) {\n this.commonService.gotoStep(step, this.wizardId);\n }\n closeModal(): void {\n this.closed.emit();\n }\n}\n","<div class=\"cats-modal-overlay\">\n <!-- Stop closing when clicking inside modal -->\n <div class=\"cats-modal\" [class.expanded]=\"isExpanded\">\n <!-- PROGRESS BAR (TOP STRIP) -->\n @if (showProgressBar) {\n <div class=\"cats-modal-progress-bar\">\n @for (step of wizardSteps; track $index) {\n <div\n class=\"cats-progress-step\"\n [class.progres-done]=\"step.state === 'done'\"\n [class.progress-active]=\"step.state === 'active'\"\n ></div>\n }\n </div>\n }\n <!-- Title -->\n\n <!-- HEADER -->\n <div class=\"cats-modal-header\">\n <div class=\"cats-header-left\">\n <span class=\"cats-title textTruncate\">{{ title }}</span>\n @if (showStepBadge && currentStepNumber) {\n <span class=\"cats-step textTruncate\">\n Step {{ currentStepNumber }}: {{ currentStepLabel }}\n </span>\n }\n </div>\n\n <div class=\"cats-header-right\">\n @if (expandable) {\n <img\n class=\"cats-icon-btn\"\n (click)=\"toggleExpand()\"\n [src]=\"\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\n \"\n alt=\"\"\n />\n }\n <img\n class=\"cats-icon-btn\"\n (click)=\"closeModal()\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n </div>\n </div>\n\n <!-- BODY -->\n <div class=\"cats-modal-body\" [class.collapsed]=\"!isExpanded && expandable\">\n @if (currentTemplate) {\n <ng-container *ngTemplateOutlet=\"currentTemplate\"></ng-container>\n }\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n forwardRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\n\n@Component({\n selector: 'cats-ui-file-upload',\n standalone: true,\n imports: [ReactiveFormsModule],\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true,\n },\n ],\n})\nexport class FileUploadComponent implements ControlValueAccessor {\n // ─── Config Inputs ───────────────────────────────────────────────────────────\n @Input() placeholder: string = 'Drop files here';\n @Input() errorMessage: string = '';\n @Input() disabled: boolean = false;\n @Input() multiple: boolean = false;\n\n /** Button position: 'left' (prefix) | 'right' (suffix) */\n @Input() buttonPosition: 'left' | 'right' = 'left';\n\n @Input() maxSize: number | null = null;\n @Input() minSize: number | null = null;\n @Input() helperText: string = '';\n @Output() onfileChange = new EventEmitter<any>();\n @Output() onfileRemove = new EventEmitter<any>();\n\n /**\n * Accepted MIME types or extensions, comma-separated.\n * e.g. 'image/png,image/jpeg' or '.png,.jpg,.pdf'\n * Passed directly to the hidden <input accept=\"...\"> attribute.\n * Also used for runtime validation.\n * null = accept all\n */\n @Input() accept: string | null = null;\n\n // ─── Internal State ──────────────────────────────────────────────────────────\n value: File[] = [];\n isFocused = false;\n validationError: string = '';\n control!: FormControl<any> | null;\n\n // ─── ControlValueAccessor hooks ──────────────────────────────────────────────\n onChange: (value: File[]) => void = () => {};\n onTouched: () => void = () => {};\n\n writeValue(files: File[] | null | undefined): void {\n this.value = Array.isArray(files) ? files : [];\n }\n\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n validate(control: FormControl): any {\n this.control = control;\n }\n // ─── Validation ──────────────────────────────────────────────────────────────\n\n /**\n * Validates a single file against minSize, maxSize, and accept rules.\n * Returns an error string, or empty string if valid.\n */\n private validateFile(file: File): string {\n if (this.minSize !== null && file.size < this.minSize) {\n return `\"${file.name}\" is too small (min: ${this.formatBytes(this.minSize)}).`;\n }\n\n if (this.maxSize !== null && file.size > this.maxSize) {\n return `\"${file.name}\" exceeds max size (max: ${this.formatBytes(this.maxSize)}).`;\n }\n\n if (this.accept) {\n const accepted = this.accept\n .split(',')\n .map((t) => t.trim().toLowerCase());\n const fileExt = '.' + file.name.split('.').pop()!.toLowerCase();\n const fileMime = file.type.toLowerCase();\n\n const isAllowed = accepted.some((token) => {\n if (token.startsWith('.')) return token === fileExt; // extension match\n if (token.endsWith('/*'))\n return fileMime.startsWith(token.slice(0, -1)); // wildcard MIME e.g. image/*\n return token === fileMime; // exact MIME match\n });\n\n if (!isAllowed) {\n return `\"${file.name}\" has an unsupported file type.`;\n }\n }\n\n return '';\n }\n\n /** Validates a batch; sets validationError and returns only valid files. */\n private processFiles(files: File[]): File[] {\n this.validationError = '';\n\n const valid: File[] = [];\n for (const file of files) {\n const err = this.validateFile(file);\n if (err) {\n this.validationError = err; // show the first error (or accumulate if preferred)\n break;\n }\n valid.push(file);\n }\n\n return valid;\n }\n\n // ─── File Select (via button click) ──────────────────────────────────────────\n onFileSelect(event: Event, input: HTMLInputElement): void {\n if (this.disabled) return;\n\n const target = event.target as HTMLInputElement;\n const raw = Array.from(target.files ?? []);\n const files = this.multiple ? raw : raw.slice(0, 1);\n\n const valid = this.processFiles(files);\n if (valid.length) {\n this.value = valid;\n this.onChange(this.value);\n }\n this.onfileChange.emit(this.value);\n this.onTouched();\n\n input.value = '';\n this.isFocused = false;\n }\n\n // ─── Drag & Drop ─────────────────────────────────────────────────────────────\n onDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.disabled) return;\n\n const raw = Array.from(event.dataTransfer?.files ?? []);\n const files = this.multiple ? raw : [raw[0]].filter(Boolean);\n\n const valid = this.processFiles(files);\n if (valid.length) {\n this.value = valid;\n this.onChange(this.value);\n }\n this.onfileChange.emit(this.value);\n this.onTouched();\n this.isFocused = false;\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n }\n\n // ─── Remove File ─────────────────────────────────────────────────────────────\n removeFile(index: number, input?: HTMLInputElement): void {\n this.value = this.value.filter((_, i) => i !== index);\n this.validationError = '';\n this.onChange(this.value);\n this.onfileRemove.emit(this.value);\n if (input) input.value = '';\n }\n\n // ─── Helpers ─────────────────────────────────────────────────────────────────\n\n /** Human-readable byte string: 1024 → \"1 KB\", 5242880 → \"5 MB\" */\n formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\n return `${(bytes / 1024 ** 3).toFixed(1)} GB`;\n }\n\n /**\n * Builds a human-readable hint string from the current constraints.\n * e.g. \"PNG, JPG • Max 5 MB • Min 10 KB\"\n */\n // get helperText(): string {\n // const parts: string[] = [];\n\n // if (this.accept) {\n // const labels = this.accept\n // .split(',')\n // .map((t) =>\n // t.trim().replace('image/', '').replace('.', '').toUpperCase(),\n // )\n // .join(', ');\n // parts.push(labels);\n // }\n\n // if (this.maxSize !== null)\n // parts.push(`Max ${this.formatBytes(this.maxSize)}`);\n // if (this.minSize !== null)\n // parts.push(`Min ${this.formatBytes(this.minSize)}`);\n\n // return parts.join(' • ');\n // }\n\n // ─── Computed Getters ────────────────────────────────────────────────────────\n get isFilled(): boolean {\n return this.value?.length > 0;\n }\n\n /** Combines external errorMessage prop with internal validation errors. */\n get displayError(): string {\n return this.validationError || this.errorMessage;\n }\n\n get hasError(): boolean {\n return !!this.displayError;\n }\n}\n","<div class=\"file-wrapper\">\n <div\n class=\"file-upload-box\"\n (focus)=\"isFocused = true\"\n [class.focused]=\"isFocused\"\n [class.error]=\"hasError\"\n [class.disabled]=\"disabled\"\n [class.filled]=\"isFilled\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n >\n <!-- PREFIX BUTTON -->\n @if (buttonPosition === \"left\") {\n <button\n type=\"button\"\n class=\"file-btn\"\n (click)=\"fileInput.click(); isFocused = true\"\n [disabled]=\"disabled\"\n >\n Choose File\n </button>\n }\n\n <!-- CONTENT -->\n <div class=\"file-content\">\n @if (!isFilled) {\n <span class=\"file-placeholder\">{{ placeholder }}</span>\n }\n\n @if (isFilled) {\n <div class=\"file-list\">\n @for (file of value; track $index; let i = $index) {\n <span class=\"file-chip\">\n {{ file.name }}\n <img\n class=\"remove-file\"\n src=\"images/x.svg\"\n alt=\"Remove file\"\n (click)=\"removeFile(i, fileInput)\"\n />\n </span>\n }\n </div>\n }\n </div>\n\n <!-- SUFFIX BUTTON -->\n @if (buttonPosition === \"right\") {\n <button\n type=\"button\"\n class=\"file-btn\"\n (click)=\"fileInput.click(); isFocused = true\"\n [disabled]=\"disabled\"\n >\n Choose File\n </button>\n }\n\n <!-- Hidden Input — accept wired dynamically -->\n <input\n #fileInput\n type=\"file\"\n [attr.accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onFileSelect($event, fileInput)\"\n (cancel)=\"isFocused = false\"\n hidden\n />\n </div>\n\n <!-- CONSTRAINT HINT (shown when not filled and constraints exist) -->\n @if (helperText && !hasError) {\n <div class=\"file-hint-text\">{{ helperText }}</div>\n }\n\n <!-- ERROR (validation or external) -->\n @if (hasError && !disabled) {\n <div class=\"file-error-text\">\n <img src=\"images/error-info.svg\" alt=\"\" />{{ displayError }}\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nexport interface HeaderConfig {\n brandLogo: string;\n productLogo: string;\n showDropdown?: boolean;\n showGlobalIcon?: boolean;\n showAiAgent?: boolean;\n}\n\n@Component({\n selector: 'cats-ui-header',\n imports: [],\n templateUrl: './header.component.html',\n styleUrl: './header.component.scss',\n})\nexport class HeaderComponent {\n @Input() headerConfig!: HeaderConfig;\n @Input() dropdownItems: any[] = [];\n @Output() onDropdownSelection = new EventEmitter<any>();\n profileOpen = false;\n dropdownOpen = false;\n\n selectedItem: any;\n\n ngOnInit() {\n if (this.dropdownItems.length) {\n this.selectedItem = this.dropdownItems[0];\n }\n }\n\n onSelect(item: any) {\n this.selectedItem = item;\n this.dropdownOpen = false;\n this.onDropdownSelection.emit(this.selectedItem);\n }\n\n toggleMenu() {\n this.profileOpen = !this.profileOpen;\n }\n\n toggleDropdown() {\n this.dropdownOpen = !this.dropdownOpen;\n }\n\n closeMenu() {\n this.profileOpen = false;\n }\n}\n","<header class=\"app-header\">\n <!-- Left Section -->\n <div class=\"header-left\">\n <!-- <button class=\"app-launcher\" aria-label=\"App Launcher\">\n <span class=\"grid-icon\"></span>\n </button> -->\n <img src=\"images/Waffle.svg\" alt=\"\" />\n <img [src]=\"headerConfig.brandLogo\" alt=\"Brand Logo\" class=\"brand-logo\" />\n\n <img\n [src]=\"headerConfig.productLogo\"\n alt=\"Product Logo\"\n class=\"product-logo\"\n />\n </div>\n\n <!-- Right Section -->\n <div class=\"header-right\">\n @if (headerConfig.showGlobalIcon) {\n <img src=\"images/global-logo.svg\" alt=\"\" />\n }\n\n <img src=\"images/nodification.svg\" alt=\"\" class=\"icon-btn notification\" />\n @if (headerConfig.showDropdown && dropdownItems.length) {\n <div class=\"dropdown control-panel\">\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown()\">\n <span>{{ selectedItem.label }}</span>\n <span>\n <img src=\"images/chevron-down-white.svg\" alt=\"\" />\n </span>\n </div>\n @if (dropdownOpen) {\n <div class=\"dropdown-panel\">\n <ul>\n @for (item of dropdownItems; track item) {\n <li (click)=\"onSelect(item)\">{{ item.label }}</li>\n }\n </ul>\n </div>\n }\n </div>\n }\n @if (headerConfig.showAiAgent) {\n <div class=\"ai-agent\">\n <img src=\"images/star-yellow.svg\" alt=\"\" />\n <span class=\"ai-agent-btn\"> AI Agent</span>\n </div>\n }\n <div class=\"profile\">\n <div class=\"profile-wrapper\" (click)=\"toggleMenu()\">\n <img src=\"images/user-image.svg\" alt=\"User\" />\n <div class=\"profile-info\">\n <span class=\"name textTruncate\">Maximillian Thomas Broadwater</span>\n <span class=\"role textTruncate\">Super Admin User</span>\n </div>\n </div>\n\n @if (profileOpen) {\n <div class=\"loggedin-profile-list\">\n <!-- profile start -->\n\n <div class=\"profile-box\">\n <div class=\"for-edit-icon\">\n <img src=\"images/user-image.svg\" class=\"profile-img\" />\n <img src=\"images/edit.svg\" alt=\"edit\" class=\"on-hover\" />\n </div>\n\n <div>\n <div class=\"profile-heading textTruncate\">John Doe</div>\n <div class=\"profile-txt textTruncate\">Admin</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"switch-box\">\n <div class=\"switch-role\">\n <img src=\"images/users-01.svg\" class=\"edit-img\" />\n <div class=\"switch-txt\">Switch Role</div>\n\n <!-- drop down -->\n <div class=\"switching-role-dropdown\">\n <div class=\"text-title\">Switch Role</div>\n\n <div class=\"item-list active\">\n <input\n class=\"radio-input\"\n checked\n type=\"radio\"\n name=\"tracking\"\n />\n <span class=\"text\">Admin</span>\n </div>\n\n <div class=\"item-list\">\n <input class=\"radio-input\" type=\"radio\" name=\"tracking\" />\n <span class=\"text\">User</span>\n </div>\n </div>\n </div>\n\n <div class=\"right-side-arrow\">\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\n </div>\n </div>\n\n <div class=\"switch-box\">\n <div class=\"switch-role\">\n <img src=\"images/building-07.svg\" class=\"edit-img\" />\n <div class=\"switch-txt\">Switch Environment</div>\n </div>\n\n <div class=\"right-side-arrow\">\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">Identity & Access</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img class=\"fix-img-size\" src=\"images/user.svg\" alt=\"user\" />\n <div class=\"txt-align\">My Profile</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/key-01.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Change Password</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">Account & Preferences</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/shield.svg\" alt=\"bell\" />\n <div class=\"txt-align\">Account & Security</div>\n </div>\n </div>\n\n <div class=\"txt-box preference-dropdown-txt\">\n <div class=\"fix-space\">\n <img src=\"images/settings-04.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Preference</div>\n\n <!-- dropdown -->\n <div class=\"preference-section\">\n <div class=\"preference-dropdown\">\n <!-- Language -->\n <div class=\"language-dropdown\">\n <div class=\"preference-dropdown-item\">\n <div class=\"text\">Languages</div>\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\n </div>\n\n <div class=\"language-section-wrapper\">\n <div class=\"language-heading\">\n <span>Change Language</span>\n </div>\n <div class=\"input-search-wrapper\">\n <div class=\"input-search\">\n <img src=\"images/search.svg\" alt=\"\" />\n <input type=\"text\" placeholder=\"Enter or Search\" />\n </div>\n </div>\n <div class=\"language-section\">\n <div class=\"language-item\">\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\n <span>English</span>\n </div>\n <div class=\"language-item\">\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\n <span>English</span>\n </div>\n <div class=\"language-item\">\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\n <span>English</span>\n </div>\n </div>\n\n <div class=\"language-footer\">\n <button class=\"reset\">Reset</button>\n <button class=\"apply\">Apply</button>\n </div>\n </div>\n </div>\n\n <!-- Timezone -->\n <div class=\"timezone-dropdown\">\n <div class=\"preference-dropdown-item\">\n <div class=\"text\">Timezone</div>\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\n </div>\n\n <div class=\"timezone-section-wrapper\">\n <div class=\"timezone-heading\">\n <span>Change Timezone</span>\n </div>\n <div class=\"input-search-wrapper\">\n <div class=\"input-search\">\n <img src=\"images/search.svg\" alt=\"\" />\n <input type=\"text\" placeholder=\"Enter or Search\" />\n </div>\n </div>\n <div class=\"timezone-section\">\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" />\n <span class=\"bold-text\">\n Nouakchott\n <span class=\"light-text\">(GMT+00:00)</span>\n </span>\n </div>\n\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" />\n <span class=\"bold-text\">\n Beirut <span class=\"light-text\">(GMT+02:00)</span>\n </span>\n </div>\n\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" />\n <span class=\"bold-text\">\n Kuwait, Riyadh\n <span class=\"light-text\">(GMT+03:00)</span>\n </span>\n </div>\n\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" checked />\n <span class=\"bold-text\">\n Kolkata, India\n <span class=\"light-text\">(GMT+05:30)</span>\n </span>\n </div>\n </div>\n\n <div class=\"timezone-footer\">\n <button class=\"reset\">Reset</button>\n <button class=\"apply\">Apply</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/bell.svg\" alt=\"bell\" />\n <div class=\"txt-align\">Notification Settings</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">Help & Support</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/file-check-02.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Knowledge Base</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/help-circle.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Help/Support Center</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/info.svg\" alt=\"info\" />\n <div class=\"txt-align\">Report Issue</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/message-smile-square.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Feedback</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">System</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/settings.svg\" alt=\"settings\" />\n <div class=\"txt-align\">Settings</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/clock-refresh.svg\" alt=\"info\" />\n <div class=\"txt-align\">\n About <span class=\"light-grey\">(Version 2.14.3)</span>\n </div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/log-out-04.svg\" alt=\"log-out\" class=\"red\" />\n <div class=\"txt-align red\">Sign Out</div>\n </div>\n\n <div class=\"right-side-arrow\">\n <img src=\"images/chevron-right-red.svg\" alt=\"chevron-right\" />\n </div>\n </div>\n\n <!-- profile end -->\n </div>\n }\n </div>\n </div>\n</header>\n","import {\n Component,\n Input,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DialogRef } from './dialog-ref';\nimport { CommonModule } from '@angular/common';\nimport { DialogConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-dialog-box',\n imports: [CommonModule],\n templateUrl: './dialog-box.component.html',\n styleUrl: './dialog-box.component.scss',\n})\nexport class DialogBoxComponent {\n @Input() content!: any;\n @Input() config: DialogConfig = {};\n @Input() dialogRef!: DialogRef;\n @Input() expandable: boolean = true;\n\n @ViewChild('vc', { read: ViewContainerRef, static: true })\n vc!: ViewContainerRef;\n\n isExpanded = false;\n\n ngAfterViewInit() {\n this.vc.clear();\n\n if (this.content instanceof TemplateRef) {\n this.vc.createEmbeddedView(this.content, { dialogRef: this.dialogRef });\n } else {\n this.vc.createComponent(this.content);\n }\n }\n\n toggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n\n onBackdropClick() {\n if (this.config?.closeOnBackdropClick) {\n this.dialogRef.close();\n }\n }\n\n closeModal(): void {\n this.dialogRef.close();\n }\n}\n","<div class=\"cats-dialog-overlay\">\n <div\n class=\"cats-dialog\"\n [ngClass]=\"config.class\"\n [class.expanded]=\"isExpanded\"\n >\n <!-- Header -->\n @if (config.showHeader) {\n <div class=\"cats-dialog-header\">\n <div class=\"cats-header-left\">\n @if (config.title) {\n <span class=\"cats-title textTruncate\">{{ config.title }}</span>\n }\n </div>\n <div class=\"cats-header-right\">\n @if (expandable) {\n <img\n class=\"cats-icon-btn\"\n (click)=\"toggleExpand()\"\n [src]=\"\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\n \"\n alt=\"expand\"\n />\n }\n <img\n class=\"cats-icon-btn\"\n (click)=\"closeModal()\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"close\"\n />\n </div>\n </div>\n }\n\n <!-- Body -->\n <div class=\"cats-dialog-body\" [class.collapsed]=\"!isExpanded && expandable\">\n <ng-container #vc></ng-container>\n </div>\n </div>\n</div>\n","import { Subject, Observable } from 'rxjs';\n\nexport class DialogRef<T = any> {\n private afterClosed$ = new Subject<T | undefined>();\n\n constructor(public id: string) {}\n\n close(result?: T) {\n this.afterClosed$.next(result);\n this.afterClosed$.complete();\n }\n\n afterClosed(): Observable<T | undefined> {\n return this.afterClosed$.asObservable();\n }\n}\n","import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n Injectable,\n} from '@angular/core';\nimport { DialogRef } from './dialog-ref';\nimport { DialogBoxComponent } from './dialog-box.component';\nimport { DialogConfig } from '../../modal/cats-ui.modal';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogBoxService {\n private dialogs = new Map<string, DialogRef>();\n\n constructor(\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n ) {}\n\n open(componentOrTemplate: any, config: DialogConfig = {}): DialogRef {\n const id = config.id || this.generateId();\n\n const dialogRef = new DialogRef(id);\n this.dialogs.set(id, dialogRef);\n\n const componentRef = createComponent(DialogBoxComponent, {\n environmentInjector: this.injector,\n });\n\n componentRef.instance.content = componentOrTemplate;\n componentRef.instance.config = config;\n componentRef.instance.dialogRef = dialogRef;\n\n this.appRef.attachView(componentRef.hostView);\n\n const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n\n dialogRef.afterClosed().subscribe(() => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n this.dialogs.delete(id);\n });\n\n return dialogRef;\n }\n\n close(id: string) {\n this.dialogs.get(id)?.close();\n }\n\n closeAll() {\n this.dialogs.forEach((dialog) => dialog.close());\n }\n\n private generateId(): string {\n return 'dialog-' + Math.random().toString(36).substring(2, 9);\n }\n}\n","import { NgClass } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nexport interface SidebarConfig {\n sidebarType?: 'sectional' | string;\n switchOrganiser?: boolean;\n}\nexport interface SidebarAttribute {\n attributeId?: number;\n attributeName: string;\n icon?: string;\n activeIcon?: string;\n url?: string;\n}\n\nexport interface SidebarFeature {\n featureId?: number;\n moduleId?: number;\n featuresName: string;\n icon?: string;\n activeIcon?: string;\n expandable?: boolean;\n url?: string;\n isEnable?: boolean;\n attributes?: SidebarAttribute[];\n}\n\nexport interface SidebarModule {\n moduleName: string;\n icon?: string;\n activeIcon?: string;\n expandable?: boolean;\n url?: string;\n isEnable?: boolean;\n features: SidebarFeature[];\n}\n@Component({\n selector: 'cats-ui-sidebar',\n imports: [NgClass],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.scss',\n})\nexport class SidebarComponent {\n @Input() appMenus: SidebarModule[] = [];\n isCollapsed = false;\n @Input() sidebarConfig!: SidebarConfig;\n expandedFeatures: Set<string> = new Set();\n @Output() activeSidebar = new EventEmitter<any>();\n\n collapsedOpenModule: number | null = null;\n collapsedOpenFeature: string | null = null;\n @Input() activeItem: {\n moduleIndex: number;\n featureIndex?: number;\n attrIndex?: number;\n } | null = null;\n constructor(private router: Router) {}\n /** A feature is expandable if it has at least one attribute */\n isExpandable(feature: SidebarFeature): boolean {\n return (feature.attributes?.length ?? 0) > 0;\n }\n\n ngOnChanges(_changes: SimpleChanges): void {\n if (_changes['activeItem']?.currentValue && this.activeItem) {\n this.isActiveItem(\n this.activeItem.moduleIndex,\n this.activeItem.featureIndex,\n this.activeItem.attrIndex,\n );\n this.setActiveItem(\n this.activeItem.moduleIndex,\n this.activeItem.featureIndex ?? -1,\n this.activeItem.attrIndex ?? -1,\n false,\n );\n this.onFeatureClick(\n this.activeItem.moduleIndex,\n this.activeItem.featureIndex ?? -1,\n this.appMenus[this.activeItem.moduleIndex].features?.[\n this.activeItem.featureIndex ?? -1\n ] ?? { featuresName: '' },\n false,\n );\n }\n }\n ngOnInit(): void {\n if (!this.appMenus?.length) return;\n\n const moduleIndex = 0;\n const firstModule = this.appMenus[moduleIndex];\n\n if (!firstModule?.features?.length) return;\n\n const featureIndex = 0;\n const firstFeature = firstModule.features[featureIndex];\n\n // CASE 1: Feature has attributes → activate first attribute\n if (this.isExpandable(firstFeature)) {\n if (!this.activeItem) {\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: 0,\n };\n }\n\n this.activeSidebar.emit({\n module: firstModule,\n feature: firstFeature,\n attribute: firstFeature.attributes?.[0],\n });\n }\n // CASE 2: No attributes → activate feature\n else {\n if (!this.activeItem) {\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: -1,\n };\n }\n\n this.activeSidebar.emit({\n module: firstModule,\n feature: firstFeature,\n attribute: null,\n });\n }\n\n // Expand defaults (only for non-sectional)\n if (this.sidebarConfig.sidebarType !== 'sectional') {\n this.expandedModules.add(moduleIndex);\n\n if (this.isExpandable(firstFeature)) {\n this.expandedFeatures.add(`${moduleIndex}-${featureIndex}`);\n }\n }\n }\n\n toggleCollapse(): void {\n this.isCollapsed = !this.isCollapsed;\n // Reset collapsed panel state when toggling\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n }\n expandedModules: Set<number> = new Set();\n\n toggleModule(moduleIndex: number): void {\n const module = this.appMenus[moduleIndex];\n\n if (this.expandedModules.has(moduleIndex)) {\n this.expandedModules.delete(moduleIndex);\n } else {\n this.expandedModules.add(moduleIndex);\n }\n\n // If module has direct URL → navigate\n if (module?.url) {\n this.activeItem = {\n moduleIndex,\n featureIndex: -1,\n attrIndex: -1,\n };\n\n this.navigateToItem(module);\n\n this.activeSidebar.emit({\n module,\n feature: null,\n attribute: null,\n });\n\n return;\n }\n\n // fallback logic (your existing)\n const firstFeature = module.features?.[0];\n if (!firstFeature) return;\n\n if (this.isExpandable(firstFeature)) {\n this.setActiveItem(moduleIndex, 0, 0);\n } else {\n this.setActiveItem(moduleIndex, 0, -1);\n }\n }\n isModuleExpanded(moduleIndex: number): boolean {\n return this.expandedModules.has(moduleIndex);\n }\n toggleFeature(moduleIndex: number, featureIndex: number): void {\n const key = `${moduleIndex}-${featureIndex}`;\n if (this.expandedFeatures.has(key)) {\n this.expandedFeatures.delete(key);\n } else {\n this.expandedFeatures.add(key);\n }\n }\n\n isFeatureExpanded(moduleIndex: number, featureIndex: number): boolean {\n return this.expandedFeatures.has(`${moduleIndex}-${featureIndex}`);\n }\n\n setActiveItem(\n moduleIndex: number,\n featureIndex: number,\n attrIndex: number,\n navigate?: boolean,\n ): void {\n this.openAttributeFeatureIndex = null;\n this.activeItem = { moduleIndex, featureIndex, attrIndex };\n\n const selectedModule = this.appMenus[moduleIndex];\n const selectedFeature = selectedModule?.features[featureIndex];\n const selectedAttribute = selectedFeature?.attributes?.[attrIndex];\n if (navigate) {\n this.navigateToItem(selectedModule, selectedFeature, selectedAttribute);\n }\n\n this.activeSidebar.emit({\n module: selectedModule,\n feature: selectedFeature,\n attribute: selectedAttribute,\n });\n }\n\n onFeatureClick(\n moduleIndex: number,\n featureIndex: number,\n feature: SidebarFeature,\n navigate?: boolean,\n ) {\n const module = this.appMenus[moduleIndex];\n\n if (this.isExpandable(feature)) {\n this.toggleFeature(moduleIndex, featureIndex);\n\n // Optional: auto-select first attribute\n const attribute = feature.attributes?.[0];\n\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: 0,\n };\n if (navigate) {\n this.navigateToItem(module, feature, attribute);\n }\n\n this.activeSidebar.emit({ module, feature, attribute });\n } else {\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: -1,\n };\n if (navigate) {\n this.navigateToItem(module, feature);\n }\n\n this.activeSidebar.emit({ module, feature, attribute: null });\n }\n }\n\n isActiveItem(\n moduleIndex: number,\n featureIndex?: number,\n attrIndex?: number,\n ): boolean {\n if (!this.activeItem) return false;\n\n const module = this.appMenus[moduleIndex];\n const hasFeatures = module?.features?.length > 0;\n\n // MODULE ACTIVE\n if (featureIndex === undefined) {\n return (\n this.activeItem.moduleIndex === moduleIndex &&\n (!hasFeatures || this.activeItem.featureIndex === -1)\n );\n }\n\n // FEATURE ACTIVE\n if (attrIndex === undefined) {\n return (\n this.activeItem.moduleIndex === moduleIndex &&\n this.activeItem.featureIndex === featureIndex &&\n this.activeItem.attrIndex === -1\n );\n }\n\n // ATTRIBUTE ACTIVE\n return (\n this.activeItem.moduleIndex === moduleIndex &&\n this.activeItem.featureIndex === featureIndex &&\n this.activeItem.attrIndex === attrIndex\n );\n }\n\n collapsedModuleIndex: number | null = null;\n collapsedFeatureIndex: number | null = null;\n openAttributeFeatureIndex: number | null = null;\n isCollapsedIconActive(mIdx: number, fIdx?: number): boolean {\n if (!this.activeItem) return false;\n\n if (this.sidebarConfig?.sidebarType === 'sectional') {\n return (\n this.activeItem.moduleIndex === mIdx &&\n this.activeItem.featureIndex === fIdx\n );\n }\n\n // Non-sectional: if fIdx provided, match both; else match module only\n if (fIdx !== undefined) {\n return (\n this.activeItem.moduleIndex === mIdx &&\n this.activeItem.featureIndex === fIdx\n );\n }\n\n return this.activeItem.moduleIndex === mIdx;\n }\n\n onCollapsedSectionalIconClick(\n mIdx: number,\n fIdx: number,\n source?: string,\n ): void {\n const isAlreadyOpen =\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\n\n if (source == 'fIdx') {\n this.openAttributeFeatureIndex =\n this.openAttributeFeatureIndex === fIdx ? null : fIdx;\n }\n if (isAlreadyOpen && source !== 'fIdx') {\n // Close the flyout but keep the item active\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n return;\n }\n // Open this feature's flyout\n this.collapsedModuleIndex = mIdx;\n this.collapsedFeatureIndex = fIdx;\n\n // Set active\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\n if (!feature) return;\n\n if (this.isExpandable(feature)) {\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\n this.navigateToItem(\n this.appMenus[mIdx],\n feature,\n feature.attributes?.[0],\n );\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: feature.attributes?.[0],\n });\n } else {\n this.activeItem = {\n moduleIndex: mIdx,\n featureIndex: fIdx,\n attrIndex: -1,\n };\n\n this.navigateToItem(this.appMenus[mIdx], feature);\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: null,\n });\n }\n }\n\n onCollapsedModuleIconClick(mIdx: number): void {\n if (this.collapsedModuleIndex === mIdx) {\n // Toggle closed\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n return;\n }\n\n // Open this module's flyout, close any other\n this.collapsedModuleIndex = mIdx;\n this.collapsedFeatureIndex = null;\n }\n onCollapsedFeatureClick(mIdx: number, fIdx: number): void {\n this.openAttributeFeatureIndex = null;\n const isAlreadyOpen =\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\n\n if (isAlreadyOpen) {\n this.collapsedFeatureIndex = null;\n return;\n }\n\n this.collapsedModuleIndex = mIdx;\n this.collapsedFeatureIndex = fIdx;\n\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\n if (!feature) return;\n\n if (this.isExpandable(feature)) {\n this.openAttributeFeatureIndex = fIdx;\n\n // Set activeItem so isCollapsedIconActive(mIdx, fIdx) returns true\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\n this.navigateToItem(\n this.appMenus[mIdx],\n feature,\n feature.attributes?.[0],\n );\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: feature.attributes?.[0],\n });\n } else {\n this.activeItem = {\n moduleIndex: mIdx,\n featureIndex: fIdx,\n attrIndex: -1,\n };\n this.navigateToItem(this.appMenus[mIdx], feature);\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: null,\n });\n }\n }\n\n navigateToItem(\n module: SidebarModule,\n feature?: SidebarFeature,\n attribute?: SidebarAttribute,\n ) {\n let targetUrl: string | null = null;\n\n if (module?.url) {\n targetUrl = module.url;\n } else if (feature?.url) {\n targetUrl = feature.url;\n } else if (attribute?.url) {\n targetUrl = attribute.url;\n }\n\n if (targetUrl) {\n this.router.navigate([targetUrl]);\n }\n // else {\n // console.warn('No URL found for navigation');\n // }\n }\n @HostListener('document:click', ['$event'])\n handleOutsideClick(event: Event) {\n const target = event.target as HTMLElement;\n\n if (!target.closest('.cats-sidebar-panel')) {\n this.collapsedOpenModule = null;\n this.collapsedOpenFeature = null;\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n }\n }\n}\n","<div class=\"cats-sidebar-panel\" [class.collapsed]=\"isCollapsed\">\n <!-- Header -->\n <div class=\"group-header\">\n <div class=\"header-wrapper\" (click)=\"toggleCollapse()\">\n <img\n class=\"menu-icon\"\n [src]=\"\n isCollapsed ? 'images/menu-expand.svg' : 'images/menu-collapsed.svg'\n \"\n alt=\"Toggle menu\"\n />\n </div>\n </div>\n\n <!-- Main Menu -->\n <ul class=\"main-menu-list\">\n @for (module of appMenus; track mIdx; let mIdx = $index) {\n <li class=\"menu-item-wrapper\" [class.disabled]=\"!module.isEnable\">\n <!-- Module Header -->\n @if (sidebarConfig.sidebarType === \"sectional\") {\n <div class=\"head-content\">\n <img class=\"img-dropdown\" src=\"images/filled-dropdown.svg\" alt=\"\" />\n <span class=\"menu-head\">{{ module.moduleName }}</span>\n </div>\n } @else {\n <div\n class=\"head-content\"\n [class.active]=\"isActiveItem(mIdx)\"\n (click)=\"toggleModule(mIdx)\"\n >\n <img class=\"img-dropdown\" [src]=\"module.icon\" alt=\"\" />\n <span class=\"menu-head\">{{ module.moduleName }}</span>\n </div>\n }\n\n <!-- Features List -->\n @if (\n sidebarConfig.sidebarType === \"sectional\" || isModuleExpanded(mIdx)\n ) {\n <ul class=\"items-wrapper\">\n @for (feature of module.features; track fIdx; let fIdx = $index) {\n <li\n class=\"items-list\"\n [class.disabled]=\"!feature.isEnable\"\n [class.cats-show-nested-menu]=\"\n isExpandable(feature) &&\n isFeatureExpanded(mIdx, fIdx) &&\n !isCollapsed\n \"\n >\n <!-- Expanded view -->\n <div\n class=\"menu-item\"\n [class.active]=\"\n isActiveItem(mIdx, fIdx) && !isExpandable(feature)\n \"\n (click)=\"onFeatureClick(mIdx, fIdx, feature)\"\n >\n <div class=\"item-content\">\n <img\n class=\"left-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx)\n ? feature.activeIcon\n : feature.icon\n \"\n alt=\"\"\n />\n <span class=\"menu-text\">{{ feature.featuresName }}</span>\n </div>\n\n <!-- Chevron: only when feature has attributes -->\n @if (isExpandable(feature)) {\n @if (isFeatureExpanded(mIdx, fIdx)) {\n <img\n class=\"chevron-up-icon\"\n src=\"images/chevron-up.svg\"\n alt=\"\"\n />\n } @else {\n <img\n class=\"chevron-right-icon\"\n src=\"images/chevron-right.svg\"\n alt=\"\"\n />\n }\n }\n </div>\n\n <!-- Nested Sub-menu -->\n @if (isExpandable(feature) && isFeatureExpanded(mIdx, fIdx)) {\n <ul class=\"nested-sub-menu\">\n @for (\n attr of feature.attributes;\n track aIdx;\n let aIdx = $index\n ) {\n <li\n class=\"nested-item\"\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\n >\n <img\n class=\"attribute-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx, aIdx)\n ? attr?.activeIcon\n : attr?.icon\n \"\n alt=\"\"\n />\n <span class=\"menu-text\">{{ attr.attributeName }}</span>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n\n <div class=\"collapsed-menu\">\n <!-- Collapsed view (icon only) -->\n @if (sidebarConfig.sidebarType === \"sectional\") {\n @for (module of appMenus; track mIdx; let mIdx = $index) {\n @for (feature of module.features; track fIdx; let fIdx = $index) {\n <!-- Feature Icon (sectional: each feature gets its own icon) -->\n <div\n class=\"menu-item2\"\n [ngClass]=\"{\n active: isCollapsedIconActive(mIdx, fIdx),\n 'open-feature':\n collapsedModuleIndex === mIdx && collapsedFeatureIndex === fIdx,\n }\"\n >\n <div\n class=\"item-content\"\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx)\"\n >\n <img\n class=\"left-icon\"\n [src]=\"\n isCollapsedIconActive(mIdx, fIdx)\n ? feature.activeIcon\n : feature.icon\n \"\n />\n </div>\n\n <div class=\"feature-section\">\n <div class=\"feature-dropdown\">\n <div class=\"feature-heading\">\n {{ module.moduleName }}\n </div>\n\n <!-- [class.active]=\"collapsedFeatureIndex === fIdx\" -->\n <div\n class=\"feature-item\"\n [ngClass]=\"{\n active: isCollapsedIconActive(mIdx, fIdx),\n 'open-attribute':\n openAttributeFeatureIndex === fIdx &&\n collapsedFeatureIndex === fIdx,\n }\"\n >\n <div\n class=\"feature-item-wrapper\"\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx, 'fIdx')\"\n >\n <div class=\"img-text-wrapper\">\n <img\n class=\"feature-icon\"\n [src]=\"\n collapsedFeatureIndex === fIdx\n ? feature.activeIcon\n : feature.icon\n \"\n />\n <span class=\"text\">{{ feature.featuresName }}</span>\n </div>\n\n @if (isExpandable(feature)) {\n <img src=\"images/chevron-right.svg\" />\n }\n </div>\n\n <!-- Attributes -->\n @if (\n collapsedFeatureIndex === fIdx && isExpandable(feature)\n ) {\n <div class=\"attribute-section-wrapper\">\n <div class=\"attribute-heading\">\n {{ feature.featuresName }}\n </div>\n <div class=\"attribute-section\">\n @for (\n attr of feature.attributes;\n track aIdx;\n let aIdx = $index\n ) {\n <!-- [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\" -->\n <div\n class=\"attribute-item\"\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\n >\n <img\n class=\"attribute-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx, aIdx)\n ? attr.activeIcon\n : attr.icon\n \"\n />\n <span class=\"text\">{{ attr.attributeName }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n }\n } @else {\n @for (module of appMenus; track mIdx; let mIdx = $index) {\n <!-- Module Icon (non-sectional: each module gets its own icon) -->\n <div\n class=\"menu-item2\"\n [ngClass]=\"{\n active: isCollapsedIconActive(mIdx),\n 'open-feature': collapsedModuleIndex === mIdx,\n }\"\n >\n <div class=\"item-content\" (click)=\"onCollapsedModuleIconClick(mIdx)\">\n <img\n class=\"left-icon\"\n [src]=\"\n isCollapsedIconActive(mIdx) ? module.activeIcon : module.icon\n \"\n alt=\"\"\n />\n </div>\n <div class=\"feature-section\">\n <div class=\"feature-dropdown\">\n <div class=\"feature-heading\">\n <span>\n {{ module.moduleName }}\n </span>\n </div>\n\n @for (feature of module.features; track fIdx; let fIdx = $index) {\n <div\n class=\"feature-item\"\n [ngClass]=\"{\n active:\n isCollapsedIconActive(mIdx, fIdx) ||\n (collapsedModuleIndex === mIdx &&\n collapsedFeatureIndex === fIdx),\n 'open-attribute':\n openAttributeFeatureIndex === fIdx &&\n collapsedFeatureIndex === fIdx,\n }\"\n >\n <div\n class=\"feature-item-wrapper\"\n (click)=\"onCollapsedFeatureClick(mIdx, fIdx)\"\n >\n <div class=\"img-text-wrapper\">\n <img\n class=\"feature-icon\"\n [src]=\"\n isCollapsedIconActive(mIdx, fIdx)\n ? feature.activeIcon\n : feature.icon\n \"\n alt=\"\"\n />\n <span class=\"text\">\n {{ feature.featuresName }}\n </span>\n </div>\n\n @if (isExpandable(feature)) {\n <img src=\"images/chevron-right.svg\" alt=\"\" />\n }\n </div>\n\n <!-- Attributes -->\n @if (\n collapsedModuleIndex === mIdx &&\n collapsedFeatureIndex === fIdx &&\n isExpandable(feature)\n ) {\n <div class=\"attribute-section-wrapper\">\n <div class=\"attribute-heading\">\n <span>{{ feature.featuresName }}</span>\n </div>\n\n <div class=\"attribute-section\">\n @for (\n attr of feature.attributes;\n track aIdx;\n let aIdx = $index\n ) {\n <div\n class=\"attribute-item\"\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\n >\n <img\n class=\"attribute-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx, aIdx)\n ? attr.activeIcon\n : attr.icon\n \"\n />\n <span class=\"text\">{{ attr.attributeName }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n @if (sidebarConfig.switchOrganiser) {\n <div class=\"group-footer\">\n <img class=\"footer-icon\" src=\"images/shuffle-01.svg\" alt=\"\" />\n <span class=\"footer-text\">Switch Organiser</span>\n </div>\n }\n</div>\n","/*\n * Public API Surface of cats-ui\n */\n\nexport * from './lib/services/cats-ui.service';\nexport * from './lib/components/input';\nexport * from './lib/components/single-select';\nexport * from './lib/components/multi-select';\nexport * from './lib/components/search-box';\nexport * from './lib/components/auto-complete-single-select';\nexport * from './lib/directives/outside-click.directive';\nexport * from './lib/components/auto-complete-multi-select';\nexport * from './lib/modal/cats-ui.modal';\nexport * from './lib/components/toogle-button';\nexport * from './lib/components/checkbox-button';\nexport * from './lib/components/radio-button';\nexport * from './lib/components/custom-date-picker';\nexport * from './lib/directives/cats-ui-tooltip.directive';\nexport * from './lib/components/accordion';\nexport * from './lib/components/tabset';\nexport * from './lib/components/timestamp-filter';\nexport * from './lib/components/wizard';\nexport * from './lib/components/file-upload';\nexport * from './lib/components/header';\nexport * from './lib/components/dialog-box';\nexport * from './lib/components/sidebar';\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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatsUiService {\n\n constructor() { }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n FormControl,\n NG_VALIDATORS,\n Validator,\n Validators,\n} from '@angular/forms';\nimport { InputConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n ],\n host: { tabindex: '0' },\n})\nexport class InputComponent implements ControlValueAccessor, Validator {\n @Input() inputConfig!: InputConfig;\n @Output() onKeyDown = new EventEmitter<{ value: string } & KeyboardEvent>();\n @Output() onKeyUp = new EventEmitter<{ value: string } & KeyboardEvent>();\n\n value: string = '';\n disabled = false;\n touched = false;\n control!: FormControl<any> | null;\n showPassword = false;\n private onChange = (value: any) => {};\n private onTouched = () => {};\n\n /**\n * @description Method to when value changes\n * @author Shiva Kant\n */\n handleInput(event: Event) {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.onChange(this.value);\n\n if (this.control) {\n this.control.markAsDirty();\n this.control.updateValueAndValidity();\n }\n }\n /**\n * @description Method to Handle key down event\n * @author Shiva Kant\n */\n handleKeyDown(event: KeyboardEvent) {\n this.onKeyDown.emit({ value: this.value, ...event });\n }\n\n /**\n * @description Method to handle key up event\n * @author Shiva Kant\n */\n handleKeyUp(event: KeyboardEvent) {\n this.onKeyUp.emit({ value: this.value, ...event });\n }\n\n /**\n * @description Method to Handle blur (touched\n * @author Shiva Kant\n */\n\n handleBlur(event: FocusEvent): void {\n this.touched = true;\n this.onTouched();\n const control = (event.target as any)?.control;\n control?.markAsTouched?.();\n }\n /**\n * @description Method to ControlValueAccessor methods\n * @author Shiva Kant\n */\n\n writeValue(value: any): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * @description Method to Validator interface\n * @author Shiva Kant\n */\n\n validate(control: FormControl): any {\n this.control = control;\n if (this.inputConfig?.type === 'email') {\n return Validators.email(control);\n }\n return null;\n }\n /**\n * @description method to use show password\n * @author Shiva Kant\n */\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n}\n","<div class=\"cats-input-container\">\n @if (inputConfig.label) {\n <label class=\"cats-label-text\">{{ inputConfig.label }}</label>\n }\n <div class=\"cats-custom-input\">\n <input\n [ngClass]=\"{\n invalid:\n (control?.touched || control?.dirty) &&\n control?.invalid &&\n control?.errors,\n }\"\n class=\"cats-input-box\"\n [type]=\"showPassword ? 'text' : inputConfig.type\"\n [placeholder]=\"inputConfig.placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (keyup)=\"handleKeyUp($event)\"\n />\n <!-- Eye Icon Only When Type Is Password -->\n @if (inputConfig.type === \"password\") {\n <span class=\"cats-eye-icon\" (click)=\"togglePassword()\">\n <img\n class=\"cats-eye-img\"\n [src]=\"showPassword ? 'images/eye.svg' : 'images/eye-off.svg'\"\n alt=\"toggle password visibility\"\n />\n </span>\n }\n </div>\n</div>\n","export class SingleSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n disabledField?: string = '';\n colorField?: string = '';\n iconField?: string = '';\n placeholder?: string = 'Select Option';\n prefixLabel?: string = '';\n enableSearch?: boolean = false;\n searchPlaceholder?: string = 'Search Here';\n required?: boolean = false;\n}\n\nexport class MultiSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n disabledField?: string = '';\n colorField?: string = '';\n iconField?: string = '';\n placeholder?: string = 'Select Option';\n prefixLabel?: string = '';\n enableSearch?: boolean = false;\n searchPlaceholder?: string = 'Search Here';\n chipLimit: number = 2;\n selectAll?: boolean = true;\n required?: boolean = false;\n}\n\nexport class SearchConfig {\n serachValue: string = '';\n placeholder?: string = 'Search';\n}\n\nexport class InputConfig {\n type: 'text' | 'email' | 'password' | 'number' = 'text';\n placeholder?: string = 'Enter here';\n label?: string = 'label';\n}\n\nexport class AutoCompleteSingleSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n colorField?: string = '';\n iconField?: string = '';\n disabledField?: string = '';\n placeholder?: string = 'Enter or Select';\n required?: boolean = false;\n customInput: boolean = false;\n}\nexport class AutoCompleteMultiSelectConfig {\n idField: string = 'id';\n textField: string = 'name';\n disabledField?: string = '';\n colorField?: string = '';\n iconField?: string = '';\n selectAll?: boolean = true;\n placeholder?: string = 'Enter or Select';\n required?: boolean = false;\n chipLimit: number = 2;\n customInput?: boolean = false;\n pattern?: string = '';\n infoText?: string = '';\n selectionLimit?: number = 0;\n}\nexport class ToggleConfig {\n checked: boolean = false;\n disabled?: boolean = false;\n}\nexport class CheckBoxSubtask {\n idField: string = '';\n textField: string = '';\n checked?: boolean = false;\n}\n\nexport class CheckBoxConfig {\n idField: string = '';\n textField: string = '';\n disabledField?: string = '';\n name: string = '';\n checked?: boolean = false;\n subtasks?: CheckBoxSubtask[];\n}\nexport interface RadioButtonConfig {\n label?: string;\n disabled?: string;\n valueField?: string;\n textField?: string;\n name: string;\n layout?: 'horizontal' | 'vertical';\n}\nexport interface DialogConfig {\n id?: string;\n title?: string;\n closeOnBackdropClick?: boolean;\n showBackdrop?: boolean;\n class?: string;\n showHeader?: boolean;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { SingleSelectConfig } from '../../modal/cats-ui.modal';\n\nconst noop = () => {};\nexport const SINGLE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SingleSelectComponent),\n multi: true,\n};\nexport const SINGLE_SELECT_CONTROL_VALUE_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SingleSelectComponent),\n multi: true,\n};\n@Component({\n selector: 'cats-ui-single-select',\n imports: [CommonModule, FormsModule],\n templateUrl: './single-select.component.html',\n styleUrl: './single-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SingleSelectComponent,\n multi: true,\n },\n SINGLE_SELECT_CONTROL_VALUE_VALIDATOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { tabindex: '0' },\n})\nexport class SingleSelectComponent\n implements OnInit, OnChanges, ControlValueAccessor\n{\n @Input() optionList: any[] = [];\n @Input() singleSelectConfig: SingleSelectConfig = new SingleSelectConfig();\n @Input() selectedOption: any;\n @Output() onSelection = new EventEmitter();\n @Input() returnType: 'object' | 'text' = 'object';\n showDropdown = false;\n searchText: string = '';\n inValid: boolean = false;\n control!: FormControl<any> | null;\n disableControl: boolean = false;\n @Output() onScroll: any = new EventEmitter();\n @Input() parentNativeElement: any;\n selectedObj: any = {};\n\n @ContentChild('selectedData') selectedData!: TemplateRef<any>;\n\n constructor(\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n ) {}\n\n // These lifecycle hooks will be in use for further implementation\n ngOnInit(): void {}\n ngOnChanges(_changes: SimpleChanges): void {\n if (!_changes['optionList']?.currentValue) {\n this.optionList = [];\n } else {\n if (this.optionList.length > 10)\n this.singleSelectConfig.enableSearch = true;\n this.writeValue(this.control?.value);\n }\n }\n\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n if (this.parentNativeElement) {\n // this.parentNativeElement.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // });\n let parentDiv = document.getElementById(this.parentNativeElement);\n setTimeout(() => {\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\n let dropdonwList: any = document.getElementById('container_scroll');\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\n dropdonwList.style['transform'] = `translate(0px,-${\n elBoundary?.['height'] + 54\n }px`;\n }\n }, 20);\n }\n }\n\n /**\n * @description Method to check if provide arg is an object or not\n * @author Shiva Kant\n * @param Obj:any\n * @returns boolean\n */\n isObjEmpty(obj: any): boolean {\n if (typeof obj == 'string' || typeof obj == 'number') return true;\n return !(obj && Object.keys(obj).length > 0);\n }\n\n /**\n * @description Method is to update selected option and then\n * update formcontrol by call onChangeCallback.\n * @author Shiva Kant\n * @param item\n * @returns void\n */\n updateSelectedOption(item: any): void {\n let selectedValue = this.returnType === 'object' ? item : item[this.singleSelectConfig.idField];\n this.selectedOption = selectedValue;\n this.selectedObj = item;\n this.toggleDropdown();\n this.inValid = false;\n this.onChangeCallback(selectedValue);\n this.onTouchedCallback();\n this.onSelection.emit(selectedValue);\n }\n\n validate(control: FormControl): void {\n this.control = control;\n }\n\n // Below Methods are used to register form API methods in these variable to use them later\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\n\n /**\n * @description method to update value of selectedOption\n * @author Shiva Kant\n * @param obj this is provided by formcontrol\n * @returns void\n */\n writeValue(obj: any): void {\n this.selectedOption = '';\n this.selectedObj = '';\n if (this.optionList.length && obj) {\n if (typeof obj === 'string' || typeof obj === 'number') {\n if (\n typeof this.optionList?.[0] === 'string' ||\n typeof this.optionList?.[0] === 'number'\n ) {\n if (this.optionList.includes(obj)) {\n this.selectedOption = obj;\n this.selectedObj = obj;\n }\n } else if (obj != '') {\n for (const option of this.optionList) {\n if (\n option[this.singleSelectConfig.idField] == obj ||\n option[this.singleSelectConfig.textField] == obj\n ) {\n this.selectedOption = option;\n this.selectedObj = option;\n break;\n }\n }\n }\n } else {\n if (\n obj?.hasOwnProperty(this.singleSelectConfig.idField) &&\n !this.isObjEmpty(this.optionList[0])\n ) {\n for (const option of this.optionList) {\n if (\n option[this.singleSelectConfig.idField] ==\n obj[this.singleSelectConfig.idField]\n ) {\n this.selectedOption = option;\n this.selectedObj = option;\n break;\n }\n }\n }\n }\n setTimeout(() => {\n this.onChangeCallback(this.selectedOption);\n }, 0);\n this.cd.markForCheck();\n }\n }\n\n /**\n * @description method to register on change callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * @description method to register on touch callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n //willbe used in further implementation\n setDisabledState(isDisabled: boolean): void {\n this.disableControl = isDisabled;\n }\n\n /**\n * @description method to update ontouchcallback on blur\n * @author Shiva Kant\n */\n @HostListener('blur')\n public onTouched() {\n this.onTouchedCallback();\n }\n\n /**\n * @description method to toggle dropdown on outside click\n * @author Shiva Kant\n */\n @HostListener('document:click', ['$event'])\n public closeDropdown(event: any) {\n if (!this.el.nativeElement.contains(event.target)) {\n if (this.showDropdown && this.singleSelectConfig.required) {\n this.inValid =\n this.selectedOption == '' ||\n JSON.stringify(this.selectedOption) == '{}';\n }\n this.searchText = '';\n if (this.showDropdown) this.onTouchedCallback();\n this.showDropdown = false;\n }\n }\n\n /**\n * @description method to load more list\n * @author Shiva Kant\n * @param event\n */\n onDivScroll(event: any): void {\n if (\n event.target.offsetHeight + event.target.scrollTop >=\n event.target.scrollHeight - 1 &&\n this.optionList.length\n ) {\n this.onScroll.emit();\n }\n }\n get filteredOptionsValue(): any[] {\n if (!this.searchText || this.searchText.trim() === '') {\n return this.optionList;\n }\n return this.optionList.filter((option) => {\n if (typeof option != 'object') {\n return option?.toLowerCase().includes(this.searchText.toLowerCase());\n } else {\n return option[this.singleSelectConfig.textField]\n ?.toLowerCase()\n .includes(this.searchText.toLowerCase());\n }\n });\n }\n}\n","<div class=\"cats-main-wrapper\" id=\"main-wrapper-single-select\">\n <div\n class=\"cats-single-select-dropdown\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{\n invalid:\n (control?.touched || control?.dirty) &&\n control?.invalid &&\n control?.errors,\n 'disable-input': !selectedOption && disableControl,\n 'selected-disable': selectedOption && disableControl,\n }\"\n >\n <div class=\"cats-left-details\">\n @if (singleSelectConfig.prefixLabel) {\n <span class=\"predefine-label\">\n <p class=\"prefix-text textTruncate\">{{ singleSelectConfig.prefixLabel }}</p>\n </span>\n }\n @if (\n !isObjEmpty(selectedOption) &&\n selectedOption[singleSelectConfig.textField]\n ) {\n <ng-container\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate\"\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\n ></ng-container>\n <ng-template #defaultTemplate let-data=\"data\">\n <!-- COLOR -->\n @if (singleSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n selectedOption[singleSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (singleSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"selectedOption[singleSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n\n <!-- TEXT -->\n <span class=\"textTruncate\">\n {{ selectedOption[singleSelectConfig.textField] }}\n </span>\n </ng-template>\n } @else if (selectedOption && isObjEmpty(selectedOption)) {\n <ng-container\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate1\"\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\n ></ng-container>\n\n <ng-template #defaultTemplate1 let-data=\"data\">\n <span class=\"textTruncate\">\n {{ selectedObj[singleSelectConfig.textField] || selectedObj }}\n </span>\n </ng-template>\n } @else {\n <span class=\"placeholderColor textTruncate\">{{\n singleSelectConfig.placeholder\n }}</span>\n }\n </div>\n <span >\n <img class=\"cats-arrow-icon\"\n src=\"images/chevron-up.svg\"\n alt=\"\"\n srcset=\"\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img class=\"cats-arrow-icon\"\n src=\"images/chevron-down.svg\"\n alt=\"\"\n srcset=\"\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </span>\n </div>\n @if (showDropdown) {\n <div\n class=\"cats-dropdown-list\"\n id=\"container_scroll\"\n (scroll)=\"onDivScroll($event)\"\n >\n @if (singleSelectConfig.enableSearch) {\n <div class=\"cats-search-bar\">\n <div class=\"cats-input-box\">\n <img src=\"images/search.svg\" class=\"cats-search-icon\" alt=\"\" />\n <input\n type=\"text\"\n class=\"filter-search-box\"\n name=\"\"\n id=\"\"\n [placeholder]=\"\n singleSelectConfig.searchPlaceholder || 'Search here'\n \"\n [(ngModel)]=\"searchText\"\n />\n <img\n src=\"images/x.svg\"\n class=\"cats-cross-icon\"\n alt=\"\"\n (click)=\"searchText = ''\"\n />\n </div>\n </div>\n }\n <ul class=\"cats-dropdown-list-wrapper\">\n @if (isObjEmpty(this.optionList[0] || \"\")) {\n @for (option of filteredOptionsValue; track $index) {\n <li\n class=\"cats-item\"\n (click)=\"updateSelectedOption(option)\"\n [ngClass]=\"{\n 'disabled-option':\n singleSelectConfig.disabledField &&\n option[singleSelectConfig.disabledField],\n }\"\n >\n <span class=\"textTruncate\">{{ option }}</span>\n </li>\n } @empty {\n <li class=\"no-data cats-item\">No Data Found.</li>\n }\n } @else {\n @for (option of filteredOptionsValue; track $index) {\n <li\n class=\"cats-item\"\n (click)=\"updateSelectedOption(option)\"\n [ngClass]=\"{\n 'disabled-option':\n singleSelectConfig.disabledField &&\n option[singleSelectConfig.disabledField],\n }\"\n >\n <!-- COLOR BADGE -->\n @if (singleSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color': option[singleSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (singleSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"option[singleSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\">{{\n option[singleSelectConfig.textField]\n }}</span>\n </li>\n } @empty {\n <li class=\"no-data cats-item\">No Data Found.</li>\n }\n }\n </ul>\n </div>\n }\n</div>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n ControlValueAccessor,\n FormControl,\n FormsModule,\n} from '@angular/forms';\nimport { MultiSelectConfig } from '../../modal/cats-ui.modal';\nconst noop = () => {};\nexport const MULTI_SELECT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectComponent),\n multi: true,\n};\nexport const MULTI_SELECT_CONTROL_VALUE_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MultiSelectComponent),\n multi: true,\n};\n@Component({\n selector: 'cats-ui-multi-select',\n imports: [NgClass, FormsModule, NgStyle],\n templateUrl: './multi-select.component.html',\n styleUrl: './multi-select.component.scss',\n providers: [\n MULTI_SELECT_CONTROL_VALUE_ACCESSOR,\n MULTI_SELECT_CONTROL_VALUE_VALIDATOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { tabindex: '0' },\n})\nexport class MultiSelectComponent\n implements OnChanges, OnInit, ControlValueAccessor\n{\n @Input() optionList: any[] = [];\n @Input() multiSelectConfig: MultiSelectConfig = new MultiSelectConfig();\n\n @Input() selectedOptions: any[] = [];\n\n @Output() onSelection = new EventEmitter();\n\n control!: FormControl<any> | null;\n\n showDropdown = false;\n isListArrayOfObject = false;\n isSelectedAll = false;\n inValid: boolean = false;\n searchText: string = '';\n disabledControl: boolean = false;\n\n constructor(\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n ) {}\n\n // These lifecycle hooks will be in use for further implementation\n ngOnInit(): void {}\n ngOnChanges(_changes: SimpleChanges): void {\n if (\n _changes['optionList'].currentValue &&\n _changes['optionList'].currentValue.length > 0\n ) {\n if (\n typeof this.optionList[0] === 'string' ||\n typeof this.optionList[0] === 'number'\n ) {\n this.optionList = this.optionList.map((option: any) => {\n const item: any = {\n [this.multiSelectConfig.idField]: option,\n [this.multiSelectConfig.textField]: option,\n isSelected: false,\n };\n\n if (this.multiSelectConfig.disabledField) {\n item[this.multiSelectConfig.disabledField] = false;\n }\n\n return item;\n });\n } else {\n this.isListArrayOfObject = true;\n this.optionList = this.optionList.map((option: any) => {\n return {\n ...option,\n isSelected: false,\n };\n });\n }\n if (this.optionList.length > 10)\n this.multiSelectConfig.enableSearch = true;\n this.writeValue(this.control?.value);\n }\n }\n\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n /**\n * @description Method to check if provide arg is an object or not\n * @author Shiva Kant\n * @param Obj:any\n * @returns boolean\n */\n isObjEmpty(obj: any): boolean {\n return !(obj && Object.keys(obj).length > 0);\n }\n\n /**\n * @description Method is to update selected option and then\n * update formcontrol by call onChangeCallback.\n * @author Shiva Kant\n * @param item\n * @returns void\n */\n updateSelectedOption(item: any): void {\n item.isSelected = !item.isSelected;\n if (!item.isSelected) {\n let ind = this.selectedOptions.findIndex(\n (option: any) =>\n item[this.multiSelectConfig.idField] ==\n option[this.multiSelectConfig.idField],\n );\n if (ind >= 0) this.selectedOptions.splice(ind, 1);\n } else {\n this.selectedOptions.push(item);\n }\n this.isSelectedAll = this.optionList.every(\n (option: any) => option.isSelected == true,\n );\n\n this.inValid = false;\n this.onChangeCallback(this.selectedOptions);\n this.onTouchedCallback();\n this.onSelection.emit(this.selectedOptions);\n this.cd.markForCheck();\n }\n\n // Below Methods are used to register form API methods in these variable to use them later\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n\n validate(control: FormControl): void {\n this.control = control;\n }\n\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\n\n /**\n * @description method to update value of selectedOption\n * @author Shiva Kant\n * @param controlValue this is provided by formcontrol\n * @returns void\n */\n writeValue(controlValue: any[]): void {\n if (this.optionList.length) {\n this.selectedOptions = [];\n if (controlValue && controlValue.length > 0) {\n if (\n typeof controlValue[0] === 'string' ||\n typeof controlValue[0] === 'number'\n ) {\n controlValue = controlValue.map((option: string | number) => {\n return {\n [this.multiSelectConfig.idField]: option,\n [this.multiSelectConfig.textField]: option,\n };\n });\n }\n for (const option of controlValue) {\n let ind = this.optionList.findIndex(\n (item: any) =>\n item[this.multiSelectConfig.idField] ==\n option[this.multiSelectConfig.idField] ||\n item[this.multiSelectConfig.textField] ==\n option[this.multiSelectConfig.textField],\n );\n if (ind >= 0) {\n this.optionList[ind] = {\n ...this.optionList[ind],\n isSelected: true,\n };\n this.selectedOptions.push(this.optionList[ind]);\n }\n }\n }\n this.isSelectedAll = this.optionList.every(\n (option: any) => option.isSelected == true,\n );\n this.onChangeCallback(this.selectedOptions);\n this.cd.markForCheck();\n }\n }\n\n /**\n * @description method to register on change callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * @description method to register on touch callback from form API\n * @author Shiva Kant\n * @param fn\n * @returns void\n */\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n //willbe used in further implementation\n setDisabledState(isDisabled: boolean): void {\n this.disabledControl = isDisabled;\n }\n\n /**\n * @description method to update ontouchcallback on blur\n * @author Shiva Kant\n */\n @HostListener('blur')\n public onTouched() {\n this.onTouchedCallback();\n }\n\n /**\n * @description method to toggle dropdown on outside click\n * @author Shiva Kant\n */\n @HostListener('document:click', ['$event'])\n public closeDropdown(event: any) {\n if (!this.el.nativeElement.contains(event.target)) {\n if (this.showDropdown && this.multiSelectConfig.required) {\n this.inValid = this.selectedOptions.length < 0;\n }\n this.searchText = '';\n this.showDropdown = false;\n }\n }\n\n checkUncheckAll(): void {\n if (this.isSelectedAll) {\n this.optionList = this.optionList.map((option: any) => {\n if (\n this.multiSelectConfig.disabledField &&\n option[this.multiSelectConfig.disabledField]\n ) {\n return option;\n }\n return { ...option, isSelected: false };\n });\n\n this.isSelectedAll = false;\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\n } else {\n this.optionList = this.optionList.map((option: any) => {\n if (\n this.multiSelectConfig.disabledField &&\n option[this.multiSelectConfig.disabledField]\n ) {\n return option;\n }\n return { ...option, isSelected: true };\n });\n\n this.isSelectedAll = true;\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\n }\n\n this.onChangeCallback(this.selectedOptions);\n this.onSelection.emit(this.selectedOptions);\n }\n\n get filteredOptionsValue(): any[] {\n if (!this.searchText || this.searchText.trim() === '') {\n return this.optionList;\n }\n return this.optionList.filter((option) =>\n option[this.multiSelectConfig.textField]\n ?.toLowerCase()\n .includes(this.searchText.toLowerCase()),\n );\n }\n}\n","<div class=\"cats-main-wrapper\">\n <div\n class=\"cats-display-div\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{\n invalid:\n control?.touched &&\n control?.dirty &&\n control?.invalid &&\n control?.errors,\n 'disable-input': !selectedOptions && disabledControl,\n 'selected-disable': selectedOptions && disabledControl,\n }\"\n >\n <div class=\"cats-left-details\">\n @if (multiSelectConfig.prefixLabel) {\n <span class=\"predefine-label\">\n <p class=\"textTruncate predefine-label-text\">\n {{ multiSelectConfig.prefixLabel }}\n </p>\n </span>\n }\n <div class=\"multi-label-wrapper\">\n @if (selectedOptions.length > 0) {\n @for (item of selectedOptions; track $index) {\n @if (multiSelectConfig.chipLimit >= $index + 1) {\n <div class=\"cats-input-text\">\n <!-- SHOW ONLY WHEN SELECTED -->\n @if (item.isSelected) {\n <ng-container>\n <!-- COLOR BADGE -->\n @if (multiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[multiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (multiSelectConfig.iconField) {\n <span>\n <img\n class=\"cats-option-icon\"\n [src]=\"item[multiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n </ng-container>\n }\n\n <!-- TEXT -->\n <span class=\"textTruncate cats-span-text\">\n {{ item[multiSelectConfig.textField] }}\n </span>\n <!-- <span class=\"textTruncate\">{{\n item[multiSelectConfig.textField]\n }}</span> -->\n <!-- <i-feather name=\"x\" (click)=\"$event.stopPropagation();updateSelectedOption(item)\"></i-feather> -->\n <img\n src=\"images/x-circle.svg\"\n (click)=\"$event.stopPropagation(); updateSelectedOption(item)\"\n class=\"cats-cross-icon\"\n alt=\"\"\n />\n </div>\n }\n }\n } @else {\n <span class=\"placeholderColor textTruncate\">{{\n multiSelectConfig.placeholder\n }}</span>\n }\n @if (multiSelectConfig.chipLimit < selectedOptions.length) {\n <div class=\"cats-view-more\">\n +{{ selectedOptions.length - multiSelectConfig.chipLimit }}\n </div>\n }\n </div>\n </div>\n <span class=\"arrow-icon\">\n <img\n src=\"images/chevron-up.svg\"\n alt=\"\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img\n src=\"images/chevron-down.svg\"\n alt=\"\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </span>\n </div>\n @if (showDropdown) {\n <div class=\"cats-dropdown-list\" id=\"container_scroll\">\n @if (multiSelectConfig.enableSearch) {\n <div class=\"cats-search-bar\">\n <div class=\"cats-input-box\">\n <img class=\"cats-search-img\" src=\"images/search.svg\" alt=\"\" />\n <input\n type=\"text\"\n class=\"filter-search-box\"\n name=\"\"\n id=\"\"\n [placeholder]=\"\n multiSelectConfig.searchPlaceholder || 'Search here'\n \"\n [(ngModel)]=\"searchText\"\n />\n <img\n src=\"images/x.svg\"\n class=\"cats-cross-icon\"\n alt=\"\"\n (click)=\"searchText = ''\"\n />\n </div>\n </div>\n }\n <ul class=\"cats-dropdown-list-wrapper\">\n @if (multiSelectConfig.selectAll && optionList.length > 0) {\n <li class=\"cats-multiitem\" (click)=\"checkUncheckAll()\">\n <span class=\"cats-checkbox-container\">\n <input type=\"checkbox\" [checked]=\"isSelectedAll\" />\n @if (isSelectedAll) {\n UnSelectAll\n } @else {\n SelectAll\n }\n </span>\n </li>\n }\n @for (option of filteredOptionsValue; track $index) {\n <li\n class=\"cats-checkbox-container cats-multiitem\"\n (click)=\"updateSelectedOption(option)\"\n [ngClass]=\"{\n 'disabled-option':\n multiSelectConfig.disabledField &&\n option[multiSelectConfig.disabledField],\n }\"\n >\n <input type=\"checkbox\" [checked]=\"option.isSelected\" />\n <!-- COLOR BADGE -->\n @if (multiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color': option[multiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (multiSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"option[multiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\"\n >{{ option[multiSelectConfig.textField] }}\n </span>\n </li>\n } @empty {\n <li class=\"no-data cats-multiitem\">No Data Found.</li>\n }\n </ul>\n </div>\n }\n</div>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n} from '@angular/core';\nimport {\n FormsModule,\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n} from '@angular/forms';\nimport { SearchConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-search-box',\n imports: [FormsModule],\n templateUrl: './search-box.component.html',\n styleUrl: './search-box.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SearchBoxComponent),\n multi: true,\n },\n ],\n})\nexport class SearchBoxComponent implements ControlValueAccessor {\n searchParam: string = '';\n @Input() searchConfig: SearchConfig = new SearchConfig();\n @Output() onClose = new EventEmitter<void>();\n @Output() searchParamValue = new EventEmitter<string>();\n\n private onChange: (value: string) => void = () => {};\n public onTouched: () => void = () => {};\n isDisabled = false;\n\n ngOnInit(): void {\n this.searchParam = this.searchConfig?.serachValue || '';\n }\n /**\n * @description Method to Called when input changes\n * @author Shiva Kant\n */\n\n onInputChange(event: any) {\n const value = (event.target as HTMLInputElement)?.value;\n this.searchParam = value;\n this.onChange(value);\n this.searchParamValue.emit(value);\n }\n /**\n * @description Method to closeSearchBar\n * @author Shiva Kant\n */\n closeSearchBar(): void {\n this.searchParam = '';\n this.onChange('');\n this.searchParamValue.emit('');\n this.onClose.emit();\n }\n\n // -------- ControlValueAccessor methods --------\n writeValue(value: string): void {\n this.searchParam = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n}\n","<div class=\"cats-search-input\">\n <img class=\"cats-search-icon\" src=\"images/search.svg\" alt=\"\" srcset=\"\" />\n <input\n [placeholder]=\"searchConfig.placeholder\"\n type=\"text\"\n class=\"cats-search-text\"\n [value]=\"searchParam\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onTouched()\"\n />\n @if (searchParam.length > 0) {\n <div class=\"cats-cross-icon\">\n <img class=\"cats-clear-icon\" src=\"images/x-cancel-btn.svg\" alt=\"\" srcset=\"\" (click)=\"closeSearchBar()\" />\n </div>\n }\n</div>\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from \"@angular/core\";\n\n@Directive({\n selector: '[catsOutsideClick]',\n standalone: true,\n})\nexport class OutsideClickDirective {\n @Output() public clickOutSide = new EventEmitter<MouseEvent>();\n\n constructor(private elementRef: ElementRef) {}\n /**\n * @description Hosts listener\n * @author Shiva Kant\n * @param event \n * @returns click \n */\n @HostListener('document:click', ['$event'])\n public onClick(event: MouseEvent): void {\n const targetElement = event.target as HTMLElement | null;\n\n // Guard clause: exit early if no target or not an element\n if (!targetElement) {\n return;\n }\n\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\n if (!clickInside) {\n this.clickOutSide.emit(event);\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n} from '@angular/forms';\nimport { AutoCompleteSingleSelectConfig } from '../../modal/cats-ui.modal';\nimport { CommonModule } from '@angular/common';\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\nconst noop = () => {};\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\n multi: true,\n};\nexport const DROPDOWN_CONTROL_VALUE_VALIDATOR: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\n multi: true,\n};\n@Component({\n selector: 'cats-ui-input-single-select',\n imports: [CommonModule, FormsModule, OutsideClickDirective],\n templateUrl: './auto-complete-single-select.component.html',\n styleUrl: './auto-complete-single-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AutoCompleteSingleSelectComponent,\n multi: true,\n },\n DROPDOWN_CONTROL_VALUE_VALIDATOR,\n ],\n host: { tabindex: '0' },\n})\nexport class AutoCompleteSingleSelectComponent implements OnInit {\n @Input() autoSingleSelectConfig: AutoCompleteSingleSelectConfig =\n new AutoCompleteSingleSelectConfig();\n @Input() placeholder = 'Enter or Select Option';\n @Input() selectedItem: any;\n @Input() optionsList: any[] = [];\n @Input() parentNativeElement: any;\n @Output() onItemSelection = new EventEmitter();\n @Output() onScroll: any = new EventEmitter();\n showDropdown: boolean = false;\n inputValue: string = '';\n selectedOption: any;\n constructor() {}\n inValid: boolean = false;\n control!: FormControl<any> | null;\n disableControl: boolean = false;\n ngOnInit(): void {}\n private onTouchedCallback: () => void = noop;\n private onChangeCallback: (_: any) => void = noop;\n ngOnChanges(_changes: SimpleChanges): void {\n if (!_changes['optionsList']?.currentValue) {\n } else {\n this.writeValue(this.control?.value);\n }\n }\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n /**\n * @description method to update selected item\n * @author Shiva Kant\n * @param item this is selected item from list\n * @param type type of list\n * @returns none\n */\n updateSelectedItem(item: any, type: string): void {\n if (type == 'object') {\n this.selectedItem = item;\n this.inputValue = item[this.autoSingleSelectConfig.textField];\n } else {\n this.inputValue = item;\n }\n this.selectedOption = item;\n this.showDropdown = false;\n this.inValid = false;\n this.onChangeCallback(item);\n\n this.onTouchedCallback();\n this.onItemSelection.emit(this.selectedOption);\n }\n\n writeValue(obj: any): void {\n this.syncSelectionWithValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disableControl = isDisabled;\n }\n validate(control: FormControl): void {\n this.control = control;\n }\n\n // ---------- Helpers ----------\n private syncSelectionWithValue(value: any): void {\n this.selectedOption = null;\n this.inputValue = '';\n\n if (!value || !this.optionsList?.length) return;\n\n if (typeof value !== 'object') {\n this.selectedOption =\n this.optionsList.find(\n (o) =>\n o === value ||\n o?.[this.autoSingleSelectConfig.idField] === value ||\n o?.[this.autoSingleSelectConfig.textField] === value,\n ) ?? value;\n } else {\n this.selectedOption =\n this.optionsList.find(\n (o) =>\n o[this.autoSingleSelectConfig.idField] ===\n value[this.autoSingleSelectConfig.idField],\n ) ?? value;\n }\n this.selectedItem = this.selectedOption;\n this.inputValue = this.isObject(this.selectedOption)\n ? this.selectedOption[this.autoSingleSelectConfig.textField]\n : this.selectedOption;\n }\n /**\n * @description this method is use to update input value\n */\n updateInputValue(): void {\n let data: any = null;\n\n if (!this.inputValue || this.inputValue.trim() === '') {\n this.selectedOption = null;\n this.onChangeCallback(null);\n } else {\n if (this.isObject(this.optionsList?.[0])) {\n // Try to find existing option\n const matchedOption = this.optionsList.find(\n (o) =>\n o[this.autoSingleSelectConfig.textField]?.toLowerCase()?.trim() ===\n this.inputValue.toLowerCase().trim(),\n );\n\n if (matchedOption) {\n //Use existing object (keeps ID)\n data = matchedOption;\n } else {\n // New custom value\n data = {\n [this.autoSingleSelectConfig.idField]: null,\n [this.autoSingleSelectConfig.textField]: this.inputValue,\n };\n }\n } else {\n data = this.inputValue;\n }\n\n this.selectedOption = data;\n this.onChangeCallback(data);\n }\n\n this.onTouchedCallback();\n this.onItemSelection.emit(data);\n this.control?.updateValueAndValidity();\n }\n\n /**\n * @description method to update dropdown list state on input type\n * @author Shiva Kant\n */\n updateDropdownStatus(): void {\n if (!this.inputValue || this.inputValue.trim() === '') {\n this.updateInputValue(); // reuse logic\n this.showDropdown = false;\n return;\n }\n\n this.showDropdown = true;\n }\n\n /**\n * @description method to check if the list is Array of string or object\n * @author Shiva Kant\n * @param data this is the any one one item of list\n * @returns boolean\n */\n isObject(data: any): boolean {\n const type = typeof data;\n return data && type != 'string';\n }\n /**\n * @description This method is use to close dropdown on click outside\n */\n outsideClicked(): void {\n if (this.showDropdown) {\n if (this.autoSingleSelectConfig.customInput) {\n this.updateInputValue();\n }\n }\n this.showDropdown = false;\n }\n onClickEnter(control: any) {\n if (this.autoSingleSelectConfig.customInput) {\n this.updateInputValue();\n }\n }\n /**\n * @description method to load more list\n * @author Shiva Kant\n * @param event\n */\n onDivScroll(event: any): void {\n if (\n event.target.offsetHeight + event.target.scrollTop >=\n event.target.scrollHeight - 1 &&\n this.optionsList.length\n ) {\n this.onScroll.emit();\n }\n }\n}\n","<div\n class=\"cats-main-container\"\n catsOutsideClick\n (clickOutSide)=\"outsideClicked()\"\n>\n <div\n class=\"cats-input-container\"\n [ngClass]=\"{\n invalid:\n (control?.touched || control?.dirty) &&\n control?.invalid &&\n control?.errors,\n 'disable-input': !selectedItem && disableControl,\n 'selected-disable': selectedItem && disableControl,\n }\"\n >\n <div class=\"cats-input-box\">\n @if (selectedItem && autoSingleSelectConfig.colorField && inputValue) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color': selectedItem[autoSingleSelectConfig.colorField],\n }\"\n ></span>\n }\n\n @if (selectedItem && autoSingleSelectConfig.iconField && inputValue) {\n <img\n class=\"cats-option-icon\"\n [src]=\"selectedItem[autoSingleSelectConfig.iconField]\"\n />\n }\n <input\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n class=\"textTruncate cats-input-text\"\n type=\"text\"\n [(ngModel)]=\"inputValue\"\n (keyup.enter)=\"onClickEnter(inputValue)\"\n (keyup)=\"updateDropdownStatus()\"\n (input)=\"updateDropdownStatus()\"\n [placeholder]=\"autoSingleSelectConfig.placeholder\"\n />\n </div>\n <div (click)=\"toggleDropdown()\">\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-up.svg\"\n alt=\"up-arrow\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-down.svg\"\n alt=\"down-arrow\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </div>\n </div>\n\n @if (showDropdown) {\n <div class=\"dropdown-list-single-auto-select\">\n <!-- if optionList is an array of object-->\n @if (isObject(optionsList[0])) {\n <ng-container>\n <ul class=\"cats-dropdown-list-wrapper\">\n @for (item of optionsList; track $index) {\n <ng-container>\n @if (\n item[autoSingleSelectConfig.textField]\n .toLowerCase()\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\n ) {\n <li\n class=\"cats-item\"\n (click)=\"updateSelectedItem(item, 'object')\"\n [ngClass]=\"\n autoSingleSelectConfig.disabledField &&\n item[autoSingleSelectConfig.disabledField]\n ? 'disabled-option'\n : ''\n \"\n >\n <!-- COLOR BADGE -->\n @if (autoSingleSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[autoSingleSelectConfig.colorField],\n }\"\n ></span>\n }\n <!-- ICON -->\n @if (autoSingleSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"item[autoSingleSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\">\n {{ item[autoSingleSelectConfig.textField] }}\n </span>\n </li>\n }\n </ng-container>\n }\n </ul>\n </ng-container>\n }\n\n <!-- if optionList is an array of string-->\n @if (!isObject(optionsList[0])) {\n <ng-container>\n <ul class=\"cats-dropdown-list-wrapper\">\n @for (item of optionsList; track $index) {\n <ng-container>\n @if (item.includes(inputValue) || inputValue == \"\") {\n <li\n class=\"cats-item\"\n [ngClass]=\"\n autoSingleSelectConfig.disabledField &&\n item[autoSingleSelectConfig.disabledField]\n ? 'disabled-option'\n : ''\n \"\n (click)=\"updateSelectedItem(item, 'string')\"\n >\n {{ item }}\n </li>\n }\n </ng-container>\n }\n </ul></ng-container\n >\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n Validator,\n} from '@angular/forms';\nimport { AutoCompleteMultiSelectConfig } from '../../modal/cats-ui.modal';\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\nimport { SafeHtml, DomSanitizer } from '@angular/platform-browser';\n\n@Component({\n selector: 'cats-ui-input-multi-select',\n imports: [CommonModule, FormsModule, OutsideClickDirective],\n templateUrl: './auto-complete-multi-select.component.html',\n styleUrl: './auto-complete-multi-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\n multi: true,\n },\n ],\n host: { tabindex: '0' },\n})\nexport class AutoCompleteMultiSelectComponent\n implements OnInit, ControlValueAccessor\n{\n @Input() autoCompleteMultiSelectConfig!: AutoCompleteMultiSelectConfig;\n @Input() selectedItem: any;\n @Input() optionsList: any[] = [];\n @Input() parentNativeElement: any;\n @Output() onItemSelection = new EventEmitter();\n @Output() onScroll: any = new EventEmitter();\n showDropdown: boolean = false;\n inputValue: string = '';\n selectedOptions: any[] = [];\n isSelectedAll: boolean = false;\n inValid: boolean = false;\n control!: FormControl<any> | null;\n isDisabled = false;\n safePlaceholder!: SafeHtml;\n\n constructor(private sanitizer: DomSanitizer) {}\n ngOnInit() {\n this.safePlaceholder = this.sanitizer.bypassSecurityTrustHtml(\n this.autoCompleteMultiSelectConfig?.placeholder as string,\n );\n }\n ngOnChanges(_changes: SimpleChanges): void {\n if (!_changes['optionsList']?.currentValue) {\n } else {\n this.writeValue(this.control?.value);\n }\n }\n private onChange: (_: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * @description Method to toggle dropdown list\n * @author Shiva Kant\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n if (this.parentNativeElement) {\n this.parentNativeElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n let parentDiv = document.getElementById(this.parentNativeElement);\n setTimeout(() => {\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\n let dropdonwList: any = document.getElementById('container_scroll');\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\n dropdonwList.style['transform'] = `translate(0px,-${\n elBoundary?.['height'] + 54\n }px`;\n }\n }, 20);\n }\n }\n writeValue(value: any[]): void {\n if (Array.isArray(value)) {\n this.selectedOptions = value;\n\n // sync optionsList selection\n this.optionsList.forEach((opt) => {\n opt.isSelected = value.some((v) =>\n this.isObject(v)\n ? v[this.autoCompleteMultiSelectConfig.textField] ===\n opt[this.autoCompleteMultiSelectConfig.textField]\n : v === opt,\n );\n });\n this.onChange(this.selectedOptions);\n this.updateSelectAllState();\n }\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n validate(control: FormControl): void {\n this.control = control;\n }\n\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n this.inputValue = target.value;\n }\n handleBlur() {\n this.onTouched();\n }\n /**\n * @description method to update selected item\n * @author Shiva Kant\n * @param item this is selected item from list\n * @param type type of list\n * @returns none\n */\n updateSelectedItem(item: any, type: string) {\n if (type === 'object') {\n // Toggle the option's isSelected\n item.isSelected = !item.isSelected;\n\n if (item.isSelected) {\n // add to selectedOptions if not already present\n const exists = this.selectedOptions.some(\n (opt) =>\n this.isObject(opt) &&\n opt[this.autoCompleteMultiSelectConfig.textField] ===\n item[this.autoCompleteMultiSelectConfig.textField],\n );\n if (!exists) this.selectedOptions.push(item);\n } else {\n // remove from selectedOptions\n this.selectedOptions = this.selectedOptions.filter(\n (opt) =>\n !(\n this.isObject(opt) &&\n opt[this.autoCompleteMultiSelectConfig.textField] ===\n item[this.autoCompleteMultiSelectConfig.textField]\n ),\n );\n }\n } else {\n // string type\n const existsIndex = this.selectedOptions.findIndex((opt) => opt === item);\n if (existsIndex > -1) {\n // remove\n this.selectedOptions.splice(existsIndex, 1);\n } else {\n // add\n this.selectedOptions.push(item);\n }\n\n // If optionsList contains this string, also toggle its isSelected there\n const idxInOptions = this.optionsList.findIndex(\n (o) => typeof o === 'string' && o === item,\n );\n if (idxInOptions > -1) {\n // toggle corresponding option's isSelected\n const opt = this.optionsList[idxInOptions] as any;\n opt.isSelected = !opt.isSelected;\n }\n }\n\n // keep select all state consistent\n this.updateSelectAllState();\n this.onChange(this.selectedOptions);\n this.onItemSelection.emit(this.selectedOptions);\n }\n\n /**\n * @description method to checkUncheckAll\n * @author Shiva Kant\n */\n\n checkUncheckAll(event: any) {\n if (event) event.stopPropagation();\n this.isSelectedAll = !this.isSelectedAll;\n\n this.optionsList.forEach((item) => {\n if (\n !this.autoCompleteMultiSelectConfig.disabledField ||\n !item[this.autoCompleteMultiSelectConfig.disabledField]\n ) {\n item.isSelected = this.isSelectedAll;\n }\n });\n\n // Keep custom values intact\n const customChips = this.selectedOptions.filter((opt) =>\n this.isObject(opt)\n ? !this.optionsList.some(\n (o) =>\n o[this.autoCompleteMultiSelectConfig.textField] ===\n opt[this.autoCompleteMultiSelectConfig.textField],\n )\n : !this.optionsList.includes(opt),\n );\n\n const selectedOptionItems = this.optionsList.filter(\n (opt) => opt.isSelected,\n );\n\n this.selectedOptions = [...customChips, ...selectedOptionItems];\n this.onChange(this.selectedOptions);\n\n this.onItemSelection.emit(this.selectedOptions);\n }\n\n /**\n * @description method to removeChip\n * @author Shiva Kant\n */\n removeChip(item: any) {\n // Remove from selectedOptions\n this.selectedOptions = this.selectedOptions.filter((opt) =>\n this.isObject(opt)\n ? opt[this.autoCompleteMultiSelectConfig.textField] !==\n (this.isObject(item)\n ? item[this.autoCompleteMultiSelectConfig.textField]\n : item)\n : opt !== item,\n );\n\n // If item corresponds to an optionsList entry, unselect it there too\n if (this.isObject(item)) {\n const idx = this.optionsList.findIndex(\n (o: any) =>\n this.isObject(o) &&\n o[this.autoCompleteMultiSelectConfig.textField] ===\n item[this.autoCompleteMultiSelectConfig.textField],\n );\n if (idx > -1) {\n this.optionsList[idx].isSelected = false;\n }\n } else {\n // string case\n const idx = this.optionsList.findIndex((o) => o === item);\n if (idx > -1) {\n this.optionsList[idx].isSelected = false;\n }\n }\n\n // update select all state & emit\n this.updateSelectAllState();\n this.onChange(this.selectedOptions); // 🔥 THIS updates formControl\n this.onItemSelection.emit(this.selectedOptions);\n }\n /**\n * @description method to update dropdown list state on input type\n * @author Shiva Kant\n */\n updateDropdownStatus() {\n this.showDropdown = true;\n }\n\n /**\n * @description method to check if the list is Array of string or object\n * @author Shiva Kant\n * @param data this is the any one one item of list\n * @returns boolean\n */\n isObject(data: any): boolean {\n const type = typeof data;\n return data && type != 'string';\n }\n /**\n * @description This method is use to close dropdown on onClickEnter\n * @author Shiva Kant\n */\n\n onClickEnter(control?: any): void {\n if (!this.inputValue.trim()) return;\n\n // pattern check\n if (this.autoCompleteMultiSelectConfig.pattern) {\n const regex = new RegExp(this.autoCompleteMultiSelectConfig.pattern);\n if (!regex.test(this.inputValue)) {\n this.inputValue = '';\n return;\n }\n }\n\n const val = this.inputValue.trim();\n const valLower = val.toLowerCase();\n\n // Avoid duplicate\n const exists = this.selectedOptions.some((opt) =>\n this.isObject(opt)\n ? opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\n valLower\n : opt.toLowerCase() === valLower,\n );\n if (exists) {\n this.inputValue = '';\n return;\n }\n\n // Try find matched item in optionsList\n const matchedItem = this.isObject(this.optionsList?.[0])\n ? this.optionsList.find(\n (opt: any) =>\n opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\n valLower,\n )\n : this.optionsList.find((opt: any) => opt.toLowerCase() === valLower);\n\n if (matchedItem) {\n // If matched, ensure option is marked selected and present in selectedOptions\n matchedItem.isSelected = true;\n const already = this.selectedOptions.some((opt) =>\n this.isObject(opt)\n ? opt[this.autoCompleteMultiSelectConfig.textField] ===\n matchedItem[this.autoCompleteMultiSelectConfig.textField]\n : opt === matchedItem,\n );\n if (!already) this.selectedOptions.push(matchedItem);\n } else if (this.autoCompleteMultiSelectConfig.customInput) {\n // create custom item and mark it selected\n let newItem: any = val;\n if (this.isObject(this.optionsList?.[0])) {\n newItem = {\n [this.autoCompleteMultiSelectConfig.idField]: null,\n [this.autoCompleteMultiSelectConfig.textField]: val,\n isSelected: true, // mark selected for consistency\n __isCustom: true, // optional flag to identify custom items\n };\n }\n this.selectedOptions.push(newItem);\n }\n\n // reset input but keep dropdown open (as you wanted)\n this.inputValue = '';\n\n // update select all state and emit\n this.updateSelectAllState();\n this.onChange(this.selectedOptions);\n this.onTouched();\n this.onItemSelection.emit(this.selectedOptions);\n }\n outsideClicked(): void {\n this.showDropdown = false;\n }\n /**\n * @description method to load more list\n * @author Shiva Kant\n * @param event\n */\n onDivScroll(event: any): void {\n if (\n event.target.offsetHeight + event.target.scrollTop >=\n event.target.scrollHeight - 1 &&\n this.optionsList.length\n ) {\n this.onScroll.emit();\n }\n }\n\n updateSelectAllState() {\n // only consider non-disabled items for select-all state\n const selectable = this.optionsList.filter(\n (opt: any) =>\n !(\n this.autoCompleteMultiSelectConfig.disabledField &&\n opt[this.autoCompleteMultiSelectConfig.disabledField]\n ),\n );\n this.isSelectedAll =\n selectable.length > 0 && selectable.every((opt: any) => !!opt.isSelected);\n }\n}\n","<div class=\"cats-main-container\">\n <div\n class=\"cats-input-container\"\n [class.active]=\"showDropdown\"\n [ngClass]=\"{\n invalid: control?.touched && control?.invalid && control?.errors,\n 'disable-input': !selectedOptions && isDisabled,\n 'selected-disable': selectedOptions && isDisabled,\n }\"\n catsOutsideClick\n (clickOutSide)=\"outsideClicked()\"\n >\n <div class=\"cats-chips-wrapper\">\n <!-- Chips -->\n @for (item of selectedOptions; track $index) {\n @if ($index < autoCompleteMultiSelectConfig.chipLimit) {\n <div class=\"cats-chip\" (click)=\"$event.stopPropagation()\">\n <!-- <span class=\"textTruncate chip-text\">\n {{\n isObject(item)\n ? item[autoCompleteMultiSelectConfig.textField]\n : item\n }}\n </span> -->\n <!-- SHOW ONLY WHEN SELECTED -->\n @if (\n isObject(item) ? item.isSelected : selectedOptions.includes(item)\n ) {\n <ng-container>\n <!-- COLOR BADGE -->\n @if (autoCompleteMultiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[autoCompleteMultiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (autoCompleteMultiSelectConfig.iconField) {\n <span>\n <img\n class=\"cats-option-icon\"\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n </ng-container>\n }\n\n <!-- TEXT -->\n <span class=\"textTruncate chip-text\">\n {{\n isObject(item)\n ? item[autoCompleteMultiSelectConfig.textField]\n : item\n }}\n </span>\n <img\n src=\"images/x-circle.svg\"\n class=\"cats-cross-icon\"\n (click)=\"$event.stopPropagation(); removeChip(item)\"\n />\n </div>\n }\n }\n <!-- +N counter -->\n @if (selectedOptions.length > autoCompleteMultiSelectConfig.chipLimit) {\n <div class=\"cats-view-more\">\n +{{\n selectedOptions.length - autoCompleteMultiSelectConfig.chipLimit\n }}\n </div>\n }\n <!-- Input Box (always available) -->\n <div\n class=\"cats-input-box\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n >\n <input\n type=\"text\"\n class=\"multi-select-input\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (keyup.enter)=\"onClickEnter()\"\n (keyup)=\"updateDropdownStatus()\"\n (blur)=\"handleBlur()\"\n />\n @if (selectedOptions.length === 0 && !inputValue) {\n <div class=\"fake-placeholder\" [innerHTML]=\"safePlaceholder\"></div>\n }\n </div>\n </div>\n\n <!-- Dropdown toggle -->\n <div (click)=\"toggleDropdown()\">\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-up.svg\"\n [ngClass]=\"{ 'd-none': !showDropdown }\"\n />\n <img\n class=\"cats-arrow-icon\"\n src=\"images/chevron-down.svg\"\n [ngClass]=\"{ 'd-none': showDropdown }\"\n />\n </div>\n </div>\n\n <!-- Dropdown list -->\n @if (showDropdown) {\n <div\n class=\"dropdown-list-multi-auto-select\"\n id=\"container_scroll\"\n (click)=\"onDivScroll($event)\"\n >\n @if (\n autoCompleteMultiSelectConfig.infoText ||\n autoCompleteMultiSelectConfig.selectionLimit\n ) {\n <div class=\"cats-headerRow\">\n @if (autoCompleteMultiSelectConfig.infoText) {\n <span class=\"cats-infoText textTruncate\">\n {{ autoCompleteMultiSelectConfig.infoText }}\n </span>\n }\n\n @if (autoCompleteMultiSelectConfig.selectionLimit) {\n <span class=\"cats-countText textTruncate\">\n {{ selectedOptions.length }}/{{\n autoCompleteMultiSelectConfig.selectionLimit\n }}\n are Selected\n </span>\n }\n </div>\n }\n <ul class=\"cats-ul-multi-select\">\n <!-- infotext -->\n <!-- Select All -->\n @if (autoCompleteMultiSelectConfig.selectAll) {\n <li\n class=\"cats-checkbox-container select-all-item\"\n (click)=\"checkUncheckAll($event)\"\n >\n <input\n type=\"checkbox\"\n class=\"cats-input-checkbox\"\n [checked]=\"isSelectedAll\"\n (click)=\"$event.stopPropagation(); checkUncheckAll($event)\"\n />\n <span>{{ isSelectedAll ? \"Unselect All\" : \"Select All\" }}</span>\n </li>\n }\n\n <!-- Object Options -->\n @if (isObject(optionsList[0])) {\n @for (item of optionsList; track $index) {\n @if (\n item[autoCompleteMultiSelectConfig.textField]\n .toLowerCase()\n .includes(inputValue.toLowerCase()) || inputValue == \"\"\n ) {\n <li\n class=\"cats-checkbox-container\"\n [ngClass]=\"{\n 'disabled-option':\n autoCompleteMultiSelectConfig.disabledField &&\n item[autoCompleteMultiSelectConfig.disabledField],\n }\"\n (click)=\"updateSelectedItem(item, 'object')\"\n >\n <input\n type=\"checkbox\"\n class=\"cats-input-checkbox\"\n [checked]=\"item.isSelected\"\n (click)=\"\n $event.stopPropagation(); updateSelectedItem(item, 'object')\n \"\n />\n <!-- COLOR BADGE -->\n @if (autoCompleteMultiSelectConfig.colorField) {\n <span\n class=\"cats-color-badge\"\n [ngStyle]=\"{\n 'background-color':\n item[autoCompleteMultiSelectConfig.colorField],\n }\"\n ></span>\n }\n\n <!-- ICON -->\n @if (autoCompleteMultiSelectConfig.iconField) {\n <span class=\"cats-icon-wrapper\">\n <img\n class=\"cats-option-icon\"\n [src]=\"item[autoCompleteMultiSelectConfig.iconField]\"\n alt=\"icon\"\n />\n </span>\n }\n <span class=\"textTruncate\">{{\n item[autoCompleteMultiSelectConfig.textField]\n }}</span>\n </li>\n }\n }\n }\n\n <!-- String Options -->\n @if (!isObject(optionsList[0])) {\n @for (item of optionsList; track $index) {\n @if (\n item.toLowerCase().includes(inputValue.toLowerCase()) ||\n inputValue == \"\"\n ) {\n <li\n class=\"cats-checkbox-container\"\n (click)=\"updateSelectedItem(item, 'string')\"\n >\n <input\n type=\"checkbox\"\n class=\"cats-input-checkbox\"\n [checked]=\"selectedOptions.includes(item)\"\n (click)=\"\n $event.stopPropagation(); updateSelectedItem(item, 'string')\n \"\n />\n <span class=\"textTruncate\">{{ item }}</span>\n </li>\n }\n }\n }\n </ul>\n </div>\n }\n</div>\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ToggleConfig } from '../../modal/cats-ui.modal';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cats-ui-toogle-button',\n imports: [],\n templateUrl: './toogle-button.component.html',\n styleUrl: './toogle-button.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToogleButtonComponent),\n multi: true,\n },\n ],\n})\nexport class ToogleButtonComponent {\n @Input() toggleConfig!: ToggleConfig;\n @Output() onToggled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n toggle() {\n if (!this.toggleConfig.disabled) {\n this.toggleConfig.checked = !this.toggleConfig.checked;\n this.onToggled.emit(this.toggleConfig.checked);\n }\n }\n\n // ControlValueAccessor methods\n writeValue(value: boolean): void {\n this.toggleConfig.checked = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.toggleConfig.disabled = isDisabled;\n }\n}\n","<div class=\"cats-toggle-button\">\n <label class=\"cats-switch\">\n <input \n type=\"checkbox\" \n class=\"cats-toggle-input\"\n [checked]=\"toggleConfig.checked\" \n [disabled]=\"toggleConfig.disabled\"\n (change)=\"toggle()\"\n />\n <span class=\"cats-slider round\"></span>\n </label>\n</div>\n","import { Component,EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { CheckBoxConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-checkbox-button',\n imports: [],\n templateUrl: './checkbox-button.component.html',\n styleUrl: './checkbox-button.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxButtonComponent),\n multi: true,\n },\n ],\n})\nexport class CheckboxButtonComponent\n implements ControlValueAccessor, OnChanges\n{\n @Input() checkBoxConfig!: CheckBoxConfig;\n @Output() onCheckBoxSelection = new EventEmitter<any>();\n @Input() optionList: any[] = [];\n @Input() selectedOptions: any[] = [];\n\n private onChange: (value: any[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n get idField(): string {\n return this.checkBoxConfig?.idField || 'id';\n }\n\n get textField(): string {\n return this.checkBoxConfig?.textField || 'name';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedOptions'] && this.selectedOptions?.length) {\n this.applySelectedOptions();\n }\n }\n\n /**\n * @description normalizeSelectedValue the value according t\n * @param item\n * @returns\n */\n normalizeSelectedValue(item: any): string {\n if (item == null) return '';\n\n if (typeof item === 'string') return item; // case 1: string of id or name\n if (item.id) return item.id; // case 2: object with id\n if (item.name) return item.name; // case 3: object with name\n\n return ''; // fallback\n }\n\n /**\n * @description Method is to Apply selectedOptions on input change\n * @author Shiva Kant\n */\n private applySelectedOptions() {\n const normalized = this.selectedOptions.map((s: any) =>\n this.normalizeSelectedValue(s)\n );\n this.optionList = this.optionList.map((task) => {\n const taskId = task.id;\n const taskName = task.name;\n\n const isParentSelected =\n normalized.includes(taskId) || normalized.includes(taskName);\n\n const updatedSubtasks = (task.subtasks ?? []).map((sub: any) => {\n const subId = sub.id;\n const subName = sub.name;\n\n return {\n ...sub,\n checked: normalized.includes(subId) || normalized.includes(subName),\n };\n });\n\n return {\n ...task,\n checked:\n isParentSelected || updatedSubtasks.every((s: any) => s.checked),\n subtasks: updatedSubtasks,\n };\n });\n }\n\n /**\n * @description Method is to Checkbox change handler\n * @author Shiva Kant\n * @param event\n * @param parentIndex\n * @param subIndex\n */\n onCheckboxChange(event: Event, parentIndex: number, subIndex?: number) {\n const checked = (event.target as HTMLInputElement).checked;\n\n this.optionList = this.optionList.map((task, i) => {\n const safeTask = {\n ...task,\n checked: task.checked ?? false,\n subtasks: task.subtasks ?? [],\n };\n\n if (i === parentIndex) {\n if (subIndex === undefined) {\n // Parent checkbox toggled\n safeTask.checked = checked;\n safeTask.subtasks = safeTask.subtasks.map((sub: any) => ({\n ...sub,\n checked,\n }));\n } else if (safeTask.subtasks[subIndex]) {\n // Subtask toggled\n safeTask.subtasks[subIndex].checked = checked;\n // Parent checked only if all subtasks are checked\n safeTask.checked = safeTask.subtasks.every((sub: any) => sub.checked);\n }\n }\n\n return safeTask;\n });\n\n const checkedTasks = this.optionList\n .filter(\n (task) =>\n (task.checked ?? false) ||\n task.subtasks?.some((s: any) => s.checked ?? false)\n )\n .map((task) => ({\n ...task,\n subtasks: task.subtasks?.filter((s: any) => s.checked ?? false) || [],\n }));\n\n const selectedObjects = checkedTasks.map((task) => ({\n ...task,\n subtasks: task.subtasks.filter((s: any) => s.checked),\n }));\n\n this.onCheckBoxSelection.emit(selectedObjects);\n this.onChange(this.optionList);\n this.onTouched();\n }\n /**\n * @description Indeterminate state for parent on option checked\n * @param task\n * @returns\n */\n partiallyComplete(task: any): boolean {\n if (!task?.subtasks?.length) return false;\n const done = task.subtasks.filter((t: any) => t.checked).length;\n return done > 0 && done < task.subtasks.length;\n }\n\n // ControlValueAccessor methods\n writeValue(value: any[]): void {\n if (value) {\n this.optionList = value.map((task) => ({\n ...task,\n subtasks: task.subtasks ? [...task.subtasks] : [],\n }));\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled) {\n this.optionList.forEach((task) => {\n task.checked = false;\n task.subtasks?.forEach((sub: any) => (sub.checked = false));\n });\n }\n }\n}\n","<div class=\"cats-parent-container\">\n @for (task of optionList; let parentIndex = $index; track $index) {\n <!-- Parent Checkbox -->\n <label class=\"cats-checkbox-container\">\n <input\n type=\"checkbox\"\n class=\"cats-checkbox-input\"\n [name]=\"checkBoxConfig.name\"\n [checked]=\"task.checked\"\n [disabled]=\"\n checkBoxConfig.disabledField\n ? task[checkBoxConfig.disabledField]\n : false\n \"\n [indeterminate]=\"partiallyComplete(task)\"\n (change)=\"onCheckboxChange($event, parentIndex)\"\n />\n <span class=\"textTruncate\">{{ task[textField] }}</span>\n </label>\n\n <!-- Subtasks -->\n @if (task.subtasks && task.subtasks.length > 0) {\n <ul class=\"cats-sub\">\n @for (sub of task.subtasks; let idx = $index; track $index) {\n <li>\n <label class=\"cats-checkbox-container\">\n <input\n type=\"checkbox\"\n class=\"cats-checkbox-input\"\n [checked]=\"sub.checked\"\n (change)=\"onCheckboxChange($event, parentIndex, idx)\"\n />\n <!-- <span class=\"checkmark\"></span> -->\n <span class=\"cats-label-text\">{{ sub[textField] }}</span>\n </label>\n </li>\n }\n </ul>\n }\n }\n</div>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n FormsModule,\n} from '@angular/forms';\nimport { RadioButtonConfig } from '../../modal/cats-ui.modal';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'cats-ui-radio-button',\n imports: [CommonModule, FormsModule],\n templateUrl: './radio-button.component.html',\n styleUrl: './radio-button.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioButtonComponent),\n multi: true,\n },\n ],\n})\nexport class RadioButtonComponent implements ControlValueAccessor {\n @Input() config!: RadioButtonConfig;\n @Input() optionList: any[] = [];\n @Output() selectionChange = new EventEmitter<any>();\n // selectedRadio pass id in number or name in string or full object\n @Input() selectedRadio: any;\n\n value: any = null;\n isDisabled = false;\n\n onChange = (_: any) => {};\n onTouched = () => {};\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedRadio'] && this.optionList?.length) {\n if (!this.selectedRadio) return;\n\n const selected = this.selectedRadio;\n\n const match = this.optionList.find((opt) => {\n const optValue = this.extractValue(opt);\n const optLabel = this.extractLabel(opt);\n\n if (typeof selected === 'string' || typeof selected === 'number') {\n // Match primitive against value or label\n return selected === optValue || selected === optLabel;\n } else if (typeof selected === 'object') {\n // Match object against option's value or label\n const selValue = this.extractValue(selected);\n const selLabel = this.extractLabel(selected);\n return selValue === optValue || selLabel === optLabel;\n }\n return false;\n });\n\n if (match) {\n this.value = this.extractValue(match);\n this.onChange(this.value);\n }\n }\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n /**\n * @description method to handle change of toggle button\n * @author Shiva Kant\n * @param option\n */\n handleChange(option: any) {\n this.value = this.extractValue(option);\n this.onChange(this.value);\n this.onTouched();\n this.selectionChange.emit(option);\n }\n /**\n * @description method to extractValue\n * @author Shiva Kant\n * @param option\n * @returns\n */\n extractValue(option: any): any {\n if (typeof option === 'string' || typeof option === 'number') {\n return option;\n }\n\n const key = this.config.valueField ?? 'id'; // ALWAYS a string\n return option[key];\n }\n\n extractLabel(option: any): string {\n if (typeof option === 'string') return option;\n\n const key = this.config.textField ?? 'label';\n return option[key];\n }\n\n /**\n * * @description method to normalizeValue\n * @author Shiva Kant\n * @param value\n * @returns\n */\n normalizeValue(value: any): any {\n if (value == null) return null;\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n // object case → return id or valueField\n const key = this.config.valueField ?? 'id';\n return value[key];\n }\n}\n","<div class=\"cats-radio-group\" [ngClass]=\"config.layout\">\n @if (config.label) {\n <div class=\"cats-group-label\">{{ config.label }}</div>\n }\n\n <div class=\"cats-radio-option-container\">\n @for (option of optionList; track $index) {\n <div class=\"cats-radio-option\">\n <input\n type=\"radio\"\n class=\"cats-radio-input\"\n [name]=\"config.name\"\n [id]=\"extractValue(option)\"\n [disabled]=\"config.disabled ? option[config.disabled] : false\"\n [value]=\"extractValue(option)\"\n [(ngModel)]=\"value\"\n (change)=\"handleChange(option)\"\n />\n <label class=\"cats-label\" [for]=\"extractValue(option)\">{{ extractLabel(option) }}</label>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'custom-calendar-grid',\n templateUrl: './calendar-grid.component.html',\n styleUrls: ['./calendar-grid.component.scss'],\n standalone: true,\n imports: [CommonModule]\n})\nexport class CalendarGridComponent {\n @Input() month!: number;\n @Input() year!: number;\n @Input() calendarDays!: (number | null)[];\n @Input() weekDays!: string[];\n @Input() parent!: any;\n\n @Output() daySelected = new EventEmitter<number | null>();\n\n selectDay(day: number | null) {\n this.daySelected.emit(day);\n }\n\n isSelected(day: number | null): boolean {\n return this.parent.isSelected(day, this.month, this.year);\n }\n\n isInRange(day: number | null): boolean {\n return this.parent.isInRange(day, this.month, this.year);\n }\n\n isRangeStart(day: number | null): boolean {\n return this.parent.isRangeStart(day, this.month, this.year);\n }\n\n isRangeEnd(day: number | null): boolean {\n return this.parent.isRangeEnd(day, this.month, this.year);\n }\n\n isToday(day: number | null): boolean {\n return this.parent.isToday(day, this.month, this.year);\n }\n\n isDayDisabled(day: number | null): boolean {\n return this.parent.isDayDisabled(day, this.month, this.year);\n }\n\n isOtherMonth(day: number | null): boolean {\n return this.parent.isOtherMonth(day);\n }\n\n getDayDisplay(day: number | null): string {\n return this.parent.getDayDisplay(day);\n }\n}","<div class=\"calendar-grid sp-t-12 sm-b-8\">\n @for (d of weekDays; track $index) {\n <div class=\"weekday-header meta-regular-emphasized\">{{ d }}</div>\n }\n\n <!-- Days -->\n @for (day of calendarDays; track $index) {\n <div class=\"calendar-day body-medium\" [class.other-month]=\"isOtherMonth(day)\" [class.selected]=\"isSelected(day)\"\n [class.in-range]=\"isInRange(day)\" [class.range-start]=\"isRangeStart(day)\" [class.range-end]=\"isRangeEnd(day)\"\n [class.today]=\"isToday(day)\" [class.disabled]=\"isDayDisabled(day)\" (click)=\"selectDay(day)\">\n <span>{{ getDayDisplay(day) }}</span>\n </div>\n }\n</div>","import { Component, EventEmitter, forwardRef, Output } from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n FormControl,\n Validator,\n} from '@angular/forms';\n\n@Component({\n selector: 'cats-time-input',\n templateUrl: './time-input.component.html',\n styleUrls: ['./time-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeInputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => TimeInputComponent),\n multi: true,\n },\n ],\n})\nexport class TimeInputComponent implements ControlValueAccessor, Validator {\n timeValue = '';\n timeMeridiem: 'AM' | 'PM' = 'AM';\n control!: FormControl;\n\n @Output() timeChange = new EventEmitter<{\n time: string;\n meridiem: 'AM' | 'PM';\n }>();\n\n private onChangeCallback: (_: any) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n // ------------------ Input Handling ------------------\n handleTimeInput(event: Event) {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n // Allow only digits + colon\n value = value.replace(/[^0-9:]/g, '');\n\n // CASE: user typed \"1:\" shorthand → treat leading digit as \"0X\"\n if (/^\\d:$/.test(value)) {\n this.timeValue = `0${value[0]}:`;\n input.value = this.timeValue;\n this.updateControlValue();\n this.emitTime();\n return;\n }\n\n // Strip all colons → work purely with raw digits\n let raw = value.replace(/:/g, '');\n\n // Limit to 4 digits max\n raw = raw.slice(0, 4);\n\n // Only auto-insert colon once we have exactly 4 digits\n // This prevents colon from disrupting cursor position mid-typing\n if (raw.length === 4) {\n this.timeValue = raw.slice(0, 2) + ':' + raw.slice(2, 4);\n } else {\n this.timeValue = raw;\n }\n\n // Sync the actual input element value to prevent browser\n // from showing stale/mis-formatted text\n input.value = this.timeValue;\n\n this.updateControlValue();\n this.emitTime();\n }\n\n setPeriod(period: 'AM' | 'PM') {\n this.timeMeridiem = period;\n this.updateControlValue();\n this.emitTime();\n }\n\n private emitTime() {\n this.timeChange.emit({ time: this.timeValue, meridiem: this.timeMeridiem });\n }\n\n private updateControlValue() {\n if (!this.isValidTime(this.timeValue)) {\n this.onChangeCallback(null);\n return;\n }\n\n let [hours, minutes] = this.timeValue.split(':').map(Number);\n\n // Convert to 24h\n if (this.timeMeridiem === 'PM' && hours < 12) hours += 12;\n if (this.timeMeridiem === 'AM' && hours === 12) hours = 0;\n\n this.onChangeCallback(hours * 3600 + minutes * 60);\n }\n\n // ------------------ Validation ------------------\n private isValidTime(value: string): boolean {\n // Must be fully formatted HH:MM to be valid\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n\n const [hStr, mStr] = value.split(':');\n const hours = Number(hStr);\n const minutes = Number(mStr);\n\n return (\n !isNaN(hours) &&\n !isNaN(minutes) &&\n hours >= 1 &&\n hours <= 12 &&\n minutes >= 0 &&\n minutes <= 59\n );\n }\n\n validate(control: FormControl) {\n this.control = control;\n return this.isValidTime(this.timeValue) ? null : { timePattern: true };\n }\n\n // ------------------ ControlValueAccessor ------------------\n writeValue(obj: any): void {\n if (typeof obj === 'number') {\n let hours = Math.floor(obj / 3600);\n const minutes = Math.floor((obj % 3600) / 60);\n\n this.timeMeridiem = hours >= 12 ? 'PM' : 'AM';\n if (hours > 12) hours -= 12;\n if (hours === 0) hours = 12;\n\n this.timeValue = `${hours.toString().padStart(2, '0')}:${minutes\n .toString()\n .padStart(2, '0')}`;\n } else {\n this.timeValue = '';\n this.timeMeridiem = 'AM';\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n setDisabledState?(_isDisabled: boolean): void {}\n\n onFocusOut() {\n this.formatTimeOnBlur();\n this.onTouchedCallback();\n }\n\n private formatTimeOnBlur() {\n if (!this.timeValue) return;\n\n // Strip colon and parse raw digits (handles both \"115\" and \"11:5\")\n const raw = this.timeValue.replace(/:/g, '');\n\n if (raw.length < 1) {\n this.clearValue();\n return;\n }\n\n const hours = Number(raw.slice(0, 2));\n // If only 1–2 digits typed (e.g. \"11\"), default minutes to 0\n const minutes = raw.length >= 3 ? Number(raw.slice(2, 4)) : 0;\n\n // Validate hour\n if (isNaN(hours) || hours < 1 || hours > 12) {\n this.clearValue();\n return;\n }\n\n // Validate minutes\n if (isNaN(minutes) || minutes < 0 || minutes > 59) {\n this.clearValue();\n return;\n }\n\n // Format properly\n this.timeValue =\n `${hours.toString().padStart(2, '0')}:` +\n `${minutes.toString().padStart(2, '0')}`;\n\n this.updateControlValue();\n this.emitTime();\n }\n\n private clearValue() {\n this.timeValue = '';\n this.onChangeCallback(null);\n this.emitTime();\n }\n\n clear() {\n this.writeValue(null);\n this.onChangeCallback(null);\n this.emitTime();\n }\n}\n","<div class=\"footer-row time-row\">\n <span class=\"footer-label body-large sp-x-12\">Time</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <div class=\"time-input-wrapper\">\n <input\n class=\"time-input body-large\"\n type=\"text\"\n [value]=\"timeValue\"\n placeholder=\"HH:MM\"\n (input)=\"handleTimeInput($event)\"\n (blur)=\"onFocusOut()\"\n maxlength=\"5\"\n autocomplete=\"off\"\n />\n <div class=\"period-toggle\">\n <button\n type=\"button\"\n class=\"period-btn body-medium\"\n [class.active]=\"timeMeridiem === 'AM'\"\n (click)=\"setPeriod('AM')\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"period-btn body-medium\"\n [class.active]=\"timeMeridiem === 'PM'\"\n (click)=\"setPeriod('PM')\"\n >\n PM\n </button>\n </div>\n </div>\n @if (timeValue) {\n <img\n src=\"images/x-cancel-btn.svg\"\n alt=\"Clear\"\n class=\"cancel-btn\"\n (click)=\"clear()\"\n />\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n HostListener,\n ElementRef,\n forwardRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nexport type DatePickerMode = 'single' | 'range' | 'dual';\n\nexport interface DatePickerConfig {\n mode?: DatePickerMode; // 'single' | 'range' | 'dual'\n time?: boolean;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n fromPlaceholder?: string;\n toPlaceholder?: string;\n dateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\n disabledDates?: Date[];\n disablePastDays?: number;\n showDateLabel?: boolean;\n showTimeLabel?: boolean;\n}\n\nexport interface DateRange {\n from: string | null;\n fromTime: string;\n to: string | null;\n toTime: string;\n}\n\nexport interface DateTimeResult {\n date: string | null;\n time: string; // \"HH:mm\"\n meridiem: 'AM' | 'PM';\n}\n\nexport type CalenderView = 'day' | 'year' | 'month';\n\nimport { CalendarGridComponent } from './calendar-grid.component';\nimport { TimeInputComponent } from './time-input.component';\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\n\n@Component({\n selector: 'cats-ui-custom-date-picker',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CustomDatePickerComponent),\n multi: true,\n },\n ],\n standalone: true,\n templateUrl: './custom-date-picker.component.html',\n styleUrls: ['./custom-date-picker.component.scss'],\n imports: [\n CommonModule,\n CalendarGridComponent,\n TimeInputComponent,\n FormsModule,\n OutsideClickDirective,\n ],\n})\nexport class CustomDatePickerComponent\n implements OnInit, ControlValueAccessor, OnChanges\n{\n @Input() config: DatePickerConfig = {};\n @Input() label: string = '';\n @Input() showHeader: boolean = true;\n @Input() showTrigger: boolean = true;\n @Input() parentNativeElement: any;\n // Single / datetime\n\n @Output() applied = new EventEmitter<\n Date | DateRange | DateTimeResult | string\n >();\n @Output() cancelled = new EventEmitter<void>();\n\n // Range\n @Output() rangeSelected = new EventEmitter<DateRange>();\n\n private onChange: (val: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ─── State ────────────────────────────────────────────────────────────────\n isOpen = false;\n\n // Single / DateTime\n selectedDate: Date | null = null;\n tempDate: Date | null = null;\n\n // Range\n rangeFrom: Date | null = null;\n rangeTo: Date | null = null;\n tempFrom: Date | null = null;\n tempTo: Date | null = null;\n\n // DateTime\n timeValue = '';\n timeMeridiem: 'AM' | 'PM' = 'AM';\n fromTimeValue = '';\n fromTimeMeridiem: 'AM' | 'PM' = 'AM';\n toTimeValue = '';\n toTimeMeridiem: 'AM' | 'PM' = 'AM';\n\n // Calendar\n currentMonth: number = new Date().getMonth();\n currentYear: number = new Date().getFullYear();\n weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n calendarDays: (number | null)[] = [];\n\n // Dual mode (two calendars)\n currentMonth2: number = new Date().getMonth();\n currentYear2: number = new Date().getFullYear();\n calendarDays2: (number | null)[] = [];\n\n yearRange: number[] = [];\n calenderView: CalenderView = 'day';\n activeCalendar: 'primary' | 'secondary' = 'primary';\n\n monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n constructor(private elRef: ElementRef) {}\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config']?.currentValue) {\n if (!this.showTrigger) {\n this.toggleCalendar();\n }\n }\n }\n\n ngOnInit(): void {\n this.generateYearRange();\n if (!this.showTrigger) {\n this.toggleCalendar();\n }\n }\n\n // ─── Getters ──────────────────────────────────────────────────────────────\n\n get mode(): DatePickerMode {\n return this.config.mode || 'single';\n }\n\n get showDateLabel(): boolean {\n return this.config.showDateLabel !== false;\n }\n\n get time(): boolean {\n return this.config.time ?? false;\n }\n\n get currentMonthYear(): string {\n return `${this.monthNames[this.currentMonth]} ${this.currentYear}`;\n }\n\n get currentMonthName() {\n return this.monthNames[this.currentMonth];\n }\n\n get activeMonthName(): string {\n return this.activeCalendar === 'secondary'\n ? this.monthNames[this.currentMonth2]\n : this.monthNames[this.currentMonth];\n }\n\n get activeYearValue(): number {\n return this.activeCalendar === 'secondary'\n ? this.currentYear2\n : this.currentYear;\n }\n\n get displayValue(): string {\n if (this.mode === 'range' || this.mode === 'dual') {\n if (this.rangeFrom && this.rangeTo) {\n return `${this.formatDate(this.rangeFrom)} – ${this.formatDate(this.rangeTo)}`;\n }\n if (this.rangeFrom) return this.formatDate(this.rangeFrom);\n return '';\n }\n return this.selectedDate ? this.formatDate(this.selectedDate) : '';\n }\n\n get tempDisplayValue(): string {\n if (!this.tempDate) return this.config.placeholder || 'Select date';\n return this.formatDate(this.tempDate);\n }\n\n get tempFromDisplay(): string {\n if (!this.tempFrom) return this.config.fromPlaceholder || 'Select date';\n return this.formatDate(this.tempFrom);\n }\n\n get tempToDisplay(): string {\n if (!this.tempTo) return this.config.toPlaceholder || 'Select date';\n return this.formatDate(this.tempTo);\n }\n\n // ─── ControlValueAccessor ─────────────────────────────────────────────────\n\n // writeValue(val: any): void {\n // if (!val) {\n // this.selectedDate = null;\n // this.tempDate = null;\n\n // this.rangeFrom = null;\n // this.rangeTo = null;\n // this.tempFrom = null;\n // this.tempTo = null;\n\n // this.timeValue = '';\n // this.timeMeridiem = 'AM';\n\n // this.fromTimeValue = '';\n // this.fromTimeMeridiem = 'AM';\n\n // this.toTimeValue = '';\n // this.toTimeMeridiem = 'AM';\n // }\n // if (this.mode === 'range' || this.mode === 'dual') {\n // const from = val.from ? new Date(val.from) : null;\n // const to = val.to ? new Date(val.to) : null;\n\n // this.rangeFrom = from;\n // this.rangeTo = to;\n // this.tempFrom = from;\n // this.tempTo = to;\n\n // if (this.time) {\n // if (val.fromTime) {\n // const [time, meridiem] = val.fromTime.split(' ');\n // this.fromTimeValue = time;\n // this.fromTimeMeridiem = meridiem || 'AM';\n // }\n\n // if (val.toTime) {\n // const [time, meridiem] = val.toTime.split(' ');\n // this.toTimeValue = time;\n // this.toTimeMeridiem = meridiem || 'AM';\n // }\n // }\n // }\n // // Single mode with time\n // else if (this.time && val?.date) {\n // this.selectedDate = new Date(val.date);\n // this.tempDate = new Date(val.date);\n // if (val.time) {\n // const [time, meridiem] = val.time.split(' ');\n // this.timeValue = time;\n // this.timeMeridiem = meridiem || 'AM';\n // }\n // }\n // // Single mode without time\n // else {\n // this.selectedDate = new Date(val);\n // this.tempDate = new Date(val);\n // }\n // // this.initializeCurrentMonthYear()\n // }\n writeValue(val: any): void {\n // Guard: reset and exit early if no value\n if (!val) {\n this.selectedDate = null;\n this.tempDate = null;\n this.rangeFrom = null;\n this.rangeTo = null;\n this.tempFrom = null;\n this.tempTo = null;\n this.timeValue = '';\n this.timeMeridiem = 'AM';\n this.fromTimeValue = '';\n this.fromTimeMeridiem = 'AM';\n this.toTimeValue = '';\n this.toTimeMeridiem = 'AM';\n return;\n }\n\n if (this.mode === 'range' || this.mode === 'dual') {\n const from = val.from ? new Date(val.from) : null;\n const to = val.to ? new Date(val.to) : null;\n\n this.rangeFrom = from;\n this.rangeTo = to;\n this.tempFrom = from;\n this.tempTo = to;\n\n // Remove \"if (this.time)\" — check val directly instead\n if (val.fromTime) {\n const [time, meridiem] = val.fromTime.split(' ');\n this.fromTimeValue = time;\n this.fromTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\n // Also convert to seconds so ngModel patches the child correctly\n this.fromTimeInSeconds = this.convertToSeconds(\n time,\n meridiem as 'AM' | 'PM',\n );\n }\n\n if (val.toTime) {\n const [time, meridiem] = val.toTime.split(' ');\n this.toTimeValue = time;\n this.toTimeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\n // Also convert to seconds so ngModel patches the child correctly\n this.toTimeInSeconds = this.convertToSeconds(\n time,\n meridiem as 'AM' | 'PM',\n );\n }\n }\n // Single with time\n else if (this.time && val?.date) {\n this.selectedDate = new Date(val.date);\n this.tempDate = new Date(val.date);\n if (val.time) {\n const [time, meridiem] = val.time.split(' ');\n this.timeValue = time;\n this.timeMeridiem = (meridiem as 'AM' | 'PM') || 'AM';\n this.singleTimeInSeconds = this.convertToSeconds(\n time,\n meridiem as 'AM' | 'PM',\n );\n }\n }\n // Single without time\n else if (val) {\n this.selectedDate = new Date(val);\n this.tempDate = new Date(val);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n // ─── Toggle ───────────────────────────────────────────────────────────────\n\n toggleCalendar(): void {\n this.isOpen = !this.isOpen;\n this.initializeCurrentMonthYear();\n\n if (this.parentNativeElement) {\n let parentDiv = document.getElementById(this.parentNativeElement);\n setTimeout(() => {\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\n let dropdonwList: any = document.getElementById('date-input-container');\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\n dropdonwList.style['transform'] = `translate(0px,-${\n elBoundary?.['height'] + 54\n }px`;\n }\n }, 0);\n }\n\n // this.onTouched();\n }\n initializeCurrentMonthYear(): void {\n const refDate =\n (this.mode === 'range' || this.mode === 'dual') && this.rangeFrom\n ? this.rangeFrom\n : this.selectedDate || new Date();\n\n this.currentMonth = refDate.getMonth();\n this.currentYear = refDate.getFullYear();\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n if (this.mode === 'dual' && this.rangeFrom && this.rangeTo) {\n const sameMonth = this.rangeFrom.getMonth() === this.rangeTo.getMonth();\n\n if (sameMonth) {\n const { month, year } = this.getNextMonthYear(\n this.currentMonth,\n this.currentYear,\n );\n this.currentMonth2 = month;\n this.currentYear2 = year;\n } else {\n this.currentMonth2 = this.rangeTo.getMonth();\n this.currentYear2 = this.rangeTo.getFullYear();\n }\n }\n\n this.buildCalendar();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elRef.nativeElement.contains(event.target)) {\n // this.onCancel();\n }\n }\n\n // ─── Calendar Build ───────────────────────────────────────────────────────\n\n buildCalendar(): void {\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n\n this.calendarDays = this.buildCalendarDays(\n this.currentMonth,\n this.currentYear,\n );\n\n this.calendarDays2 = this.buildCalendarDays(\n this.currentMonth2,\n this.currentYear2,\n );\n } else {\n this.calendarDays = this.buildCalendarDays(\n this.currentMonth,\n this.currentYear,\n );\n }\n }\n\n private buildCalendarDays(month: number, year: number): (number | null)[] {\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const prevMonthDays = new Date(year, month, 0).getDate();\n\n const days: (number | null)[] = [];\n\n // Leading days from prev month (greyed out)\n for (let i = firstDay - 1; i >= 0; i--) {\n days.push(-(prevMonthDays - i)); // negative = prev month\n }\n\n // Current month days\n for (let d = 1; d <= daysInMonth; d++) {\n days.push(d);\n }\n\n // Trailing days from next month\n let trailing = 1;\n while (days.length % 7 !== 0) {\n days.push(1000 + trailing++); // 1000+ = next month\n }\n\n return days;\n }\n\n private getNextMonthYear(\n month: number,\n year: number,\n ): { month: number; year: number } {\n if (month === 11) {\n return { month: 0, year: year + 1 };\n }\n return { month: month + 1, year };\n }\n\n private getPrevMonthYear(\n month: number,\n year: number,\n ): { month: number; year: number } {\n if (month === 0) {\n return { month: 11, year: year - 1 };\n }\n return { month: month - 1, year };\n }\n\n generateYearRange(year: number = this.currentYear): void {\n const startYear = year - (year % 20);\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\n }\n\n openView(calendar: 'primary' | 'secondary', view: CalenderView): void {\n this.activeCalendar = calendar;\n this.calenderView = view;\n if (view === 'year') {\n this.generateYearRange(\n calendar === 'secondary' ? this.currentYear2 : this.currentYear,\n );\n }\n }\n\n getDayDisplay(day: number | null): string {\n if (day === null) return '';\n if (day < 0) return String(Math.abs(day));\n if (day > 999) return String(day - 1000);\n return String(day);\n }\n\n isOtherMonth(day: number | null): boolean {\n if (day === null) return false;\n return day < 0 || day > 999;\n }\n\n getActualDay(day: number | null): number | null {\n if (day === null) return null;\n if (day < 0 || day > 999) return null; // other month — not selectable\n return day;\n }\n\n // ─── Navigation ───────────────────────────────────────────────────────────\n\n // Fix — secondary is always exactly 1 month ahead of primary\n prevMonth(): void {\n const prev = this.getPrevMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth = prev.month;\n this.currentYear = prev.year;\n\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n this.buildCalendar();\n }\n\n nextMonth(): void {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth = next.month;\n this.currentYear = next.year;\n\n if (this.mode === 'dual') {\n const next2 = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next2.month;\n this.currentYear2 = next2.year;\n }\n this.buildCalendar();\n }\n\n selectMonth(month: string) {\n const index = this.monthNames.indexOf(month);\n if (this.activeCalendar === 'primary') {\n this.currentMonth = index;\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n } else {\n this.currentMonth2 = index;\n if (this.mode === 'dual') {\n const prev = this.getPrevMonthYear(\n this.currentMonth2,\n this.currentYear2,\n );\n this.currentMonth = prev.month;\n this.currentYear = prev.year;\n }\n }\n this.buildCalendar();\n this.calenderView = 'day';\n }\n\n previousYearRange(): void {\n this.yearRange = this.yearRange.map((year) => year - 18);\n }\n\n nextYearRange(): void {\n this.yearRange = this.yearRange.map((year) => year + 18);\n }\n\n selectYear(year: number) {\n if (this.activeCalendar === 'primary') {\n this.currentYear = year;\n if (this.mode === 'dual') {\n const next = this.getNextMonthYear(this.currentMonth, this.currentYear);\n this.currentMonth2 = next.month;\n this.currentYear2 = next.year;\n }\n } else {\n this.currentYear2 = year;\n if (this.mode === 'dual') {\n const prev = this.getPrevMonthYear(\n this.currentMonth2,\n this.currentYear2,\n );\n this.currentMonth = prev.month;\n this.currentYear = prev.year;\n }\n }\n this.generateYearRange(\n this.activeCalendar === 'secondary'\n ? this.currentYear2\n : this.currentYear,\n );\n this.buildCalendar();\n this.calenderView = 'day';\n }\n\n // ─── Day Selection ────────────────────────────────────────────────────────\n\n selectDay(\n day: number | null,\n calendar: 'primary' | 'secondary' = 'primary',\n ): void {\n const month =\n calendar === 'secondary' ? this.currentMonth2 : this.currentMonth;\n const year =\n calendar === 'secondary' ? this.currentYear2 : this.currentYear;\n\n const actual = this.getActualDay(day);\n if (!actual || this.isDayDisabled(actual, month, year)) return;\n\n const date = new Date(year, month, actual);\n\n if (this.mode === 'range' || this.mode === 'dual') {\n if (!this.tempFrom && !this.tempTo) {\n this.tempFrom = date;\n } else if (this.tempFrom && !this.tempTo) {\n if (date < this.tempFrom) {\n this.tempTo = this.tempFrom;\n this.tempFrom = date;\n } else {\n this.tempTo = date;\n }\n } else {\n this.tempFrom = date;\n this.tempTo = null;\n }\n } else {\n this.tempDate = date;\n }\n }\n\n // ─── Day State Checks ─────────────────────────────────────────────────────\n\n isSelected(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n const actual = this.getActualDay(day);\n if (!actual) return false;\n\n if (this.mode === 'range' || this.mode === 'dual') {\n const date = new Date(year, month, actual);\n return (\n this.isSameDay(date, this.tempFrom) || this.isSameDay(date, this.tempTo)\n );\n }\n\n if (!this.tempDate) return false;\n return (\n this.tempDate.getDate() === actual &&\n this.tempDate.getMonth() === month &&\n this.tempDate.getFullYear() === year\n );\n }\n\n isInRange(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\n const actual = this.getActualDay(day);\n if (!actual || !this.tempFrom || !this.tempTo) return false;\n const date = new Date(year, month, actual);\n return date > this.tempFrom && date < this.tempTo;\n }\n\n isRangeStart(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\n const actual = this.getActualDay(day);\n if (!actual) return false;\n return this.isSameDay(new Date(year, month, actual), this.tempFrom);\n }\n\n isRangeEnd(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n if (this.mode !== 'range' && this.mode !== 'dual') return false;\n const actual = this.getActualDay(day);\n if (!actual) return false;\n return this.isSameDay(new Date(year, month, actual), this.tempTo);\n }\n\n isToday(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n const actual = this.getActualDay(day);\n if (!actual) return false;\n const today = new Date();\n return (\n today.getDate() === actual &&\n today.getMonth() === month &&\n today.getFullYear() === year\n );\n }\n\n isDayDisabled(\n day: number | null,\n month: number = this.currentMonth,\n year: number = this.currentYear,\n ): boolean {\n const actual = this.getActualDay(day);\n if (!actual) return true;\n const date = new Date(year, month, actual);\n\n // disablePastDays: disable last N days from today\n if (this.config.disablePastDays) {\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - this.config.disablePastDays);\n cutoff.setHours(0, 0, 0, 0);\n if (date < cutoff) return true;\n }\n\n if (this.config.minDate) {\n const min = new Date(this.config.minDate);\n min.setHours(0, 0, 0, 0);\n if (date < min) return true;\n }\n\n if (this.config.maxDate) {\n const max = new Date(this.config.maxDate);\n max.setHours(23, 59, 59, 999);\n if (date > max) return true;\n }\n\n if (this.config.disabledDates?.length) {\n return this.config.disabledDates.some((d) => this.isSameDay(d, date));\n }\n\n return false;\n }\n\n // ─── Time (datetime mode) ─────────────────────────────────────────────────\n\n // handleTimeInput(event: Event, field: 'timeValue' | 'fromTimeValue' | 'toTimeValue') {\n // const input = event.target as HTMLInputElement;\n // let value = input.value.replace(/[^0-9]/g, '');\n\n // if (value.length > 2) {\n // value = value.slice(0, 2) + ':' + value.slice(2, 4);\n // }\n\n // this[field] = value.slice(0, 5);\n // }\n\n // setPeriod(value: 'AM' | 'PM', field: 'timeMeridiem' | 'fromTimeMeridiem' | 'toTimeMeridiem'): void {\n // this[field] = value;\n // }\n\n setTime(event: any) {\n console.log(event);\n }\n singleTimeInSeconds: number | null = null;\n fromTimeInSeconds: number | null = null;\n toTimeInSeconds: number | null = null;\n\n private convertToSeconds(time: string, meridiem: 'AM' | 'PM'): number | null {\n if (!time) return null;\n\n let [hours, minutes] = time.split(':').map(Number);\n\n if (isNaN(hours) || isNaN(minutes)) return null;\n\n if (meridiem === 'PM' && hours < 12) hours += 12;\n if (meridiem === 'AM' && hours === 12) hours = 0;\n\n return hours * 3600 + minutes * 60;\n }\n onSingleTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\n this.timeValue = event.time;\n this.timeMeridiem = event.meridiem;\n\n // store for patch\n this.singleTimeInSeconds = this.convertToSeconds(\n event.time,\n event.meridiem,\n );\n }\n\n onFromTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\n this.fromTimeValue = event.time;\n this.fromTimeMeridiem = event.meridiem;\n\n this.fromTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\n }\n\n onToTimeChange(event: { time: string; meridiem: 'AM' | 'PM' }) {\n this.toTimeValue = event.time;\n this.toTimeMeridiem = event.meridiem;\n\n this.toTimeInSeconds = this.convertToSeconds(event.time, event.meridiem);\n }\n // ─── Actions ──────────────────────────────────────────────────────────────\n onApply(): void {\n const parentDateFormat = this.config.parentDateFormat;\n\n // ---------------- RANGE / DUAL ----------------\n if (this.mode === 'range' || this.mode === 'dual') {\n if (!this.tempFrom || !this.tempTo) return;\n\n let fromTime = '';\n let toTime = '';\n\n if (this.time) {\n const normalizedFrom = this.normalizeTime(this.fromTimeValue);\n const normalizedTo = this.normalizeTime(this.toTimeValue);\n\n // block apply if invalid\n if (!normalizedFrom || !normalizedTo) return;\n\n fromTime = `${normalizedFrom} ${this.fromTimeMeridiem}`;\n toTime = `${normalizedTo} ${this.toTimeMeridiem}`;\n }\n\n this.rangeFrom = this.tempFrom;\n this.rangeTo = this.tempTo;\n\n const result: DateRange = {\n from: this.formatDate(this.rangeFrom, parentDateFormat),\n to: this.formatDate(this.rangeTo, parentDateFormat),\n fromTime,\n toTime,\n };\n\n this.onChange(result);\n this.applied.emit(result);\n }\n\n // ---------------- SINGLE ----------------\n else if (this.mode === 'single') {\n if (!this.tempDate) return;\n\n this.selectedDate = this.tempDate;\n const finalDate = this.formatDate(this.tempDate, parentDateFormat);\n\n if (this.time) {\n const normalized = this.normalizeTime(this.timeValue);\n\n // block invalid time\n if (!normalized) return;\n\n const result: DateTimeResult = {\n date: finalDate,\n time: `${normalized} ${this.timeMeridiem}`,\n meridiem: this.timeMeridiem,\n };\n\n this.onChange(result);\n this.applied.emit(result);\n } else {\n this.onChange(finalDate);\n this.applied.emit(finalDate);\n }\n }\n\n this.isOpen = false;\n }\n private normalizeTime(value: string): string | null {\n if (!value) return null;\n\n let [h, m] = value.split(':');\n\n let hours = Number(h);\n let minutes = Number(m ?? 0);\n\n // Invalid hour (block 00 also)\n if (!hours || hours < 1 || hours > 12) return null;\n\n // Invalid minutes\n if (minutes < 0 || minutes > 59) return null;\n\n //\n return `${hours.toString().padStart(2, '0')}:${minutes\n .toString()\n .padStart(2, '0')}`;\n }\n\n appendTimeInDate(time: string, date: Date, timeMeridiem: string) {\n const [hours, minutes] = time.split(':').map(Number);\n const dateWithTime = new Date(date);\n if (!isNaN(hours) && !isNaN(minutes)) {\n let h = hours;\n if (timeMeridiem === 'PM' && h < 12) h += 12;\n if (timeMeridiem === 'AM' && h === 12) h = 0;\n dateWithTime.setHours(h, minutes, 0, 0);\n }\n\n return dateWithTime;\n }\n\n onCancel(): void {\n //Reset values to last applied state\n this.tempDate = this.selectedDate ? new Date(this.selectedDate) : null;\n this.tempFrom = this.rangeFrom ? new Date(this.rangeFrom) : null;\n this.tempTo = this.rangeTo ? new Date(this.rangeTo) : null;\n this.calenderView = 'day';\n\n this.isOpen = false;\n this.cancelled.emit();\n }\n\n clearDate(): void {\n this.selectedDate = null;\n this.tempDate = null;\n this.rangeFrom = null;\n this.rangeTo = null;\n this.tempFrom = null;\n this.tempTo = null;\n this.onChange(null);\n // this.applied.emit(null);\n }\n cancelDate(source: string) {\n if (source == 'from') {\n this.tempFrom = null;\n this.rangeFrom = null;\n } else if (source == 'to') {\n this.tempTo = null;\n this.rangeTo = null;\n } else {\n this.tempDate = null;\n }\n }\n onDaySelected(day: number | null, calendar: 'primary' | 'secondary') {\n this.selectDay(day, calendar);\n }\n\n // ─── Helpers ──────────────────────────────────────────────────────────────\n\n isSameDay(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return (\n a.getDate() === b.getDate() &&\n a.getMonth() === b.getMonth() &&\n a.getFullYear() === b.getFullYear()\n );\n }\n\n formatDate(\n date: Date,\n dateFormat: string = this.config.dateFormat ?? '',\n ): string {\n const day = date.getDate();\n const monthShort = this.monthNames[date.getMonth()].slice(0, 3);\n const year = date.getFullYear();\n\n switch (dateFormat) {\n case 'MM/dd/yyyy':\n return `${String(date.getMonth() + 1).padStart(2, '0')}/${String(day).padStart(2, '0')}/${year}`;\n case 'yyyy-MM-dd':\n return `${year}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n default:\n return `${day} ${monthShort} ${year}`;\n }\n }\n\n get canApply(): boolean {\n if (this.mode === 'range' || this.mode === 'dual') {\n if (!this.tempFrom || !this.tempTo) return false;\n if (this.tempFrom > this.tempTo) return false;\n if (this.time) {\n if (!this.isValidTime(this.fromTimeValue)) return false;\n if (!this.isValidTime(this.toTimeValue)) return false;\n }\n return true;\n }\n\n if (this.mode === 'single') {\n if (!this.tempDate) return false;\n let finalDate = new Date(this.tempDate);\n\n if (this.time) {\n if (!this.isValidTime(this.timeValue)) return false;\n const [hours, minutes] = this.timeValue.split(':').map(Number);\n let h = hours;\n if (this.timeMeridiem === 'PM' && h < 12) h += 12;\n if (this.timeMeridiem === 'AM' && h === 12) h = 0;\n finalDate.setHours(h, minutes, 0, 0);\n }\n\n if (this.config?.maxDate && finalDate > this.config.maxDate) {\n return false;\n }\n\n if (this.config?.minDate && finalDate < this.config.minDate) {\n return false;\n }\n\n return true;\n }\n\n return false;\n }\n private isValidTime(value: string): boolean {\n const [hStr, mStr] = value.split(':');\n if (!hStr) return false;\n const hours = Number(hStr);\n const minutes = Number(mStr ?? '0');\n return !(\n isNaN(hours) ||\n isNaN(minutes) ||\n hours < 1 ||\n hours > 12 ||\n minutes < 0 ||\n minutes > 59\n );\n }\n}\n","<div class=\"date-picker-wrapper\" id=\"custom-date\" catsOutsideClick\n (clickOutSide)=\"isOpen = false\">\n <!-- Label -->\n @if (label) {\n <label class=\"date-label\">{{ label }}</label>\n }\n\n <!-- Input Trigger -->\n @if (showTrigger) {\n <div\n class=\"date-input\"\n [class.is-open]=\"isOpen\"\n [class.has-value]=\"displayValue\"\n (click)=\"toggleCalendar()\"\n >\n <span class=\"date-input-text\" [class.custom-placeholder]=\"!displayValue\">\n {{ displayValue || config.placeholder || \"Select date\" }}\n </span>\n\n <svg\n class=\"calendar-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n\n <!-- @if (displayValue) {\n <span class=\"clear-btn\" (click)=\"$event.stopPropagation(); clearDate()\">\n <img src=\"images/x.svg\" alt=\"\" />\n </span>\n } -->\n </div>\n }\n\n <!-- Calendar Dropdown -->\n @if (!showTrigger || isOpen) {\n <div\n id=\"date-input-container\"\n class=\"calendar-dropdown sp-16 br-8\"\n [ngClass]=\"{ 'month-year-view': calenderView != 'day' }\"\n >\n <div class=\"calendar-header sm-b-12\">\n <div class=\"nav-btn br-4\" (click)=\"prevMonth()\" type=\"button\">\n <img src=\"images/chevron-left.svg\" alt=\"\" />\n </div>\n <div class=\"month-year body-medium\">\n @if (mode === \"dual\") {\n @if (calenderView == \"day\" || activeCalendar != \"secondary\") {\n <div class=\"month-year-wrapper\">\n <span class=\"month\" (click)=\"openView('primary', 'month')\">{{\n currentMonthName\n }}</span>\n <span class=\"year\" (click)=\"openView('primary', 'year')\">{{\n currentYear\n }}</span>\n </div>\n }\n\n @if (calenderView == \"day\" || activeCalendar != \"primary\") {\n <div class=\"month-year-wrapper\">\n <span class=\"month\" (click)=\"openView('secondary', 'month')\">{{\n monthNames[currentMonth2]\n }}</span>\n <span class=\"year\" (click)=\"openView('secondary', 'year')\">{{\n currentYear2\n }}</span>\n </div>\n }\n } @else {\n <div class=\"month-year-wrapper\">\n <span class=\"month\" (click)=\"calenderView = 'month'\">{{\n currentMonthName\n }}</span>\n <span class=\"year\" (click)=\"calenderView = 'year'\">{{\n currentYear\n }}</span>\n </div>\n }\n </div>\n <div class=\"nav-btn br-4\" (click)=\"nextMonth()\" type=\"button\">\n <img src=\"images/chevron-right.svg\" alt=\"\" />\n </div>\n </div>\n\n @if (calenderView == \"month\") {\n <div class=\"month-grid\">\n @for (month of monthNames; track month) {\n <span\n class=\"month\"\n (click)=\"selectMonth(month)\"\n [ngClass]=\"{ selected: month == activeMonthName }\"\n >{{ month }}</span\n >\n }\n </div>\n } @else if (calenderView == \"year\") {\n <div class=\"year-selector\">\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\n <img src=\"images/chevron-left.svg\" alt=\"\" />\n </span>\n <div class=\"year-grid\">\n @for (year of yearRange; track year) {\n <span\n class=\"year\"\n (click)=\"selectYear(year)\"\n [ngClass]=\"{ selected: year == activeYearValue }\"\n >{{ year }}</span\n >\n }\n </div>\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\n <img src=\"images/chevron-right.svg\" alt=\"\" />\n </span>\n </div>\n } @else {\n <!-- Weekday Headers -->\n <div class=\"day_wrapper\">\n @if (mode === \"dual\") {\n <div class=\"dual-calendar\">\n <div class=\"calendar-panel\">\n <custom-calendar-grid\n [month]=\"currentMonth\"\n [year]=\"currentYear\"\n [calendarDays]=\"calendarDays\"\n [weekDays]=\"weekDays\"\n [parent]=\"this\"\n (daySelected)=\"onDaySelected($event, 'primary')\"\n ></custom-calendar-grid>\n </div>\n\n <div class=\"calendar-panel\">\n <custom-calendar-grid\n [month]=\"currentMonth2\"\n [year]=\"currentYear2\"\n [calendarDays]=\"calendarDays2\"\n [weekDays]=\"weekDays\"\n [parent]=\"this\"\n (daySelected)=\"onDaySelected($event, 'secondary')\"\n ></custom-calendar-grid>\n </div>\n </div>\n } @else {\n <custom-calendar-grid\n [month]=\"currentMonth\"\n [year]=\"currentYear\"\n [calendarDays]=\"calendarDays\"\n [weekDays]=\"weekDays\"\n [parent]=\"this\"\n (daySelected)=\"onDaySelected($event, 'primary')\"\n ></custom-calendar-grid>\n }\n </div>\n\n <!-- Footer -->\n <div\n class=\"calendar-footer sm-b-16\"\n [ngClass]=\"{ 'dual-calendar': config.mode === 'dual' }\"\n >\n <!-- SINGLE MODE footer -->\n @if (mode === \"single\" && showDateLabel) {\n <div class=\"calendar-footer-wrapper\">\n <div class=\"footer-row label-row\">\n <span class=\"footer-label body-large sp-x-12\">Date</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <span class=\"footer-value body-large\">{{\n tempDisplayValue\n }}</span>\n @if (tempDate) {\n <img\n (click)=\"cancelDate('single')\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n }\n </div>\n </div>\n </div>\n @if (time) {\n <cats-time-input\n [(ngModel)]=\"singleTimeInSeconds\"\n (timeChange)=\"onSingleTimeChange($event)\"\n ></cats-time-input>\n }\n }\n\n <!-- RANGE MODE footer -->\n @if (mode === \"range\" || mode === \"dual\") {\n <div\n class=\"calendar-footer-wrapper\"\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\n >\n <div class=\"footer-row label-row\">\n <span class=\"footer-label body-large sp-x-12\">From</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <span class=\"footer-value body-large\">{{\n tempFromDisplay\n }}</span>\n @if (tempFrom) {\n <img\n (click)=\"cancelDate('from')\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n }\n </div>\n </div>\n @if (time) {\n <cats-time-input\n [(ngModel)]=\"fromTimeInSeconds\"\n (timeChange)=\"onFromTimeChange($event)\"\n ></cats-time-input>\n }\n </div>\n <div\n class=\"dual-calendar-border-top\"\n [ngClass]=\"{ 'calendar-footer-wrapper': time, 'sp-t-12': time }\"\n [ngStyle]=\"{ width: mode === 'dual' ? '50%' : '100%' }\"\n >\n <div class=\"footer-row label-row\" [class.muted]=\"!tempTo\">\n <span class=\"footer-label body-large sp-x-12\">To</span>\n <div class=\"footer-value-wrapper sp-x-12\">\n <span class=\"footer-value body-large\">{{\n tempToDisplay\n }}</span>\n @if (tempTo) {\n <img\n (click)=\"cancelDate('to')\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n }\n </div>\n </div>\n @if (time) {\n <cats-time-input\n [(ngModel)]=\"toTimeInSeconds\"\n (timeChange)=\"onToTimeChange($event)\"\n ></cats-time-input>\n }\n </div>\n }\n </div>\n <!-- Action Buttons -->\n <div class=\"footer-actions\">\n <button\n class=\"btn-cancel footer-btn body-medium\"\n (click)=\"onCancel()\"\n type=\"button\"\n >\n Cancel\n </button>\n <button\n class=\"btn-apply footer-btn body-medium\"\n (click)=\"onApply()\"\n type=\"button\"\n [disabled]=\"!canApply\"\n >\n Apply\n </button>\n </div>\n }\n </div>\n }\n</div>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Renderer2,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[catsUiTooltip]',\n})\nexport class CatsUiTooltipDirective implements OnInit, OnDestroy {\n @Input('catsUiTooltip') tooltipText = '';\n @Input() tooltipClass?: string = '';\n\n private tooltipEl!: HTMLElement;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit(): void {\n this.showTooltip();\n }\n\n ngOnDestroy(): void {\n this.removeTooltip();\n }\n\n @HostListener('mouseenter')\n showTooltip() {\n this.createTooltip();\n this.positionTooltip();\n }\n\n @HostListener('mouseleave')\n hideTooltip() {\n this.removeTooltip();\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n adjustOnWindowChange() {\n if (this.tooltipEl) this.positionTooltip();\n }\n\n /**\n * @description Creates tooltip\n * @author Shiva Kant\n * @returns\n */\n private createTooltip() {\n if (this.tooltipEl) return;\n\n this.tooltipEl = this.renderer.createElement('div');\n this.tooltipEl.innerText = this.tooltipText;\n\n this.renderer.setStyle(this.tooltipEl, 'position', 'fixed');\n // this.renderer.setStyle(this.tooltipEl, 'padding', '6px 10px');\n // this.renderer.setStyle(this.tooltipEl, 'background', '#ffffff');\n // this.renderer.setStyle(this.tooltipEl, 'color', '#434a51');\n // this.renderer.setStyle(this.tooltipEl, 'borderRadius', '4px');\n // this.renderer.setStyle(this.tooltipEl, 'zIndex', '9999');\n // this.renderer.setStyle(this.tooltipEl, 'whiteSpace', 'nowrap');\n // Add a custom class if provided\n if (this.tooltipClass) {\n this.renderer.addClass(this.tooltipEl, this.tooltipClass);\n } else {\n // Optionally, you can add a default class here\n this.renderer.addClass(this.tooltipEl, 'default-tooltip-class');\n }\n\n document.body.appendChild(this.tooltipEl);\n }\n\n /**\n * @description Removes tooltip\n * @author Shiva Kant\n */\n private removeTooltip() {\n if (this.tooltipEl) {\n this.tooltipEl.remove();\n this.tooltipEl = null as any;\n }\n }\n\n /**\n * @description Positions tooltip\n * @author Shiva Kant\n */\n private positionTooltip() {\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\n\n const spacing = 8; // distance from host element\n\n const fitsAbove = hostRect.top >= tooltipRect.height + spacing;\n const fitsBelow =\n window.innerHeight - hostRect.bottom >= tooltipRect.height + spacing;\n const fitsLeft = hostRect.left >= tooltipRect.width + spacing;\n const fitsRight =\n window.innerWidth - hostRect.right >= tooltipRect.width + spacing;\n\n let top = 0;\n let left = 0;\n\n // Priority: bottom → top → right → left\n if (fitsBelow) {\n top = hostRect.bottom + spacing;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n } else if (fitsAbove) {\n top = hostRect.top - tooltipRect.height - spacing;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n } else if (fitsRight) {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.right + spacing;\n } else if (fitsLeft) {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.left - tooltipRect.width - spacing;\n } else {\n // fallback → bottom with clamped position\n top = hostRect.bottom + spacing;\n left = Math.min(\n Math.max(10, hostRect.left),\n window.innerWidth - tooltipRect.width - 10\n );\n }\n\n this.renderer.setStyle(this.tooltipEl, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipEl, 'left', `${left}px`);\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'cats-ui-accordion',\n imports: [],\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n})\nexport class AccordionComponent {\n openedIndex: number | null = null;\n\n /**\n * @description Toggles accordion component\n * @author Shiva Kant\n * @param index \n */\n toggle(index: number): void {\n this.openedIndex = this.openedIndex === index ? null : index;\n }\n\n /**\n * @description Determines whether open is\n * @author Shiva Kant\n * @param index \n * @returns true if open \n */\n isOpen(index: number): boolean {\n return this.openedIndex === index;\n }\n}\n","<div class=\"accordion\">\n <ng-content></ng-content> <!-- Will contain AccordionItem components -->\n</div>\n","import {\n Component,\n ContentChild,\n Inject,\n Input,\n TemplateRef,\n} from '@angular/core';\nimport { AccordionComponent } from '../accordion.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'cats-ui-accordion-item',\n imports: [CommonModule],\n templateUrl: './accordion-item.component.html',\n styleUrl: './accordion-item.component.scss',\n})\nexport class AccordionItemComponent {\n @Input() title: string = '';\n @Input() index: number = 0;\n\n // Change this to allow null instead of undefined\n @ContentChild(TemplateRef) contentTemplate: TemplateRef<any> | null = null;\n\n constructor(\n @Inject(AccordionComponent) private accordion: AccordionComponent\n ) {}\n\n /**\n * @description Determines whether open is\n * @author Shiva Kant\n * @returns true if open\n */\n isOpen(): boolean {\n return this.accordion.isOpen(this.index);\n }\n\n /**\n * @description Toggles accordion item component\n * @author Shiva Kant\n */\n toggle(): void {\n this.accordion.toggle(this.index);\n }\n\n /**\n * @description perform any initialization after content is injected\n * @author Shiva Kant\n */\n ngAfterContentInit(): void {\n if (!this.contentTemplate) {\n console.error(\n 'No content template provided for accordion item:',\n this.title\n );\n }\n }\n}\n","<div class=\"accordion-item\">\n <div class=\"accordion-header\" (click)=\"toggle()\">\n <div class=\"title\">{{ title }}</div>\n <img\n class=\"arrow_icon\"\n [src]=\"isOpen() ? 'images/chevron-up.svg' : 'images/chevron-down.svg'\"\n alt=\"\"\n />\n </div>\n\n <!-- <div class=\"accordion-body\" [class.open]=\"isOpen()\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </div> -->\n\n <div class=\"accordion-body\" [class.open]=\"isOpen()\">\n <div class=\"inner\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cats-ui-tab-content',\n imports: [],\n templateUrl: './tab-content.component.html',\n styleUrl: './tab-content.component.scss',\n})\nexport class TabContentComponent {\n @Input() active = false;\n @Input() tabId!: number;\n}\n"," @if (active) {\n\n <ng-container >\n <ng-content></ng-content>\n </ng-container>\n }","import {\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\nimport { TabContentComponent } from './tab-content/tab-content.component';\nimport { NgClass } from '@angular/common';\n\nexport interface TabConfig {\n type?: 'Default' | 'Stroke' | string;\n addTab?: boolean;\n closeTab?: boolean;\n homeTab?: boolean;\n}\nexport interface TabItem {\n id: number;\n title: string;\n leadingIcon?: string;\n tralingIocn?: string;\n count?: number | string;\n isDisable?: boolean;\n isHome?: boolean;\n}\n@Component({\n selector: 'cats-ui-tabset',\n imports: [NgClass],\n templateUrl: './tabset.component.html',\n styleUrl: './tabset.component.scss',\n})\nexport class TabsetComponent {\n @Input() tabs: TabItem[] = [];\n\n @Input() activeTab!: number | null;\n @Output() activeTabChange = new EventEmitter<number | null>();\n\n @Input() tabConfig: TabConfig = {};\n\n @Output() tabAdded = new EventEmitter<TabItem>();\n @Output() tabClosed = new EventEmitter<number>();\n\n @ContentChildren(TabContentComponent)\n contents!: QueryList<TabContentComponent>;\n\n counter = 1;\n\n ngAfterContentInit() {\n // if (this.tabs.length) {\n // // this.activeTab = this.tabs[0].id;\n // this.counter = this.tabs.length + 1;\n // this.updateContentActivation();\n // }\n if (this.tabs.length) {\n if (this.activeTab === null || this.activeTab === undefined) {\n this.activeTab = this.tabs[0].id;\n this.activeTabChange.emit(this.activeTab);\n }\n\n this.counter = this.tabs.length + 1;\n this.updateContentActivation();\n }\n }\n ngOnChanges(changes: SimpleChanges) {\n if (changes['tabs'] || changes['tabConfig']) {\n this.addHomeTabIfNeeded();\n\n // Set default active tab if not provided\n if (\n (this.activeTab === null || this.activeTab === undefined) &&\n this.tabs.length\n ) {\n this.activeTab = this.tabs[0].id;\n this.activeTabChange.emit(this.activeTab);\n }\n\n this.updateContentActivation();\n }\n\n if (changes['activeTab']) {\n this.updateContentActivation();\n }\n }\n addHomeTabIfNeeded() {\n if (!this.tabConfig?.homeTab) return;\n\n const alreadyExists = this.tabs?.some((t) => t.isHome);\n\n if (!alreadyExists) {\n const homeTab = {\n id: 0,\n title: '',\n closable: false,\n isHome: true,\n };\n\n this.tabs = [homeTab, ...(this.tabs || [])];\n }\n }\n setActive(id: number) {\n this.activeTab = id;\n this.activeTabChange.emit(id);\n this.updateContentActivation();\n }\n\n closeTab(event: Event, id: number, index: number) {\n event.stopPropagation();\n\n if (!this.tabConfig.closeTab) return;\n\n this.tabs.splice(index, 1);\n\n if (this.activeTab === id) {\n this.activeTab = this.tabs.length ? this.tabs[0].id : null;\n this.activeTabChange.emit(this.activeTab);\n }\n\n this.updateContentActivation();\n this.tabClosed.emit(id);\n }\n\n addTab(event: Event) {\n event.stopPropagation();\n\n if (!this.tabConfig.addTab) return;\n\n this.tabAdded.emit(); // \n }\n updateContentActivation() {\n if (!this.contents) return;\n\n this.contents.forEach((content) => {\n content.active = content.tabId === this.activeTab;\n });\n }\n}\n","<div\n class=\"cats_tab_container\"\n [ngClass]=\"{\n stroke_tab: tabConfig.type?.toLowerCase() === 'stroke',\n ipro_tab: tabConfig.type?.toLowerCase() === 'file',\n ipro_tab_large: tabConfig.type?.toLowerCase() === 'filelarge',\n }\"\n>\n <ul class=\"cats_tab_header\">\n @for (t of tabs; track t.id; let i = $index) {\n <li\n class=\"cats_tab_item sp-x-12\"\n [class.active]=\"t.id === activeTab\"\n [class.disabled]=\"t.isDisable\"\n (click)=\"setActive(t.id)\"\n >\n <!-- Home Icon -->\n @if (t.isHome) {\n <img src=\"images/home.svg\" class=\"cats_home_icon\" />\n }\n <!-- <ng-container ></ng-container> -->\n @else {\n <div class=\"cats_tab_item_container\">\n <!-- leadingIcon -->\n @if (t.leadingIcon) {\n <img [src]=\"t.leadingIcon\" class=\"cats_leading_icon\" />\n }\n\n <!-- Title -->\n <span class=\"cats_title\">{{ t.title }}</span>\n <!-- tralingIocn -->\n @if (t.tralingIocn) {\n <img [src]=\"t.tralingIocn\" class=\"cats_trailng_icon\" />\n }\n <!-- tab_count -->\n @if (t.count) {\n <span class=\"cats_tab_count\">{{ t.count }}</span>\n }\n </div>\n }\n <!-- Close (NOT for first tab) -->\n @if (tabConfig.closeTab && i !== 0) {\n <img\n class=\"cats_close_icon pointer\"\n (click)=\"closeTab($event, t.id, i)\"\n src=\"images/x.svg\"\n alt=\"\"\n />\n }\n </li>\n }\n\n <!-- Add Button -->\n @if (tabConfig.addTab) {\n <li class=\"add_more_tab cats_tab_item sp-x-12\" (click)=\"addTab($event)\">\n <img src=\"images/plus.svg\" alt=\"\" />\n </li>\n }\n </ul>\n <div class=\"cats_tab_content\">\n <ng-content></ng-content>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n Input,\n AfterViewInit,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[autoPosition]',\n})\nexport class AutoPositionDirective implements AfterViewInit {\n @Input() overlay!: HTMLElement;\n @Input() trigger!: HTMLElement; \n constructor(\n private el: ElementRef,\n private renderer: Renderer2,\n ) { }\n\n ngAfterViewInit() {\n setTimeout(() => this.setPosition(), 0);\n }\n\n setPosition() {\n if (!this.overlay || !this.trigger) return;\n\n const triggerRect = this.trigger.getBoundingClientRect();\n const overlayRect = this.overlay.getBoundingClientRect();\n\n const spaceRight = window.innerWidth - triggerRect.right;\n const spaceLeft = triggerRect.left;\n const spaceBottom = window.innerHeight - triggerRect.bottom;\n const spaceTop = triggerRect.top;\n\n let top = 0;\n let left = 0;\n\n // smarter: pick best space\n const positions = [\n { type: 'right', space: spaceRight },\n { type: 'left', space: spaceLeft },\n { type: 'bottom', space: spaceBottom },\n { type: 'top', space: spaceTop },\n ].sort((a, b) => b.space - a.space);\n\n switch (positions[0].type) {\n case 'right':\n left = triggerRect.right;\n top = triggerRect.top;\n break;\n case 'left':\n left = triggerRect.left - overlayRect.width;\n top = triggerRect.top;\n break;\n case 'bottom':\n left = triggerRect.left;\n top = triggerRect.bottom;\n break;\n case 'top':\n left = triggerRect.left;\n top = triggerRect.top - overlayRect.height;\n break;\n }\n\n Object.assign(this.overlay.style, {\n position: 'fixed',\n left: `${left}px`,\n top: `${top}px`,\n zIndex: '1000',\n });\n }\n}\n","\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n CustomDatePickerComponent,\n DatePickerConfig,\n DatePickerMode,\n} from '../custom-date-picker';\nimport { AutoPositionDirective } from '../../directives/auto-position.directive';\n\n/* ===================== MODELS ===================== */\n\nexport type FilterType =\n | 'live'\n | 'today'\n | 'week'\n | 'month'\n | 'fy'\n | 'last'\n | 'customRange'\n | 'customDate';\n\nexport interface TimeFilterOption {\n label: string;\n value: string;\n type?: 'radio' | 'input' | 'submenu';\n children?: TimeFilterOption[];\n default?: boolean;\n custom?: boolean;\n parentDateFormat?: 'dd MMM yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd';\n pickerMode?: DatePickerMode;\n time?: boolean;\n extraConfig?: Partial<DatePickerConfig>;\n}\n\nexport interface TimeFilterConfig {\n title?: string;\n showReset?: boolean;\n options: TimeFilterOption[];\n}\n\nexport interface TimeFilterOutput {\n type: FilterType;\n label?: string;\n startDate?: string;\n endDate?: string;\n value?: number;\n unit?: 'Hours' | 'Days';\n key?: string;\n dates?: any;\n}\nexport interface TimeFilterValue {\n type: string;\n dates?: any;\n lastValue?: number;\n lastUnit?: 'seconds' | 'minutes' | 'hours' | 'days';\n}\n\n/* ===================== COMPONENT ===================== */\n\n@Component({\n selector: 'cats-ui-timestamp-filter',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CustomDatePickerComponent,\n AutoPositionDirective,\n ],\n templateUrl: './timestamp-filter.component.html',\n styleUrl: './timestamp-filter.component.scss',\n})\nexport class TimestampFilterComponent implements OnInit {\n @Input({ required: true }) config!: TimeFilterConfig;\n @Output() selectionChange = new EventEmitter<TimeFilterOutput>();\n @Input() selectedValue: TimeFilterValue | null = null;\n\n // Internal radio binding\n radioValue: string | null = null;\n previousRadioValue: string | null = null;\n activePicker: TimeFilterOption | null = null;\n\n lastValue: number = 24;\n lastUnit: 'seconds' | 'minutes' | 'hours' | 'days' = 'hours';\n selectedDateLabels: Record<string, string> = {};\n dateControls: Record<string, FormControl> = {};\n\n /* ===================== GETTERS ===================== */\n\n get normalOptions(): TimeFilterOption[] {\n return this.config?.options?.filter((o) => !o.custom) || [];\n }\n\n get customOptions(): TimeFilterOption[] {\n return this.config?.options?.filter((o) => o.custom) || [];\n }\n\n /** Returns the FormControl for the currently active picker. */\n get activePickerControl(): FormControl | null {\n if (!this.activePicker) return null;\n return this.dateControls[this.activePicker.value] ?? null;\n }\n\n /* ===================== INIT ===================== */\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n \n this.customOptions\n .filter((o) => o.type === 'submenu')\n .forEach((opt) => {\n this.dateControls[opt.value] = new FormControl(null);\n });\n\n if (!this.config?.options?.length) return;\n\n if (this.selectedValue?.type) {\n this.applyPreset(this.selectedValue);\n } else {\n const defaultOption = this.config.options.find((o) => o.default);\n if (defaultOption) this.selectOption(defaultOption);\n }\n }\n\n /* ===================== PRESET RESTORE ===================== */\n\n private applyPreset(preset: TimeFilterValue): void {\n const option = this.config.options.find((o) => o.value === preset.type);\n if (!option) return;\n\n if (option.custom && option.type === 'submenu') {\n this.radioValue = option.value;\n\n const rawDates = preset.dates; // original raw picker payload\n\n if (rawDates != null) {\n this.dateControls[option.value]?.patchValue(rawDates, {\n emitEvent: false,\n });\n\n // Rebuild the display label from the raw payload\n this.selectedDateLabels[option.value] = this.buildDateLabel(\n rawDates,\n option,\n );\n }\n\n const isRange =\n option.pickerMode === 'range' || option.pickerMode === 'dual';\n\n const startDate = this.extractStartDate(rawDates, isRange);\n const endDate = this.extractEndDate(rawDates, isRange);\n\n this.emit({\n type: isRange ? 'customRange' : 'customDate',\n label: option.label,\n key: option.value,\n ...(startDate ? { startDate } : {}),\n ...(endDate ? { endDate } : {}),\n dates: rawDates,\n });\n } else if (option.value === 'last') {\n if (preset.lastValue != null) this.lastValue = preset.lastValue;\n if (preset.lastUnit) this.lastUnit = preset.lastUnit;\n this.selectOption(option);\n } else {\n this.selectOption(option);\n }\n }\n\n /* ===================== PICKER CONFIG ===================== */\n\n getPickerConfig(option: TimeFilterOption): DatePickerConfig {\n const mode: DatePickerMode = option.pickerMode || 'dual';\n\n const isTimeType =\n option.value.toLowerCase().includes('time') || !!option.time;\n\n return {\n mode,\n ...(isTimeType ? { time: true } : {}),\n ...(option.parentDateFormat\n ? { dateFormat: option.parentDateFormat }\n : {}),\n ...(option.extraConfig ?? {}),\n };\n }\n\n /* ===================== MAIN HANDLER ===================== */\n\n selectOption(option: TimeFilterOption): void {\n if (!option) return;\n\n if (option.custom && option.type === 'submenu') {\n this.previousRadioValue = this.radioValue;\n this.radioValue = option.value;\n this.activePicker = option;\n\n Object.keys(this.selectedDateLabels).forEach((key) => {\n if (key !== option.value) {\n delete this.selectedDateLabels[key];\n this.dateControls[key]?.reset(null, { emitEvent: false });\n }\n });\n\n return; // NO emit here — wait for onDateApplied\n }\n\n this.previousRadioValue = this.radioValue;\n this.radioValue = option.value;\n this.activePicker = null;\n\n const defaultDate = new Date();\n let start: Date | undefined;\n const end: Date = defaultDate;\n\n const formatDate = (date: Date): string => {\n const format = option.parentDateFormat;\n if (!format) return date.toISOString();\n\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n\n switch (format) {\n case 'dd MMM yyyy': {\n const monthNames = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n return `${day} ${monthNames[date.getMonth()]} ${year}`;\n }\n case 'MM/dd/yyyy':\n return `${month}/${day}/${year}`;\n case 'yyyy-MM-dd':\n return `${year}-${month}-${day}`;\n default:\n return date.toISOString();\n }\n };\n\n switch (option.value) {\n case 'live':\n return this.emit({ type: 'live', label: option.label, key: 'live' });\n\n case 'today':\n start = this.startOfDay(defaultDate);\n break;\n\n case 'week':\n start = this.startOfWeek(defaultDate);\n break;\n\n case 'month':\n start = new Date(defaultDate.getFullYear(), defaultDate.getMonth(), 1);\n break;\n\n case 'fy':\n start = this.startOfFinancialYear(defaultDate);\n break;\n\n case '24h':\n start = this.subtractTime(defaultDate, 24, 'hours');\n break;\n\n case '7d':\n start = this.subtractTime(defaultDate, 7, 'days');\n break;\n\n case '30d':\n start = this.subtractTime(defaultDate, 30, 'days');\n break;\n\n case 'last':\n if (this.lastValue && this.lastUnit) {\n return this.emitLast();\n }\n return;\n\n default:\n return this.emit({\n type: option.value as FilterType,\n label: option.label,\n key: option.value,\n });\n }\n\n this.emit({\n type: option.value as FilterType,\n label: option.label,\n startDate: start ? formatDate(start) : undefined,\n endDate: formatDate(end),\n key: option.value,\n });\n }\n\n /* ===================== DATE PICKER EVENTS ===================== */\n\n onDateApplied(event: any): void {\n if (!this.activePicker) return;\n\n const option = this.activePicker;\n this.radioValue = option.value;\n const ctrl = this.dateControls[option.value];\n if (ctrl) {\n ctrl.patchValue(event, { emitEvent: false });\n }\n this.selectedDateLabels[option.value] = this.buildDateLabel(event, option);\n\n const isRange =\n option.pickerMode === 'range' || option.pickerMode === 'dual';\n\n const startDate = this.extractStartDate(event, isRange);\n const endDate = this.extractEndDate(event, isRange);\n\n this.emit({\n type: isRange ? 'customRange' : 'customDate',\n label: option.label,\n key: option.value,\n ...(startDate ? { startDate } : {}),\n ...(endDate ? { endDate } : {}),\n dates: event, \n });\n\n this.activePicker = null;\n this.cdr.markForCheck();\n }\n\n /**\n * Cancel: restore radio to whatever was selected before picker opened.\n */\n onCancel(_event: any): void {\n this.radioValue = this.previousRadioValue;\n this.activePicker = null;\n this.cdr.markForCheck();\n }\n\n /* ===================== LAST X ===================== */\n\n emitLast(): void {\n const unitMap: Record<string, 'Hours' | 'Days'> = {\n seconds: 'Hours',\n minutes: 'Hours',\n hours: 'Hours',\n days: 'Days',\n };\n this.emit({\n type: 'last',\n label: `Last ${this.lastValue} ${this.lastUnit}`,\n value: this.lastValue,\n unit: unitMap[this.lastUnit],\n key: 'last',\n });\n }\n\n onLastChange(): void {\n if (this.radioValue === 'last') {\n this.emitLast();\n }\n }\n\n /* ===================== RESET ===================== */\n\n reset(): void {\n this.selectedDateLabels = {};\n Object.values(this.dateControls).forEach((ctrl) =>\n ctrl.reset(null, { emitEvent: false }),\n );\n\n const defaultOption = this.config.options.find((o) => o.default);\n if (defaultOption) {\n this.selectOption(defaultOption);\n }\n }\n\n /* ===================== PRIVATE HELPERS ===================== */\n\n private extractStartDate(event: any, isRange: boolean): string | undefined {\n if (!event) return undefined;\n\n if (isRange) {\n // range / datetimerange → { from, to, fromTime?, toTime? }\n if (!event.from) return undefined;\n return event.fromTime ? `${event.from} ${event.fromTime}` : event.from;\n }\n\n // single date → plain string\n if (typeof event === 'string') return event;\n\n // datetime → { date, time, meridiem }\n if (event.date) {\n return event.time ? `${event.date} ${event.time}` : event.date;\n }\n\n return undefined;\n }\n\n private extractEndDate(event: any, isRange: boolean): string | undefined {\n if (!event || !isRange) return undefined;\n\n if (!event.to) return undefined;\n return event.toTime ? `${event.to} ${event.toTime}` : event.to;\n }\n\n private buildDateLabel(event: any, option: TimeFilterOption): string {\n if (!event) return option.label;\n\n // range / datetimerange → { from, to, fromTime?, toTime? }\n if (event?.from != null || event?.to != null) {\n const from = event.fromTime\n ? `${event.from} ${event.fromTime}`\n : event.from;\n const to = event.toTime ? `${event.to} ${event.toTime}` : event.to;\n return from && to ? `${from} – ${to}` : (from ?? to ?? option.label);\n }\n\n // datetime → { date, time, meridiem }\n if (event?.date && event?.time) {\n return `${event.date} ${event.time}`;\n }\n if (event?.date) return event.date;\n\n // plain string (single date)\n if (typeof event === 'string') return event;\n\n // legacy fallback\n if (event?.startDate && event?.endDate)\n return `${event.startDate} – ${event.endDate}`;\n if (event?.startDate) return event.startDate;\n\n return option.label;\n }\n\n private emit(payload: TimeFilterOutput): void {\n this.selectionChange.emit(payload);\n }\n\n private startOfDay(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n private startOfWeek(date: Date): Date {\n const d = new Date(date);\n const day = d.getDay();\n const diff = day === 0 ? 6 : day - 1; // Monday start\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n private startOfFinancialYear(date: Date): Date {\n const year =\n date.getMonth() >= 3 ? date.getFullYear() : date.getFullYear() - 1;\n return new Date(year, 3, 1); // April 1\n }\n\n private subtractTime(date: Date, value: number, unit: string): Date {\n const newDate = new Date(date);\n switch (unit) {\n case 'seconds':\n newDate.setSeconds(newDate.getSeconds() - value);\n break;\n case 'minutes':\n newDate.setMinutes(newDate.getMinutes() - value);\n break;\n case 'hours':\n newDate.setHours(newDate.getHours() - value);\n break;\n case 'days':\n newDate.setDate(newDate.getDate() - value);\n break;\n }\n return newDate;\n }\n}","<div class=\"filter-card\" autoAdjust>\n <div class=\"header\">\n <span class=\"title\">{{ config.title || \"Timestamp Filter\" }}</span>\n\n @if (config.showReset) {\n <span class=\"reset\" (click)=\"reset()\">Reset to Default</span>\n }\n </div>\n\n <div class=\"options\">\n\n <!-- NORMAL OPTIONS -->\n <div class=\"normal\">\n @for (option of normalOptions; track $index) {\n <div class=\"option\" (click)=\"selectOption(option)\">\n <label class=\"label\">\n <input\n type=\"radio\"\n [value]=\"option.value\"\n [(ngModel)]=\"radioValue\"\n />\n <span class=\"label-text\">{{ option.label }}</span>\n </label>\n </div>\n }\n </div>\n\n <!-- CUSTOM SECTION HEADER -->\n <div class=\"custom-wrapper\">\n <div class=\"custom-header\">\n <span class=\"custom-title\">Custom</span>\n </div>\n </div>\n\n <!-- CUSTOM OPTIONS -->\n <div class=\"customs\" #trigger>\n @for (custom of customOptions; track custom.value) {\n <div\n class=\"custom\"\n (click)=\"selectOption(custom)\"\n >\n <label class=\"label\">\n <input\n type=\"radio\"\n [value]=\"custom.value\"\n [(ngModel)]=\"radioValue\"\n />\n <span class=\"label-text\">{{ custom.label }}</span>\n </label>\n\n <!-- INPUT BELOW OPTION (type: 'input') -->\n @if (custom.type === 'input') {\n <div class=\"last-input\">\n <input\n type=\"number\"\n [(ngModel)]=\"lastValue\"\n (change)=\"onLastChange()\"\n />\n <select [(ngModel)]=\"lastUnit\" (change)=\"onLastChange()\">\n <option value=\"hours\">Hours</option>\n <option value=\"minutes\">Minutes</option>\n <option value=\"seconds\">Seconds</option>\n </select>\n </div>\n }\n\n <!-- SUBMENU ARROW + APPLIED DATE LABEL (type: 'submenu') -->\n @if (custom.type === 'submenu') {\n <span class=\"arrow\">\n <img src=\"/images/chevron-right.svg\" alt=\"\" />\n </span>\n\n <!-- @if (selectedDateLabels[custom.value]) {\n <div class=\"applied-date-label\">\n <span class=\"applied-date-text\">\n {{ selectedDateLabels[custom.value] }}\n </span>\n </div>\n } -->\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n<!-- DATE PICKER OVERLAY -->\n\n@if (activePicker) {\n <div\n class=\"picker-overlay\"\n autoPosition\n [overlay]=\"pickerRef\"\n [trigger]=\"trigger\"\n >\n <div class=\"picker-container\" #pickerRef (click)=\"$event.stopPropagation()\">\n \n @if (activePickerControl) {\n <cats-ui-custom-date-picker\n [formControl]=\"activePickerControl\"\n [config]=\"getPickerConfig(activePicker)\"\n (applied)=\"onDateApplied($event)\"\n (cancelled)=\"onCancel($event)\"\n [showTrigger]=\"false\"\n ></cats-ui-custom-date-picker>\n } @else {\n <cats-ui-custom-date-picker\n [config]=\"getPickerConfig(activePicker)\"\n (applied)=\"onDateApplied($event)\"\n (cancelled)=\"onCancel($event)\"\n [showTrigger]=\"false\"\n ></cats-ui-custom-date-picker>\n }\n </div>\n </div>\n}","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[wizardStep]',\n})\nexport class WizardStepDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class WizardService {\n // Map of wizardId -> WizardInstance\n private wizards = signal<Record<string, any>>({});\n activeStep = signal<any>({});\n stepConfig = signal<any>({});\n // ─── Open ───────────────────────────────────────────\n open(wizardId: string, config: any) {\n document.body.style.overflow = 'hidden';\n this.wizards.update((all) => ({\n ...all,\n [wizardId]: {\n config,\n currentStepIndex: 0,\n isOpen: true,\n },\n }));\n }\n\n // ─── Close ──────────────────────────────────────────\n close(wizardId: string) {\n this.wizards.update((all) => {\n const updated = { ...all };\n delete updated[wizardId];\n return updated;\n });\n\n this.stepConfig.update((config: any) => {\n delete config[wizardId];\n return config;\n });\n\n this.activeStep.update((obj: any) => {\n delete obj[wizardId];\n return obj;\n });\n document.body.style.overflow = 'auto';\n }\n nextStep(wizardId: string): void {\n let step = this.activeStep()?.[wizardId];\n this.stepConfig.update((config: any) => {\n let stepConfig = config?.[wizardId];\n if (step < stepConfig?.length) {\n stepConfig[step - 1].state = 'done';\n stepConfig[step].state = 'active';\n step++;\n return config;\n } else {\n stepConfig[stepConfig?.length - 1].state = 'active';\n step = stepConfig?.length;\n return config;\n }\n });\n this.activeStep.update((obj: any) => {\n obj[wizardId] = step;\n return obj;\n });\n }\n\n previousStep(wizardId: string): void {\n let step = this.activeStep()?.[wizardId];\n this.stepConfig.update((config: any) => {\n let stepConfig = config?.[wizardId];\n if (step > 1) {\n stepConfig[step - 1].state = 'normal';\n stepConfig[step - 2].state = 'active';\n step--;\n return config;\n }\n stepConfig[0].state = 'active';\n step = 1;\n return config;\n });\n this.activeStep.update((obj: any) => {\n obj[wizardId] = step;\n return obj;\n });\n }\n\n gotoStep(step: number, wizardId: string): void {\n this.stepConfig.update((config) => {\n let stepConfig = config?.[wizardId];\n\n if (step > 0 && step <= stepConfig?.length) {\n stepConfig = stepConfig.map((stepData: any, index: number) => {\n if (index < step - 1) {\n return { ...stepData, state: 'done' };\n } else if (index == step - 1) {\n return { ...stepData, state: 'active' };\n }\n return stepData;\n });\n config[wizardId] = stepConfig;\n this.activeStep.update((obj: any) => {\n obj[wizardId] = step;\n return obj;\n });\n }\n return config;\n });\n }\n // ─── Getters ─────────────────────────────────────────\n isOpen(wizardId: string) {\n return computed(() => this.wizards()[wizardId]?.isOpen ?? false);\n }\n\n getConfig(wizardId: string) {\n return computed(() => this.wizards()[wizardId]?.config ?? null);\n }\n\n getCurrentStepIndex(wizardId: string) {\n return computed(() => this.wizards()[wizardId]?.currentStepIndex ?? 0);\n }\n\n getCurrentStep(wizardId: string) {\n return computed(() => {\n const w = this.wizards()[wizardId];\n if (!w) return null;\n return w.config.steps[w.currentStepIndex];\n });\n }\n\n getProgress(wizardId: string) {\n return computed(() => {\n const w = this.wizards()[wizardId];\n if (!w) return 0;\n return ((w.currentStepIndex + 1) / w.config.steps.length) * 100;\n });\n }\n}\n","import {\n Component,\n ContentChildren,\n effect,\n EventEmitter,\n HostListener,\n Input,\n Output,\n QueryList,\n} from '@angular/core';\nimport { WizardService } from './wizard.service';\nimport { WizardStepDirective } from './wizard.directive';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'cats-ui-wizard',\n imports: [CommonModule],\n templateUrl: './wizard.component.html',\n styleUrl: './wizard.component.scss',\n})\nexport class WizardComponent {\n @Input() wizardId!: string;\n @Input() title: string = 'Wizard';\n @Output() closed = new EventEmitter<void>();\n @ContentChildren(WizardStepDirective)\n stepTemplates!: QueryList<WizardStepDirective>;\n @Input() showProgressBar: boolean = true;\n @Input() showStepBadge: boolean = true;\n expandable: boolean = true;\n\n isExpanded = false;\n\n steps: any = {};\n activeStep: any = {};\n\n templates: WizardStepDirective[] = [];\n\n constructor(private commonService: WizardService) {\n effect(() => {\n this.steps = this.commonService.stepConfig();\n this.activeStep = this.commonService.activeStep();\n });\n }\n\n ngAfterContentInit(): void {\n this.templates = this.stepTemplates.toArray();\n\n // React if templates change dynamically\n this.stepTemplates.changes.subscribe(() => {\n this.templates = this.stepTemplates.toArray();\n });\n }\n toggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n @HostListener('document:keydown.escape')\n onEscPressed() {\n if (this.isExpanded) {\n this.isExpanded = false;\n }\n }\n get currentStepIndex(): number {\n return (this.activeStep?.[this.wizardId] ?? 1) - 1;\n }\n\n get wizardSteps(): any[] {\n return this.steps?.[this.wizardId] ?? [];\n }\n\n get currentTemplate() {\n return this.templates[this.currentStepIndex]?.templateRef ?? null;\n }\n\n get currentStepLabel(): string {\n return this.wizardSteps[this.currentStepIndex]?.title ?? '';\n }\n\n get currentStepNumber(): number {\n return this.activeStep?.[this.wizardId] ?? 1;\n }\n\n goToStep(step: number) {\n this.commonService.gotoStep(step, this.wizardId);\n }\n closeModal(): void {\n this.closed.emit();\n }\n}\n","<div class=\"cats-modal-overlay\">\n <!-- Stop closing when clicking inside modal -->\n <div class=\"cats-modal\" [class.expanded]=\"isExpanded\">\n <!-- PROGRESS BAR (TOP STRIP) -->\n @if (showProgressBar) {\n <div class=\"cats-modal-progress-bar\">\n @for (step of wizardSteps; track $index) {\n <div\n class=\"cats-progress-step\"\n [class.progres-done]=\"step.state === 'done'\"\n [class.progress-active]=\"step.state === 'active'\"\n ></div>\n }\n </div>\n }\n <!-- Title -->\n\n <!-- HEADER -->\n <div class=\"cats-modal-header\">\n <div class=\"cats-header-left\">\n <span class=\"cats-title textTruncate\">{{ title }}</span>\n @if (showStepBadge && currentStepNumber) {\n <span class=\"cats-step textTruncate\">\n Step {{ currentStepNumber }}: {{ currentStepLabel }}\n </span>\n }\n </div>\n\n <div class=\"cats-header-right\">\n @if (expandable) {\n <img\n class=\"cats-icon-btn\"\n (click)=\"toggleExpand()\"\n [src]=\"\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\n \"\n alt=\"\"\n />\n }\n <img\n class=\"cats-icon-btn\"\n (click)=\"closeModal()\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"\"\n />\n </div>\n </div>\n\n <!-- BODY -->\n <div class=\"cats-modal-body\" [class.collapsed]=\"!isExpanded && expandable\">\n @if (currentTemplate) {\n <ng-container *ngTemplateOutlet=\"currentTemplate\"></ng-container>\n }\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n forwardRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\n\n@Component({\n selector: 'cats-ui-file-upload',\n standalone: true,\n imports: [ReactiveFormsModule],\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploadComponent),\n multi: true,\n },\n ],\n})\nexport class FileUploadComponent implements ControlValueAccessor {\n // ─── Config Inputs ───────────────────────────────────────────────────────────\n @Input() placeholder: string = 'Drop files here';\n @Input() errorMessage: string = '';\n @Input() disabled: boolean = false;\n @Input() multiple: boolean = false;\n\n /** Button position: 'left' (prefix) | 'right' (suffix) */\n @Input() buttonPosition: 'left' | 'right' = 'left';\n\n @Input() maxSize: number | null = null;\n @Input() minSize: number | null = null;\n @Input() helperText: string = '';\n @Output() onfileChange = new EventEmitter<any>();\n @Output() onfileRemove = new EventEmitter<any>();\n\n /**\n * Accepted MIME types or extensions, comma-separated.\n * e.g. 'image/png,image/jpeg' or '.png,.jpg,.pdf'\n * Passed directly to the hidden <input accept=\"...\"> attribute.\n * Also used for runtime validation.\n * null = accept all\n */\n @Input() accept: string | null = null;\n\n // ─── Internal State ──────────────────────────────────────────────────────────\n value: File[] = [];\n isFocused = false;\n validationError: string = '';\n control!: FormControl<any> | null;\n\n // ─── ControlValueAccessor hooks ──────────────────────────────────────────────\n onChange: (value: File[]) => void = () => {};\n onTouched: () => void = () => {};\n\n writeValue(files: File[] | null | undefined): void {\n this.value = Array.isArray(files) ? files : [];\n }\n\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n validate(control: FormControl): any {\n this.control = control;\n }\n // ─── Validation ──────────────────────────────────────────────────────────────\n\n /**\n * Validates a single file against minSize, maxSize, and accept rules.\n * Returns an error string, or empty string if valid.\n */\n private validateFile(file: File): string {\n if (this.minSize !== null && file.size < this.minSize) {\n return `\"${file.name}\" is too small (min: ${this.formatBytes(this.minSize)}).`;\n }\n\n if (this.maxSize !== null && file.size > this.maxSize) {\n return `\"${file.name}\" exceeds max size (max: ${this.formatBytes(this.maxSize)}).`;\n }\n\n if (this.accept) {\n const accepted = this.accept\n .split(',')\n .map((t) => t.trim().toLowerCase());\n const fileExt = '.' + file.name.split('.').pop()!.toLowerCase();\n const fileMime = file.type.toLowerCase();\n\n const isAllowed = accepted.some((token) => {\n if (token.startsWith('.')) return token === fileExt; // extension match\n if (token.endsWith('/*'))\n return fileMime.startsWith(token.slice(0, -1)); // wildcard MIME e.g. image/*\n return token === fileMime; // exact MIME match\n });\n\n if (!isAllowed) {\n return `\"${file.name}\" has an unsupported file type.`;\n }\n }\n\n return '';\n }\n\n /** Validates a batch; sets validationError and returns only valid files. */\n private processFiles(files: File[]): File[] {\n this.validationError = '';\n\n const valid: File[] = [];\n for (const file of files) {\n const err = this.validateFile(file);\n if (err) {\n this.validationError = err; // show the first error (or accumulate if preferred)\n break;\n }\n valid.push(file);\n }\n\n return valid;\n }\n\n // ─── File Select (via button click) ──────────────────────────────────────────\n onFileSelect(event: Event, input: HTMLInputElement): void {\n if (this.disabled) return;\n\n const target = event.target as HTMLInputElement;\n const raw = Array.from(target.files ?? []);\n const files = this.multiple ? raw : raw.slice(0, 1);\n\n const valid = this.processFiles(files);\n if (valid.length) {\n this.value = valid;\n this.onChange(this.value);\n }\n this.onfileChange.emit(this.value);\n this.onTouched();\n\n input.value = '';\n this.isFocused = false;\n }\n\n // ─── Drag & Drop ─────────────────────────────────────────────────────────────\n onDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.disabled) return;\n\n const raw = Array.from(event.dataTransfer?.files ?? []);\n const files = this.multiple ? raw : [raw[0]].filter(Boolean);\n\n const valid = this.processFiles(files);\n if (valid.length) {\n this.value = valid;\n this.onChange(this.value);\n }\n this.onfileChange.emit(this.value);\n this.onTouched();\n this.isFocused = false;\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n }\n\n // ─── Remove File ─────────────────────────────────────────────────────────────\n removeFile(index: number, input?: HTMLInputElement): void {\n this.value = this.value.filter((_, i) => i !== index);\n this.validationError = '';\n this.onChange(this.value);\n this.onfileRemove.emit(this.value);\n if (input) input.value = '';\n }\n\n // ─── Helpers ─────────────────────────────────────────────────────────────────\n\n /** Human-readable byte string: 1024 → \"1 KB\", 5242880 → \"5 MB\" */\n formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\n return `${(bytes / 1024 ** 3).toFixed(1)} GB`;\n }\n\n /**\n * Builds a human-readable hint string from the current constraints.\n * e.g. \"PNG, JPG • Max 5 MB • Min 10 KB\"\n */\n // get helperText(): string {\n // const parts: string[] = [];\n\n // if (this.accept) {\n // const labels = this.accept\n // .split(',')\n // .map((t) =>\n // t.trim().replace('image/', '').replace('.', '').toUpperCase(),\n // )\n // .join(', ');\n // parts.push(labels);\n // }\n\n // if (this.maxSize !== null)\n // parts.push(`Max ${this.formatBytes(this.maxSize)}`);\n // if (this.minSize !== null)\n // parts.push(`Min ${this.formatBytes(this.minSize)}`);\n\n // return parts.join(' • ');\n // }\n\n // ─── Computed Getters ────────────────────────────────────────────────────────\n get isFilled(): boolean {\n return this.value?.length > 0;\n }\n\n /** Combines external errorMessage prop with internal validation errors. */\n get displayError(): string {\n return this.validationError || this.errorMessage;\n }\n\n get hasError(): boolean {\n return !!this.displayError;\n }\n}\n","<div class=\"file-wrapper\">\n <div\n class=\"file-upload-box\"\n (focus)=\"isFocused = true\"\n [class.focused]=\"isFocused\"\n [class.error]=\"hasError\"\n [class.disabled]=\"disabled\"\n [class.filled]=\"isFilled\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n >\n <!-- PREFIX BUTTON -->\n @if (buttonPosition === \"left\") {\n <button\n type=\"button\"\n class=\"file-btn\"\n (click)=\"fileInput.click(); isFocused = true\"\n [disabled]=\"disabled\"\n >\n Choose File\n </button>\n }\n\n <!-- CONTENT -->\n <div class=\"file-content\">\n @if (!isFilled) {\n <span class=\"file-placeholder\">{{ placeholder }}</span>\n }\n\n @if (isFilled) {\n <div class=\"file-list\">\n @for (file of value; track $index; let i = $index) {\n <span class=\"file-chip\">\n {{ file.name }}\n <img\n class=\"remove-file\"\n src=\"images/x.svg\"\n alt=\"Remove file\"\n (click)=\"removeFile(i, fileInput)\"\n />\n </span>\n }\n </div>\n }\n </div>\n\n <!-- SUFFIX BUTTON -->\n @if (buttonPosition === \"right\") {\n <button\n type=\"button\"\n class=\"file-btn\"\n (click)=\"fileInput.click(); isFocused = true\"\n [disabled]=\"disabled\"\n >\n Choose File\n </button>\n }\n\n <!-- Hidden Input — accept wired dynamically -->\n <input\n #fileInput\n type=\"file\"\n [attr.accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onFileSelect($event, fileInput)\"\n (cancel)=\"isFocused = false\"\n hidden\n />\n </div>\n\n <!-- CONSTRAINT HINT (shown when not filled and constraints exist) -->\n @if (helperText && !hasError) {\n <div class=\"file-hint-text\">{{ helperText }}</div>\n }\n\n <!-- ERROR (validation or external) -->\n @if (hasError && !disabled) {\n <div class=\"file-error-text\">\n <img src=\"images/error-info.svg\" alt=\"\" />{{ displayError }}\n </div>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nexport interface HeaderConfig {\n brandLogo: string;\n productLogo: string;\n showDropdown?: boolean;\n showGlobalIcon?: boolean;\n showAiAgent?: boolean;\n}\n\n@Component({\n selector: 'cats-ui-header',\n imports: [],\n templateUrl: './header.component.html',\n styleUrl: './header.component.scss',\n})\nexport class HeaderComponent {\n @Input() headerConfig!: HeaderConfig;\n @Input() dropdownItems: any[] = [];\n @Output() onDropdownSelection = new EventEmitter<any>();\n profileOpen = false;\n dropdownOpen = false;\n\n selectedItem: any;\n\n ngOnInit() {\n if (this.dropdownItems.length) {\n this.selectedItem = this.dropdownItems[0];\n }\n }\n\n onSelect(item: any) {\n this.selectedItem = item;\n this.dropdownOpen = false;\n this.onDropdownSelection.emit(this.selectedItem);\n }\n\n toggleMenu() {\n this.profileOpen = !this.profileOpen;\n }\n\n toggleDropdown() {\n this.dropdownOpen = !this.dropdownOpen;\n }\n\n closeMenu() {\n this.profileOpen = false;\n }\n}\n","<header class=\"app-header\">\n <!-- Left Section -->\n <div class=\"header-left\">\n <!-- <button class=\"app-launcher\" aria-label=\"App Launcher\">\n <span class=\"grid-icon\"></span>\n </button> -->\n <img src=\"images/Waffle.svg\" alt=\"\" />\n <img [src]=\"headerConfig.brandLogo\" alt=\"Brand Logo\" class=\"brand-logo\" />\n\n <img\n [src]=\"headerConfig.productLogo\"\n alt=\"Product Logo\"\n class=\"product-logo\"\n />\n </div>\n\n <!-- Right Section -->\n <div class=\"header-right\">\n @if (headerConfig.showGlobalIcon) {\n <img src=\"images/global-logo.svg\" alt=\"\" />\n }\n\n <img src=\"images/nodification.svg\" alt=\"\" class=\"icon-btn notification\" />\n @if (headerConfig.showDropdown && dropdownItems.length) {\n <div class=\"dropdown control-panel\">\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown()\">\n <span>{{ selectedItem.label }}</span>\n <span>\n <img src=\"images/chevron-down-white.svg\" alt=\"\" />\n </span>\n </div>\n @if (dropdownOpen) {\n <div class=\"dropdown-panel\">\n <ul>\n @for (item of dropdownItems; track item) {\n <li (click)=\"onSelect(item)\">{{ item.label }}</li>\n }\n </ul>\n </div>\n }\n </div>\n }\n @if (headerConfig.showAiAgent) {\n <div class=\"ai-agent\">\n <img src=\"images/star-yellow.svg\" alt=\"\" />\n <span class=\"ai-agent-btn\"> AI Agent</span>\n </div>\n }\n <div class=\"profile\">\n <div class=\"profile-wrapper\" (click)=\"toggleMenu()\">\n <img src=\"images/user-image.svg\" alt=\"User\" />\n <div class=\"profile-info\">\n <span class=\"name textTruncate\">Maximillian Thomas Broadwater</span>\n <span class=\"role textTruncate\">Super Admin User</span>\n </div>\n </div>\n\n @if (profileOpen) {\n <div class=\"loggedin-profile-list\">\n <!-- profile start -->\n\n <div class=\"profile-box\">\n <div class=\"for-edit-icon\">\n <img src=\"images/user-image.svg\" class=\"profile-img\" />\n <img src=\"images/edit.svg\" alt=\"edit\" class=\"on-hover\" />\n </div>\n\n <div>\n <div class=\"profile-heading textTruncate\">John Doe</div>\n <div class=\"profile-txt textTruncate\">Admin</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"switch-box\">\n <div class=\"switch-role\">\n <img src=\"images/users-01.svg\" class=\"edit-img\" />\n <div class=\"switch-txt\">Switch Role</div>\n\n <!-- drop down -->\n <div class=\"switching-role-dropdown\">\n <div class=\"text-title\">Switch Role</div>\n\n <div class=\"item-list active\">\n <input\n class=\"radio-input\"\n checked\n type=\"radio\"\n name=\"tracking\"\n />\n <span class=\"text\">Admin</span>\n </div>\n\n <div class=\"item-list\">\n <input class=\"radio-input\" type=\"radio\" name=\"tracking\" />\n <span class=\"text\">User</span>\n </div>\n </div>\n </div>\n\n <div class=\"right-side-arrow\">\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\n </div>\n </div>\n\n <div class=\"switch-box\">\n <div class=\"switch-role\">\n <img src=\"images/building-07.svg\" class=\"edit-img\" />\n <div class=\"switch-txt\">Switch Environment</div>\n </div>\n\n <div class=\"right-side-arrow\">\n <img src=\"images/chevron-right-blue.svg\" alt=\"chevron-right\" />\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">Identity & Access</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img class=\"fix-img-size\" src=\"images/user.svg\" alt=\"user\" />\n <div class=\"txt-align\">My Profile</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/key-01.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Change Password</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">Account & Preferences</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/shield.svg\" alt=\"bell\" />\n <div class=\"txt-align\">Account & Security</div>\n </div>\n </div>\n\n <div class=\"txt-box preference-dropdown-txt\">\n <div class=\"fix-space\">\n <img src=\"images/settings-04.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Preference</div>\n\n <!-- dropdown -->\n <div class=\"preference-section\">\n <div class=\"preference-dropdown\">\n <!-- Language -->\n <div class=\"language-dropdown\">\n <div class=\"preference-dropdown-item\">\n <div class=\"text\">Languages</div>\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\n </div>\n\n <div class=\"language-section-wrapper\">\n <div class=\"language-heading\">\n <span>Change Language</span>\n </div>\n <div class=\"input-search-wrapper\">\n <div class=\"input-search\">\n <img src=\"images/search.svg\" alt=\"\" />\n <input type=\"text\" placeholder=\"Enter or Search\" />\n </div>\n </div>\n <div class=\"language-section\">\n <div class=\"language-item\">\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\n <span>English</span>\n </div>\n <div class=\"language-item\">\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\n <span>English</span>\n </div>\n <div class=\"language-item\">\n <img src=\"images/spanish-flag.svg\" alt=\"\" />\n <span>English</span>\n </div>\n </div>\n\n <div class=\"language-footer\">\n <button class=\"reset\">Reset</button>\n <button class=\"apply\">Apply</button>\n </div>\n </div>\n </div>\n\n <!-- Timezone -->\n <div class=\"timezone-dropdown\">\n <div class=\"preference-dropdown-item\">\n <div class=\"text\">Timezone</div>\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\n </div>\n\n <div class=\"timezone-section-wrapper\">\n <div class=\"timezone-heading\">\n <span>Change Timezone</span>\n </div>\n <div class=\"input-search-wrapper\">\n <div class=\"input-search\">\n <img src=\"images/search.svg\" alt=\"\" />\n <input type=\"text\" placeholder=\"Enter or Search\" />\n </div>\n </div>\n <div class=\"timezone-section\">\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" />\n <span class=\"bold-text\">\n Nouakchott\n <span class=\"light-text\">(GMT+00:00)</span>\n </span>\n </div>\n\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" />\n <span class=\"bold-text\">\n Beirut <span class=\"light-text\">(GMT+02:00)</span>\n </span>\n </div>\n\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" />\n <span class=\"bold-text\">\n Kuwait, Riyadh\n <span class=\"light-text\">(GMT+03:00)</span>\n </span>\n </div>\n\n <div class=\"timezone-dropdown-item\">\n <input type=\"radio\" name=\"timezone\" checked />\n <span class=\"bold-text\">\n Kolkata, India\n <span class=\"light-text\">(GMT+05:30)</span>\n </span>\n </div>\n </div>\n\n <div class=\"timezone-footer\">\n <button class=\"reset\">Reset</button>\n <button class=\"apply\">Apply</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <img src=\"images/chevron-right.svg\" alt=\"chevron-right\" />\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/bell.svg\" alt=\"bell\" />\n <div class=\"txt-align\">Notification Settings</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">Help & Support</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/file-check-02.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Knowledge Base</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/help-circle.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Help/Support Center</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/info.svg\" alt=\"info\" />\n <div class=\"txt-align\">Report Issue</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/message-smile-square.svg\" class=\"fix-img-size\" />\n <div class=\"txt-align\">Feedback</div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"preference-txt\">System</div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/settings.svg\" alt=\"settings\" />\n <div class=\"txt-align\">Settings</div>\n </div>\n </div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/clock-refresh.svg\" alt=\"info\" />\n <div class=\"txt-align\">\n About <span class=\"light-grey\">(Version 2.14.3)</span>\n </div>\n </div>\n </div>\n\n <div class=\"for-border\"></div>\n\n <div class=\"txt-box\">\n <div class=\"fix-space\">\n <img src=\"images/log-out-04.svg\" alt=\"log-out\" class=\"red\" />\n <div class=\"txt-align red\">Sign Out</div>\n </div>\n\n <div class=\"right-side-arrow\">\n <img src=\"images/chevron-right-red.svg\" alt=\"chevron-right\" />\n </div>\n </div>\n\n <!-- profile end -->\n </div>\n }\n </div>\n </div>\n</header>\n","import {\n Component,\n Input,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DialogRef } from './dialog-ref';\nimport { CommonModule } from '@angular/common';\nimport { DialogConfig } from '../../modal/cats-ui.modal';\n\n@Component({\n selector: 'cats-ui-dialog-box',\n imports: [CommonModule],\n templateUrl: './dialog-box.component.html',\n styleUrl: './dialog-box.component.scss',\n})\nexport class DialogBoxComponent {\n @Input() content!: any;\n @Input() config: DialogConfig = {};\n @Input() dialogRef!: DialogRef;\n @Input() expandable: boolean = true;\n\n @ViewChild('vc', { read: ViewContainerRef, static: true })\n vc!: ViewContainerRef;\n\n isExpanded = false;\n\n ngAfterViewInit() {\n this.vc.clear();\n\n if (this.content instanceof TemplateRef) {\n this.vc.createEmbeddedView(this.content, { dialogRef: this.dialogRef });\n } else {\n this.vc.createComponent(this.content);\n }\n }\n\n toggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n\n onBackdropClick() {\n if (this.config?.closeOnBackdropClick) {\n this.dialogRef.close();\n }\n }\n\n closeModal(): void {\n this.dialogRef.close();\n }\n}\n","<div class=\"cats-dialog-overlay\">\n <div\n class=\"cats-dialog\"\n [ngClass]=\"config.class\"\n [class.expanded]=\"isExpanded\"\n >\n <!-- Header -->\n @if (config.showHeader) {\n <div class=\"cats-dialog-header\">\n <div class=\"cats-header-left\">\n @if (config.title) {\n <span class=\"cats-title textTruncate\">{{ config.title }}</span>\n }\n </div>\n <div class=\"cats-header-right\">\n @if (expandable) {\n <img\n class=\"cats-icon-btn\"\n (click)=\"toggleExpand()\"\n [src]=\"\n isExpanded ? 'images/minimize-expand.svg' : 'images/expand.svg'\n \"\n alt=\"expand\"\n />\n }\n <img\n class=\"cats-icon-btn\"\n (click)=\"closeModal()\"\n src=\"images/x-cancel-btn.svg\"\n alt=\"close\"\n />\n </div>\n </div>\n }\n\n <!-- Body -->\n <div class=\"cats-dialog-body\" [class.collapsed]=\"!isExpanded && expandable\">\n <ng-container #vc></ng-container>\n </div>\n </div>\n</div>\n","import { Subject, Observable } from 'rxjs';\n\nexport class DialogRef<T = any> {\n private afterClosed$ = new Subject<T | undefined>();\n\n constructor(public id: string) {}\n\n close(result?: T) {\n this.afterClosed$.next(result);\n this.afterClosed$.complete();\n }\n\n afterClosed(): Observable<T | undefined> {\n return this.afterClosed$.asObservable();\n }\n}\n","import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n Injectable,\n} from '@angular/core';\nimport { DialogRef } from './dialog-ref';\nimport { DialogBoxComponent } from './dialog-box.component';\nimport { DialogConfig } from '../../modal/cats-ui.modal';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogBoxService {\n private dialogs = new Map<string, DialogRef>();\n\n constructor(\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n ) {}\n\n open(componentOrTemplate: any, config: DialogConfig = {}): DialogRef {\n const id = config.id || this.generateId();\n\n const dialogRef = new DialogRef(id);\n this.dialogs.set(id, dialogRef);\n\n const componentRef = createComponent(DialogBoxComponent, {\n environmentInjector: this.injector,\n });\n\n componentRef.instance.content = componentOrTemplate;\n componentRef.instance.config = config;\n componentRef.instance.dialogRef = dialogRef;\n\n this.appRef.attachView(componentRef.hostView);\n\n const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n\n dialogRef.afterClosed().subscribe(() => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n this.dialogs.delete(id);\n });\n\n return dialogRef;\n }\n\n close(id: string) {\n this.dialogs.get(id)?.close();\n }\n\n closeAll() {\n this.dialogs.forEach((dialog) => dialog.close());\n }\n\n private generateId(): string {\n return 'dialog-' + Math.random().toString(36).substring(2, 9);\n }\n}\n","import { NgClass } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nexport interface SidebarConfig {\n sidebarType?: 'sectional' | string;\n switchOrganiser?: boolean;\n}\nexport interface SidebarAttribute {\n attributeId?: number;\n attributeName: string;\n icon?: string;\n activeIcon?: string;\n url?: string;\n}\n\nexport interface SidebarFeature {\n featureId?: number;\n moduleId?: number;\n featuresName: string;\n icon?: string;\n activeIcon?: string;\n expandable?: boolean;\n url?: string;\n isEnable?: boolean;\n attributes?: SidebarAttribute[];\n}\n\nexport interface SidebarModule {\n moduleName: string;\n icon?: string;\n activeIcon?: string;\n expandable?: boolean;\n url?: string;\n isEnable?: boolean;\n features: SidebarFeature[];\n}\n@Component({\n selector: 'cats-ui-sidebar',\n imports: [NgClass],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.scss',\n})\nexport class SidebarComponent {\n @Input() appMenus: SidebarModule[] = [];\n isCollapsed = false;\n @Input() sidebarConfig!: SidebarConfig;\n expandedFeatures: Set<string> = new Set();\n @Output() activeSidebar = new EventEmitter<any>();\n\n collapsedOpenModule: number | null = null;\n collapsedOpenFeature: string | null = null;\n @Input() activeItem: {\n moduleIndex: number;\n featureIndex?: number;\n attrIndex?: number;\n } | null = null;\n constructor(private router: Router) {}\n /** A feature is expandable if it has at least one attribute */\n isExpandable(feature: SidebarFeature): boolean {\n return (feature.attributes?.length ?? 0) > 0;\n }\n\n ngOnChanges(_changes: SimpleChanges): void {\n if (_changes['activeItem']?.currentValue && this.activeItem) {\n this.isActiveItem(\n this.activeItem.moduleIndex,\n this.activeItem.featureIndex,\n this.activeItem.attrIndex,\n );\n this.setActiveItem(\n this.activeItem.moduleIndex,\n this.activeItem.featureIndex ?? -1,\n this.activeItem.attrIndex ?? -1,\n false,\n );\n this.onFeatureClick(\n this.activeItem.moduleIndex,\n this.activeItem.featureIndex ?? -1,\n this.appMenus[this.activeItem.moduleIndex].features?.[\n this.activeItem.featureIndex ?? -1\n ] ?? { featuresName: '' },\n false,\n );\n }\n }\n ngOnInit(): void {\n if (!this.appMenus?.length) return;\n\n const moduleIndex = 0;\n const firstModule = this.appMenus[moduleIndex];\n\n if (!firstModule?.features?.length) return;\n\n const featureIndex = 0;\n const firstFeature = firstModule.features[featureIndex];\n\n // CASE 1: Feature has attributes → activate first attribute\n if (this.isExpandable(firstFeature)) {\n if (!this.activeItem) {\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: 0,\n };\n }\n\n this.activeSidebar.emit({\n module: firstModule,\n feature: firstFeature,\n attribute: firstFeature.attributes?.[0],\n });\n }\n // CASE 2: No attributes → activate feature\n else {\n if (!this.activeItem) {\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: -1,\n };\n }\n\n this.activeSidebar.emit({\n module: firstModule,\n feature: firstFeature,\n attribute: null,\n });\n }\n\n // Expand defaults (only for non-sectional)\n if (this.sidebarConfig.sidebarType !== 'sectional') {\n this.expandedModules.add(moduleIndex);\n\n if (this.isExpandable(firstFeature)) {\n this.expandedFeatures.add(`${moduleIndex}-${featureIndex}`);\n }\n }\n }\n\n toggleCollapse(): void {\n this.isCollapsed = !this.isCollapsed;\n // Reset collapsed panel state when toggling\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n }\n expandedModules: Set<number> = new Set();\n\n toggleModule(moduleIndex: number): void {\n const module = this.appMenus[moduleIndex];\n\n if (this.expandedModules.has(moduleIndex)) {\n this.expandedModules.delete(moduleIndex);\n } else {\n this.expandedModules.add(moduleIndex);\n }\n\n // If module has direct URL → navigate\n if (module?.url) {\n this.activeItem = {\n moduleIndex,\n featureIndex: -1,\n attrIndex: -1,\n };\n\n this.navigateToItem(module);\n\n this.activeSidebar.emit({\n module,\n feature: null,\n attribute: null,\n });\n\n return;\n }\n\n // fallback logic (your existing)\n const firstFeature = module.features?.[0];\n if (!firstFeature) return;\n\n if (this.isExpandable(firstFeature)) {\n this.setActiveItem(moduleIndex, 0, 0);\n } else {\n this.setActiveItem(moduleIndex, 0, -1);\n }\n }\n isModuleExpanded(moduleIndex: number): boolean {\n return this.expandedModules.has(moduleIndex);\n }\n toggleFeature(moduleIndex: number, featureIndex: number): void {\n const key = `${moduleIndex}-${featureIndex}`;\n if (this.expandedFeatures.has(key)) {\n this.expandedFeatures.delete(key);\n } else {\n this.expandedFeatures.add(key);\n }\n }\n\n isFeatureExpanded(moduleIndex: number, featureIndex: number): boolean {\n return this.expandedFeatures.has(`${moduleIndex}-${featureIndex}`);\n }\n\n setActiveItem(\n moduleIndex: number,\n featureIndex: number,\n attrIndex: number,\n navigate?: boolean,\n ): void {\n this.openAttributeFeatureIndex = null;\n this.activeItem = { moduleIndex, featureIndex, attrIndex };\n\n const selectedModule = this.appMenus[moduleIndex];\n const selectedFeature = selectedModule?.features[featureIndex];\n const selectedAttribute = selectedFeature?.attributes?.[attrIndex];\n if (navigate) {\n this.navigateToItem(selectedModule, selectedFeature, selectedAttribute);\n }\n\n this.activeSidebar.emit({\n module: selectedModule,\n feature: selectedFeature,\n attribute: selectedAttribute,\n });\n }\n\n onFeatureClick(\n moduleIndex: number,\n featureIndex: number,\n feature: SidebarFeature,\n navigate?: boolean,\n ) {\n const module = this.appMenus[moduleIndex];\n\n if (this.isExpandable(feature)) {\n this.toggleFeature(moduleIndex, featureIndex);\n\n // Optional: auto-select first attribute\n const attribute = feature.attributes?.[0];\n\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: 0,\n };\n if (navigate) {\n this.navigateToItem(module, feature, attribute);\n }\n\n this.activeSidebar.emit({ module, feature, attribute });\n } else {\n this.activeItem = {\n moduleIndex,\n featureIndex,\n attrIndex: -1,\n };\n if (navigate) {\n this.navigateToItem(module, feature);\n }\n\n this.activeSidebar.emit({ module, feature, attribute: null });\n }\n }\n\n isActiveItem(\n moduleIndex: number,\n featureIndex?: number,\n attrIndex?: number,\n ): boolean {\n if (!this.activeItem) return false;\n\n const module = this.appMenus[moduleIndex];\n const hasFeatures = module?.features?.length > 0;\n\n // MODULE ACTIVE\n if (featureIndex === undefined) {\n return (\n this.activeItem.moduleIndex === moduleIndex &&\n (!hasFeatures || this.activeItem.featureIndex === -1)\n );\n }\n\n // FEATURE ACTIVE\n if (attrIndex === undefined) {\n return (\n this.activeItem.moduleIndex === moduleIndex &&\n this.activeItem.featureIndex === featureIndex &&\n this.activeItem.attrIndex === -1\n );\n }\n\n // ATTRIBUTE ACTIVE\n return (\n this.activeItem.moduleIndex === moduleIndex &&\n this.activeItem.featureIndex === featureIndex &&\n this.activeItem.attrIndex === attrIndex\n );\n }\n\n collapsedModuleIndex: number | null = null;\n collapsedFeatureIndex: number | null = null;\n openAttributeFeatureIndex: number | null = null;\n isCollapsedIconActive(mIdx: number, fIdx?: number): boolean {\n if (!this.activeItem) return false;\n\n if (this.sidebarConfig?.sidebarType === 'sectional') {\n return (\n this.activeItem.moduleIndex === mIdx &&\n this.activeItem.featureIndex === fIdx\n );\n }\n\n // Non-sectional: if fIdx provided, match both; else match module only\n if (fIdx !== undefined) {\n return (\n this.activeItem.moduleIndex === mIdx &&\n this.activeItem.featureIndex === fIdx\n );\n }\n\n return this.activeItem.moduleIndex === mIdx;\n }\n\n onCollapsedSectionalIconClick(\n mIdx: number,\n fIdx: number,\n source?: string,\n ): void {\n const isAlreadyOpen =\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\n\n if (source == 'fIdx') {\n this.openAttributeFeatureIndex =\n this.openAttributeFeatureIndex === fIdx ? null : fIdx;\n }\n if (isAlreadyOpen && source !== 'fIdx') {\n // Close the flyout but keep the item active\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n return;\n }\n // Open this feature's flyout\n this.collapsedModuleIndex = mIdx;\n this.collapsedFeatureIndex = fIdx;\n\n // Set active\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\n if (!feature) return;\n\n if (this.isExpandable(feature)) {\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\n this.navigateToItem(\n this.appMenus[mIdx],\n feature,\n feature.attributes?.[0],\n );\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: feature.attributes?.[0],\n });\n } else {\n this.activeItem = {\n moduleIndex: mIdx,\n featureIndex: fIdx,\n attrIndex: -1,\n };\n\n this.navigateToItem(this.appMenus[mIdx], feature);\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: null,\n });\n }\n }\n\n onCollapsedModuleIconClick(mIdx: number): void {\n if (this.collapsedModuleIndex === mIdx) {\n // Toggle closed\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n return;\n }\n\n // Open this module's flyout, close any other\n this.collapsedModuleIndex = mIdx;\n this.collapsedFeatureIndex = null;\n }\n onCollapsedFeatureClick(mIdx: number, fIdx: number): void {\n this.openAttributeFeatureIndex = null;\n const isAlreadyOpen =\n this.collapsedModuleIndex === mIdx && this.collapsedFeatureIndex === fIdx;\n\n if (isAlreadyOpen) {\n this.collapsedFeatureIndex = null;\n return;\n }\n\n this.collapsedModuleIndex = mIdx;\n this.collapsedFeatureIndex = fIdx;\n\n const feature = this.appMenus[mIdx]?.features?.[fIdx];\n if (!feature) return;\n\n if (this.isExpandable(feature)) {\n this.openAttributeFeatureIndex = fIdx;\n\n // Set activeItem so isCollapsedIconActive(mIdx, fIdx) returns true\n this.activeItem = { moduleIndex: mIdx, featureIndex: fIdx, attrIndex: 0 };\n this.navigateToItem(\n this.appMenus[mIdx],\n feature,\n feature.attributes?.[0],\n );\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: feature.attributes?.[0],\n });\n } else {\n this.activeItem = {\n moduleIndex: mIdx,\n featureIndex: fIdx,\n attrIndex: -1,\n };\n this.navigateToItem(this.appMenus[mIdx], feature);\n this.activeSidebar.emit({\n module: this.appMenus[mIdx],\n feature,\n attribute: null,\n });\n }\n }\n\n navigateToItem(\n module: SidebarModule,\n feature?: SidebarFeature,\n attribute?: SidebarAttribute,\n ) {\n let targetUrl: string | null = null;\n\n if (module?.url) {\n targetUrl = module.url;\n } else if (feature?.url) {\n targetUrl = feature.url;\n } else if (attribute?.url) {\n targetUrl = attribute.url;\n }\n\n if (targetUrl) {\n this.router.navigate([targetUrl]);\n }\n // else {\n // console.warn('No URL found for navigation');\n // }\n }\n @HostListener('document:click', ['$event'])\n handleOutsideClick(event: Event) {\n const target = event.target as HTMLElement;\n\n if (!target.closest('.cats-sidebar-panel')) {\n this.collapsedOpenModule = null;\n this.collapsedOpenFeature = null;\n this.collapsedModuleIndex = null;\n this.collapsedFeatureIndex = null;\n }\n }\n}\n","<div class=\"cats-sidebar-panel\" [class.collapsed]=\"isCollapsed\">\n <!-- Header -->\n <div class=\"group-header\">\n <div class=\"header-wrapper\" (click)=\"toggleCollapse()\">\n <img\n class=\"menu-icon\"\n [src]=\"\n isCollapsed ? 'images/menu-expand.svg' : 'images/menu-collapsed.svg'\n \"\n alt=\"Toggle menu\"\n />\n </div>\n </div>\n\n <!-- Main Menu -->\n <ul class=\"main-menu-list\">\n @for (module of appMenus; track mIdx; let mIdx = $index) {\n <li class=\"menu-item-wrapper\" [class.disabled]=\"!module.isEnable\">\n <!-- Module Header -->\n @if (sidebarConfig.sidebarType === \"sectional\") {\n <div class=\"head-content\">\n <img class=\"img-dropdown\" src=\"images/filled-dropdown.svg\" alt=\"\" />\n <span class=\"menu-head\">{{ module.moduleName }}</span>\n </div>\n } @else {\n <div\n class=\"head-content\"\n [class.active]=\"isActiveItem(mIdx)\"\n (click)=\"toggleModule(mIdx)\"\n >\n <img class=\"img-dropdown\" [src]=\"module.icon\" alt=\"\" />\n <span class=\"menu-head\">{{ module.moduleName }}</span>\n </div>\n }\n\n <!-- Features List -->\n @if (\n sidebarConfig.sidebarType === \"sectional\" || isModuleExpanded(mIdx)\n ) {\n <ul class=\"items-wrapper\">\n @for (feature of module.features; track fIdx; let fIdx = $index) {\n <li\n class=\"items-list\"\n [class.disabled]=\"!feature.isEnable\"\n [class.cats-show-nested-menu]=\"\n isExpandable(feature) &&\n isFeatureExpanded(mIdx, fIdx) &&\n !isCollapsed\n \"\n >\n <!-- Expanded view -->\n <div\n class=\"menu-item\"\n [class.active]=\"\n isActiveItem(mIdx, fIdx) && !isExpandable(feature)\n \"\n (click)=\"onFeatureClick(mIdx, fIdx, feature)\"\n >\n <div class=\"item-content\">\n <img\n class=\"left-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx)\n ? feature.activeIcon\n : feature.icon\n \"\n alt=\"\"\n />\n <span class=\"menu-text\">{{ feature.featuresName }}</span>\n </div>\n\n <!-- Chevron: only when feature has attributes -->\n @if (isExpandable(feature)) {\n @if (isFeatureExpanded(mIdx, fIdx)) {\n <img\n class=\"chevron-up-icon\"\n src=\"images/chevron-up.svg\"\n alt=\"\"\n />\n } @else {\n <img\n class=\"chevron-right-icon\"\n src=\"images/chevron-right.svg\"\n alt=\"\"\n />\n }\n }\n </div>\n\n <!-- Nested Sub-menu -->\n @if (isExpandable(feature) && isFeatureExpanded(mIdx, fIdx)) {\n <ul class=\"nested-sub-menu\">\n @for (\n attr of feature.attributes;\n track aIdx;\n let aIdx = $index\n ) {\n <li\n class=\"nested-item\"\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\n >\n <img\n class=\"attribute-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx, aIdx)\n ? attr?.activeIcon\n : attr?.icon\n \"\n alt=\"\"\n />\n <span class=\"menu-text\">{{ attr.attributeName }}</span>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n\n <div class=\"collapsed-menu\">\n <!-- Collapsed view (icon only) -->\n @if (sidebarConfig.sidebarType === \"sectional\") {\n @for (module of appMenus; track mIdx; let mIdx = $index) {\n @for (feature of module.features; track fIdx; let fIdx = $index) {\n <!-- Feature Icon (sectional: each feature gets its own icon) -->\n <div\n class=\"menu-item2\"\n [ngClass]=\"{\n active: isCollapsedIconActive(mIdx, fIdx),\n 'open-feature':\n collapsedModuleIndex === mIdx && collapsedFeatureIndex === fIdx,\n }\"\n >\n <div\n class=\"item-content\"\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx)\"\n >\n <img\n class=\"left-icon\"\n [src]=\"\n isCollapsedIconActive(mIdx, fIdx)\n ? feature.activeIcon\n : feature.icon\n \"\n />\n </div>\n\n <div class=\"feature-section\">\n <div class=\"feature-dropdown\">\n <div class=\"feature-heading\">\n {{ module.moduleName }}\n </div>\n\n <!-- [class.active]=\"collapsedFeatureIndex === fIdx\" -->\n <div\n class=\"feature-item\"\n [ngClass]=\"{\n active: isCollapsedIconActive(mIdx, fIdx),\n 'open-attribute':\n openAttributeFeatureIndex === fIdx &&\n collapsedFeatureIndex === fIdx,\n }\"\n >\n <div\n class=\"feature-item-wrapper\"\n (click)=\"onCollapsedSectionalIconClick(mIdx, fIdx, 'fIdx')\"\n >\n <div class=\"img-text-wrapper\">\n <img\n class=\"feature-icon\"\n [src]=\"\n collapsedFeatureIndex === fIdx\n ? feature.activeIcon\n : feature.icon\n \"\n />\n <span class=\"text\">{{ feature.featuresName }}</span>\n </div>\n\n @if (isExpandable(feature)) {\n <img src=\"images/chevron-right.svg\" />\n }\n </div>\n\n <!-- Attributes -->\n @if (\n collapsedFeatureIndex === fIdx && isExpandable(feature)\n ) {\n <div class=\"attribute-section-wrapper\">\n <div class=\"attribute-heading\">\n {{ feature.featuresName }}\n </div>\n <div class=\"attribute-section\">\n @for (\n attr of feature.attributes;\n track aIdx;\n let aIdx = $index\n ) {\n <!-- [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\" -->\n <div\n class=\"attribute-item\"\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\n >\n <img\n class=\"attribute-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx, aIdx)\n ? attr.activeIcon\n : attr.icon\n \"\n />\n <span class=\"text\">{{ attr.attributeName }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n }\n } @else {\n @for (module of appMenus; track mIdx; let mIdx = $index) {\n <!-- Module Icon (non-sectional: each module gets its own icon) -->\n <div\n class=\"menu-item2\"\n [ngClass]=\"{\n active: isCollapsedIconActive(mIdx),\n 'open-feature': collapsedModuleIndex === mIdx,\n }\"\n >\n <div class=\"item-content\" (click)=\"onCollapsedModuleIconClick(mIdx)\">\n <img\n class=\"left-icon\"\n [src]=\"\n isCollapsedIconActive(mIdx) ? module.activeIcon : module.icon\n \"\n alt=\"\"\n />\n </div>\n <div class=\"feature-section\">\n <div class=\"feature-dropdown\">\n <div class=\"feature-heading\">\n <span>\n {{ module.moduleName }}\n </span>\n </div>\n\n @for (feature of module.features; track fIdx; let fIdx = $index) {\n <div\n class=\"feature-item\"\n [ngClass]=\"{\n active:\n isCollapsedIconActive(mIdx, fIdx) ||\n (collapsedModuleIndex === mIdx &&\n collapsedFeatureIndex === fIdx),\n 'open-attribute':\n openAttributeFeatureIndex === fIdx &&\n collapsedFeatureIndex === fIdx,\n }\"\n >\n <div\n class=\"feature-item-wrapper\"\n (click)=\"onCollapsedFeatureClick(mIdx, fIdx)\"\n >\n <div class=\"img-text-wrapper\">\n <img\n class=\"feature-icon\"\n [src]=\"\n isCollapsedIconActive(mIdx, fIdx)\n ? feature.activeIcon\n : feature.icon\n \"\n alt=\"\"\n />\n <span class=\"text\">\n {{ feature.featuresName }}\n </span>\n </div>\n\n @if (isExpandable(feature)) {\n <img src=\"images/chevron-right.svg\" alt=\"\" />\n }\n </div>\n\n <!-- Attributes -->\n @if (\n collapsedModuleIndex === mIdx &&\n collapsedFeatureIndex === fIdx &&\n isExpandable(feature)\n ) {\n <div class=\"attribute-section-wrapper\">\n <div class=\"attribute-heading\">\n <span>{{ feature.featuresName }}</span>\n </div>\n\n <div class=\"attribute-section\">\n @for (\n attr of feature.attributes;\n track aIdx;\n let aIdx = $index\n ) {\n <div\n class=\"attribute-item\"\n [class.active]=\"isActiveItem(mIdx, fIdx, aIdx)\"\n (click)=\"setActiveItem(mIdx, fIdx, aIdx)\"\n >\n <img\n class=\"attribute-icon\"\n [src]=\"\n isActiveItem(mIdx, fIdx, aIdx)\n ? attr.activeIcon\n : attr.icon\n \"\n />\n <span class=\"text\">{{ attr.attributeName }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n @if (sidebarConfig.switchOrganiser) {\n <div class=\"group-footer\">\n <img class=\"footer-icon\" src=\"images/shuffle-01.svg\" alt=\"\" />\n <span class=\"footer-text\">Switch Organiser</span>\n </div>\n }\n</div>\n","/*\n * Public API Surface of cats-ui\n */\n\nexport * from './lib/services/cats-ui.service';\nexport * from './lib/components/input';\nexport * from './lib/components/single-select';\nexport * from './lib/components/multi-select';\nexport * from './lib/components/search-box';\nexport * from './lib/components/auto-complete-single-select';\nexport * from './lib/directives/outside-click.directive';\nexport * from './lib/components/auto-complete-multi-select';\nexport * from './lib/modal/cats-ui.modal';\nexport * from './lib/components/toogle-button';\nexport * from './lib/components/checkbox-button';\nexport * from './lib/components/radio-button';\nexport * from './lib/components/custom-date-picker';\nexport * from './lib/directives/cats-ui-tooltip.directive';\nexport * from './lib/components/accordion';\nexport * from './lib/components/tabset';\nexport * from './lib/components/timestamp-filter';\nexport * from './lib/components/wizard';\nexport * from './lib/components/file-upload';\nexport * from './lib/components/header';\nexport * from './lib/components/dialog-box';\nexport * from './lib/components/sidebar';\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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"}
|