cats-ui-lib 2.0.4 → 2.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/fesm2022/cats-ui-lib.mjs
CHANGED
|
@@ -1821,16 +1821,13 @@ class DateTimePickerComponent {
|
|
|
1821
1821
|
validate(control) {
|
|
1822
1822
|
this.control = control;
|
|
1823
1823
|
const selected = this.date ? new Date(this.date) : null;
|
|
1824
|
-
|
|
1825
|
-
const isRequired = control.validator && control.validator(control)?.['required'];
|
|
1826
|
-
if ((isRequired || control.hasError('required')) &&
|
|
1827
|
-
(!this.date || !this.selectedDay)) {
|
|
1824
|
+
if (control.hasError('required') && (!this.date || !this.selectedDay)) {
|
|
1828
1825
|
return { required: true };
|
|
1829
1826
|
}
|
|
1830
|
-
|
|
1827
|
+
if (this.minDate && selected && selected < new Date(this.minDate)) {
|
|
1831
1828
|
return { minDate: true };
|
|
1832
1829
|
}
|
|
1833
|
-
|
|
1830
|
+
if (this.maxDate && selected && selected > new Date(this.maxDate)) {
|
|
1834
1831
|
return { maxDate: true };
|
|
1835
1832
|
}
|
|
1836
1833
|
return null;
|
|
@@ -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/date-time-picker/date-time-picker.component.ts","../../../projects/cats-ui/src/lib/components/date-time-picker/date-time-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/tabs/tab-content.directive.ts","../../../projects/cats-ui/src/lib/components/tabs/tab-heading.directive.ts","../../../projects/cats-ui/src/lib/components/tabs/tab/tab-item/tab-item.component.ts","../../../projects/cats-ui/src/lib/components/tabs/tab/tab-item/tab-item.component.html","../../../projects/cats-ui/src/lib/components/tabs/tab/tab.component.ts","../../../projects/cats-ui/src/lib/components/tabs/tab/tab.component.html","../../../projects/cats-ui/src/public-api.ts","../../../projects/cats-ui/src/cats-ui-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CatsUiService {\r\n\r\n constructor() { }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n FormControl,\r\n NG_VALIDATORS,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { InputConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-input',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class InputComponent implements ControlValueAccessor, Validator {\r\n @Input() inputConfig!: InputConfig;\r\n @Output() onKeyDown = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n @Output() onKeyUp = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n\r\n value: string = '';\r\n disabled = false;\r\n touched = false;\r\n control: FormControl | null = null;\r\n showPassword = false;\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n /**\r\n * @description Method to when value changes\r\n * @author Shiva Kant\r\n */\r\n handleInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value = target.value;\r\n this.onChange(this.value);\r\n\r\n if (this.control) {\r\n this.control.markAsDirty();\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n /**\r\n * @description Method to Handle key down event\r\n * @author Shiva Kant\r\n */\r\n handleKeyDown(event: KeyboardEvent) {\r\n this.onKeyDown.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to handle key up event\r\n * @author Shiva Kant\r\n */\r\n handleKeyUp(event: KeyboardEvent) {\r\n this.onKeyUp.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to Handle blur (touched\r\n * @author Shiva Kant\r\n */\r\n\r\n handleBlur(event: FocusEvent): void {\r\n this.touched = true;\r\n this.onTouched();\r\n const control = (event.target as any)?.control;\r\n control?.markAsTouched?.();\r\n }\r\n /**\r\n * @description Method to ControlValueAccessor methods\r\n * @author Shiva Kant\r\n */\r\n\r\n writeValue(value: any): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n /**\r\n * @description Method to Validator interface\r\n * @author Shiva Kant\r\n */\r\n\r\n validate(control: FormControl): any {\r\n this.control = control;\r\n if (this.inputConfig?.type === 'email') {\r\n return Validators.email(control);\r\n }\r\n return null;\r\n }\r\n /**\r\n * @description method to use show password\r\n * @author Shiva Kant\r\n */\r\n togglePassword() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n}\r\n","<div class=\"input_container\">\r\n @if (inputConfig.label) {\r\n <label>{{ inputConfig.label }}</label>\r\n }\r\n <div class=\"custom-input\">\r\n <input\r\n class=\"input-box\"\r\n [type]=\"showPassword ? 'text' : inputConfig.type\"\r\n [placeholder]=\"inputConfig.placeholder\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"value\"\r\n (input)=\"handleInput($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n (keydown)=\"handleKeyDown($event)\"\r\n (keyup)=\"handleKeyUp($event)\"\r\n />\r\n <!-- Eye Icon Only When Type Is Password -->\r\n @if (inputConfig.type === 'password') {\r\n <span class=\"eye_icon\" (click)=\"togglePassword()\">\r\n <img\r\n [src]=\"showPassword ? 'images/eye.svg' : 'images/eye-off.svg'\"\r\n alt=\"toggle password visibility\"\r\n />\r\n </span>\r\n }\r\n </div>\r\n</div>\r\n","export class SingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n required?: boolean = false;\r\n}\r\n\r\nexport class MultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n chipLimit: number = 2;\r\n selectAll?: boolean = true;\r\n required?: boolean = false;\r\n}\r\n\r\nexport class SearchConfig {\r\n serachValue: string = '';\r\n placeholder?: string = 'Search';\r\n}\r\n\r\nexport class InputConfig {\r\n type: 'text' | 'email' | 'password' | 'number' = 'text';\r\n placeholder?: string = '';\r\n label?: string = '';\r\n}\r\n\r\nexport class AutoCompleteSingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n customInput: boolean = false;\r\n}\r\nexport class AutoCompleteMultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n selectAll?: boolean = true;\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n chipLimit: number = 2;\r\n customInput: boolean = false;\r\n pattern?: string = '';\r\n}\r\nexport class ToggleConfig {\r\n checked: boolean = false;\r\n disabled?: boolean = false;\r\n}\r\nexport class CheckBoxSubtask {\r\n idField: string = '';\r\n textField: string = '';\r\n checked?: boolean = false;\r\n}\r\n\r\nexport class CheckBoxConfig {\r\n idField: string = '';\r\n textField: string = '';\r\n disabledField?: string = '';\r\n name: string = '';\r\n checked?: boolean = false;\r\n subtasks?: CheckBoxSubtask[];\r\n}\r\nexport interface RadioButtonConfig {\r\n label?: string;\r\n disabled?: string;\r\n valueField?: string;\r\n textField?: string;\r\n name: string;\r\n layout?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport interface DateConfig {\r\n selectionMode: 'single' | 'range';\r\n enableTime?: boolean;\r\n}\r\n","\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { SingleSelectConfig } from '../../modal/cats-ui.modal';\r\n\r\nconst noop = () => {};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-single-select',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './single-select.component.html',\r\n styleUrl: './single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: SingleSelectComponent,\r\n multi: true,\r\n },\r\n SINGLE_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class SingleSelectComponent\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() singleSelectConfig: SingleSelectConfig=new SingleSelectConfig();\r\n @Input() selectedOption: any;\r\n @Output() onSelection = new EventEmitter();\r\n \r\n showDropdown = false;\r\n searchText: string = '';\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n disableControl: boolean = false;\r\n @Output() onScroll: any = new EventEmitter();\r\n @Input() parentNativeElement: any;\r\n\r\n @ContentChild('selectedData') selectedData!: TemplateRef<any>;\r\n\r\n constructor(private cd: ChangeDetectorRef, private el: ElementRef) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n this.optionList = [];\r\n } else {\r\n if (this.optionList.length > 10) this.singleSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n this.parentNativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n if (typeof obj == 'string' || typeof obj == 'number') return true;\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n this.selectedOption = item;\r\n this.toggleDropdown();\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(item);\r\n }\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param obj this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(obj: any): void {\r\n this.selectedOption = '';\r\n\r\n if (this.optionList.length && obj) {\r\n if (typeof obj === 'string' || typeof obj === 'number') {\r\n if (\r\n typeof this.optionList?.[0] === 'string' ||\r\n typeof this.optionList?.[0] === 'number'\r\n ) {\r\n if (this.optionList.includes(obj)) {\r\n this.selectedOption = obj;\r\n }\r\n } else if (obj != '') {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] == obj ||\r\n option[this.singleSelectConfig.textField] == obj\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n obj?.hasOwnProperty(this.singleSelectConfig.idField) &&\r\n !this.isObjEmpty(this.optionList[0])\r\n ) {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] ==\r\n obj[this.singleSelectConfig.idField]\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n setTimeout(() => {\r\n this.onChangeCallback(this.selectedOption);\r\n }, 0);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.singleSelectConfig.required) {\r\n this.inValid =\r\n this.selectedOption == '' ||\r\n JSON.stringify(this.selectedOption) == '{}';\r\n }\r\n if (this.showDropdown) this.onTouchedCallback();\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) => {\r\n if (typeof option != 'object') {\r\n return option?.toLowerCase().includes(this.searchText.toLowerCase());\r\n } else {\r\n return option[this.singleSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase());\r\n }\r\n });\r\n }\r\n}","<div class=\"main-wrapper\" id=\"main-wrapper-single-select\">\r\n <div\r\n class=\"single-select-dropdown\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n 'border-danger':\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-control': disableControl\r\n }\"\r\n >\r\n <div class=\"left_details\">\r\n @if(singleSelectConfig.prefixLabel){\r\n <span class=\"predefine_label\">\r\n <p class=\"textTruncate\">{{ singleSelectConfig.prefixLabel }}</p>\r\n </span>\r\n } @if (!isObjEmpty(selectedOption) &&\r\n selectedOption[singleSelectConfig.textField]) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultTemplate let-data=\"data\">\r\n <span class=\"textTruncate\">\r\n {{ selectedOption[singleSelectConfig.textField] }}\r\n </span>\r\n </ng-template>\r\n }@else if(selectedOption && isObjEmpty(selectedOption)){\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate1\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultTemplate1 let-data=\"data\">\r\n <span class=\"textTruncate\">\r\n {{ selectedOption }}\r\n </span>\r\n </ng-template>\r\n }@else{\r\n <span class=\"placeholderColor textTruncate\">{{\r\n singleSelectConfig.placeholder\r\n }}</span>\r\n\r\n }\r\n </div>\r\n <span class=\"arrow_icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div\r\n class=\"dropdown-list\"\r\n id=\"container_scroll\"\r\n (scroll)=\"onDivScroll($event)\"\r\n >\r\n @if (singleSelectConfig.enableSearch) {\r\n <div class=\"search_bar\">\r\n <div class=\"input_box\">\r\n <img src=\"images/search.svg\" class=\"search_icon\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter_search_box\"\r\n name=\"\"\r\n id=\"\"\r\n placeholder=\"Search here\"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cross_icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul>\r\n @if(isObjEmpty(this.optionList[0] || \"\")){ @for (option of\r\n filteredOptionsValue; track $index) {\r\n <li\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField]\r\n }\"\r\n >\r\n <span class=\"textTruncate\">{{ option }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no_data\">No Data Found.</li>\r\n } } @else { @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField]\r\n }\"\r\n >\r\n <span class=\"textTruncate\">{{\r\n option[singleSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no_data\">No Data Found.</li>\r\n } }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, ControlValueAccessor, FormControl, FormsModule } from '@angular/forms';\r\nimport { MultiSelectConfig } from '../../modal/cats-ui.modal';\r\nconst noop = () => {}\r\nexport const MULTI_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\nexport const MULTI_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-multi-select',\r\n imports: [NgClass, FormsModule],\r\n templateUrl: './multi-select.component.html',\r\n styleUrl: './multi-select.component.scss',\r\n providers: [\r\n MULTI_SELECT_CONTROL_VALUE_ACCESSOR,\r\n MULTI_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class MultiSelectComponent\r\n implements OnChanges, OnInit, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() multiSelectConfig: MultiSelectConfig = new MultiSelectConfig();\r\n\r\n @Input() selectedOptions: any[] = [];\r\n\r\n @Output() onSelection = new EventEmitter();\r\n\r\n control!: FormControl<any>;\r\n\r\n showDropdown = false;\r\n isListArrayOfObject = false;\r\n isSelectedAll = false;\r\n inValid: boolean = false;\r\n searchText: string = '';\r\n disabledControl: boolean = false;\r\n\r\n constructor(private cd: ChangeDetectorRef, private el: ElementRef) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (\r\n _changes['optionList'].currentValue &&\r\n _changes['optionList'].currentValue.length > 0\r\n ) {\r\n if (\r\n typeof this.optionList[0] === 'string' ||\r\n typeof this.optionList[0] === 'number'\r\n ) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n const item: any = {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n isSelected: false,\r\n };\r\n\r\n if (this.multiSelectConfig.disabledField) {\r\n item[this.multiSelectConfig.disabledField] = false;\r\n }\r\n\r\n return item;\r\n });\r\n } else {\r\n this.isListArrayOfObject = true;\r\n this.optionList = this.optionList.map((option: any) => {\r\n return {\r\n ...option,\r\n isSelected: false,\r\n };\r\n });\r\n }\r\n if (this.optionList.length > 10)\r\n this.multiSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n item.isSelected = !item.isSelected;\r\n if (!item.isSelected) {\r\n let ind = this.selectedOptions.findIndex(\r\n (option: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField]\r\n );\r\n if (ind >= 0) this.selectedOptions.splice(ind, 1);\r\n } else {\r\n this.selectedOptions.push(item);\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true\r\n );\r\n\r\n this.inValid = false;\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param controlValue this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(controlValue: any[]): void {\r\n if (this.optionList.length) {\r\n this.selectedOptions = [];\r\n if (controlValue && controlValue.length > 0) {\r\n if (\r\n typeof controlValue[0] === 'string' ||\r\n typeof controlValue[0] === 'number'\r\n ) {\r\n controlValue = controlValue.map((option: string | number) => {\r\n return {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n };\r\n });\r\n }\r\n for (const option of controlValue) {\r\n let ind = this.optionList.findIndex(\r\n (item: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField] ||\r\n item[this.multiSelectConfig.textField] ==\r\n option[this.multiSelectConfig.textField]\r\n );\r\n if (ind >= 0) {\r\n this.optionList[ind] = {\r\n ...this.optionList[ind],\r\n isSelected: true,\r\n };\r\n this.selectedOptions.push(this.optionList[ind]);\r\n }\r\n }\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true\r\n );\r\n this.onChangeCallback(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.multiSelectConfig.required) {\r\n this.inValid = this.selectedOptions.length < 0;\r\n }\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n checkUncheckAll(): void {\r\n if (this.isSelectedAll) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: false };\r\n });\r\n\r\n this.isSelectedAll = false;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n } else {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: true };\r\n });\r\n\r\n this.isSelectedAll = true;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n }\r\n\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onSelection.emit(this.selectedOptions);\r\n }\r\n\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) =>\r\n option[this.multiSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase())\r\n );\r\n }\r\n}\r\n","<div class=\"main-wrapper\">\r\n <div\r\n class=\"display-div\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n 'border-danger': this.inValid,\r\n 'disable-control': disabledControl\r\n }\"\r\n >\r\n <div class=\"left_details\">\r\n @if(multiSelectConfig.prefixLabel){\r\n <span class=\"predefine_label\">\r\n <p class=\"textTruncate\">{{ multiSelectConfig.prefixLabel }}</p>\r\n </span>\r\n }\r\n <div class=\"multi_label_wrapper\">\r\n @if (selectedOptions.length>0) { @for (item of selectedOptions; track\r\n $index) { @if(multiSelectConfig.chipLimit>=$index+1){\r\n <div class=\"input_text\">\r\n <span class=\"textTruncate\">{{\r\n item[multiSelectConfig.textField]\r\n }}</span>\r\n <!-- <i-feather name=\"x\" (click)=\"$event.stopPropagation();updateSelectedOption(item)\"></i-feather> -->\r\n <img\r\n src=\"images/x.svg\"\r\n (click)=\"$event.stopPropagation(); updateSelectedOption(item)\"\r\n class=\"cross_icon\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } } } @else{\r\n <span class=\"placeholderColor textTruncate\">{{\r\n multiSelectConfig.placeholder\r\n }}</span>\r\n } @if(multiSelectConfig.chipLimit < selectedOptions.length) {\r\n <div class=\"view_more\">\r\n +{{ selectedOptions.length - multiSelectConfig.chipLimit }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <span class=\"arrow_icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div class=\"dropdown-list\" id=\"container_scroll\">\r\n @if (multiSelectConfig.enableSearch) {\r\n <div class=\"search_bar\">\r\n <div class=\"input_box\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter_search_box\"\r\n name=\"\"\r\n id=\"\"\r\n placeholder=\"Search here\"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cross_icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul>\r\n @if (multiSelectConfig.selectAll && optionList.length>0) {\r\n <li (click)=\"checkUncheckAll()\">\r\n <span class=\"checkbox_container\">\r\n <input type=\"checkbox\" [checked]=\"isSelectedAll\" />\r\n @if(isSelectedAll){ UnSelectAll } @else{ SelectAll }\r\n </span>\r\n </li>\r\n } @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"checkbox_container\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n multiSelectConfig.disabledField &&\r\n option[multiSelectConfig.disabledField]\r\n }\"\r\n >\r\n <input type=\"checkbox\" [checked]=\"option.isSelected\" />\r\n <span class=\"textTruncate\"\r\n >{{ option[multiSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n } @empty {\r\n <li class=\"no_data\">No Data Found.</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n} from '@angular/forms';\r\nimport { SearchConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-search-box',\r\n imports: [FormsModule],\r\n templateUrl: './search-box.component.html',\r\n styleUrl: './search-box.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SearchBoxComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SearchBoxComponent implements ControlValueAccessor {\r\n searchParam: string = '';\r\n @Input() searchConfig: SearchConfig = new SearchConfig();\r\n @Output() onClose = new EventEmitter<void>();\r\n @Output() searchParamValue = new EventEmitter<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n public onTouched: () => void = () => {};\r\n isDisabled = false;\r\n\r\n ngOnInit(): void {\r\n this.searchParam = this.searchConfig?.serachValue || '';\r\n }\r\n /**\r\n * @description Method to Called when input changes\r\n * @author Shiva Kant\r\n */\r\n\r\n onInputChange(event: any) {\r\n const value = (event.target as HTMLInputElement)?.value;\r\n this.searchParam = value;\r\n this.onChange(value);\r\n this.searchParamValue.emit(value);\r\n }\r\n /**\r\n * @description Method to closeSearchBar\r\n * @author Shiva Kant\r\n */\r\n closeSearchBar(): void {\r\n this.searchParam = '';\r\n this.onChange('');\r\n this.searchParamValue.emit('');\r\n this.onClose.emit();\r\n }\r\n\r\n // -------- ControlValueAccessor methods --------\r\n writeValue(value: string): void {\r\n this.searchParam = value || '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" srcset=\"\" />\r\n <input\r\n [placeholder]=\"searchConfig.placeholder\"\r\n type=\"text\"\r\n [value]=\"searchParam\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n @if (searchParam.length > 0) {\r\n <div class=\"cross_icon\">\r\n <img src=\"images/x.svg\" alt=\"\" srcset=\"\" (click)=\"closeSearchBar()\" />\r\n </div>\r\n }\r\n</div>\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: '[catsOutsideClick]',\r\n standalone: true,\r\n})\r\nexport class OutsideClickDirective {\r\n @Output() public clickOutSide = new EventEmitter<MouseEvent>();\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * @description Hosts listener\r\n * @author Shiva Kant\r\n * @param event \r\n * @returns click \r\n */\r\n @HostListener('document:click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n const targetElement = event.target as HTMLElement | null;\r\n\r\n // Guard clause: exit early if no target or not an element\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickInside) {\r\n this.clickOutSide.emit(event);\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\nimport { AutoCompleteSingleSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nconst noop = () => {};\r\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const DROPDOWN_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-input-single-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-single-select.component.html',\r\n styleUrl: './auto-complete-single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutoCompleteSingleSelectComponent,\r\n multi: true,\r\n },\r\n DROPDOWN_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteSingleSelectComponent implements OnInit {\r\n @Input() autoSingleSelectConfig: AutoCompleteSingleSelectConfig =\r\n new AutoCompleteSingleSelectConfig();\r\n @Input() placeholder = 'Enter or Select Option';\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOption: any;\r\n constructor() {}\r\n inValid: boolean = false;\r\n control!: FormControl<any>;\r\n disableControl: boolean = false;\r\n ngOnInit(): void {}\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string): void {\r\n if (type == 'object') {\r\n this.inputValue = item[this.autoSingleSelectConfig.textField];\r\n } else {\r\n this.inputValue = item;\r\n }\r\n this.selectedOption = item;\r\n this.showDropdown = false;\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(this.selectedOption);\r\n }\r\n\r\n writeValue(obj: any): void {\r\n this.syncSelectionWithValue(obj);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control as FormControl;\r\n\r\n if (!this.autoSingleSelectConfig.required) return null;\r\n\r\n const val = control.value;\r\n\r\n const isEmpty =\r\n val === null ||\r\n val === undefined ||\r\n val === '' ||\r\n (typeof val === 'object' && Object.keys(val).length === 0);\r\n\r\n return isEmpty ? { required: true } : null;\r\n }\r\n\r\n // ---------- Helpers ----------\r\n private syncSelectionWithValue(value: any): void {\r\n this.selectedOption = null;\r\n this.inputValue = '';\r\n\r\n if (!value || !this.optionsList?.length) return;\r\n\r\n if (typeof value !== 'object') {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o === value ||\r\n o?.[this.autoSingleSelectConfig.idField] === value ||\r\n o?.[this.autoSingleSelectConfig.textField] === value,\r\n ) ?? value;\r\n } else {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o[this.autoSingleSelectConfig.idField] ===\r\n value[this.autoSingleSelectConfig.idField],\r\n ) ?? value;\r\n }\r\n\r\n this.inputValue = this.isObject(this.selectedOption)\r\n ? this.selectedOption[this.autoSingleSelectConfig.textField]\r\n : this.selectedOption;\r\n }\r\n /**\r\n * @description this method is use to update input value\r\n */\r\n updateInputValue(): void {\r\n let data: any = null;\r\n\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.selectedOption = null;\r\n this.onChangeCallback(null);\r\n } else {\r\n if (this.isObject(this.optionsList?.[0])) {\r\n data = {\r\n [this.autoSingleSelectConfig.idField]: null,\r\n [this.autoSingleSelectConfig.textField]: this.inputValue,\r\n };\r\n } else {\r\n data = this.inputValue;\r\n }\r\n\r\n this.selectedOption = data;\r\n this.onChangeCallback(data);\r\n }\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(data);\r\n this.control?.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus(): void {\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.selectedOption = null;\r\n this.onChangeCallback(null);\r\n\r\n // force validation\r\n this.control?.updateValueAndValidity();\r\n this.showDropdown = false;\r\n return;\r\n }\r\n\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on click outside\r\n */\r\n outsideClicked(): void {\r\n if (this.showDropdown) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n this.showDropdown = false;\r\n }\r\n onClickEnter(control: any) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n}","<div class=\"main_container\" catsOutsideClick (clickOutSide)=\"outsideClicked()\">\r\n <div class=\"input_container\">\r\n <div class=\"input_box\">\r\n <input\r\n class=\"textTruncate\"\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n (keyup.enter)=\"onClickEnter(inputValue)\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n (input)=\"updateDropdownStatus()\"\r\n [placeholder]=\"autoSingleSelectConfig.placeholder\"\r\n />\r\n </div>\r\n <div class=\"arrow_icon\" (click)=\"toggleDropdown()\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"up-arrow\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"down-arrow\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (showDropdown) {\r\n <div class=\"dropdown_list_single_auto_select\">\r\n <!-- if optionList is an array of object-->\r\n @if (isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul>\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if\r\n (item[autoSingleSelectConfig.textField].toLowerCase().includes(inputValue.toLowerCase())\r\n || inputValue == '') {\r\n <li\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled_option'\r\n : ''\r\n \"\r\n >\r\n <span class=\"textTruncate\">\r\n {{ item[autoSingleSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n }\r\n </ng-container>\r\n }\r\n </ul>\r\n </ng-container>\r\n }\r\n\r\n <!-- if optionList is an array of string-->\r\n @if (!isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul>\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if (item.includes(inputValue) || inputValue == '') {\r\n <li\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled_option'\r\n : ''\r\n \"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n {{ item }}\r\n </li>\r\n\r\n } </ng-container\r\n >}\r\n </ul></ng-container\r\n >}\r\n </div>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, forwardRef, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport { AutoCompleteMultiSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\n\r\n@Component({\r\n selector: 'cats-ui-input-multi-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-multi-select.component.html',\r\n styleUrl: './auto-complete-multi-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteMultiSelectComponent\r\n implements OnInit, ControlValueAccessor, Validator\r\n{\r\n @Input() autoCompleteMultiSelectConfig!: AutoCompleteMultiSelectConfig;\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOptions: any[] = [];\r\n isSelectedAll: boolean = false;\r\n inValid: boolean = false;\r\n control!: FormControl<any>;\r\n isDisabled = false;\r\n constructor() {}\r\n ngOnInit() {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n private onChange: (_: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private applyDefaultConfig() {\r\n const defaults = new AutoCompleteMultiSelectConfig();\r\n this.autoCompleteMultiSelectConfig = {\r\n ...defaults,\r\n ...this.autoCompleteMultiSelectConfig,\r\n };\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n this.parentNativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n writeValue(value: any[]): void {\r\n if (Array.isArray(value)) {\r\n this.selectedOptions = value;\r\n\r\n // sync optionsList selection\r\n this.optionsList.forEach((opt) => {\r\n opt.isSelected = value.some((v) =>\r\n this.isObject(v)\r\n ? v[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField]\r\n : v === opt,\r\n );\r\n });\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n this.updateSelectAllState();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control as FormControl;\r\n\r\n if (!this.autoCompleteMultiSelectConfig.required) return null;\r\n\r\n const val = control.value;\r\n\r\n const isEmpty =\r\n val === null ||\r\n val === undefined ||\r\n val === '' ||\r\n (typeof val === 'object' && Object.keys(val).length === 0);\r\n\r\n return isEmpty ? { required: true } : null;\r\n }\r\n onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.inputValue = target.value;\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string) {\r\n if (type === 'object') {\r\n // Toggle the option's isSelected\r\n item.isSelected = !item.isSelected;\r\n\r\n if (item.isSelected) {\r\n // add to selectedOptions if not already present\r\n const exists = this.selectedOptions.some(\r\n (opt) =>\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (!exists) this.selectedOptions.push(item);\r\n } else {\r\n // remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter(\r\n (opt) =>\r\n !(\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField]\r\n ),\r\n );\r\n }\r\n } else {\r\n // string type\r\n const existsIndex = this.selectedOptions.findIndex((opt) => opt === item);\r\n if (existsIndex > -1) {\r\n // remove\r\n this.selectedOptions.splice(existsIndex, 1);\r\n } else {\r\n // add\r\n this.selectedOptions.push(item);\r\n }\r\n\r\n // If optionsList contains this string, also toggle its isSelected there\r\n const idxInOptions = this.optionsList.findIndex(\r\n (o) => typeof o === 'string' && o === item,\r\n );\r\n if (idxInOptions > -1) {\r\n // toggle corresponding option's isSelected\r\n const opt = this.optionsList[idxInOptions] as any;\r\n opt.isSelected = !opt.isSelected;\r\n }\r\n }\r\n\r\n // keep select all state consistent\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to checkUncheckAll\r\n * @author Shiva Kant\r\n */\r\n\r\n checkUncheckAll(event: any) {\r\n if (event) event.stopPropagation();\r\n this.isSelectedAll = !this.isSelectedAll;\r\n\r\n this.optionsList.forEach((item) => {\r\n if (\r\n !this.autoCompleteMultiSelectConfig.disabledField ||\r\n !item[this.autoCompleteMultiSelectConfig.disabledField]\r\n ) {\r\n item.isSelected = this.isSelectedAll;\r\n }\r\n });\r\n\r\n // Keep custom values intact\r\n const customChips = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? !this.optionsList.some(\r\n (o) =>\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField],\r\n )\r\n : !this.optionsList.includes(opt),\r\n );\r\n\r\n const selectedOptionItems = this.optionsList.filter(\r\n (opt) => opt.isSelected,\r\n );\r\n\r\n this.selectedOptions = [...customChips, ...selectedOptionItems];\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to removeChip\r\n * @author Shiva Kant\r\n */\r\n removeChip(item: any) {\r\n // Remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] !==\r\n (this.isObject(item)\r\n ? item[this.autoCompleteMultiSelectConfig.textField]\r\n : item)\r\n : opt !== item,\r\n );\r\n\r\n // If item corresponds to an optionsList entry, unselect it there too\r\n if (this.isObject(item)) {\r\n const idx = this.optionsList.findIndex(\r\n (o: any) =>\r\n this.isObject(o) &&\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n } else {\r\n // string case\r\n const idx = this.optionsList.findIndex((o) => o === item);\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n }\r\n\r\n // update select all state & emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions); // 🔥 THIS updates formControl\r\n this.onTouched();\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus() {\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on onClickEnter\r\n * @author Shiva Kant\r\n */\r\n\r\n onClickEnter(control?: any): void {\r\n if (!this.inputValue.trim()) return;\r\n\r\n // pattern check\r\n if (this.autoCompleteMultiSelectConfig.pattern) {\r\n const regex = new RegExp(this.autoCompleteMultiSelectConfig.pattern);\r\n if (!regex.test(this.inputValue)) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n }\r\n\r\n const val = this.inputValue.trim();\r\n const valLower = val.toLowerCase();\r\n\r\n // Avoid duplicate\r\n const exists = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower\r\n : opt.toLowerCase() === valLower,\r\n );\r\n if (exists) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n\r\n // Try find matched item in optionsList\r\n const matchedItem = this.isObject(this.optionsList?.[0])\r\n ? this.optionsList.find(\r\n (opt: any) =>\r\n opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower,\r\n )\r\n : this.optionsList.find((opt: any) => opt.toLowerCase() === valLower);\r\n\r\n if (matchedItem) {\r\n // If matched, ensure option is marked selected and present in selectedOptions\r\n matchedItem.isSelected = true;\r\n const already = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n matchedItem[this.autoCompleteMultiSelectConfig.textField]\r\n : opt === matchedItem,\r\n );\r\n if (!already) this.selectedOptions.push(matchedItem);\r\n } else if (this.autoCompleteMultiSelectConfig.customInput) {\r\n // create custom item and mark it selected\r\n let newItem: any = val;\r\n if (this.isObject(this.optionsList?.[0])) {\r\n newItem = {\r\n [this.autoCompleteMultiSelectConfig.idField]: null,\r\n [this.autoCompleteMultiSelectConfig.textField]: val,\r\n isSelected: true, // mark selected for consistency\r\n __isCustom: true, // optional flag to identify custom items\r\n };\r\n }\r\n this.selectedOptions.push(newItem);\r\n }\r\n\r\n // reset input but keep dropdown open (as you wanted)\r\n this.inputValue = '';\r\n\r\n // update select all state and emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n outsideClicked(): void {\r\n this.showDropdown = false;\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n\r\n updateSelectAllState() {\r\n // only consider non-disabled items for select-all state\r\n const selectable = this.optionsList.filter(\r\n (opt: any) =>\r\n !(\r\n this.autoCompleteMultiSelectConfig.disabledField &&\r\n opt[this.autoCompleteMultiSelectConfig.disabledField]\r\n ),\r\n );\r\n this.isSelectedAll =\r\n selectable.length > 0 && selectable.every((opt: any) => !!opt.isSelected);\r\n }\r\n}\r\n","<div class=\"main_container\">\r\n <div\r\n class=\"input_container\"\r\n catsOutsideClick\r\n (clickOutSide)=\"outsideClicked()\"\r\n >\r\n <div class=\"chips_wrapper\">\r\n <!-- Chips -->\r\n @for (item of selectedOptions; track $index) { @if ($index <\r\n autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"chip\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"textTruncate\">\r\n {{\r\n isObject(item)\r\n ? item[autoCompleteMultiSelectConfig.textField]\r\n : item\r\n }}\r\n </span>\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cross_icon\"\r\n (click)=\"$event.stopPropagation(); removeChip(item)\"\r\n />\r\n </div>\r\n } }\r\n <!-- +N counter -->\r\n @if (selectedOptions.length > autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"view_more\">\r\n +{{ selectedOptions.length - autoCompleteMultiSelectConfig.chipLimit }}\r\n </div>\r\n }\r\n <!-- Input Box (always available) -->\r\n <div class=\"input_box\" (click)=\"$event.stopPropagation()\">\r\n <input\r\n type=\"text\"\r\n [value]=\"inputValue\"\r\n (input)=\"onInput($event)\"\r\n (keyup.enter)=\"onClickEnter()\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n [placeholder]=\"\r\n selectedOptions.length === 0\r\n ? autoCompleteMultiSelectConfig.placeholder\r\n : ''\r\n \"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown toggle -->\r\n <div class=\"arrow_icon\" (click)=\"toggleDropdown()\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown list -->\r\n @if (showDropdown) {\r\n <div class=\"dropdown_list_multi_auto_select\" id=\"container_scroll\" (click)=\" onDivScroll($event)\">\r\n <ul>\r\n <!-- Select All -->\r\n @if (autoCompleteMultiSelectConfig.selectAll) {\r\n <li\r\n class=\"checkbox_container select_all_item\"\r\n (click)=\"checkUncheckAll($event)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isSelectedAll\"\r\n (click)=\"$event.stopPropagation(); checkUncheckAll($event)\"\r\n />\r\n <span>{{ isSelectedAll ? \"Unselect All\" : \"Select All\" }}</span>\r\n </li>\r\n }\r\n\r\n <!-- Object Options -->\r\n @if (isObject(optionsList[0])) { @for (item of optionsList; track $index)\r\n { @if (item[autoCompleteMultiSelectConfig.textField] .toLowerCase()\r\n .includes(inputValue.toLowerCase()) || inputValue == \"\") {\r\n\r\n <li\r\n class=\"checkbox_container\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n autoCompleteMultiSelectConfig.disabledField &&\r\n item[autoCompleteMultiSelectConfig.disabledField]\r\n }\"\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"item.isSelected\"\r\n (click)=\"$event.stopPropagation(); updateSelectedItem(item, 'object')\"\r\n />\r\n\r\n <span class=\"textTruncate\">{{\r\n item[autoCompleteMultiSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n } } }\r\n\r\n <!-- String Options -->\r\n @if (!isObject(optionsList[0])) { @for (item of optionsList; track $index)\r\n { @if (item.toLowerCase().includes(inputValue.toLowerCase()) || inputValue\r\n == \"\") {\r\n <li\r\n class=\"checkbox_container\"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"selectedOptions.includes(item)\"\r\n (click)=\"$event.stopPropagation(); updateSelectedItem(item, 'string')\"\r\n />\r\n <span class=\"textTruncate\">{{ item }}</span>\r\n </li>\r\n } } }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { ToggleConfig } from '../../modal/cats-ui.modal';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-ui-toogle-button',\r\n imports: [],\r\n templateUrl: './toogle-button.component.html',\r\n styleUrl: './toogle-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ToogleButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ToogleButtonComponent {\r\n @Input() toggleConfig!: ToggleConfig;\r\n @Output() onToggled: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n toggle() {\r\n if (!this.toggleConfig.disabled) {\r\n this.toggleConfig.checked = !this.toggleConfig.checked;\r\n this.onToggled.emit(this.toggleConfig.checked);\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: boolean): void {\r\n this.toggleConfig.checked = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.toggleConfig.disabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"toggle_button\">\r\n <label class=\"switch\">\r\n <input \r\n type=\"checkbox\" \r\n [checked]=\"toggleConfig.checked\" \r\n [disabled]=\"toggleConfig.disabled\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"slider round\"></span>\r\n <span class=\"toggle-status\">\r\n {{ toggleConfig.checked ? 'ON' : 'OFF' }}\r\n </span>\r\n </label>\r\n</div>\r\n","import { Component,EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { CheckBoxConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-checkbox-button',\r\n imports: [],\r\n templateUrl: './checkbox-button.component.html',\r\n styleUrl: './checkbox-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxButtonComponent\r\n implements ControlValueAccessor, OnChanges\r\n{\r\n @Input() checkBoxConfig!: CheckBoxConfig;\r\n @Output() onCheckBoxSelection = new EventEmitter<any>();\r\n @Input() optionList: any[] = [];\r\n @Input() selectedOptions: any[] = [];\r\n\r\n private onChange: (value: any[]) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n get idField(): string {\r\n return this.checkBoxConfig?.idField || 'id';\r\n }\r\n\r\n get textField(): string {\r\n return this.checkBoxConfig?.textField || 'name';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedOptions'] && this.selectedOptions?.length) {\r\n this.applySelectedOptions();\r\n }\r\n }\r\n\r\n /**\r\n * @description normalizeSelectedValue the value according t\r\n * @param item\r\n * @returns\r\n */\r\n normalizeSelectedValue(item: any): string {\r\n if (item == null) return '';\r\n\r\n if (typeof item === 'string') return item; // case 1: string of id or name\r\n if (item.id) return item.id; // case 2: object with id\r\n if (item.name) return item.name; // case 3: object with name\r\n\r\n return ''; // fallback\r\n }\r\n\r\n /**\r\n * @description Method is to Apply selectedOptions on input change\r\n * @author Shiva Kant\r\n */\r\n private applySelectedOptions() {\r\n const normalized = this.selectedOptions.map((s: any) =>\r\n this.normalizeSelectedValue(s)\r\n );\r\n this.optionList = this.optionList.map((task) => {\r\n const taskId = task.id;\r\n const taskName = task.name;\r\n\r\n const isParentSelected =\r\n normalized.includes(taskId) || normalized.includes(taskName);\r\n\r\n const updatedSubtasks = (task.subtasks ?? []).map((sub: any) => {\r\n const subId = sub.id;\r\n const subName = sub.name;\r\n\r\n return {\r\n ...sub,\r\n checked: normalized.includes(subId) || normalized.includes(subName),\r\n };\r\n });\r\n\r\n return {\r\n ...task,\r\n checked:\r\n isParentSelected || updatedSubtasks.every((s: any) => s.checked),\r\n subtasks: updatedSubtasks,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method is to Checkbox change handler\r\n * @author Shiva Kant\r\n * @param event\r\n * @param parentIndex\r\n * @param subIndex\r\n */\r\n onCheckboxChange(event: Event, parentIndex: number, subIndex?: number) {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n\r\n this.optionList = this.optionList.map((task, i) => {\r\n const safeTask = {\r\n ...task,\r\n checked: task.checked ?? false,\r\n subtasks: task.subtasks ?? [],\r\n };\r\n\r\n if (i === parentIndex) {\r\n if (subIndex === undefined) {\r\n // Parent checkbox toggled\r\n safeTask.checked = checked;\r\n safeTask.subtasks = safeTask.subtasks.map((sub: any) => ({\r\n ...sub,\r\n checked,\r\n }));\r\n } else if (safeTask.subtasks[subIndex]) {\r\n // Subtask toggled\r\n safeTask.subtasks[subIndex].checked = checked;\r\n // Parent checked only if all subtasks are checked\r\n safeTask.checked = safeTask.subtasks.every((sub: any) => sub.checked);\r\n }\r\n }\r\n\r\n return safeTask;\r\n });\r\n\r\n const checkedTasks = this.optionList\r\n .filter(\r\n (task) =>\r\n (task.checked ?? false) ||\r\n task.subtasks?.some((s: any) => s.checked ?? false)\r\n )\r\n .map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks?.filter((s: any) => s.checked ?? false) || [],\r\n }));\r\n\r\n const selectedObjects = checkedTasks.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks.filter((s: any) => s.checked),\r\n }));\r\n\r\n this.onCheckBoxSelection.emit(selectedObjects);\r\n this.onChange(this.optionList);\r\n this.onTouched();\r\n }\r\n /**\r\n * @description Indeterminate state for parent on option checked\r\n * @param task\r\n * @returns\r\n */\r\n partiallyComplete(task: any): boolean {\r\n if (!task?.subtasks?.length) return false;\r\n const done = task.subtasks.filter((t: any) => t.checked).length;\r\n return done > 0 && done < task.subtasks.length;\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.optionList = value.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks ? [...task.subtasks] : [],\r\n }));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.optionList.forEach((task) => {\r\n task.checked = false;\r\n task.subtasks?.forEach((sub: any) => (sub.checked = false));\r\n });\r\n }\r\n }\r\n}\r\n","<div class=\"parent_container\">\r\n <ul>\r\n @for (task of optionList; let parentIndex = $index; track $index) {\r\n <li>\r\n <!-- Parent Checkbox -->\r\n <label class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [name]=\"checkBoxConfig.name\"\r\n [checked]=\"task.checked\"\r\n [disabled]=\"\r\n checkBoxConfig.disabledField\r\n ? task[checkBoxConfig.disabledField]\r\n : false\r\n \"\r\n [indeterminate]=\"partiallyComplete(task)\"\r\n (change)=\"onCheckboxChange($event, parentIndex)\"\r\n />\r\n <span class=\"textTruncate\">{{ task[textField] }}</span>\r\n </label>\r\n\r\n <!-- Subtasks -->\r\n @if (task.subtasks && task.subtasks.length > 0) {\r\n <ul class=\"sub\">\r\n @for (sub of task.subtasks; let idx = $index; track $index) {\r\n <li>\r\n <label class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"sub.checked\"\r\n (change)=\"onCheckboxChange($event, parentIndex, idx)\"\r\n />\r\n <!-- <span class=\"checkmark\"></span> -->\r\n <span class=\"label-text\">{{ sub[textField] }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { RadioButtonConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-radio-button',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './radio-button.component.html',\r\n styleUrl: './radio-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadioButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RadioButtonComponent implements ControlValueAccessor {\r\n @Input() config!: RadioButtonConfig;\r\n @Input() optionList: any[] = [];\r\n @Output() selectionChange = new EventEmitter<any>();\r\n // selectedRadio pass id in number or name in string or full object\r\n @Input() selectedRadio: any;\r\n\r\n value: any = null;\r\n isDisabled = false;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedRadio'] && this.optionList?.length) {\r\n if (!this.selectedRadio) return;\r\n\r\n const selected = this.selectedRadio;\r\n\r\n const match = this.optionList.find((opt) => {\r\n const optValue = this.extractValue(opt);\r\n const optLabel = this.extractLabel(opt);\r\n\r\n if (typeof selected === 'string' || typeof selected === 'number') {\r\n // Match primitive against value or label\r\n return selected === optValue || selected === optLabel;\r\n } else if (typeof selected === 'object') {\r\n // Match object against option's value or label\r\n const selValue = this.extractValue(selected);\r\n const selLabel = this.extractLabel(selected);\r\n return selValue === optValue || selLabel === optLabel;\r\n }\r\n return false;\r\n });\r\n\r\n if (match) {\r\n this.value = this.extractValue(match);\r\n this.onChange(this.value);\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n /**\r\n * @description method to handle change of toggle button\r\n * @author Shiva Kant\r\n * @param option\r\n */\r\n handleChange(option: any) {\r\n this.value = this.extractValue(option);\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.selectionChange.emit(option);\r\n }\r\n /**\r\n * @description method to extractValue\r\n * @author Shiva Kant\r\n * @param option\r\n * @returns\r\n */\r\n extractValue(option: any): any {\r\n if (typeof option === 'string' || typeof option === 'number') {\r\n return option;\r\n }\r\n\r\n const key = this.config.valueField ?? 'id'; // ALWAYS a string\r\n return option[key];\r\n }\r\n\r\n extractLabel(option: any): string {\r\n if (typeof option === 'string') return option;\r\n\r\n const key = this.config.textField ?? 'label';\r\n return option[key];\r\n }\r\n\r\n /**\r\n * * @description method to normalizeValue\r\n * @author Shiva Kant\r\n * @param value\r\n * @returns\r\n */\r\n normalizeValue(value: any): any {\r\n if (value == null) return null;\r\n\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n // object case → return id or valueField\r\n const key = this.config.valueField ?? 'id';\r\n return value[key];\r\n }\r\n}\r\n","<div class=\"radio_group\" [ngClass]=\"config.layout\">\r\n @if (config.label) {\r\n <div class=\"group_label\">{{ config.label }}</div>\r\n }\r\n\r\n <div class=\"radio_option_container\">\r\n @for (option of optionList; track $index) {\r\n <div class=\"radio_option\">\r\n <input\r\n type=\"radio\"\r\n [name]=\"config.name\"\r\n [id]=\"extractValue(option)\"\r\n [disabled]=\"config.disabled ? option[config.disabled] : false\"\r\n [value]=\"extractValue(option)\"\r\n [(ngModel)]=\"value\"\r\n (change)=\"handleChange(option)\"\r\n />\r\n <label [for]=\"extractValue(option)\">{{ extractLabel(option) }}</label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule, DatePipe } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, Inject, Input, LOCALE_ID, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { DateConfig } from '../../modal/cats-ui.modal';\r\ninterface IRange {\r\n value: Date;\r\n label: string;\r\n}\r\n@Component({\r\n selector: 'cats-ui-date-time-picker',\r\n imports: [CommonModule, OutsideClickDirective],\r\n templateUrl: './date-time-picker.component.html',\r\n styleUrl: './date-time-picker.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: DateTimePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DateTimePickerComponent,\r\n multi: true,\r\n },\r\n DatePipe,\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class DateTimePickerComponent\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Output() dateTimeSelected = new EventEmitter<any>();\r\n @Input() dateConfig!: DateConfig;\r\n @Input() minDate?: string;\r\n @Input() maxDate?: string;\r\n @Input() preSelectedValue: any;\r\n selectedDateTime: any;\r\n currentDate = new Date();\r\n currentMonth = this.currentDate.getMonth();\r\n currentYear = this.currentDate.getFullYear();\r\n selectedDate: number | null = null;\r\n selectedTime: string | null = null;\r\n calendar: number[][] = [];\r\n timeSlots: IRange[] = [];\r\n rangeStart: number | null = null;\r\n rangeEnd: number | null = null;\r\n selectedMonth: any;\r\n selectedYear: any;\r\n control!: AbstractControl<any, any>;\r\n disableControl: boolean = false;\r\n date: any = '';\r\n calendarView: string = 'defaultView';\r\n yearRange: number[] = [];\r\n daysInMonth: any[] = [];\r\n selectedDay: number = 0;\r\n selectedStartDate: any;\r\n selectedEndDate: any;\r\n isOpen: boolean = false;\r\n showYearSelector = false;\r\n monthRange: any = {\r\n '0': 'JAN',\r\n '01': 'FEB',\r\n '02': 'MAR',\r\n '03': 'APR',\r\n '04': 'MAY',\r\n '05': 'JUN',\r\n '06': 'JUL',\r\n '07': 'AUG',\r\n '08': 'SEP',\r\n '09': 'OCT',\r\n '10': 'NOV',\r\n '11': 'DEC',\r\n };\r\n constructor(\r\n @Inject(LOCALE_ID) private locale: string,\r\n private cd: ChangeDetectorRef,\r\n private datePipe: DatePipe,\r\n ) {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['selectedDateTime']?.currentValue) {\r\n this.selectedDateTime = [];\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n ngOnInit(): void {\r\n this.generateYearRange();\r\n // this.generateCalendar();\r\n this.generateTimeRanges();\r\n if (this.preSelectedValue) {\r\n this.initializeCalendar();\r\n }\r\n }\r\n\r\n private onTouchedCallback: () => void = () => {};\r\n private onChangeCallback: (_: any) => void = () => {};\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.selectedDateTime = value;\r\n this.onChangeCallback(value);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (this.control) {\r\n isDisabled ? this.control.disable() : this.control.enable();\r\n }\r\n }\r\n /**\r\n * @description Validates date time picker component\r\n * @author Shiva Kant\r\n * @param control\r\n * @returns validate\r\n */\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control;\r\n const selected = this.date ? new Date(this.date) : null;\r\n\r\n // Check required manually\r\n const isRequired =\r\n control.validator && control.validator(control)?.['required'];\r\n\r\n if (\r\n (isRequired || control.hasError('required')) &&\r\n (!this.date || !this.selectedDay)\r\n ) {\r\n return { required: true };\r\n } else if (this.minDate && selected && selected < new Date(this.minDate)) {\r\n return { minDate: true };\r\n } else if (this.maxDate && selected && selected > new Date(this.maxDate)) {\r\n return { maxDate: true };\r\n }\r\n\r\n return null;\r\n }\r\n /**\r\n * @description method to toggleCalendar\r\n * @author Shiva Kant\r\n */\r\n toggleCalendar(): void {\r\n this.isOpen = !this.isOpen;\r\n if (this.date && this.isOpen) {\r\n this.currentDate = new Date(this.date);\r\n this.selectedDay = this.currentDate.getDate();\r\n }\r\n this.calendarView = 'defaultView';\r\n this.generateCalendar();\r\n if (this.isOpen) {\r\n let ele = document.getElementsByClassName('calendar-footer');\r\n setTimeout(() => {\r\n ele[0]?.scrollIntoView();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @description Closes calendar\r\n * @author Shiva Kant\r\n */\r\n closeCalendar(): void {\r\n this.isOpen = false;\r\n this.calendarView = 'defaultView';\r\n }\r\n /**\r\n * @description Method to Gets month year\r\n * @author Shiva Kant\r\n * @returns month year\r\n */\r\n getMonthYear(): { month: string; year: string } {\r\n return {\r\n month: this.currentDate.toLocaleString('default', {\r\n month: 'long',\r\n }),\r\n year: this.currentDate.toLocaleString('default', {\r\n year: 'numeric',\r\n }),\r\n };\r\n }\r\n\r\n /**\r\n * @description Method to Updates current year month\r\n * @author Shiva Kant\r\n */\r\n updateCurrentYearMonth(): void {\r\n this.currentYear = this.currentDate.getFullYear();\r\n this.currentMonth = this.currentDate.getMonth();\r\n }\r\n\r\n /**\r\n * @description Method to Selects year\r\n * @author Shiva Kant\r\n * @param year\r\n */\r\n selectYear(year: number): void {\r\n this.currentDate.setFullYear(year);\r\n this.updateCurrentYearMonth();\r\n this.showYearSelector = false;\r\n this.calendarView = 'defaultView';\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Selects month\r\n * @author Shiva Kant\r\n * @param month\r\n */\r\n selectMonth(month: any): void {\r\n this.currentDate.setMonth(month);\r\n this.updateCurrentYearMonth();\r\n this.calendarView = 'defaultView';\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Previous year range\r\n * @author Shiva Kant\r\n */\r\n previousYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year - 18);\r\n }\r\n\r\n /**\r\n * @description Method to Next year range\r\n * @author Shiva Kant\r\n */\r\n nextYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year + 18);\r\n }\r\n\r\n /**\r\n * @description Method to Toggles year selector\r\n * @author Shiva Kant\r\n */\r\n toggleYearSelector(): void {\r\n this.showYearSelector = !this.showYearSelector;\r\n this.generateYearRange();\r\n }\r\n /**\r\n * @description Method to Generates year range\r\n * @author Shiva Kant\r\n */\r\n generateYearRange(): void {\r\n const currentYear = this.currentDate.getFullYear();\r\n const startYear = currentYear - (currentYear % 20);\r\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\r\n }\r\n /**\r\n * @description Method to Determines whether date selectable is\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns true if date selectable\r\n */\r\n isDateSelectable(date: Date): boolean {\r\n const min = this.minDate ? new Date(this.minDate) : null;\r\n const max = this.maxDate ? new Date(this.maxDate) : null;\r\n if (min && date < min) return false;\r\n if (max && date > max) return false;\r\n return true;\r\n }\r\n /**\r\n * @description Method to Determines whether day disabled is\r\n * @author Shiva Kant\r\n * @param day\r\n * @returns true if day disabled\r\n */\r\n isDayDisabled(day: number): boolean {\r\n const date = new Date(\r\n this.currentDate.getFullYear(),\r\n this.currentDate.getMonth(),\r\n day,\r\n );\r\n return !this.isDateSelectable(date);\r\n }\r\n /**\r\n * @description Method to Generates calendar\r\n * @author Shiva Kant\r\n */\r\n generateCalendar(): void {\r\n const year = this.currentDate.getFullYear();\r\n const month = this.currentDate.getMonth();\r\n\r\n const firstDayOfMonth = new Date(year, month, 1);\r\n const firstWeekDay = (firstDayOfMonth.getDay() + 6) % 7; // Convert Sunday (0) to 6, Monday is 0\r\n\r\n const daysInCurrentMonth = new Date(year, month + 1, 0).getDate();\r\n const daysInPreviousMonth = new Date(year, month, 0).getDate();\r\n\r\n const totalCells = 42; // 6 rows of 7 days\r\n const calendarDays: { day: number; date: Date; isCurrentMonth: boolean }[] =\r\n [];\r\n\r\n // Fill previous month days\r\n for (let i = firstWeekDay - 1; i >= 0; i--) {\r\n const day = daysInPreviousMonth - i;\r\n const date = new Date(year, month - 1, day);\r\n calendarDays.push({ day, date, isCurrentMonth: false });\r\n }\r\n\r\n // Fill current month days\r\n for (let day = 1; day <= daysInCurrentMonth; day++) {\r\n const date = new Date(year, month, day);\r\n calendarDays.push({ day, date, isCurrentMonth: true });\r\n }\r\n\r\n // Fill next month days\r\n const remaining = totalCells - calendarDays.length;\r\n for (let day = 1; day <= remaining; day++) {\r\n const date = new Date(year, month + 1, day);\r\n calendarDays.push({ day, date, isCurrentMonth: false });\r\n }\r\n\r\n this.daysInMonth = calendarDays;\r\n }\r\n\r\n /**\r\n * @description Method to Previous month\r\n * @author Shiva Kant\r\n */\r\n previousMonth(): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\r\n this.updateCurrentYearMonth();\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Next month\r\n * @author Shiva Kant\r\n */\r\n nextMonth(): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\r\n this.updateCurrentYearMonth();\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Initializes calendar when preSelectedValue date\r\n * @author Shiva Kant\r\n * @returns calendar\r\n */\r\n initializeCalendar(): void {\r\n if (!this.preSelectedValue) return;\r\n\r\n // Case 1: Single date (string or Date)\r\n if (\r\n typeof this.preSelectedValue === 'string' ||\r\n this.preSelectedValue instanceof Date\r\n ) {\r\n const date = new Date(this.preSelectedValue);\r\n this.selectedDate = date.getDate();\r\n this.selectedMonth = date.getMonth();\r\n this.selectedYear = date.getFullYear();\r\n this.selectedTime = this.formatTime(date);\r\n\r\n // Update current view to show the month/year\r\n this.currentDate = new Date(\r\n this.selectedYear,\r\n this.selectedMonth,\r\n this.selectedDate,\r\n );\r\n this.generateCalendar();\r\n }\r\n\r\n // Case 2: Range of dates\r\n else if (this.preSelectedValue.start && this.preSelectedValue.end) {\r\n const startDate = new Date(this.preSelectedValue.start);\r\n const endDate = new Date(this.preSelectedValue.end);\r\n\r\n // Patch component state\r\n this.rangeStart = startDate.getDate();\r\n this.rangeEnd = endDate.getDate();\r\n\r\n this.selectedStartDate = startDate;\r\n this.selectedEndDate = endDate;\r\n\r\n this.selectedMonth = startDate.getMonth();\r\n this.selectedYear = startDate.getFullYear();\r\n\r\n // Set the current calendar view to the start month/year\r\n this.currentDate = new Date(this.selectedYear, this.selectedMonth, 1);\r\n this.generateCalendar();\r\n\r\n // Optional: If your calendar requires a single selectedTime for range, you could pick start or end\r\n this.selectedTime = this.formatTime(startDate);\r\n\r\n // Emit initial range value\r\n this.emitDateTime();\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to Selects date\r\n * @author Shiva Kant\r\n * @param date\r\n */\r\n selectDate(date: number): void {\r\n const selectedFullDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n date,\r\n );\r\n selectedFullDate.setHours(0, 0, 0, 0);\r\n\r\n this.selectedMonth = this.currentMonth;\r\n this.selectedYear = this.currentYear;\r\n\r\n if (this.dateConfig.selectionMode === 'single') {\r\n this.selectedDate = date;\r\n this.rangeStart = null;\r\n this.rangeEnd = null;\r\n } else {\r\n if (!this.rangeStart || this.rangeEnd) {\r\n this.rangeStart = date;\r\n this.rangeEnd = null;\r\n } else {\r\n this.rangeEnd = date < this.rangeStart ? this.rangeStart : date;\r\n this.rangeStart = date < this.rangeStart ? date : this.rangeStart;\r\n }\r\n }\r\n\r\n this.emitDateTime();\r\n }\r\n\r\n /**\r\n * @description Method to Selects time\r\n * @author Shiva Kant\r\n * @param time\r\n */\r\n selectTime(time: string): void {\r\n this.selectedTime = time;\r\n this.emitDateTime();\r\n }\r\n /**\r\n * @description Method to Determines whether selected date is\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns\r\n */\r\n isSelectedDate(date: number, month: number, year: number): boolean {\r\n if (this.dateConfig.selectionMode === 'single') {\r\n // Check if the day, month, and year match\r\n return (\r\n this.selectedDate === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year\r\n );\r\n } else if (this.dateConfig.selectionMode === 'range') {\r\n // Range selection checks, ensuring both start and end dates are within the same month and year\r\n return !!(\r\n (this.rangeStart &&\r\n this.rangeStart === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year) ||\r\n (this.rangeEnd &&\r\n this.rangeEnd === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year) ||\r\n (this.rangeStart &&\r\n this.rangeEnd &&\r\n date > this.rangeStart &&\r\n date < this.rangeEnd &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year)\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @description Method to Generates time ranges\r\n * @author Shiva Kant\r\n */\r\n generateTimeRanges(): void {\r\n const startTime = new Date();\r\n startTime.setHours(0, 0, 0, 0);\r\n this.timeSlots = Array.from({ length: 48 }, (_, i) => {\r\n const time = new Date(startTime.getTime() + i * 30 * 60 * 1000);\r\n return { value: time, label: this.formatTime(time) };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method to Formats time\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns time\r\n */\r\n formatTime(date: Date): string {\r\n return date.toLocaleTimeString('en-US', {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n /**\r\n * @description Method to Formats date time\r\n * @author Shiva Kant\r\n * @param fullDate\r\n * @param selectedTime\r\n * @returns date time\r\n */\r\n formatDateTime(fullDate: Date, selectedTime: string | null): string {\r\n const date = new Date(fullDate);\r\n\r\n if (!selectedTime) {\r\n // Only date formatting when time not required\r\n return this.datePipe.transform(date, 'yyyy/MM/dd')!;\r\n }\r\n\r\n const [time, period] = selectedTime.split(' ');\r\n let [hours, minutes] = time.split(':').map(Number);\r\n\r\n // Convert 12-hour → 24-hour\r\n if (period === 'PM' && hours !== 12) hours += 12;\r\n if (period === 'AM' && hours === 12) hours = 0;\r\n\r\n date.setHours(hours, minutes, 0, 0);\r\n\r\n return this.datePipe.transform(date, 'yyyy/MM/dd hh:mm a')!;\r\n }\r\n\r\n /**\r\n * @description Method to Emits date time\r\n * @author Shiva Kant\r\n * @returns date time\r\n */\r\n emitDateTime(): void {\r\n if (this.dateConfig.enableTime && !this.selectedTime) {\r\n return; // wait until user selects time\r\n }\r\n if (this.dateConfig.selectionMode === 'single') {\r\n if (!this.selectedDate) return;\r\n\r\n const fullDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.selectedDate,\r\n );\r\n\r\n this.selectedDateTime = this.formatDateTime(\r\n fullDate || '',\r\n this.dateConfig.enableTime ? this.selectedTime : null,\r\n );\r\n\r\n this.writeValue(this.selectedDateTime);\r\n this.date = this.selectedDate;\r\n this.dateTimeSelected.emit(this.selectedDateTime);\r\n\r\n return;\r\n }\r\n if (this.dateConfig.selectionMode === 'range') {\r\n if (!this.rangeStart || !this.rangeEnd) return;\r\n\r\n const startDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.rangeStart,\r\n );\r\n const endDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.rangeEnd,\r\n );\r\n\r\n const startDateTime = this.formatDateTime(\r\n startDate,\r\n this.dateConfig.enableTime ? this.selectedTime : null,\r\n );\r\n const endDateTime = this.formatDateTime(\r\n endDate,\r\n this.dateConfig.enableTime ? this.selectedTime : null,\r\n );\r\n\r\n const rangeResult = { start: startDateTime, end: endDateTime };\r\n\r\n this.writeValue(rangeResult);\r\n this.dateTimeSelected.emit(rangeResult);\r\n }\r\n }\r\n}\r\n","<!-- Calendar -->\r\n\r\n<div\r\n class=\"calendar_wrapper\"\r\n catsOutsideClick\r\n (clickOutSide)=\"closeCalendar()\"\r\n [ngClass]=\"{ 'pe-none': disableControl }\"\r\n>\r\n <div class=\"date_box\" (click)=\"toggleCalendar()\">\r\n @if (dateConfig.selectionMode=='single') {\r\n\r\n <input\r\n type=\"text\"\r\n placeholder=\"Select Date\"\r\n [value]=\"selectedDateTime\"\r\n readonly\r\n [disabled]=\"disableControl\"\r\n />\r\n } @else {\r\n <input\r\n type=\"text\"\r\n placeholder=\"Select date Range\"\r\n [value]=\"\r\n selectedDateTime.start\r\n | date\r\n : 'MM/dd/yyyy' +\r\n ' - ' +\r\n (selectedDateTime.end | date : 'MM/dd/yyyy')\r\n \"\r\n readonly\r\n />\r\n }\r\n <!-- <i-feather name=\"calendar\" class=\"calendar_icon\"></i-feather> -->\r\n <img src=\"images/calendar.svg\" alt=\"\" />\r\n </div>\r\n @if (isOpen) {\r\n <div class=\"calendar-popup\">\r\n <!-- for the header -->\r\n <div class=\"calendar-header\">\r\n <span class=\"navigation-button\" (click)=\"previousMonth()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n <!-- <i-feather name=\"chevron-left\"></i-feather -->\r\n </span>\r\n <div class=\"month-year\">\r\n <span class=\"month\" (click)=\"calendarView = 'monthView'\">\r\n {{ getMonthYear().month }}</span\r\n >\r\n <span class=\"year\" (click)=\"calendarView = 'yearView'\">{{\r\n getMonthYear().year\r\n }}</span>\r\n </div>\r\n\r\n <span class=\"navigation-button\" (click)=\"nextMonth()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n\r\n <!-- <i-feather name=\"chevron-right\"></i-feather -->\r\n </span>\r\n </div>\r\n @if(calendarView === \"monthView\"){\r\n <div class=\"month-grid\">\r\n @for(month of monthRange | keyvalue; track $index){\r\n <span\r\n class=\"month\"\r\n (click)=\"selectMonth(month.key)\"\r\n [ngClass]=\"{ selected: month.key == currentDate.getMonth() }\"\r\n >{{ month.value }}</span\r\n >\r\n }\r\n </div>\r\n } @else if(calendarView === 'yearView'){\r\n <div class=\"year-selector\">\r\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"year-grid\">\r\n @for(year of yearRange;track $index){\r\n <span\r\n class=\"year\"\r\n (click)=\"selectYear(year)\"\r\n [ngClass]=\"{ selected: year == currentDate.getFullYear() }\"\r\n >{{ year }}</span\r\n >\r\n }\r\n </div>\r\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"calendar_body\">\r\n <div class=\"calendar-grid\">\r\n <!-- Day names -->\r\n @for (day of ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']; track $index) {\r\n\r\n <div class=\"days_name\">\r\n {{ day }}\r\n </div>\r\n }\r\n\r\n <!-- Calendar dates -->\r\n @for (dayObj of daysInMonth; track $index) {\r\n <div\r\n class=\"calendar-day\"\r\n [ngClass]=\"{\r\n active:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'single' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ),\r\n\r\n active_start:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n dayObj.day === rangeStart,\r\n\r\n active_end:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n dayObj.day === rangeEnd,\r\n\r\n range_between_active:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n rangeStart != null && rangeEnd != null &&\r\n dayObj.day > rangeStart &&\r\n dayObj.day < rangeEnd,\r\n\r\n other_month: !dayObj.isCurrentMonth,\r\n disabled: isDayDisabled(dayObj.day),\r\n notInCurrentMonth: !dayObj.isCurrentMonth\r\n }\"\r\n (click)=\"\r\n dayObj.isCurrentMonth &&\r\n !isDayDisabled(dayObj.day) &&\r\n selectDate(dayObj.day)\r\n \"\r\n >\r\n {{ dayObj.day }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- TIME SLOTS (only if showTime = true) -->\r\n @if (dateConfig.enableTime) {\r\n <div class=\"times\">\r\n @for (timeSlot of timeSlots; track $index) {\r\n <span\r\n class=\"span_time\"\r\n [ngClass]=\"{ active: selectedTime === timeSlot.label }\"\r\n (click)=\"selectTime(timeSlot.label)\"\r\n >\r\n {{ timeSlot.label }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[catsUiTooltip]',\r\n})\r\nexport class CatsUiTooltipDirective implements OnInit, OnDestroy {\r\n @Input('catsUiTooltip') tooltipText = '';\r\n @Input() tooltipClass?: string = '';\r\n\r\n private tooltipEl!: HTMLElement;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit(): void {\r\n this.showTooltip();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('mouseenter')\r\n showTooltip() {\r\n this.createTooltip();\r\n this.positionTooltip();\r\n }\r\n\r\n @HostListener('mouseleave')\r\n hideTooltip() {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('window:resize')\r\n @HostListener('window:scroll')\r\n adjustOnWindowChange() {\r\n if (this.tooltipEl) this.positionTooltip();\r\n }\r\n\r\n /**\r\n * @description Creates tooltip\r\n * @author Shiva Kant\r\n * @returns\r\n */\r\n private createTooltip() {\r\n if (this.tooltipEl) return;\r\n\r\n this.tooltipEl = this.renderer.createElement('div');\r\n this.tooltipEl.innerText = this.tooltipText;\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'position', 'fixed');\r\n // this.renderer.setStyle(this.tooltipEl, 'padding', '6px 10px');\r\n // this.renderer.setStyle(this.tooltipEl, 'background', '#ffffff');\r\n // this.renderer.setStyle(this.tooltipEl, 'color', '#434a51');\r\n // this.renderer.setStyle(this.tooltipEl, 'borderRadius', '4px');\r\n // this.renderer.setStyle(this.tooltipEl, 'zIndex', '9999');\r\n // this.renderer.setStyle(this.tooltipEl, 'whiteSpace', 'nowrap');\r\n // Add a custom class if provided\r\n if (this.tooltipClass) {\r\n this.renderer.addClass(this.tooltipEl, this.tooltipClass);\r\n } else {\r\n // Optionally, you can add a default class here\r\n this.renderer.addClass(this.tooltipEl, 'default-tooltip-class');\r\n }\r\n\r\n document.body.appendChild(this.tooltipEl);\r\n }\r\n\r\n /**\r\n * @description Removes tooltip\r\n * @author Shiva Kant\r\n */\r\n private removeTooltip() {\r\n if (this.tooltipEl) {\r\n this.tooltipEl.remove();\r\n this.tooltipEl = null as any;\r\n }\r\n }\r\n\r\n /**\r\n * @description Positions tooltip\r\n * @author Shiva Kant\r\n */\r\n private positionTooltip() {\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\r\n\r\n const spacing = 8; // distance from host element\r\n\r\n const fitsAbove = hostRect.top >= tooltipRect.height + spacing;\r\n const fitsBelow =\r\n window.innerHeight - hostRect.bottom >= tooltipRect.height + spacing;\r\n const fitsLeft = hostRect.left >= tooltipRect.width + spacing;\r\n const fitsRight =\r\n window.innerWidth - hostRect.right >= tooltipRect.width + spacing;\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n // Priority: bottom → top → right → left\r\n if (fitsBelow) {\r\n top = hostRect.bottom + spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsAbove) {\r\n top = hostRect.top - tooltipRect.height - spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsRight) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.right + spacing;\r\n } else if (fitsLeft) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.left - tooltipRect.width - spacing;\r\n } else {\r\n // fallback → bottom with clamped position\r\n top = hostRect.bottom + spacing;\r\n left = Math.min(\r\n Math.max(10, hostRect.left),\r\n window.innerWidth - tooltipRect.width - 10\r\n );\r\n }\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'top', `${top}px`);\r\n this.renderer.setStyle(this.tooltipEl, 'left', `${left}px`);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion',\r\n imports: [],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss',\r\n})\r\nexport class AccordionComponent {\r\n openedIndex: number | null = null;\r\n\r\n /**\r\n * @description Toggles accordion component\r\n * @author Shiva Kant\r\n * @param index \r\n */\r\n toggle(index: number): void {\r\n this.openedIndex = this.openedIndex === index ? null : index;\r\n }\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @param index \r\n * @returns true if open \r\n */\r\n isOpen(index: number): boolean {\r\n return this.openedIndex === index;\r\n }\r\n}\r\n","<div class=\"accordion\">\r\n <ng-content></ng-content> <!-- Will contain AccordionItem components -->\r\n</div>\r\n","import {\r\n Component,\r\n ContentChild,\r\n Inject,\r\n Input,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { AccordionComponent } from '../accordion.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion-item',\r\n imports: [CommonModule],\r\n templateUrl: './accordion-item.component.html',\r\n styleUrl: './accordion-item.component.scss',\r\n})\r\nexport class AccordionItemComponent {\r\n @Input() title: string = '';\r\n @Input() index: number = 0;\r\n\r\n // Change this to allow null instead of undefined\r\n @ContentChild(TemplateRef) contentTemplate: TemplateRef<any> | null = null;\r\n\r\n constructor(\r\n @Inject(AccordionComponent) private accordion: AccordionComponent\r\n ) {}\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @returns true if open\r\n */\r\n isOpen(): boolean {\r\n return this.accordion.isOpen(this.index);\r\n }\r\n\r\n /**\r\n * @description Toggles accordion item component\r\n * @author Shiva Kant\r\n */\r\n toggle(): void {\r\n this.accordion.toggle(this.index);\r\n }\r\n\r\n /**\r\n * @description perform any initialization after content is injected\r\n * @author Shiva Kant\r\n */\r\n ngAfterContentInit(): void {\r\n if (!this.contentTemplate) {\r\n console.error(\r\n 'No content template provided for accordion item:',\r\n this.title\r\n );\r\n }\r\n }\r\n}\r\n","<div class=\"accordion-item\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <h3>{{ title }}</h3>\r\n <img\r\n [src]=\"isOpen() ? 'images/chevron-up.svg' : 'images/chevron-down.svg'\"\r\n alt=\"\"\r\n />\r\n </div>\r\n\r\n <div class=\"accordion-body\" [class.open]=\"isOpen()\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n </div>\r\n</div>\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tabContent]',\r\n standalone: true,\r\n})\r\nexport class TabContentDirective {\r\n constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tabHeading]',\r\n standalone: true\r\n})\r\nexport class TabHeadingDirective {\r\n constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Component, ContentChild } from '@angular/core';\r\nimport { TabContentDirective } from '../../tab-content.directive';\r\nimport { TabHeadingDirective } from '../../tab-heading.directive';\r\n\r\n@Component({\r\n selector: 'cats-ui-tab-item',\r\n imports: [],\r\n templateUrl: './tab-item.component.html',\r\n styleUrl: './tab-item.component.scss',\r\n})\r\nexport class TabItemComponent {\r\n @ContentChild(TabHeadingDirective) heading!: TabHeadingDirective;\r\n @ContentChild(TabContentDirective) content!: TabContentDirective;\r\n}\r\n","<p>tab-item works!</p>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ContentChildren,\r\n QueryList,\r\n} from '@angular/core';\r\nimport { TabItemComponent } from './tab-item/tab-item.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-tab',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n imports: [CommonModule],\r\n})\r\nexport class TabComponent {\r\n @Input() activeTab = 0;\r\n @Input() disabledTabs: number[] = [];\r\n\r\n @Output() selectTab: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @ContentChildren(TabItemComponent) items!: QueryList<TabItemComponent>;\r\n\r\n /**\r\n * @description Sets active\r\n * @author Shiva Kant\r\n * @param index \r\n */\r\n setActive(index: number) {\r\n if (!this.disabledTabs.includes(index)) {\r\n this.activeTab = index;\r\n this.selectTab.emit(index); \r\n }\r\n }\r\n}\r\n","<ul class=\"tab-header\">\r\n @for (item of items; track $index) {\r\n <ng-container>\r\n <li\r\n class=\"tab-item\"\r\n [class.active]=\"activeTab === $index\"\r\n [class.disabled]=\"disabledTabs.includes($index)\"\r\n (click)=\"setActive($index)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"item.heading.template\"></ng-container>\r\n </li>\r\n </ng-container>\r\n\r\n }\r\n</ul>\r\n\r\n<div class=\"tab-content\">\r\n @for (item of items; track $index) {\r\n <ng-container>\r\n @if (activeTab === $index) {\r\n <ng-container *ngTemplateOutlet=\"item.content.template\"></ng-container>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cats-ui\r\n */\r\n\r\nexport * from './lib/services/cats-ui.service';\r\nexport * from './lib/components/input';\r\nexport * from './lib/components/single-select';\r\nexport * from './lib/components/multi-select';\r\nexport * from './lib/components/search-box';\r\nexport * from './lib/components/auto-complete-single-select';\r\nexport * from './lib/directives/outside-click.directive'\r\nexport * from './lib/components/auto-complete-multi-select';\r\nexport * from './lib/modal/cats-ui.modal';\r\nexport * from './lib/components/toogle-button';\r\nexport * from './lib/components/checkbox-button';\r\nexport * from './lib/components/radio-button';\r\nexport * from './lib/components/date-time-picker';\r\nexport * from './lib/directives/cats-ui-tooltip.directive';\r\nexport * from './lib/components/accordion';\r\nexport * from './lib/components/tabs';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","noop"],"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/date-time-picker/date-time-picker.component.ts","../../../projects/cats-ui/src/lib/components/date-time-picker/date-time-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/tabs/tab-content.directive.ts","../../../projects/cats-ui/src/lib/components/tabs/tab-heading.directive.ts","../../../projects/cats-ui/src/lib/components/tabs/tab/tab-item/tab-item.component.ts","../../../projects/cats-ui/src/lib/components/tabs/tab/tab-item/tab-item.component.html","../../../projects/cats-ui/src/lib/components/tabs/tab/tab.component.ts","../../../projects/cats-ui/src/lib/components/tabs/tab/tab.component.html","../../../projects/cats-ui/src/public-api.ts","../../../projects/cats-ui/src/cats-ui-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CatsUiService {\r\n\r\n constructor() { }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n FormControl,\r\n NG_VALIDATORS,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { InputConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-input',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class InputComponent implements ControlValueAccessor, Validator {\r\n @Input() inputConfig!: InputConfig;\r\n @Output() onKeyDown = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n @Output() onKeyUp = new EventEmitter<{ value: string } & KeyboardEvent>();\r\n\r\n value: string = '';\r\n disabled = false;\r\n touched = false;\r\n control: FormControl | null = null;\r\n showPassword = false;\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n /**\r\n * @description Method to when value changes\r\n * @author Shiva Kant\r\n */\r\n handleInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value = target.value;\r\n this.onChange(this.value);\r\n\r\n if (this.control) {\r\n this.control.markAsDirty();\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n /**\r\n * @description Method to Handle key down event\r\n * @author Shiva Kant\r\n */\r\n handleKeyDown(event: KeyboardEvent) {\r\n this.onKeyDown.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to handle key up event\r\n * @author Shiva Kant\r\n */\r\n handleKeyUp(event: KeyboardEvent) {\r\n this.onKeyUp.emit({ value: this.value, ...event });\r\n }\r\n\r\n /**\r\n * @description Method to Handle blur (touched\r\n * @author Shiva Kant\r\n */\r\n\r\n handleBlur(event: FocusEvent): void {\r\n this.touched = true;\r\n this.onTouched();\r\n const control = (event.target as any)?.control;\r\n control?.markAsTouched?.();\r\n }\r\n /**\r\n * @description Method to ControlValueAccessor methods\r\n * @author Shiva Kant\r\n */\r\n\r\n writeValue(value: any): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n /**\r\n * @description Method to Validator interface\r\n * @author Shiva Kant\r\n */\r\n\r\n validate(control: FormControl): any {\r\n this.control = control;\r\n if (this.inputConfig?.type === 'email') {\r\n return Validators.email(control);\r\n }\r\n return null;\r\n }\r\n /**\r\n * @description method to use show password\r\n * @author Shiva Kant\r\n */\r\n togglePassword() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n}\r\n","<div class=\"input_container\">\r\n @if (inputConfig.label) {\r\n <label>{{ inputConfig.label }}</label>\r\n }\r\n <div class=\"custom-input\">\r\n <input\r\n class=\"input-box\"\r\n [type]=\"showPassword ? 'text' : inputConfig.type\"\r\n [placeholder]=\"inputConfig.placeholder\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"value\"\r\n (input)=\"handleInput($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n (keydown)=\"handleKeyDown($event)\"\r\n (keyup)=\"handleKeyUp($event)\"\r\n />\r\n <!-- Eye Icon Only When Type Is Password -->\r\n @if (inputConfig.type === 'password') {\r\n <span class=\"eye_icon\" (click)=\"togglePassword()\">\r\n <img\r\n [src]=\"showPassword ? 'images/eye.svg' : 'images/eye-off.svg'\"\r\n alt=\"toggle password visibility\"\r\n />\r\n </span>\r\n }\r\n </div>\r\n</div>\r\n","export class SingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n required?: boolean = false;\r\n}\r\n\r\nexport class MultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Select Option';\r\n prefixLabel?: string = '';\r\n enableSearch?: boolean = false;\r\n chipLimit: number = 2;\r\n selectAll?: boolean = true;\r\n required?: boolean = false;\r\n}\r\n\r\nexport class SearchConfig {\r\n serachValue: string = '';\r\n placeholder?: string = 'Search';\r\n}\r\n\r\nexport class InputConfig {\r\n type: 'text' | 'email' | 'password' | 'number' = 'text';\r\n placeholder?: string = '';\r\n label?: string = '';\r\n}\r\n\r\nexport class AutoCompleteSingleSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n customInput: boolean = false;\r\n}\r\nexport class AutoCompleteMultiSelectConfig {\r\n idField: string = 'id';\r\n textField: string = 'name';\r\n disabledField?: string = '';\r\n selectAll?: boolean = true;\r\n placeholder?: string = 'Enter or Select';\r\n required?: boolean = false;\r\n chipLimit: number = 2;\r\n customInput: boolean = false;\r\n pattern?: string = '';\r\n}\r\nexport class ToggleConfig {\r\n checked: boolean = false;\r\n disabled?: boolean = false;\r\n}\r\nexport class CheckBoxSubtask {\r\n idField: string = '';\r\n textField: string = '';\r\n checked?: boolean = false;\r\n}\r\n\r\nexport class CheckBoxConfig {\r\n idField: string = '';\r\n textField: string = '';\r\n disabledField?: string = '';\r\n name: string = '';\r\n checked?: boolean = false;\r\n subtasks?: CheckBoxSubtask[];\r\n}\r\nexport interface RadioButtonConfig {\r\n label?: string;\r\n disabled?: string;\r\n valueField?: string;\r\n textField?: string;\r\n name: string;\r\n layout?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport interface DateConfig {\r\n selectionMode: 'single' | 'range';\r\n enableTime?: boolean;\r\n}\r\n","\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { SingleSelectConfig } from '../../modal/cats-ui.modal';\r\n\r\nconst noop = () => {};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const SINGLE_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-single-select',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './single-select.component.html',\r\n styleUrl: './single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: SingleSelectComponent,\r\n multi: true,\r\n },\r\n SINGLE_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class SingleSelectComponent\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() singleSelectConfig: SingleSelectConfig=new SingleSelectConfig();\r\n @Input() selectedOption: any;\r\n @Output() onSelection = new EventEmitter();\r\n \r\n showDropdown = false;\r\n searchText: string = '';\r\n inValid: boolean = false;\r\n control!: FormControl<any> | null;\r\n disableControl: boolean = false;\r\n @Output() onScroll: any = new EventEmitter();\r\n @Input() parentNativeElement: any;\r\n\r\n @ContentChild('selectedData') selectedData!: TemplateRef<any>;\r\n\r\n constructor(private cd: ChangeDetectorRef, private el: ElementRef) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n this.optionList = [];\r\n } else {\r\n if (this.optionList.length > 10) this.singleSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n this.parentNativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n if (typeof obj == 'string' || typeof obj == 'number') return true;\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n this.selectedOption = item;\r\n this.toggleDropdown();\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(item);\r\n }\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param obj this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(obj: any): void {\r\n this.selectedOption = '';\r\n\r\n if (this.optionList.length && obj) {\r\n if (typeof obj === 'string' || typeof obj === 'number') {\r\n if (\r\n typeof this.optionList?.[0] === 'string' ||\r\n typeof this.optionList?.[0] === 'number'\r\n ) {\r\n if (this.optionList.includes(obj)) {\r\n this.selectedOption = obj;\r\n }\r\n } else if (obj != '') {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] == obj ||\r\n option[this.singleSelectConfig.textField] == obj\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n obj?.hasOwnProperty(this.singleSelectConfig.idField) &&\r\n !this.isObjEmpty(this.optionList[0])\r\n ) {\r\n for (const option of this.optionList) {\r\n if (\r\n option[this.singleSelectConfig.idField] ==\r\n obj[this.singleSelectConfig.idField]\r\n ) {\r\n this.selectedOption = option;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n setTimeout(() => {\r\n this.onChangeCallback(this.selectedOption);\r\n }, 0);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.singleSelectConfig.required) {\r\n this.inValid =\r\n this.selectedOption == '' ||\r\n JSON.stringify(this.selectedOption) == '{}';\r\n }\r\n if (this.showDropdown) this.onTouchedCallback();\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) => {\r\n if (typeof option != 'object') {\r\n return option?.toLowerCase().includes(this.searchText.toLowerCase());\r\n } else {\r\n return option[this.singleSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase());\r\n }\r\n });\r\n }\r\n}","<div class=\"main-wrapper\" id=\"main-wrapper-single-select\">\r\n <div\r\n class=\"single-select-dropdown\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n 'border-danger':\r\n (control?.touched || control?.dirty) &&\r\n control?.invalid &&\r\n control?.errors,\r\n 'disable-control': disableControl\r\n }\"\r\n >\r\n <div class=\"left_details\">\r\n @if(singleSelectConfig.prefixLabel){\r\n <span class=\"predefine_label\">\r\n <p class=\"textTruncate\">{{ singleSelectConfig.prefixLabel }}</p>\r\n </span>\r\n } @if (!isObjEmpty(selectedOption) &&\r\n selectedOption[singleSelectConfig.textField]) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultTemplate let-data=\"data\">\r\n <span class=\"textTruncate\">\r\n {{ selectedOption[singleSelectConfig.textField] }}\r\n </span>\r\n </ng-template>\r\n }@else if(selectedOption && isObjEmpty(selectedOption)){\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedData ? selectedData : defaultTemplate1\"\r\n [ngTemplateOutletContext]=\"{ data: selectedOption }\"\r\n ></ng-container>\r\n\r\n <ng-template #defaultTemplate1 let-data=\"data\">\r\n <span class=\"textTruncate\">\r\n {{ selectedOption }}\r\n </span>\r\n </ng-template>\r\n }@else{\r\n <span class=\"placeholderColor textTruncate\">{{\r\n singleSelectConfig.placeholder\r\n }}</span>\r\n\r\n }\r\n </div>\r\n <span class=\"arrow_icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n srcset=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div\r\n class=\"dropdown-list\"\r\n id=\"container_scroll\"\r\n (scroll)=\"onDivScroll($event)\"\r\n >\r\n @if (singleSelectConfig.enableSearch) {\r\n <div class=\"search_bar\">\r\n <div class=\"input_box\">\r\n <img src=\"images/search.svg\" class=\"search_icon\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter_search_box\"\r\n name=\"\"\r\n id=\"\"\r\n placeholder=\"Search here\"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cross_icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul>\r\n @if(isObjEmpty(this.optionList[0] || \"\")){ @for (option of\r\n filteredOptionsValue; track $index) {\r\n <li\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField]\r\n }\"\r\n >\r\n <span class=\"textTruncate\">{{ option }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no_data\">No Data Found.</li>\r\n } } @else { @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n singleSelectConfig.disabledField &&\r\n option[singleSelectConfig.disabledField]\r\n }\"\r\n >\r\n <span class=\"textTruncate\">{{\r\n option[singleSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"no_data\">No Data Found.</li>\r\n } }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, ControlValueAccessor, FormControl, FormsModule } from '@angular/forms';\r\nimport { MultiSelectConfig } from '../../modal/cats-ui.modal';\r\nconst noop = () => {}\r\nexport const MULTI_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\nexport const MULTI_SELECT_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MultiSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-multi-select',\r\n imports: [NgClass, FormsModule],\r\n templateUrl: './multi-select.component.html',\r\n styleUrl: './multi-select.component.scss',\r\n providers: [\r\n MULTI_SELECT_CONTROL_VALUE_ACCESSOR,\r\n MULTI_SELECT_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { tabindex: '0' },\r\n})\r\nexport class MultiSelectComponent\r\n implements OnChanges, OnInit, ControlValueAccessor\r\n{\r\n @Input() optionList: any[] = [];\r\n @Input() multiSelectConfig: MultiSelectConfig = new MultiSelectConfig();\r\n\r\n @Input() selectedOptions: any[] = [];\r\n\r\n @Output() onSelection = new EventEmitter();\r\n\r\n control!: FormControl<any>;\r\n\r\n showDropdown = false;\r\n isListArrayOfObject = false;\r\n isSelectedAll = false;\r\n inValid: boolean = false;\r\n searchText: string = '';\r\n disabledControl: boolean = false;\r\n\r\n constructor(private cd: ChangeDetectorRef, private el: ElementRef) {}\r\n\r\n // These lifecycle hooks will be in use for further implementation\r\n ngOnInit(): void {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (\r\n _changes['optionList'].currentValue &&\r\n _changes['optionList'].currentValue.length > 0\r\n ) {\r\n if (\r\n typeof this.optionList[0] === 'string' ||\r\n typeof this.optionList[0] === 'number'\r\n ) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n const item: any = {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n isSelected: false,\r\n };\r\n\r\n if (this.multiSelectConfig.disabledField) {\r\n item[this.multiSelectConfig.disabledField] = false;\r\n }\r\n\r\n return item;\r\n });\r\n } else {\r\n this.isListArrayOfObject = true;\r\n this.optionList = this.optionList.map((option: any) => {\r\n return {\r\n ...option,\r\n isSelected: false,\r\n };\r\n });\r\n }\r\n if (this.optionList.length > 10)\r\n this.multiSelectConfig.enableSearch = true;\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n\r\n /**\r\n * @description Method to check if provide arg is an object or not\r\n * @author Shiva Kant\r\n * @param Obj:any\r\n * @returns boolean\r\n */\r\n isObjEmpty(obj: any): boolean {\r\n return !(obj && Object.keys(obj).length > 0);\r\n }\r\n\r\n /**\r\n * @description Method is to update selected option and then\r\n * update formcontrol by call onChangeCallback.\r\n * @author Shiva Kant\r\n * @param item\r\n * @returns void\r\n */\r\n updateSelectedOption(item: any): void {\r\n item.isSelected = !item.isSelected;\r\n if (!item.isSelected) {\r\n let ind = this.selectedOptions.findIndex(\r\n (option: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField]\r\n );\r\n if (ind >= 0) this.selectedOptions.splice(ind, 1);\r\n } else {\r\n this.selectedOptions.push(item);\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true\r\n );\r\n\r\n this.inValid = false;\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onTouchedCallback();\r\n this.onSelection.emit(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n\r\n // Below Methods are used to register form API methods in these variable to use them later\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n\r\n validate(control: FormControl): void {\r\n this.control = control;\r\n }\r\n\r\n // Below are the CVA interface methods to make this component able to bind with formcontrol in parent component\r\n\r\n /**\r\n * @description method to update value of selectedOption\r\n * @author Shiva Kant\r\n * @param controlValue this is provided by formcontrol\r\n * @returns void\r\n */\r\n writeValue(controlValue: any[]): void {\r\n if (this.optionList.length) {\r\n this.selectedOptions = [];\r\n if (controlValue && controlValue.length > 0) {\r\n if (\r\n typeof controlValue[0] === 'string' ||\r\n typeof controlValue[0] === 'number'\r\n ) {\r\n controlValue = controlValue.map((option: string | number) => {\r\n return {\r\n [this.multiSelectConfig.idField]: option,\r\n [this.multiSelectConfig.textField]: option,\r\n };\r\n });\r\n }\r\n for (const option of controlValue) {\r\n let ind = this.optionList.findIndex(\r\n (item: any) =>\r\n item[this.multiSelectConfig.idField] ==\r\n option[this.multiSelectConfig.idField] ||\r\n item[this.multiSelectConfig.textField] ==\r\n option[this.multiSelectConfig.textField]\r\n );\r\n if (ind >= 0) {\r\n this.optionList[ind] = {\r\n ...this.optionList[ind],\r\n isSelected: true,\r\n };\r\n this.selectedOptions.push(this.optionList[ind]);\r\n }\r\n }\r\n }\r\n this.isSelectedAll = this.optionList.every(\r\n (option: any) => option.isSelected == true\r\n );\r\n this.onChangeCallback(this.selectedOptions);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * @description method to register on change callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n /**\r\n * @description method to register on touch callback from form API\r\n * @author Shiva Kant\r\n * @param fn\r\n * @returns void\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n //willbe used in further implementation\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledControl = isDisabled;\r\n }\r\n\r\n /**\r\n * @description method to update ontouchcallback on blur\r\n * @author Shiva Kant\r\n */\r\n @HostListener('blur')\r\n public onTouched() {\r\n this.onTouchedCallback();\r\n }\r\n\r\n /**\r\n * @description method to toggle dropdown on outside click\r\n * @author Shiva Kant\r\n */\r\n @HostListener('document:click', ['$event'])\r\n public closeDropdown(event: any) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.showDropdown && this.multiSelectConfig.required) {\r\n this.inValid = this.selectedOptions.length < 0;\r\n }\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n checkUncheckAll(): void {\r\n if (this.isSelectedAll) {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: false };\r\n });\r\n\r\n this.isSelectedAll = false;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n } else {\r\n this.optionList = this.optionList.map((option: any) => {\r\n if (\r\n this.multiSelectConfig.disabledField &&\r\n option[this.multiSelectConfig.disabledField]\r\n ) {\r\n return option;\r\n }\r\n return { ...option, isSelected: true };\r\n });\r\n\r\n this.isSelectedAll = true;\r\n this.selectedOptions = this.optionList.filter((o) => o.isSelected);\r\n }\r\n\r\n this.onChangeCallback(this.selectedOptions);\r\n this.onSelection.emit(this.selectedOptions);\r\n }\r\n\r\n get filteredOptionsValue(): any[] {\r\n if (!this.searchText || this.searchText.trim() === '') {\r\n return this.optionList;\r\n }\r\n return this.optionList.filter((option) =>\r\n option[this.multiSelectConfig.textField]\r\n ?.toLowerCase()\r\n .includes(this.searchText.toLowerCase())\r\n );\r\n }\r\n}\r\n","<div class=\"main-wrapper\">\r\n <div\r\n class=\"display-div\"\r\n (click)=\"toggleDropdown()\"\r\n [ngClass]=\"{\r\n 'border-danger': this.inValid,\r\n 'disable-control': disabledControl\r\n }\"\r\n >\r\n <div class=\"left_details\">\r\n @if(multiSelectConfig.prefixLabel){\r\n <span class=\"predefine_label\">\r\n <p class=\"textTruncate\">{{ multiSelectConfig.prefixLabel }}</p>\r\n </span>\r\n }\r\n <div class=\"multi_label_wrapper\">\r\n @if (selectedOptions.length>0) { @for (item of selectedOptions; track\r\n $index) { @if(multiSelectConfig.chipLimit>=$index+1){\r\n <div class=\"input_text\">\r\n <span class=\"textTruncate\">{{\r\n item[multiSelectConfig.textField]\r\n }}</span>\r\n <!-- <i-feather name=\"x\" (click)=\"$event.stopPropagation();updateSelectedOption(item)\"></i-feather> -->\r\n <img\r\n src=\"images/x.svg\"\r\n (click)=\"$event.stopPropagation(); updateSelectedOption(item)\"\r\n class=\"cross_icon\"\r\n alt=\"\"\r\n />\r\n </div>\r\n } } } @else{\r\n <span class=\"placeholderColor textTruncate\">{{\r\n multiSelectConfig.placeholder\r\n }}</span>\r\n } @if(multiSelectConfig.chipLimit < selectedOptions.length) {\r\n <div class=\"view_more\">\r\n +{{ selectedOptions.length - multiSelectConfig.chipLimit }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <span class=\"arrow_icon\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </span>\r\n </div>\r\n @if (showDropdown) {\r\n <div class=\"dropdown-list\" id=\"container_scroll\">\r\n @if (multiSelectConfig.enableSearch) {\r\n <div class=\"search_bar\">\r\n <div class=\"input_box\">\r\n <img src=\"images/search.svg\" alt=\"\" />\r\n <input\r\n type=\"text\"\r\n class=\"filter_search_box\"\r\n name=\"\"\r\n id=\"\"\r\n placeholder=\"Search here\"\r\n [(ngModel)]=\"searchText\"\r\n />\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cross_icon\"\r\n alt=\"\"\r\n (click)=\"searchText = ''\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <ul>\r\n @if (multiSelectConfig.selectAll && optionList.length>0) {\r\n <li (click)=\"checkUncheckAll()\">\r\n <span class=\"checkbox_container\">\r\n <input type=\"checkbox\" [checked]=\"isSelectedAll\" />\r\n @if(isSelectedAll){ UnSelectAll } @else{ SelectAll }\r\n </span>\r\n </li>\r\n } @for (option of filteredOptionsValue; track $index) {\r\n <li\r\n class=\"checkbox_container\"\r\n (click)=\"updateSelectedOption(option)\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n multiSelectConfig.disabledField &&\r\n option[multiSelectConfig.disabledField]\r\n }\"\r\n >\r\n <input type=\"checkbox\" [checked]=\"option.isSelected\" />\r\n <span class=\"textTruncate\"\r\n >{{ option[multiSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n } @empty {\r\n <li class=\"no_data\">No Data Found.</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n} from '@angular/forms';\r\nimport { SearchConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-search-box',\r\n imports: [FormsModule],\r\n templateUrl: './search-box.component.html',\r\n styleUrl: './search-box.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SearchBoxComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SearchBoxComponent implements ControlValueAccessor {\r\n searchParam: string = '';\r\n @Input() searchConfig: SearchConfig = new SearchConfig();\r\n @Output() onClose = new EventEmitter<void>();\r\n @Output() searchParamValue = new EventEmitter<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n public onTouched: () => void = () => {};\r\n isDisabled = false;\r\n\r\n ngOnInit(): void {\r\n this.searchParam = this.searchConfig?.serachValue || '';\r\n }\r\n /**\r\n * @description Method to Called when input changes\r\n * @author Shiva Kant\r\n */\r\n\r\n onInputChange(event: any) {\r\n const value = (event.target as HTMLInputElement)?.value;\r\n this.searchParam = value;\r\n this.onChange(value);\r\n this.searchParamValue.emit(value);\r\n }\r\n /**\r\n * @description Method to closeSearchBar\r\n * @author Shiva Kant\r\n */\r\n closeSearchBar(): void {\r\n this.searchParam = '';\r\n this.onChange('');\r\n this.searchParamValue.emit('');\r\n this.onClose.emit();\r\n }\r\n\r\n // -------- ControlValueAccessor methods --------\r\n writeValue(value: string): void {\r\n this.searchParam = value || '';\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"search_input\">\r\n <img src=\"images/search.svg\" alt=\"\" srcset=\"\" />\r\n <input\r\n [placeholder]=\"searchConfig.placeholder\"\r\n type=\"text\"\r\n [value]=\"searchParam\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n @if (searchParam.length > 0) {\r\n <div class=\"cross_icon\">\r\n <img src=\"images/x.svg\" alt=\"\" srcset=\"\" (click)=\"closeSearchBar()\" />\r\n </div>\r\n }\r\n</div>\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: '[catsOutsideClick]',\r\n standalone: true,\r\n})\r\nexport class OutsideClickDirective {\r\n @Output() public clickOutSide = new EventEmitter<MouseEvent>();\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n /**\r\n * @description Hosts listener\r\n * @author Shiva Kant\r\n * @param event \r\n * @returns click \r\n */\r\n @HostListener('document:click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n const targetElement = event.target as HTMLElement | null;\r\n\r\n // Guard clause: exit early if no target or not an element\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const clickInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickInside) {\r\n this.clickOutSide.emit(event);\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\nimport { AutoCompleteSingleSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nconst noop = () => {};\r\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\nexport const DROPDOWN_CONTROL_VALUE_VALIDATOR: any = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteSingleSelectComponent),\r\n multi: true,\r\n};\r\n@Component({\r\n selector: 'cats-ui-input-single-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-single-select.component.html',\r\n styleUrl: './auto-complete-single-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: AutoCompleteSingleSelectComponent,\r\n multi: true,\r\n },\r\n DROPDOWN_CONTROL_VALUE_VALIDATOR,\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteSingleSelectComponent implements OnInit {\r\n @Input() autoSingleSelectConfig: AutoCompleteSingleSelectConfig =\r\n new AutoCompleteSingleSelectConfig();\r\n @Input() placeholder = 'Enter or Select Option';\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOption: any;\r\n constructor() {}\r\n inValid: boolean = false;\r\n control!: FormControl<any>;\r\n disableControl: boolean = false;\r\n ngOnInit(): void {}\r\n private onTouchedCallback: () => void = noop;\r\n private onChangeCallback: (_: any) => void = noop;\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string): void {\r\n if (type == 'object') {\r\n this.inputValue = item[this.autoSingleSelectConfig.textField];\r\n } else {\r\n this.inputValue = item;\r\n }\r\n this.selectedOption = item;\r\n this.showDropdown = false;\r\n this.inValid = false;\r\n this.onChangeCallback(item);\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(this.selectedOption);\r\n }\r\n\r\n writeValue(obj: any): void {\r\n this.syncSelectionWithValue(obj);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disableControl = isDisabled;\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control as FormControl;\r\n\r\n if (!this.autoSingleSelectConfig.required) return null;\r\n\r\n const val = control.value;\r\n\r\n const isEmpty =\r\n val === null ||\r\n val === undefined ||\r\n val === '' ||\r\n (typeof val === 'object' && Object.keys(val).length === 0);\r\n\r\n return isEmpty ? { required: true } : null;\r\n }\r\n\r\n // ---------- Helpers ----------\r\n private syncSelectionWithValue(value: any): void {\r\n this.selectedOption = null;\r\n this.inputValue = '';\r\n\r\n if (!value || !this.optionsList?.length) return;\r\n\r\n if (typeof value !== 'object') {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o === value ||\r\n o?.[this.autoSingleSelectConfig.idField] === value ||\r\n o?.[this.autoSingleSelectConfig.textField] === value,\r\n ) ?? value;\r\n } else {\r\n this.selectedOption =\r\n this.optionsList.find(\r\n (o) =>\r\n o[this.autoSingleSelectConfig.idField] ===\r\n value[this.autoSingleSelectConfig.idField],\r\n ) ?? value;\r\n }\r\n\r\n this.inputValue = this.isObject(this.selectedOption)\r\n ? this.selectedOption[this.autoSingleSelectConfig.textField]\r\n : this.selectedOption;\r\n }\r\n /**\r\n * @description this method is use to update input value\r\n */\r\n updateInputValue(): void {\r\n let data: any = null;\r\n\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.selectedOption = null;\r\n this.onChangeCallback(null);\r\n } else {\r\n if (this.isObject(this.optionsList?.[0])) {\r\n data = {\r\n [this.autoSingleSelectConfig.idField]: null,\r\n [this.autoSingleSelectConfig.textField]: this.inputValue,\r\n };\r\n } else {\r\n data = this.inputValue;\r\n }\r\n\r\n this.selectedOption = data;\r\n this.onChangeCallback(data);\r\n }\r\n\r\n this.onTouchedCallback();\r\n this.onItemSelection.emit(data);\r\n this.control?.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus(): void {\r\n if (!this.inputValue || this.inputValue.trim() === '') {\r\n this.selectedOption = null;\r\n this.onChangeCallback(null);\r\n\r\n // force validation\r\n this.control?.updateValueAndValidity();\r\n this.showDropdown = false;\r\n return;\r\n }\r\n\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on click outside\r\n */\r\n outsideClicked(): void {\r\n if (this.showDropdown) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n this.showDropdown = false;\r\n }\r\n onClickEnter(control: any) {\r\n if (this.autoSingleSelectConfig.customInput) {\r\n this.updateInputValue();\r\n }\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n}","<div class=\"main_container\" catsOutsideClick (clickOutSide)=\"outsideClicked()\">\r\n <div class=\"input_container\">\r\n <div class=\"input_box\">\r\n <input\r\n class=\"textTruncate\"\r\n type=\"text\"\r\n [(ngModel)]=\"inputValue\"\r\n (keyup.enter)=\"onClickEnter(inputValue)\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n (input)=\"updateDropdownStatus()\"\r\n [placeholder]=\"autoSingleSelectConfig.placeholder\"\r\n />\r\n </div>\r\n <div class=\"arrow_icon\" (click)=\"toggleDropdown()\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n alt=\"up-arrow\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n alt=\"down-arrow\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (showDropdown) {\r\n <div class=\"dropdown_list_single_auto_select\">\r\n <!-- if optionList is an array of object-->\r\n @if (isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul>\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if\r\n (item[autoSingleSelectConfig.textField].toLowerCase().includes(inputValue.toLowerCase())\r\n || inputValue == '') {\r\n <li\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled_option'\r\n : ''\r\n \"\r\n >\r\n <span class=\"textTruncate\">\r\n {{ item[autoSingleSelectConfig.textField] }}\r\n </span>\r\n </li>\r\n }\r\n </ng-container>\r\n }\r\n </ul>\r\n </ng-container>\r\n }\r\n\r\n <!-- if optionList is an array of string-->\r\n @if (!isObject(optionsList[0])) {\r\n <ng-container>\r\n <ul>\r\n @for (item of optionsList; track $index) {\r\n <ng-container>\r\n @if (item.includes(inputValue) || inputValue == '') {\r\n <li\r\n [ngClass]=\"\r\n autoSingleSelectConfig.disabledField &&\r\n item[autoSingleSelectConfig.disabledField]\r\n ? 'disabled_option'\r\n : ''\r\n \"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n {{ item }}\r\n </li>\r\n\r\n } </ng-container\r\n >}\r\n </ul></ng-container\r\n >}\r\n </div>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, forwardRef, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport { AutoCompleteMultiSelectConfig } from '../../modal/cats-ui.modal';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\n\r\n@Component({\r\n selector: 'cats-ui-input-multi-select',\r\n imports: [CommonModule, FormsModule, OutsideClickDirective],\r\n templateUrl: './auto-complete-multi-select.component.html',\r\n styleUrl: './auto-complete-multi-select.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => AutoCompleteMultiSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class AutoCompleteMultiSelectComponent\r\n implements OnInit, ControlValueAccessor, Validator\r\n{\r\n @Input() autoCompleteMultiSelectConfig!: AutoCompleteMultiSelectConfig;\r\n @Input() selectedItem: any;\r\n @Input() optionsList: any[] = [];\r\n @Input() parentNativeElement: any;\r\n @Output() onItemSelection = new EventEmitter();\r\n @Output() onScroll: any = new EventEmitter();\r\n showDropdown: boolean = false;\r\n inputValue: string = '';\r\n selectedOptions: any[] = [];\r\n isSelectedAll: boolean = false;\r\n inValid: boolean = false;\r\n control!: FormControl<any>;\r\n isDisabled = false;\r\n constructor() {}\r\n ngOnInit() {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['optionList']?.currentValue) {\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n private onChange: (_: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private applyDefaultConfig() {\r\n const defaults = new AutoCompleteMultiSelectConfig();\r\n this.autoCompleteMultiSelectConfig = {\r\n ...defaults,\r\n ...this.autoCompleteMultiSelectConfig,\r\n };\r\n }\r\n\r\n /**\r\n * @description Method to toggle dropdown list\r\n * @author Shiva Kant\r\n */\r\n toggleDropdown(): void {\r\n this.showDropdown = !this.showDropdown;\r\n if (this.parentNativeElement) {\r\n this.parentNativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n let parentDiv = document.getElementById(this.parentNativeElement);\r\n setTimeout(() => {\r\n let parentBoundary = parentDiv?.getBoundingClientRect() || ({} as any);\r\n let dropdonwList: any = document.getElementById('container_scroll');\r\n let elBoundary = dropdonwList?.getBoundingClientRect() || {};\r\n if (parentBoundary?.['bottom'] < elBoundary?.['bottom']) {\r\n dropdonwList.style['transform'] = `translate(0px,-${\r\n elBoundary?.['height'] + 54\r\n }px`;\r\n }\r\n }, 20);\r\n }\r\n }\r\n writeValue(value: any[]): void {\r\n if (Array.isArray(value)) {\r\n this.selectedOptions = value;\r\n\r\n // sync optionsList selection\r\n this.optionsList.forEach((opt) => {\r\n opt.isSelected = value.some((v) =>\r\n this.isObject(v)\r\n ? v[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField]\r\n : v === opt,\r\n );\r\n });\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n this.updateSelectAllState();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control as FormControl;\r\n\r\n if (!this.autoCompleteMultiSelectConfig.required) return null;\r\n\r\n const val = control.value;\r\n\r\n const isEmpty =\r\n val === null ||\r\n val === undefined ||\r\n val === '' ||\r\n (typeof val === 'object' && Object.keys(val).length === 0);\r\n\r\n return isEmpty ? { required: true } : null;\r\n }\r\n onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.inputValue = target.value;\r\n }\r\n /**\r\n * @description method to update selected item\r\n * @author Shiva Kant\r\n * @param item this is selected item from list\r\n * @param type type of list\r\n * @returns none\r\n */\r\n updateSelectedItem(item: any, type: string) {\r\n if (type === 'object') {\r\n // Toggle the option's isSelected\r\n item.isSelected = !item.isSelected;\r\n\r\n if (item.isSelected) {\r\n // add to selectedOptions if not already present\r\n const exists = this.selectedOptions.some(\r\n (opt) =>\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (!exists) this.selectedOptions.push(item);\r\n } else {\r\n // remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter(\r\n (opt) =>\r\n !(\r\n this.isObject(opt) &&\r\n opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField]\r\n ),\r\n );\r\n }\r\n } else {\r\n // string type\r\n const existsIndex = this.selectedOptions.findIndex((opt) => opt === item);\r\n if (existsIndex > -1) {\r\n // remove\r\n this.selectedOptions.splice(existsIndex, 1);\r\n } else {\r\n // add\r\n this.selectedOptions.push(item);\r\n }\r\n\r\n // If optionsList contains this string, also toggle its isSelected there\r\n const idxInOptions = this.optionsList.findIndex(\r\n (o) => typeof o === 'string' && o === item,\r\n );\r\n if (idxInOptions > -1) {\r\n // toggle corresponding option's isSelected\r\n const opt = this.optionsList[idxInOptions] as any;\r\n opt.isSelected = !opt.isSelected;\r\n }\r\n }\r\n\r\n // keep select all state consistent\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to checkUncheckAll\r\n * @author Shiva Kant\r\n */\r\n\r\n checkUncheckAll(event: any) {\r\n if (event) event.stopPropagation();\r\n this.isSelectedAll = !this.isSelectedAll;\r\n\r\n this.optionsList.forEach((item) => {\r\n if (\r\n !this.autoCompleteMultiSelectConfig.disabledField ||\r\n !item[this.autoCompleteMultiSelectConfig.disabledField]\r\n ) {\r\n item.isSelected = this.isSelectedAll;\r\n }\r\n });\r\n\r\n // Keep custom values intact\r\n const customChips = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? !this.optionsList.some(\r\n (o) =>\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n opt[this.autoCompleteMultiSelectConfig.textField],\r\n )\r\n : !this.optionsList.includes(opt),\r\n );\r\n\r\n const selectedOptionItems = this.optionsList.filter(\r\n (opt) => opt.isSelected,\r\n );\r\n\r\n this.selectedOptions = [...customChips, ...selectedOptionItems];\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n\r\n /**\r\n * @description method to removeChip\r\n * @author Shiva Kant\r\n */\r\n removeChip(item: any) {\r\n // Remove from selectedOptions\r\n this.selectedOptions = this.selectedOptions.filter((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] !==\r\n (this.isObject(item)\r\n ? item[this.autoCompleteMultiSelectConfig.textField]\r\n : item)\r\n : opt !== item,\r\n );\r\n\r\n // If item corresponds to an optionsList entry, unselect it there too\r\n if (this.isObject(item)) {\r\n const idx = this.optionsList.findIndex(\r\n (o: any) =>\r\n this.isObject(o) &&\r\n o[this.autoCompleteMultiSelectConfig.textField] ===\r\n item[this.autoCompleteMultiSelectConfig.textField],\r\n );\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n } else {\r\n // string case\r\n const idx = this.optionsList.findIndex((o) => o === item);\r\n if (idx > -1) {\r\n this.optionsList[idx].isSelected = false;\r\n }\r\n }\r\n\r\n // update select all state & emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions); // 🔥 THIS updates formControl\r\n this.onTouched();\r\n\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n /**\r\n * @description method to update dropdown list state on input type\r\n * @author Shiva Kant\r\n */\r\n updateDropdownStatus() {\r\n this.showDropdown = true;\r\n }\r\n\r\n /**\r\n * @description method to check if the list is Array of string or object\r\n * @author Shiva Kant\r\n * @param data this is the any one one item of list\r\n * @returns boolean\r\n */\r\n isObject(data: any): boolean {\r\n const type = typeof data;\r\n return data && type != 'string';\r\n }\r\n /**\r\n * @description This method is use to close dropdown on onClickEnter\r\n * @author Shiva Kant\r\n */\r\n\r\n onClickEnter(control?: any): void {\r\n if (!this.inputValue.trim()) return;\r\n\r\n // pattern check\r\n if (this.autoCompleteMultiSelectConfig.pattern) {\r\n const regex = new RegExp(this.autoCompleteMultiSelectConfig.pattern);\r\n if (!regex.test(this.inputValue)) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n }\r\n\r\n const val = this.inputValue.trim();\r\n const valLower = val.toLowerCase();\r\n\r\n // Avoid duplicate\r\n const exists = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower\r\n : opt.toLowerCase() === valLower,\r\n );\r\n if (exists) {\r\n this.inputValue = '';\r\n return;\r\n }\r\n\r\n // Try find matched item in optionsList\r\n const matchedItem = this.isObject(this.optionsList?.[0])\r\n ? this.optionsList.find(\r\n (opt: any) =>\r\n opt[this.autoCompleteMultiSelectConfig.textField].toLowerCase() ===\r\n valLower,\r\n )\r\n : this.optionsList.find((opt: any) => opt.toLowerCase() === valLower);\r\n\r\n if (matchedItem) {\r\n // If matched, ensure option is marked selected and present in selectedOptions\r\n matchedItem.isSelected = true;\r\n const already = this.selectedOptions.some((opt) =>\r\n this.isObject(opt)\r\n ? opt[this.autoCompleteMultiSelectConfig.textField] ===\r\n matchedItem[this.autoCompleteMultiSelectConfig.textField]\r\n : opt === matchedItem,\r\n );\r\n if (!already) this.selectedOptions.push(matchedItem);\r\n } else if (this.autoCompleteMultiSelectConfig.customInput) {\r\n // create custom item and mark it selected\r\n let newItem: any = val;\r\n if (this.isObject(this.optionsList?.[0])) {\r\n newItem = {\r\n [this.autoCompleteMultiSelectConfig.idField]: null,\r\n [this.autoCompleteMultiSelectConfig.textField]: val,\r\n isSelected: true, // mark selected for consistency\r\n __isCustom: true, // optional flag to identify custom items\r\n };\r\n }\r\n this.selectedOptions.push(newItem);\r\n }\r\n\r\n // reset input but keep dropdown open (as you wanted)\r\n this.inputValue = '';\r\n\r\n // update select all state and emit\r\n this.updateSelectAllState();\r\n this.onChange(this.selectedOptions);\r\n this.onTouched();\r\n this.onItemSelection.emit(this.selectedOptions);\r\n }\r\n outsideClicked(): void {\r\n this.showDropdown = false;\r\n }\r\n /**\r\n * @description method to load more list\r\n * @author Shiva Kant\r\n * @param event\r\n */\r\n onDivScroll(event: any): void {\r\n if (\r\n event.target.offsetHeight + event.target.scrollTop >=\r\n event.target.scrollHeight - 1 &&\r\n this.optionsList.length\r\n ) {\r\n this.onScroll.emit();\r\n }\r\n }\r\n\r\n updateSelectAllState() {\r\n // only consider non-disabled items for select-all state\r\n const selectable = this.optionsList.filter(\r\n (opt: any) =>\r\n !(\r\n this.autoCompleteMultiSelectConfig.disabledField &&\r\n opt[this.autoCompleteMultiSelectConfig.disabledField]\r\n ),\r\n );\r\n this.isSelectedAll =\r\n selectable.length > 0 && selectable.every((opt: any) => !!opt.isSelected);\r\n }\r\n}\r\n","<div class=\"main_container\">\r\n <div\r\n class=\"input_container\"\r\n catsOutsideClick\r\n (clickOutSide)=\"outsideClicked()\"\r\n >\r\n <div class=\"chips_wrapper\">\r\n <!-- Chips -->\r\n @for (item of selectedOptions; track $index) { @if ($index <\r\n autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"chip\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"textTruncate\">\r\n {{\r\n isObject(item)\r\n ? item[autoCompleteMultiSelectConfig.textField]\r\n : item\r\n }}\r\n </span>\r\n <img\r\n src=\"images/x.svg\"\r\n class=\"cross_icon\"\r\n (click)=\"$event.stopPropagation(); removeChip(item)\"\r\n />\r\n </div>\r\n } }\r\n <!-- +N counter -->\r\n @if (selectedOptions.length > autoCompleteMultiSelectConfig.chipLimit) {\r\n <div class=\"view_more\">\r\n +{{ selectedOptions.length - autoCompleteMultiSelectConfig.chipLimit }}\r\n </div>\r\n }\r\n <!-- Input Box (always available) -->\r\n <div class=\"input_box\" (click)=\"$event.stopPropagation()\">\r\n <input\r\n type=\"text\"\r\n [value]=\"inputValue\"\r\n (input)=\"onInput($event)\"\r\n (keyup.enter)=\"onClickEnter()\"\r\n (keyup)=\"updateDropdownStatus()\"\r\n [placeholder]=\"\r\n selectedOptions.length === 0\r\n ? autoCompleteMultiSelectConfig.placeholder\r\n : ''\r\n \"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown toggle -->\r\n <div class=\"arrow_icon\" (click)=\"toggleDropdown()\">\r\n <img\r\n src=\"images/chevron-up.svg\"\r\n [ngClass]=\"{ 'd-none': !showDropdown }\"\r\n />\r\n <img\r\n src=\"images/chevron-down.svg\"\r\n [ngClass]=\"{ 'd-none': showDropdown }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown list -->\r\n @if (showDropdown) {\r\n <div class=\"dropdown_list_multi_auto_select\" id=\"container_scroll\" (click)=\" onDivScroll($event)\">\r\n <ul>\r\n <!-- Select All -->\r\n @if (autoCompleteMultiSelectConfig.selectAll) {\r\n <li\r\n class=\"checkbox_container select_all_item\"\r\n (click)=\"checkUncheckAll($event)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isSelectedAll\"\r\n (click)=\"$event.stopPropagation(); checkUncheckAll($event)\"\r\n />\r\n <span>{{ isSelectedAll ? \"Unselect All\" : \"Select All\" }}</span>\r\n </li>\r\n }\r\n\r\n <!-- Object Options -->\r\n @if (isObject(optionsList[0])) { @for (item of optionsList; track $index)\r\n { @if (item[autoCompleteMultiSelectConfig.textField] .toLowerCase()\r\n .includes(inputValue.toLowerCase()) || inputValue == \"\") {\r\n\r\n <li\r\n class=\"checkbox_container\"\r\n [ngClass]=\"{\r\n disabled_option:\r\n autoCompleteMultiSelectConfig.disabledField &&\r\n item[autoCompleteMultiSelectConfig.disabledField]\r\n }\"\r\n (click)=\"updateSelectedItem(item, 'object')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"item.isSelected\"\r\n (click)=\"$event.stopPropagation(); updateSelectedItem(item, 'object')\"\r\n />\r\n\r\n <span class=\"textTruncate\">{{\r\n item[autoCompleteMultiSelectConfig.textField]\r\n }}</span>\r\n </li>\r\n } } }\r\n\r\n <!-- String Options -->\r\n @if (!isObject(optionsList[0])) { @for (item of optionsList; track $index)\r\n { @if (item.toLowerCase().includes(inputValue.toLowerCase()) || inputValue\r\n == \"\") {\r\n <li\r\n class=\"checkbox_container\"\r\n (click)=\"updateSelectedItem(item, 'string')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"selectedOptions.includes(item)\"\r\n (click)=\"$event.stopPropagation(); updateSelectedItem(item, 'string')\"\r\n />\r\n <span class=\"textTruncate\">{{ item }}</span>\r\n </li>\r\n } } }\r\n </ul>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { ToggleConfig } from '../../modal/cats-ui.modal';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cats-ui-toogle-button',\r\n imports: [],\r\n templateUrl: './toogle-button.component.html',\r\n styleUrl: './toogle-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ToogleButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ToogleButtonComponent {\r\n @Input() toggleConfig!: ToggleConfig;\r\n @Output() onToggled: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n toggle() {\r\n if (!this.toggleConfig.disabled) {\r\n this.toggleConfig.checked = !this.toggleConfig.checked;\r\n this.onToggled.emit(this.toggleConfig.checked);\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: boolean): void {\r\n this.toggleConfig.checked = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.toggleConfig.disabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"toggle_button\">\r\n <label class=\"switch\">\r\n <input \r\n type=\"checkbox\" \r\n [checked]=\"toggleConfig.checked\" \r\n [disabled]=\"toggleConfig.disabled\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"slider round\"></span>\r\n <span class=\"toggle-status\">\r\n {{ toggleConfig.checked ? 'ON' : 'OFF' }}\r\n </span>\r\n </label>\r\n</div>\r\n","import { Component,EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { CheckBoxConfig } from '../../modal/cats-ui.modal';\r\n\r\n@Component({\r\n selector: 'cats-ui-checkbox-button',\r\n imports: [],\r\n templateUrl: './checkbox-button.component.html',\r\n styleUrl: './checkbox-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxButtonComponent\r\n implements ControlValueAccessor, OnChanges\r\n{\r\n @Input() checkBoxConfig!: CheckBoxConfig;\r\n @Output() onCheckBoxSelection = new EventEmitter<any>();\r\n @Input() optionList: any[] = [];\r\n @Input() selectedOptions: any[] = [];\r\n\r\n private onChange: (value: any[]) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n get idField(): string {\r\n return this.checkBoxConfig?.idField || 'id';\r\n }\r\n\r\n get textField(): string {\r\n return this.checkBoxConfig?.textField || 'name';\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedOptions'] && this.selectedOptions?.length) {\r\n this.applySelectedOptions();\r\n }\r\n }\r\n\r\n /**\r\n * @description normalizeSelectedValue the value according t\r\n * @param item\r\n * @returns\r\n */\r\n normalizeSelectedValue(item: any): string {\r\n if (item == null) return '';\r\n\r\n if (typeof item === 'string') return item; // case 1: string of id or name\r\n if (item.id) return item.id; // case 2: object with id\r\n if (item.name) return item.name; // case 3: object with name\r\n\r\n return ''; // fallback\r\n }\r\n\r\n /**\r\n * @description Method is to Apply selectedOptions on input change\r\n * @author Shiva Kant\r\n */\r\n private applySelectedOptions() {\r\n const normalized = this.selectedOptions.map((s: any) =>\r\n this.normalizeSelectedValue(s)\r\n );\r\n this.optionList = this.optionList.map((task) => {\r\n const taskId = task.id;\r\n const taskName = task.name;\r\n\r\n const isParentSelected =\r\n normalized.includes(taskId) || normalized.includes(taskName);\r\n\r\n const updatedSubtasks = (task.subtasks ?? []).map((sub: any) => {\r\n const subId = sub.id;\r\n const subName = sub.name;\r\n\r\n return {\r\n ...sub,\r\n checked: normalized.includes(subId) || normalized.includes(subName),\r\n };\r\n });\r\n\r\n return {\r\n ...task,\r\n checked:\r\n isParentSelected || updatedSubtasks.every((s: any) => s.checked),\r\n subtasks: updatedSubtasks,\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method is to Checkbox change handler\r\n * @author Shiva Kant\r\n * @param event\r\n * @param parentIndex\r\n * @param subIndex\r\n */\r\n onCheckboxChange(event: Event, parentIndex: number, subIndex?: number) {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n\r\n this.optionList = this.optionList.map((task, i) => {\r\n const safeTask = {\r\n ...task,\r\n checked: task.checked ?? false,\r\n subtasks: task.subtasks ?? [],\r\n };\r\n\r\n if (i === parentIndex) {\r\n if (subIndex === undefined) {\r\n // Parent checkbox toggled\r\n safeTask.checked = checked;\r\n safeTask.subtasks = safeTask.subtasks.map((sub: any) => ({\r\n ...sub,\r\n checked,\r\n }));\r\n } else if (safeTask.subtasks[subIndex]) {\r\n // Subtask toggled\r\n safeTask.subtasks[subIndex].checked = checked;\r\n // Parent checked only if all subtasks are checked\r\n safeTask.checked = safeTask.subtasks.every((sub: any) => sub.checked);\r\n }\r\n }\r\n\r\n return safeTask;\r\n });\r\n\r\n const checkedTasks = this.optionList\r\n .filter(\r\n (task) =>\r\n (task.checked ?? false) ||\r\n task.subtasks?.some((s: any) => s.checked ?? false)\r\n )\r\n .map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks?.filter((s: any) => s.checked ?? false) || [],\r\n }));\r\n\r\n const selectedObjects = checkedTasks.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks.filter((s: any) => s.checked),\r\n }));\r\n\r\n this.onCheckBoxSelection.emit(selectedObjects);\r\n this.onChange(this.optionList);\r\n this.onTouched();\r\n }\r\n /**\r\n * @description Indeterminate state for parent on option checked\r\n * @param task\r\n * @returns\r\n */\r\n partiallyComplete(task: any): boolean {\r\n if (!task?.subtasks?.length) return false;\r\n const done = task.subtasks.filter((t: any) => t.checked).length;\r\n return done > 0 && done < task.subtasks.length;\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(value: any[]): void {\r\n if (value) {\r\n this.optionList = value.map((task) => ({\r\n ...task,\r\n subtasks: task.subtasks ? [...task.subtasks] : [],\r\n }));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.optionList.forEach((task) => {\r\n task.checked = false;\r\n task.subtasks?.forEach((sub: any) => (sub.checked = false));\r\n });\r\n }\r\n }\r\n}\r\n","<div class=\"parent_container\">\r\n <ul>\r\n @for (task of optionList; let parentIndex = $index; track $index) {\r\n <li>\r\n <!-- Parent Checkbox -->\r\n <label class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [name]=\"checkBoxConfig.name\"\r\n [checked]=\"task.checked\"\r\n [disabled]=\"\r\n checkBoxConfig.disabledField\r\n ? task[checkBoxConfig.disabledField]\r\n : false\r\n \"\r\n [indeterminate]=\"partiallyComplete(task)\"\r\n (change)=\"onCheckboxChange($event, parentIndex)\"\r\n />\r\n <span class=\"textTruncate\">{{ task[textField] }}</span>\r\n </label>\r\n\r\n <!-- Subtasks -->\r\n @if (task.subtasks && task.subtasks.length > 0) {\r\n <ul class=\"sub\">\r\n @for (sub of task.subtasks; let idx = $index; track $index) {\r\n <li>\r\n <label class=\"checkbox_container\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"sub.checked\"\r\n (change)=\"onCheckboxChange($event, parentIndex, idx)\"\r\n />\r\n <!-- <span class=\"checkmark\"></span> -->\r\n <span class=\"label-text\">{{ sub[textField] }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { RadioButtonConfig } from '../../modal/cats-ui.modal';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-radio-button',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './radio-button.component.html',\r\n styleUrl: './radio-button.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadioButtonComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RadioButtonComponent implements ControlValueAccessor {\r\n @Input() config!: RadioButtonConfig;\r\n @Input() optionList: any[] = [];\r\n @Output() selectionChange = new EventEmitter<any>();\r\n // selectedRadio pass id in number or name in string or full object\r\n @Input() selectedRadio: any;\r\n\r\n value: any = null;\r\n isDisabled = false;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selectedRadio'] && this.optionList?.length) {\r\n if (!this.selectedRadio) return;\r\n\r\n const selected = this.selectedRadio;\r\n\r\n const match = this.optionList.find((opt) => {\r\n const optValue = this.extractValue(opt);\r\n const optLabel = this.extractLabel(opt);\r\n\r\n if (typeof selected === 'string' || typeof selected === 'number') {\r\n // Match primitive against value or label\r\n return selected === optValue || selected === optLabel;\r\n } else if (typeof selected === 'object') {\r\n // Match object against option's value or label\r\n const selValue = this.extractValue(selected);\r\n const selLabel = this.extractLabel(selected);\r\n return selValue === optValue || selLabel === optLabel;\r\n }\r\n return false;\r\n });\r\n\r\n if (match) {\r\n this.value = this.extractValue(match);\r\n this.onChange(this.value);\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n /**\r\n * @description method to handle change of toggle button\r\n * @author Shiva Kant\r\n * @param option\r\n */\r\n handleChange(option: any) {\r\n this.value = this.extractValue(option);\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.selectionChange.emit(option);\r\n }\r\n /**\r\n * @description method to extractValue\r\n * @author Shiva Kant\r\n * @param option\r\n * @returns\r\n */\r\n extractValue(option: any): any {\r\n if (typeof option === 'string' || typeof option === 'number') {\r\n return option;\r\n }\r\n\r\n const key = this.config.valueField ?? 'id'; // ALWAYS a string\r\n return option[key];\r\n }\r\n\r\n extractLabel(option: any): string {\r\n if (typeof option === 'string') return option;\r\n\r\n const key = this.config.textField ?? 'label';\r\n return option[key];\r\n }\r\n\r\n /**\r\n * * @description method to normalizeValue\r\n * @author Shiva Kant\r\n * @param value\r\n * @returns\r\n */\r\n normalizeValue(value: any): any {\r\n if (value == null) return null;\r\n\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n // object case → return id or valueField\r\n const key = this.config.valueField ?? 'id';\r\n return value[key];\r\n }\r\n}\r\n","<div class=\"radio_group\" [ngClass]=\"config.layout\">\r\n @if (config.label) {\r\n <div class=\"group_label\">{{ config.label }}</div>\r\n }\r\n\r\n <div class=\"radio_option_container\">\r\n @for (option of optionList; track $index) {\r\n <div class=\"radio_option\">\r\n <input\r\n type=\"radio\"\r\n [name]=\"config.name\"\r\n [id]=\"extractValue(option)\"\r\n [disabled]=\"config.disabled ? option[config.disabled] : false\"\r\n [value]=\"extractValue(option)\"\r\n [(ngModel)]=\"value\"\r\n (change)=\"handleChange(option)\"\r\n />\r\n <label [for]=\"extractValue(option)\">{{ extractLabel(option) }}</label>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule, DatePipe } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, Inject, Input, LOCALE_ID, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\nimport { OutsideClickDirective } from '../../directives/outside-click.directive';\r\nimport { DateConfig } from '../../modal/cats-ui.modal';\r\ninterface IRange {\r\n value: Date;\r\n label: string;\r\n}\r\n@Component({\r\n selector: 'cats-ui-date-time-picker',\r\n imports: [CommonModule, OutsideClickDirective],\r\n templateUrl: './date-time-picker.component.html',\r\n styleUrl: './date-time-picker.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: DateTimePickerComponent,\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DateTimePickerComponent,\r\n multi: true,\r\n },\r\n DatePipe,\r\n ],\r\n host: { tabindex: '0' },\r\n})\r\nexport class DateTimePickerComponent\r\n implements OnInit, OnChanges, ControlValueAccessor\r\n{\r\n @Output() dateTimeSelected = new EventEmitter<any>();\r\n @Input() dateConfig!: DateConfig;\r\n @Input() minDate?: string;\r\n @Input() maxDate?: string;\r\n @Input() preSelectedValue: any;\r\n selectedDateTime: any;\r\n currentDate = new Date();\r\n currentMonth = this.currentDate.getMonth();\r\n currentYear = this.currentDate.getFullYear();\r\n selectedDate: number | null = null;\r\n selectedTime: string | null = null;\r\n calendar: number[][] = [];\r\n timeSlots: IRange[] = [];\r\n rangeStart: number | null = null;\r\n rangeEnd: number | null = null;\r\n selectedMonth: any;\r\n selectedYear: any;\r\n control!: AbstractControl<any, any>;\r\n disableControl: boolean = false;\r\n date: any = '';\r\n calendarView: string = 'defaultView';\r\n yearRange: number[] = [];\r\n daysInMonth: any[] = [];\r\n selectedDay: number = 0;\r\n selectedStartDate: any;\r\n selectedEndDate: any;\r\n isOpen: boolean = false;\r\n showYearSelector = false;\r\n monthRange: any = {\r\n '0': 'JAN',\r\n '01': 'FEB',\r\n '02': 'MAR',\r\n '03': 'APR',\r\n '04': 'MAY',\r\n '05': 'JUN',\r\n '06': 'JUL',\r\n '07': 'AUG',\r\n '08': 'SEP',\r\n '09': 'OCT',\r\n '10': 'NOV',\r\n '11': 'DEC',\r\n };\r\n constructor(\r\n @Inject(LOCALE_ID) private locale: string,\r\n private cd: ChangeDetectorRef,\r\n private datePipe: DatePipe,\r\n ) {}\r\n ngOnChanges(_changes: SimpleChanges): void {\r\n if (!_changes['selectedDateTime']?.currentValue) {\r\n this.selectedDateTime = [];\r\n } else {\r\n this.writeValue(this.control?.value);\r\n }\r\n }\r\n ngOnInit(): void {\r\n this.generateYearRange();\r\n // this.generateCalendar();\r\n this.generateTimeRanges();\r\n if (this.preSelectedValue) {\r\n this.initializeCalendar();\r\n }\r\n }\r\n\r\n private onTouchedCallback: () => void = () => {};\r\n private onChangeCallback: (_: any) => void = () => {};\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.selectedDateTime = value;\r\n this.onChangeCallback(value);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (this.control) {\r\n isDisabled ? this.control.disable() : this.control.enable();\r\n }\r\n }\r\n /**\r\n * @description Validates date time picker component\r\n * @author Shiva Kant\r\n * @param control\r\n * @returns validate\r\n */\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n this.control = control;\r\n\r\n const selected = this.date ? new Date(this.date) : null;\r\n\r\n if (control.hasError('required') && (!this.date || !this.selectedDay)) {\r\n return { required: true };\r\n }\r\n\r\n if (this.minDate && selected && selected < new Date(this.minDate)) {\r\n return { minDate: true };\r\n }\r\n\r\n if (this.maxDate && selected && selected > new Date(this.maxDate)) {\r\n return { maxDate: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * @description method to toggleCalendar\r\n * @author Shiva Kant\r\n */\r\n toggleCalendar(): void {\r\n this.isOpen = !this.isOpen;\r\n if (this.date && this.isOpen) {\r\n this.currentDate = new Date(this.date);\r\n this.selectedDay = this.currentDate.getDate();\r\n }\r\n this.calendarView = 'defaultView';\r\n this.generateCalendar();\r\n if (this.isOpen) {\r\n let ele = document.getElementsByClassName('calendar-footer');\r\n setTimeout(() => {\r\n ele[0]?.scrollIntoView();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @description Closes calendar\r\n * @author Shiva Kant\r\n */\r\n closeCalendar(): void {\r\n this.isOpen = false;\r\n this.calendarView = 'defaultView';\r\n }\r\n /**\r\n * @description Method to Gets month year\r\n * @author Shiva Kant\r\n * @returns month year\r\n */\r\n getMonthYear(): { month: string; year: string } {\r\n return {\r\n month: this.currentDate.toLocaleString('default', {\r\n month: 'long',\r\n }),\r\n year: this.currentDate.toLocaleString('default', {\r\n year: 'numeric',\r\n }),\r\n };\r\n }\r\n\r\n /**\r\n * @description Method to Updates current year month\r\n * @author Shiva Kant\r\n */\r\n updateCurrentYearMonth(): void {\r\n this.currentYear = this.currentDate.getFullYear();\r\n this.currentMonth = this.currentDate.getMonth();\r\n }\r\n\r\n /**\r\n * @description Method to Selects year\r\n * @author Shiva Kant\r\n * @param year\r\n */\r\n selectYear(year: number): void {\r\n this.currentDate.setFullYear(year);\r\n this.updateCurrentYearMonth();\r\n this.showYearSelector = false;\r\n this.calendarView = 'defaultView';\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Selects month\r\n * @author Shiva Kant\r\n * @param month\r\n */\r\n selectMonth(month: any): void {\r\n this.currentDate.setMonth(month);\r\n this.updateCurrentYearMonth();\r\n this.calendarView = 'defaultView';\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Previous year range\r\n * @author Shiva Kant\r\n */\r\n previousYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year - 18);\r\n }\r\n\r\n /**\r\n * @description Method to Next year range\r\n * @author Shiva Kant\r\n */\r\n nextYearRange(): void {\r\n this.yearRange = this.yearRange.map((year) => year + 18);\r\n }\r\n\r\n /**\r\n * @description Method to Toggles year selector\r\n * @author Shiva Kant\r\n */\r\n toggleYearSelector(): void {\r\n this.showYearSelector = !this.showYearSelector;\r\n this.generateYearRange();\r\n }\r\n /**\r\n * @description Method to Generates year range\r\n * @author Shiva Kant\r\n */\r\n generateYearRange(): void {\r\n const currentYear = this.currentDate.getFullYear();\r\n const startYear = currentYear - (currentYear % 20);\r\n this.yearRange = Array.from({ length: 18 }, (_, i) => startYear + i);\r\n }\r\n /**\r\n * @description Method to Determines whether date selectable is\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns true if date selectable\r\n */\r\n isDateSelectable(date: Date): boolean {\r\n const min = this.minDate ? new Date(this.minDate) : null;\r\n const max = this.maxDate ? new Date(this.maxDate) : null;\r\n if (min && date < min) return false;\r\n if (max && date > max) return false;\r\n return true;\r\n }\r\n /**\r\n * @description Method to Determines whether day disabled is\r\n * @author Shiva Kant\r\n * @param day\r\n * @returns true if day disabled\r\n */\r\n isDayDisabled(day: number): boolean {\r\n const date = new Date(\r\n this.currentDate.getFullYear(),\r\n this.currentDate.getMonth(),\r\n day,\r\n );\r\n return !this.isDateSelectable(date);\r\n }\r\n /**\r\n * @description Method to Generates calendar\r\n * @author Shiva Kant\r\n */\r\n generateCalendar(): void {\r\n const year = this.currentDate.getFullYear();\r\n const month = this.currentDate.getMonth();\r\n\r\n const firstDayOfMonth = new Date(year, month, 1);\r\n const firstWeekDay = (firstDayOfMonth.getDay() + 6) % 7; // Convert Sunday (0) to 6, Monday is 0\r\n\r\n const daysInCurrentMonth = new Date(year, month + 1, 0).getDate();\r\n const daysInPreviousMonth = new Date(year, month, 0).getDate();\r\n\r\n const totalCells = 42; // 6 rows of 7 days\r\n const calendarDays: { day: number; date: Date; isCurrentMonth: boolean }[] =\r\n [];\r\n\r\n // Fill previous month days\r\n for (let i = firstWeekDay - 1; i >= 0; i--) {\r\n const day = daysInPreviousMonth - i;\r\n const date = new Date(year, month - 1, day);\r\n calendarDays.push({ day, date, isCurrentMonth: false });\r\n }\r\n\r\n // Fill current month days\r\n for (let day = 1; day <= daysInCurrentMonth; day++) {\r\n const date = new Date(year, month, day);\r\n calendarDays.push({ day, date, isCurrentMonth: true });\r\n }\r\n\r\n // Fill next month days\r\n const remaining = totalCells - calendarDays.length;\r\n for (let day = 1; day <= remaining; day++) {\r\n const date = new Date(year, month + 1, day);\r\n calendarDays.push({ day, date, isCurrentMonth: false });\r\n }\r\n\r\n this.daysInMonth = calendarDays;\r\n }\r\n\r\n /**\r\n * @description Method to Previous month\r\n * @author Shiva Kant\r\n */\r\n previousMonth(): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\r\n this.updateCurrentYearMonth();\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Next month\r\n * @author Shiva Kant\r\n */\r\n nextMonth(): void {\r\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\r\n this.updateCurrentYearMonth();\r\n this.selectedDay = 0;\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * @description Method to Initializes calendar when preSelectedValue date\r\n * @author Shiva Kant\r\n * @returns calendar\r\n */\r\n initializeCalendar(): void {\r\n if (!this.preSelectedValue) return;\r\n\r\n // Case 1: Single date (string or Date)\r\n if (\r\n typeof this.preSelectedValue === 'string' ||\r\n this.preSelectedValue instanceof Date\r\n ) {\r\n const date = new Date(this.preSelectedValue);\r\n this.selectedDate = date.getDate();\r\n this.selectedMonth = date.getMonth();\r\n this.selectedYear = date.getFullYear();\r\n this.selectedTime = this.formatTime(date);\r\n\r\n // Update current view to show the month/year\r\n this.currentDate = new Date(\r\n this.selectedYear,\r\n this.selectedMonth,\r\n this.selectedDate,\r\n );\r\n this.generateCalendar();\r\n }\r\n\r\n // Case 2: Range of dates\r\n else if (this.preSelectedValue.start && this.preSelectedValue.end) {\r\n const startDate = new Date(this.preSelectedValue.start);\r\n const endDate = new Date(this.preSelectedValue.end);\r\n\r\n // Patch component state\r\n this.rangeStart = startDate.getDate();\r\n this.rangeEnd = endDate.getDate();\r\n\r\n this.selectedStartDate = startDate;\r\n this.selectedEndDate = endDate;\r\n\r\n this.selectedMonth = startDate.getMonth();\r\n this.selectedYear = startDate.getFullYear();\r\n\r\n // Set the current calendar view to the start month/year\r\n this.currentDate = new Date(this.selectedYear, this.selectedMonth, 1);\r\n this.generateCalendar();\r\n\r\n // Optional: If your calendar requires a single selectedTime for range, you could pick start or end\r\n this.selectedTime = this.formatTime(startDate);\r\n\r\n // Emit initial range value\r\n this.emitDateTime();\r\n }\r\n }\r\n\r\n /**\r\n * @description Method to Selects date\r\n * @author Shiva Kant\r\n * @param date\r\n */\r\n selectDate(date: number): void {\r\n const selectedFullDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n date,\r\n );\r\n selectedFullDate.setHours(0, 0, 0, 0);\r\n\r\n this.selectedMonth = this.currentMonth;\r\n this.selectedYear = this.currentYear;\r\n\r\n if (this.dateConfig.selectionMode === 'single') {\r\n this.selectedDate = date;\r\n this.rangeStart = null;\r\n this.rangeEnd = null;\r\n } else {\r\n if (!this.rangeStart || this.rangeEnd) {\r\n this.rangeStart = date;\r\n this.rangeEnd = null;\r\n } else {\r\n this.rangeEnd = date < this.rangeStart ? this.rangeStart : date;\r\n this.rangeStart = date < this.rangeStart ? date : this.rangeStart;\r\n }\r\n }\r\n\r\n this.emitDateTime();\r\n }\r\n\r\n /**\r\n * @description Method to Selects time\r\n * @author Shiva Kant\r\n * @param time\r\n */\r\n selectTime(time: string): void {\r\n this.selectedTime = time;\r\n this.emitDateTime();\r\n }\r\n /**\r\n * @description Method to Determines whether selected date is\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns\r\n */\r\n isSelectedDate(date: number, month: number, year: number): boolean {\r\n if (this.dateConfig.selectionMode === 'single') {\r\n // Check if the day, month, and year match\r\n return (\r\n this.selectedDate === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year\r\n );\r\n } else if (this.dateConfig.selectionMode === 'range') {\r\n // Range selection checks, ensuring both start and end dates are within the same month and year\r\n return !!(\r\n (this.rangeStart &&\r\n this.rangeStart === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year) ||\r\n (this.rangeEnd &&\r\n this.rangeEnd === date &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year) ||\r\n (this.rangeStart &&\r\n this.rangeEnd &&\r\n date > this.rangeStart &&\r\n date < this.rangeEnd &&\r\n this.selectedMonth === month &&\r\n this.selectedYear === year)\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @description Method to Generates time ranges\r\n * @author Shiva Kant\r\n */\r\n generateTimeRanges(): void {\r\n const startTime = new Date();\r\n startTime.setHours(0, 0, 0, 0);\r\n this.timeSlots = Array.from({ length: 48 }, (_, i) => {\r\n const time = new Date(startTime.getTime() + i * 30 * 60 * 1000);\r\n return { value: time, label: this.formatTime(time) };\r\n });\r\n }\r\n\r\n /**\r\n * @description Method to Formats time\r\n * @author Shiva Kant\r\n * @param date\r\n * @returns time\r\n */\r\n formatTime(date: Date): string {\r\n return date.toLocaleTimeString('en-US', {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n /**\r\n * @description Method to Formats date time\r\n * @author Shiva Kant\r\n * @param fullDate\r\n * @param selectedTime\r\n * @returns date time\r\n */\r\n formatDateTime(fullDate: Date, selectedTime: string | null): string {\r\n const date = new Date(fullDate);\r\n\r\n if (!selectedTime) {\r\n // Only date formatting when time not required\r\n return this.datePipe.transform(date, 'yyyy/MM/dd')!;\r\n }\r\n\r\n const [time, period] = selectedTime.split(' ');\r\n let [hours, minutes] = time.split(':').map(Number);\r\n\r\n // Convert 12-hour → 24-hour\r\n if (period === 'PM' && hours !== 12) hours += 12;\r\n if (period === 'AM' && hours === 12) hours = 0;\r\n\r\n date.setHours(hours, minutes, 0, 0);\r\n\r\n return this.datePipe.transform(date, 'yyyy/MM/dd hh:mm a')!;\r\n }\r\n\r\n /**\r\n * @description Method to Emits date time\r\n * @author Shiva Kant\r\n * @returns date time\r\n */\r\n emitDateTime(): void {\r\n if (this.dateConfig.enableTime && !this.selectedTime) {\r\n return; // wait until user selects time\r\n }\r\n if (this.dateConfig.selectionMode === 'single') {\r\n if (!this.selectedDate) return;\r\n\r\n const fullDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.selectedDate,\r\n );\r\n\r\n this.selectedDateTime = this.formatDateTime(\r\n fullDate || '',\r\n this.dateConfig.enableTime ? this.selectedTime : null,\r\n );\r\n\r\n this.writeValue(this.selectedDateTime);\r\n this.date = this.selectedDate;\r\n this.dateTimeSelected.emit(this.selectedDateTime);\r\n\r\n return;\r\n }\r\n if (this.dateConfig.selectionMode === 'range') {\r\n if (!this.rangeStart || !this.rangeEnd) return;\r\n\r\n const startDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.rangeStart,\r\n );\r\n const endDate = new Date(\r\n this.currentYear,\r\n this.currentMonth,\r\n this.rangeEnd,\r\n );\r\n\r\n const startDateTime = this.formatDateTime(\r\n startDate,\r\n this.dateConfig.enableTime ? this.selectedTime : null,\r\n );\r\n const endDateTime = this.formatDateTime(\r\n endDate,\r\n this.dateConfig.enableTime ? this.selectedTime : null,\r\n );\r\n\r\n const rangeResult = { start: startDateTime, end: endDateTime };\r\n\r\n this.writeValue(rangeResult);\r\n this.dateTimeSelected.emit(rangeResult);\r\n }\r\n }\r\n}\r\n","<!-- Calendar -->\r\n\r\n<div\r\n class=\"calendar_wrapper\"\r\n catsOutsideClick\r\n (clickOutSide)=\"closeCalendar()\"\r\n [ngClass]=\"{ 'pe-none': disableControl }\"\r\n>\r\n <div class=\"date_box\" (click)=\"toggleCalendar()\">\r\n @if (dateConfig.selectionMode=='single') {\r\n\r\n <input\r\n type=\"text\"\r\n placeholder=\"Select Date\"\r\n [value]=\"selectedDateTime\"\r\n readonly\r\n [disabled]=\"disableControl\"\r\n />\r\n } @else {\r\n <input\r\n type=\"text\"\r\n placeholder=\"Select date Range\"\r\n [value]=\"\r\n selectedDateTime.start\r\n | date\r\n : 'MM/dd/yyyy' +\r\n ' - ' +\r\n (selectedDateTime.end | date : 'MM/dd/yyyy')\r\n \"\r\n readonly\r\n />\r\n }\r\n <!-- <i-feather name=\"calendar\" class=\"calendar_icon\"></i-feather> -->\r\n <img src=\"images/calendar.svg\" alt=\"\" />\r\n </div>\r\n @if (isOpen) {\r\n <div class=\"calendar-popup\">\r\n <!-- for the header -->\r\n <div class=\"calendar-header\">\r\n <span class=\"navigation-button\" (click)=\"previousMonth()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n <!-- <i-feather name=\"chevron-left\"></i-feather -->\r\n </span>\r\n <div class=\"month-year\">\r\n <span class=\"month\" (click)=\"calendarView = 'monthView'\">\r\n {{ getMonthYear().month }}</span\r\n >\r\n <span class=\"year\" (click)=\"calendarView = 'yearView'\">{{\r\n getMonthYear().year\r\n }}</span>\r\n </div>\r\n\r\n <span class=\"navigation-button\" (click)=\"nextMonth()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n\r\n <!-- <i-feather name=\"chevron-right\"></i-feather -->\r\n </span>\r\n </div>\r\n @if(calendarView === \"monthView\"){\r\n <div class=\"month-grid\">\r\n @for(month of monthRange | keyvalue; track $index){\r\n <span\r\n class=\"month\"\r\n (click)=\"selectMonth(month.key)\"\r\n [ngClass]=\"{ selected: month.key == currentDate.getMonth() }\"\r\n >{{ month.value }}</span\r\n >\r\n }\r\n </div>\r\n } @else if(calendarView === 'yearView'){\r\n <div class=\"year-selector\">\r\n <span class=\"navigation-button pointer\" (click)=\"previousYearRange()\">\r\n <img src=\"images/chevron-left.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"year-grid\">\r\n @for(year of yearRange;track $index){\r\n <span\r\n class=\"year\"\r\n (click)=\"selectYear(year)\"\r\n [ngClass]=\"{ selected: year == currentDate.getFullYear() }\"\r\n >{{ year }}</span\r\n >\r\n }\r\n </div>\r\n <span class=\"navigation-button pointer\" (click)=\"nextYearRange()\">\r\n <img src=\"images/chevron-right.svg\" alt=\"\" />\r\n </span>\r\n </div>\r\n } @else {\r\n <div class=\"calendar_body\">\r\n <div class=\"calendar-grid\">\r\n <!-- Day names -->\r\n @for (day of ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']; track $index) {\r\n\r\n <div class=\"days_name\">\r\n {{ day }}\r\n </div>\r\n }\r\n\r\n <!-- Calendar dates -->\r\n @for (dayObj of daysInMonth; track $index) {\r\n <div\r\n class=\"calendar-day\"\r\n [ngClass]=\"{\r\n active:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'single' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ),\r\n\r\n active_start:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n dayObj.day === rangeStart,\r\n\r\n active_end:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n dayObj.day === rangeEnd,\r\n\r\n range_between_active:\r\n dayObj.isCurrentMonth &&\r\n dateConfig.selectionMode === 'range' &&\r\n isSelectedDate(\r\n dayObj.day,\r\n dayObj.date.getMonth(),\r\n dayObj.date.getFullYear()\r\n ) &&\r\n rangeStart != null && rangeEnd != null &&\r\n dayObj.day > rangeStart &&\r\n dayObj.day < rangeEnd,\r\n\r\n other_month: !dayObj.isCurrentMonth,\r\n disabled: isDayDisabled(dayObj.day),\r\n notInCurrentMonth: !dayObj.isCurrentMonth\r\n }\"\r\n (click)=\"\r\n dayObj.isCurrentMonth &&\r\n !isDayDisabled(dayObj.day) &&\r\n selectDate(dayObj.day)\r\n \"\r\n >\r\n {{ dayObj.day }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- TIME SLOTS (only if showTime = true) -->\r\n @if (dateConfig.enableTime) {\r\n <div class=\"times\">\r\n @for (timeSlot of timeSlots; track $index) {\r\n <span\r\n class=\"span_time\"\r\n [ngClass]=\"{ active: selectedTime === timeSlot.label }\"\r\n (click)=\"selectTime(timeSlot.label)\"\r\n >\r\n {{ timeSlot.label }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[catsUiTooltip]',\r\n})\r\nexport class CatsUiTooltipDirective implements OnInit, OnDestroy {\r\n @Input('catsUiTooltip') tooltipText = '';\r\n @Input() tooltipClass?: string = '';\r\n\r\n private tooltipEl!: HTMLElement;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit(): void {\r\n this.showTooltip();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('mouseenter')\r\n showTooltip() {\r\n this.createTooltip();\r\n this.positionTooltip();\r\n }\r\n\r\n @HostListener('mouseleave')\r\n hideTooltip() {\r\n this.removeTooltip();\r\n }\r\n\r\n @HostListener('window:resize')\r\n @HostListener('window:scroll')\r\n adjustOnWindowChange() {\r\n if (this.tooltipEl) this.positionTooltip();\r\n }\r\n\r\n /**\r\n * @description Creates tooltip\r\n * @author Shiva Kant\r\n * @returns\r\n */\r\n private createTooltip() {\r\n if (this.tooltipEl) return;\r\n\r\n this.tooltipEl = this.renderer.createElement('div');\r\n this.tooltipEl.innerText = this.tooltipText;\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'position', 'fixed');\r\n // this.renderer.setStyle(this.tooltipEl, 'padding', '6px 10px');\r\n // this.renderer.setStyle(this.tooltipEl, 'background', '#ffffff');\r\n // this.renderer.setStyle(this.tooltipEl, 'color', '#434a51');\r\n // this.renderer.setStyle(this.tooltipEl, 'borderRadius', '4px');\r\n // this.renderer.setStyle(this.tooltipEl, 'zIndex', '9999');\r\n // this.renderer.setStyle(this.tooltipEl, 'whiteSpace', 'nowrap');\r\n // Add a custom class if provided\r\n if (this.tooltipClass) {\r\n this.renderer.addClass(this.tooltipEl, this.tooltipClass);\r\n } else {\r\n // Optionally, you can add a default class here\r\n this.renderer.addClass(this.tooltipEl, 'default-tooltip-class');\r\n }\r\n\r\n document.body.appendChild(this.tooltipEl);\r\n }\r\n\r\n /**\r\n * @description Removes tooltip\r\n * @author Shiva Kant\r\n */\r\n private removeTooltip() {\r\n if (this.tooltipEl) {\r\n this.tooltipEl.remove();\r\n this.tooltipEl = null as any;\r\n }\r\n }\r\n\r\n /**\r\n * @description Positions tooltip\r\n * @author Shiva Kant\r\n */\r\n private positionTooltip() {\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\r\n\r\n const spacing = 8; // distance from host element\r\n\r\n const fitsAbove = hostRect.top >= tooltipRect.height + spacing;\r\n const fitsBelow =\r\n window.innerHeight - hostRect.bottom >= tooltipRect.height + spacing;\r\n const fitsLeft = hostRect.left >= tooltipRect.width + spacing;\r\n const fitsRight =\r\n window.innerWidth - hostRect.right >= tooltipRect.width + spacing;\r\n\r\n let top = 0;\r\n let left = 0;\r\n\r\n // Priority: bottom → top → right → left\r\n if (fitsBelow) {\r\n top = hostRect.bottom + spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsAbove) {\r\n top = hostRect.top - tooltipRect.height - spacing;\r\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\r\n } else if (fitsRight) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.right + spacing;\r\n } else if (fitsLeft) {\r\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\r\n left = hostRect.left - tooltipRect.width - spacing;\r\n } else {\r\n // fallback → bottom with clamped position\r\n top = hostRect.bottom + spacing;\r\n left = Math.min(\r\n Math.max(10, hostRect.left),\r\n window.innerWidth - tooltipRect.width - 10\r\n );\r\n }\r\n\r\n this.renderer.setStyle(this.tooltipEl, 'top', `${top}px`);\r\n this.renderer.setStyle(this.tooltipEl, 'left', `${left}px`);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion',\r\n imports: [],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss',\r\n})\r\nexport class AccordionComponent {\r\n openedIndex: number | null = null;\r\n\r\n /**\r\n * @description Toggles accordion component\r\n * @author Shiva Kant\r\n * @param index \r\n */\r\n toggle(index: number): void {\r\n this.openedIndex = this.openedIndex === index ? null : index;\r\n }\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @param index \r\n * @returns true if open \r\n */\r\n isOpen(index: number): boolean {\r\n return this.openedIndex === index;\r\n }\r\n}\r\n","<div class=\"accordion\">\r\n <ng-content></ng-content> <!-- Will contain AccordionItem components -->\r\n</div>\r\n","import {\r\n Component,\r\n ContentChild,\r\n Inject,\r\n Input,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { AccordionComponent } from '../accordion.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-accordion-item',\r\n imports: [CommonModule],\r\n templateUrl: './accordion-item.component.html',\r\n styleUrl: './accordion-item.component.scss',\r\n})\r\nexport class AccordionItemComponent {\r\n @Input() title: string = '';\r\n @Input() index: number = 0;\r\n\r\n // Change this to allow null instead of undefined\r\n @ContentChild(TemplateRef) contentTemplate: TemplateRef<any> | null = null;\r\n\r\n constructor(\r\n @Inject(AccordionComponent) private accordion: AccordionComponent\r\n ) {}\r\n\r\n /**\r\n * @description Determines whether open is\r\n * @author Shiva Kant\r\n * @returns true if open\r\n */\r\n isOpen(): boolean {\r\n return this.accordion.isOpen(this.index);\r\n }\r\n\r\n /**\r\n * @description Toggles accordion item component\r\n * @author Shiva Kant\r\n */\r\n toggle(): void {\r\n this.accordion.toggle(this.index);\r\n }\r\n\r\n /**\r\n * @description perform any initialization after content is injected\r\n * @author Shiva Kant\r\n */\r\n ngAfterContentInit(): void {\r\n if (!this.contentTemplate) {\r\n console.error(\r\n 'No content template provided for accordion item:',\r\n this.title\r\n );\r\n }\r\n }\r\n}\r\n","<div class=\"accordion-item\">\r\n <div class=\"accordion-header\" (click)=\"toggle()\">\r\n <h3>{{ title }}</h3>\r\n <img\r\n [src]=\"isOpen() ? 'images/chevron-up.svg' : 'images/chevron-down.svg'\"\r\n alt=\"\"\r\n />\r\n </div>\r\n\r\n <div class=\"accordion-body\" [class.open]=\"isOpen()\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n </div>\r\n</div>\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tabContent]',\r\n standalone: true,\r\n})\r\nexport class TabContentDirective {\r\n constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tabHeading]',\r\n standalone: true\r\n})\r\nexport class TabHeadingDirective {\r\n constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Component, ContentChild } from '@angular/core';\r\nimport { TabContentDirective } from '../../tab-content.directive';\r\nimport { TabHeadingDirective } from '../../tab-heading.directive';\r\n\r\n@Component({\r\n selector: 'cats-ui-tab-item',\r\n imports: [],\r\n templateUrl: './tab-item.component.html',\r\n styleUrl: './tab-item.component.scss',\r\n})\r\nexport class TabItemComponent {\r\n @ContentChild(TabHeadingDirective) heading!: TabHeadingDirective;\r\n @ContentChild(TabContentDirective) content!: TabContentDirective;\r\n}\r\n","<p>tab-item works!</p>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ContentChildren,\r\n QueryList,\r\n} from '@angular/core';\r\nimport { TabItemComponent } from './tab-item/tab-item.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'cats-ui-tab',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n imports: [CommonModule],\r\n})\r\nexport class TabComponent {\r\n @Input() activeTab = 0;\r\n @Input() disabledTabs: number[] = [];\r\n\r\n @Output() selectTab: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n @ContentChildren(TabItemComponent) items!: QueryList<TabItemComponent>;\r\n\r\n /**\r\n * @description Sets active\r\n * @author Shiva Kant\r\n * @param index \r\n */\r\n setActive(index: number) {\r\n if (!this.disabledTabs.includes(index)) {\r\n this.activeTab = index;\r\n this.selectTab.emit(index); \r\n }\r\n }\r\n}\r\n","<ul class=\"tab-header\">\r\n @for (item of items; track $index) {\r\n <ng-container>\r\n <li\r\n class=\"tab-item\"\r\n [class.active]=\"activeTab === $index\"\r\n [class.disabled]=\"disabledTabs.includes($index)\"\r\n (click)=\"setActive($index)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"item.heading.template\"></ng-container>\r\n </li>\r\n </ng-container>\r\n\r\n }\r\n</ul>\r\n\r\n<div class=\"tab-content\">\r\n @for (item of items; track $index) {\r\n <ng-container>\r\n @if (activeTab === $index) {\r\n <ng-container *ngTemplateOutlet=\"item.content.template\"></ng-container>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cats-ui\r\n */\r\n\r\nexport * from './lib/services/cats-ui.service';\r\nexport * from './lib/components/input';\r\nexport * from './lib/components/single-select';\r\nexport * from './lib/components/multi-select';\r\nexport * from './lib/components/search-box';\r\nexport * from './lib/components/auto-complete-single-select';\r\nexport * from './lib/directives/outside-click.directive'\r\nexport * from './lib/components/auto-complete-multi-select';\r\nexport * from './lib/modal/cats-ui.modal';\r\nexport * from './lib/components/toogle-button';\r\nexport * from './lib/components/checkbox-button';\r\nexport * from './lib/components/radio-button';\r\nexport * from './lib/components/date-time-picker';\r\nexport * from './lib/directives/cats-ui-tooltip.directive';\r\nexport * from './lib/components/accordion';\r\nexport * from './lib/components/tabs';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","noop"],"mappings":";;;;;;;MAKa,aAAa,CAAA;AAExB,IAAA,WAAA,GAAA,EAAgB;wGAFL,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCmCY,cAAc,CAAA;AAChB,IAAA,WAAW;AACV,IAAA,SAAS,GAAG,IAAI,YAAY,EAAqC;AACjE,IAAA,OAAO,GAAG,IAAI,YAAY,EAAqC;IAEzE,KAAK,GAAW,EAAE;IAClB,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,KAAK;IACf,OAAO,GAAuB,IAAI;IAClC,YAAY,GAAG,KAAK;AACZ,IAAA,QAAQ,GAAG,CAAC,KAAU,KAAI,EAAE,CAAC;AAC7B,IAAA,SAAS,GAAG,MAAK,EAAE,CAAC;AAE5B;;;AAGG;AACH,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAEzB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACvC;IACF;AACA;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;IACtD;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,KAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;IACpD;AAEA;;;AAGG;AAEH,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,MAAM,OAAO,GAAI,KAAK,CAAC,MAAc,EAAE,OAAO;AAC9C,QAAA,OAAO,EAAE,aAAa,IAAI;IAC5B;AACA;;;AAGG;AAEH,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEA;;;AAGG;AAEH,IAAA,QAAQ,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,OAAO,EAAE;AACtC,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;QAClC;AACA,QAAA,OAAO,IAAI;IACb;AACA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;IACxC;wGA7FW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAdd;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCH,u4BA2BA,EAAA,MAAA,EAAA,CAAA,oyPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAiBxB,cAAc,EAAA,UAAA,EAAA,CAAA;kBApB1B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,SAAA,EAGzB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,IAAA,EACK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,u4BAAA,EAAA,MAAA,EAAA,CAAA,oyPAAA,CAAA,EAAA;;sBAGtB;;sBACA;;sBACA;;;ME1CU,kBAAkB,CAAA;IAC7B,OAAO,GAAW,IAAI;IACtB,SAAS,GAAW,MAAM;IAC1B,aAAa,GAAY,EAAE;IAC3B,WAAW,GAAY,eAAe;IACtC,WAAW,GAAY,EAAE;IACzB,YAAY,GAAa,KAAK;IAC9B,QAAQ,GAAa,KAAK;AAC3B;MAEY,iBAAiB,CAAA;IAC5B,OAAO,GAAW,IAAI;IACtB,SAAS,GAAW,MAAM;IAC1B,aAAa,GAAY,EAAE;IAC3B,WAAW,GAAY,eAAe;IACtC,WAAW,GAAY,EAAE;IACzB,YAAY,GAAa,KAAK;IAC9B,SAAS,GAAW,CAAC;IACrB,SAAS,GAAa,IAAI;IAC1B,QAAQ,GAAa,KAAK;AAC3B;MAEY,YAAY,CAAA;IACvB,WAAW,GAAW,EAAE;IACxB,WAAW,GAAY,QAAQ;AAChC;MAEY,WAAW,CAAA;IACtB,IAAI,GAA6C,MAAM;IACvD,WAAW,GAAY,EAAE;IACzB,KAAK,GAAY,EAAE;AACpB;MAEY,8BAA8B,CAAA;IACzC,OAAO,GAAW,IAAI;IACtB,SAAS,GAAW,MAAM;IAC1B,aAAa,GAAY,EAAE;IAC3B,WAAW,GAAY,iBAAiB;IACxC,QAAQ,GAAa,KAAK;IAC1B,WAAW,GAAY,KAAK;AAC7B;MACY,6BAA6B,CAAA;IACxC,OAAO,GAAW,IAAI;IACtB,SAAS,GAAW,MAAM;IAC1B,aAAa,GAAY,EAAE;IAC3B,SAAS,GAAa,IAAI;IAC1B,WAAW,GAAY,iBAAiB;IACxC,QAAQ,GAAa,KAAK;IAC1B,SAAS,GAAW,CAAC;IACrB,WAAW,GAAY,KAAK;IAC5B,OAAO,GAAY,EAAE;AACtB;MACY,YAAY,CAAA;IACvB,OAAO,GAAY,KAAK;IACxB,QAAQ,GAAa,KAAK;AAC3B;MACY,eAAe,CAAA;IAC1B,OAAO,GAAW,EAAE;IACpB,SAAS,GAAW,EAAE;IACtB,OAAO,GAAa,KAAK;AAC1B;MAEY,cAAc,CAAA;IACzB,OAAO,GAAW,EAAE;IACpB,SAAS,GAAW,EAAE;IACtB,aAAa,GAAY,EAAE;IAC3B,IAAI,GAAW,EAAE;IACjB,OAAO,GAAa,KAAK;AACzB,IAAA,QAAQ;AACT;;ACzDD,MAAMC,MAAI,GAAG,MAAK,EAAE,CAAC;AACd,MAAM,oCAAoC,GAAQ;AACvD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,IAAA,KAAK,EAAE,IAAI;;AAEN,MAAM,qCAAqC,GAAQ;AACxD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,IAAA,KAAK,EAAE,IAAI;;MAkBA,qBAAqB,CAAA;AAkBZ,IAAA,EAAA;AAA+B,IAAA,EAAA;IAf1C,UAAU,GAAU,EAAE;AACtB,IAAA,kBAAkB,GAAqB,IAAI,kBAAkB,EAAE;AAC/D,IAAA,cAAc;AACb,IAAA,WAAW,GAAG,IAAI,YAAY,EAAE;IAE1C,YAAY,GAAG,KAAK;IACpB,UAAU,GAAW,EAAE;IACvB,OAAO,GAAY,KAAK;AACxB,IAAA,OAAO;IACP,cAAc,GAAY,KAAK;AACrB,IAAA,QAAQ,GAAQ,IAAI,YAAY,EAAE;AACnC,IAAA,mBAAmB;AAEE,IAAA,YAAY;IAE1C,WAAA,CAAoB,EAAqB,EAAU,EAAc,EAAA;QAA7C,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,EAAE,GAAF,EAAE;IAAe;;AAGpE,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,CAAC,QAAuB,EAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACtB;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE;AAAE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI;YAC5E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC;IACF;AAEA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;AACtC,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;AACtC,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA,CAAC;YACF,IAAI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACjE,UAAU,CAAC,MAAK;gBACd,IAAI,cAAc,GAAG,SAAS,EAAE,qBAAqB,EAAE,IAAK,EAAU;gBACtE,IAAI,YAAY,GAAQ,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;gBACnE,IAAI,UAAU,GAAG,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE;AAC5D,gBAAA,IAAI,cAAc,GAAG,QAAQ,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,EAAE;AACvD,oBAAA,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAA,eAAA,EAChC,UAAU,GAAG,QAAQ,CAAC,GAAG,EAC3B,IAAI;gBACN;YACF,CAAC,EAAE,EAAE,CAAC;QACR;IACF;AAEA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,GAAQ,EAAA;QACjB,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,OAAO,GAAG,IAAI,QAAQ;AAAE,YAAA,OAAO,IAAI;AACjE,QAAA,OAAO,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C;AAEA;;;;;;AAMG;AACH,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,QAAQ,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;;IAGQ,iBAAiB,GAAeA,MAAI;IACpC,gBAAgB,GAAqBA,MAAI;;AAIjD;;;;;AAKG;AACH,IAAA,UAAU,CAAC,GAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;QAExB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,EAAE;YACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBACtD,IACE,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,QAAQ;oBACxC,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,QAAQ,EACxC;oBACA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjC,wBAAA,IAAI,CAAC,cAAc,GAAG,GAAG;oBAC3B;gBACF;AAAO,qBAAA,IAAI,GAAG,IAAI,EAAE,EAAE;AACpB,oBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;wBACpC,IACE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,GAAG;4BAC9C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,GAAG,EAChD;AACA,4BAAA,IAAI,CAAC,cAAc,GAAG,MAAM;4BAC5B;wBACF;oBACF;gBACF;YACF;iBAAO;gBACL,IACE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AACpD,oBAAA,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACpC;AACA,oBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AACpC,wBAAA,IACE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;4BACvC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EACpC;AACA,4BAAA,IAAI,CAAC,cAAc,GAAG,MAAM;4BAC5B;wBACF;oBACF;gBACF;YACF;YACA,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;YAC5C,CAAC,EAAE,CAAC,CAAC;AACL,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;QACxB;IACF;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IAClC;AAEA;;;AAGG;IAEI,SAAS,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA;;;AAGG;AAEI,IAAA,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AACzD,gBAAA,IAAI,CAAC,OAAO;oBACV,IAAI,CAAC,cAAc,IAAI,EAAE;wBACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI;YAC/C;YACA,IAAI,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,iBAAiB,EAAE;AAC/C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;IACF;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IACE,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS;AAChD,YAAA,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EACtB;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtB;IACF;AACA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACrD,OAAO,IAAI,CAAC,UAAU;QACxB;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AACvC,YAAA,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;AAC7B,gBAAA,OAAO,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACtE;iBAAO;AACL,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS;AAC7C,sBAAE,WAAW;qBACZ,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;IACJ;wGA/NW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAXrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,qBAAqB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;YACD,qCAAqC;AACtC,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCH,k4HA4HA,EAAA,MAAA,EAAA,CAAA,olVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnGY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAcxB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,SAAA,EAGzB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,qBAAuB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;wBACD,qCAAqC;qBACtC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,k4HAAA,EAAA,MAAA,EAAA,CAAA,olVAAA,CAAA,EAAA;;sBAKtB;;sBACA;;sBACA;;sBACA;;sBAOA;;sBACA;;sBAEA,YAAY;uBAAC,cAAc;;sBA8J3B,YAAY;uBAAC,MAAM;;sBASnB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AE1N5C,MAAMA,MAAI,GAAG,MAAK,EAAE,CAAC;AACd,MAAM,mCAAmC,GAAQ;AACtD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,IAAA,KAAK,EAAE,IAAI;;AAEN,MAAM,oCAAoC,GAAQ;AACvD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,IAAA,KAAK,EAAE,IAAI;;MAcA,oBAAoB,CAAA;AAmBX,IAAA,EAAA;AAA+B,IAAA,EAAA;IAhB1C,UAAU,GAAU,EAAE;AACtB,IAAA,iBAAiB,GAAsB,IAAI,iBAAiB,EAAE;IAE9D,eAAe,GAAU,EAAE;AAE1B,IAAA,WAAW,GAAG,IAAI,YAAY,EAAE;AAE1C,IAAA,OAAO;IAEP,YAAY,GAAG,KAAK;IACpB,mBAAmB,GAAG,KAAK;IAC3B,aAAa,GAAG,KAAK;IACrB,OAAO,GAAY,KAAK;IACxB,UAAU,GAAW,EAAE;IACvB,eAAe,GAAY,KAAK;IAEhC,WAAA,CAAoB,EAAqB,EAAU,EAAc,EAAA;QAA7C,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,EAAE,GAAF,EAAE;IAAe;;AAGpE,IAAA,QAAQ,KAAU;AAClB,IAAA,WAAW,CAAC,QAAuB,EAAA;AACjC,QAAA,IACE,QAAQ,CAAC,YAAY,CAAC,CAAC,YAAY;YACnC,QAAQ,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAC9C;YACA,IACE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACtC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,EACtC;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;AACpD,oBAAA,MAAM,IAAI,GAAQ;AAChB,wBAAA,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,MAAM;AACxC,wBAAA,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,MAAM;AAC1C,wBAAA,UAAU,EAAE,KAAK;qBAClB;AAED,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;wBACxC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,KAAK;oBACpD;AAEA,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;oBACpD,OAAO;AACL,wBAAA,GAAG,MAAM;AACT,wBAAA,UAAU,EAAE,KAAK;qBAClB;AACH,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,IAAI;YAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC;IACF;AAEA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;IACxC;AAEA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,GAAQ,EAAA;AACjB,QAAA,OAAO,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C;AAEA;;;;;;AAMG;AACH,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CACtC,CAAC,MAAW,KACV,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CACzC;YACD,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC;QACA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CACxC,CAAC,MAAW,KAAK,MAAM,CAAC,UAAU,IAAI,IAAI,CAC3C;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3C,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;IACxB;;IAGQ,iBAAiB,GAAeA,MAAI;IACpC,gBAAgB,GAAqBA,MAAI;AAEjD,IAAA,QAAQ,CAAC,OAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;;AAIA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,YAAmB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YACzB,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAA,IACE,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,QAAQ;AACnC,oBAAA,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,QAAQ,EACnC;oBACA,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAuB,KAAI;wBAC1D,OAAO;AACL,4BAAA,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,MAAM;AACxC,4BAAA,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,MAAM;yBAC3C;AACH,oBAAA,CAAC,CAAC;gBACJ;AACA,gBAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;oBACjC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CACjC,CAAC,IAAS,KACR,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAClC,wBAAA,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACxC,wBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;4BACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAC7C;AACD,oBAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG;AACrB,4BAAA,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACvB,4BAAA,UAAU,EAAE,IAAI;yBACjB;AACD,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACjD;gBACF;YACF;YACA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CACxC,CAAC,MAAW,KAAK,MAAM,CAAC,UAAU,IAAI,IAAI,CAC3C;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3C,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;QACxB;IACF;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA;;;;;AAKG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU;IACnC;AAEA;;;AAGG;IAEI,SAAS,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA;;;AAGG;AAEI,IAAA,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;gBACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAChD;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;AACpD,gBAAA,IACE,IAAI,CAAC,iBAAiB,CAAC,aAAa;oBACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAC5C;AACA,oBAAA,OAAO,MAAM;gBACf;gBACA,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE;AACzC,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;QACpE;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAW,KAAI;AACpD,gBAAA,IACE,IAAI,CAAC,iBAAiB,CAAC,aAAa;oBACpC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAC5C;AACA,oBAAA,OAAO,MAAM;gBACf;gBACA,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;AACxC,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;QACpE;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7C;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACrD,OAAO,IAAI,CAAC,UAAU;QACxB;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KACnC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS;AACrC,cAAE,WAAW;aACZ,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC3C;IACH;wGA9PW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAPpB;YACT,mCAAmC;YACnC,oCAAoC;AACrC,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,sgHA2GA,EAAA,MAAA,EAAA,CAAA,u4aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1FY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAUnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WACvB,CAAC,OAAO,EAAE,WAAW,CAAC,EAAA,SAAA,EAGpB;wBACT,mCAAmC;wBACnC,oCAAoC;qBACrC,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,sgHAAA,EAAA,MAAA,EAAA,CAAA,u4aAAA,CAAA,EAAA;;sBAKtB;;sBACA;;sBAEA;;sBAEA;;sBAyLA,YAAY;uBAAC,MAAM;;sBASnB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ME1M/B,kBAAkB,CAAA;IAC7B,WAAW,GAAW,EAAE;AACf,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAC9C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AAE/C,IAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IACvC,UAAU,GAAG,KAAK;IAElB,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,EAAE;IACzD;AACA;;;AAGG;AAEH,IAAA,aAAa,CAAC,KAAU,EAAA;AACtB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,EAAE,KAAK;AACvD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AACA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,EAAE;IAChC;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;wGAlDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EARlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBH,sdAeA,6zODCY,WAAW,EAAA,CAAA,EAAA,CAAA;;4FAWV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB,CAAC,WAAW,CAAC,EAAA,SAAA,EAGX;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,sdAAA,EAAA,MAAA,EAAA,CAAA,swOAAA,CAAA,EAAA;;sBAIA;;sBACA;;sBACA;;;MEzBU,qBAAqB,CAAA;AAGZ,IAAA,UAAA;AAFH,IAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAE9D,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAe;AAC7C;;;;;AAKG;AAEI,IAAA,OAAO,CAAC,KAAiB,EAAA;AAC9B,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAA4B;;QAGxD,IAAI,CAAC,aAAa,EAAE;YAClB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;QACzE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B;IACF;wGAvBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE;;sBASA,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ACX5C,MAAM,IAAI,GAAG,MAAK,EAAE,CAAC;AACd,MAAM,+BAA+B,GAAQ;AAClD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC,CAAC;AAChE,IAAA,KAAK,EAAE,IAAI;;AAEN,MAAM,gCAAgC,GAAQ;AACnD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iCAAiC,CAAC;AAChE,IAAA,KAAK,EAAE,IAAI;;MAiBA,iCAAiC,CAAA;AACnC,IAAA,sBAAsB,GAC7B,IAAI,8BAA8B,EAAE;IAC7B,WAAW,GAAG,wBAAwB;AACtC,IAAA,YAAY;IACZ,WAAW,GAAU,EAAE;AACvB,IAAA,mBAAmB;AAClB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAE;AACpC,IAAA,QAAQ,GAAQ,IAAI,YAAY,EAAE;IAC5C,YAAY,GAAY,KAAK;IAC7B,UAAU,GAAW,EAAE;AACvB,IAAA,cAAc;AACd,IAAA,WAAA,GAAA,EAAe;IACf,OAAO,GAAY,KAAK;AACxB,IAAA,OAAO;IACP,cAAc,GAAY,KAAK;AAC/B,IAAA,QAAQ,KAAU;IACV,iBAAiB,GAAe,IAAI;IACpC,gBAAgB,GAAqB,IAAI;AACjD,IAAA,WAAW,CAAC,QAAuB,EAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;QAC3C;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC;IACF;AACA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;IACxC;AACA;;;;;;AAMG;IACH,kBAAkB,CAAC,IAAS,EAAE,IAAY,EAAA;AACxC,QAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAC/D;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAE3B,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAChD;AAEA,IAAA,UAAU,CAAC,GAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;IAClC;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU;IAClC;AACA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAsB;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAEtD,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK;AAEzB,QAAA,MAAM,OAAO,GACX,GAAG,KAAK,IAAI;AACZ,YAAA,GAAG,KAAK,SAAS;AACjB,YAAA,GAAG,KAAK,EAAE;AACV,aAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAE5D,QAAA,OAAO,OAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI;IAC5C;;AAGQ,IAAA,sBAAsB,CAAC,KAAU,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QAEpB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM;YAAE;AAEzC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,CAAC,CAAC,KACA,CAAC,KAAK,KAAK;oBACX,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,KAAK;AAClD,oBAAA,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,KAAK,CACvD,IAAI,KAAK;QACd;aAAO;AACL,YAAA,IAAI,CAAC,cAAc;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,CAAC,CAAC,KACA,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;oBACtC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAC7C,IAAI,KAAK;QACd;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc;cAC/C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS;AAC3D,cAAE,IAAI,CAAC,cAAc;IACzB;AACA;;AAEG;IACH,gBAAgB,GAAA;QACd,IAAI,IAAI,GAAQ,IAAI;AAEpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE;AACxC,gBAAA,IAAI,GAAG;AACL,oBAAA,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,GAAG,IAAI;oBAC3C,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;iBACzD;YACH;iBAAO;AACL,gBAAA,IAAI,GAAG,IAAI,CAAC,UAAU;YACxB;AAEA,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B;QAEA,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE;IACxC;AAEA;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;AAG3B,YAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEA;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,IAAS,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI;AACxB,QAAA,OAAO,IAAI,IAAI,IAAI,IAAI,QAAQ;IACjC;AACA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;gBAC3C,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;AACA,IAAA,YAAY,CAAC,OAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;YAC3C,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;AACA;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IACE,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS;AAChD,YAAA,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtB;IACF;wGAtMW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAVjC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,iCAAiC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;YACD,gCAAgC;AACjC,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5BH,inFAoFA,EAAA,MAAA,EAAA,CAAA,+vRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlEY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,+mBAAE,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAa/C,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAf7C,SAAS;+BACE,6BAA6B,EAAA,OAAA,EAC9B,CAAC,YAAY,EAAE,WAAW,EAAE,qBAAqB,CAAC,EAAA,SAAA,EAGhD;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,iCAAmC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;wBACD,gCAAgC;AACjC,qBAAA,EAAA,IAAA,EACK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,inFAAA,EAAA,MAAA,EAAA,CAAA,+vRAAA,CAAA,EAAA;;sBAGtB;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEdU,gCAAgC,CAAA;AAGlC,IAAA,6BAA6B;AAC7B,IAAA,YAAY;IACZ,WAAW,GAAU,EAAE;AACvB,IAAA,mBAAmB;AAClB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAE;AACpC,IAAA,QAAQ,GAAQ,IAAI,YAAY,EAAE;IAC5C,YAAY,GAAY,KAAK;IAC7B,UAAU,GAAW,EAAE;IACvB,eAAe,GAAU,EAAE;IAC3B,aAAa,GAAY,KAAK;IAC9B,OAAO,GAAY,KAAK;AACxB,IAAA,OAAO;IACP,UAAU,GAAG,KAAK;AAClB,IAAA,WAAA,GAAA,EAAe;AACf,IAAA,QAAQ,KAAI;AACZ,IAAA,WAAW,CAAC,QAAuB,EAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;QAC3C;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC;IACF;AACQ,IAAA,QAAQ,GAAqB,MAAK,EAAE,CAAC;AACrC,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAChC,kBAAkB,GAAA;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,6BAA6B,EAAE;QACpD,IAAI,CAAC,6BAA6B,GAAG;AACnC,YAAA,GAAG,QAAQ;YACX,GAAG,IAAI,CAAC,6BAA6B;SACtC;IACH;AAEA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;AACtC,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;AACtC,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA,CAAC;YACF,IAAI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACjE,UAAU,CAAC,MAAK;gBACd,IAAI,cAAc,GAAG,SAAS,EAAE,qBAAqB,EAAE,IAAK,EAAU;gBACtE,IAAI,YAAY,GAAQ,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;gBACnE,IAAI,UAAU,GAAG,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE;AAC5D,gBAAA,IAAI,cAAc,GAAG,QAAQ,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,EAAE;AACvD,oBAAA,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAA,eAAA,EAChC,UAAU,GAAG,QAAQ,CAAC,GAAG,EAC3B,IAAI;gBACN;YACF,CAAC,EAAE,EAAE,CAAC;QACR;IACF;AACA,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;YAG5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC/B,gBAAA,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAC5B,IAAI,CAAC,QAAQ,CAAC,CAAC;sBACX,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;AAC/C,wBAAA,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS;AAClD,sBAAE,CAAC,KAAK,GAAG,CACd;AACH,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;YACnC,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;AACA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAsB;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAE7D,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK;AAEzB,QAAA,MAAM,OAAO,GACX,GAAG,KAAK,IAAI;AACZ,YAAA,GAAG,KAAK,SAAS;AACjB,YAAA,GAAG,KAAK,EAAE;AACV,aAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAE5D,QAAA,OAAO,OAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI;IAC5C;AACA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;IAChC;AACA;;;;;;AAMG;IACH,kBAAkB,CAAC,IAAS,EAAE,IAAY,EAAA;AACxC,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;AAErB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;AAElC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;AAEnB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACtC,CAAC,GAAG,KACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,oBAAA,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;wBAC/C,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CACvD;AACD,gBAAA,IAAI,CAAC,MAAM;AAAE,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C;iBAAO;;gBAEL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD,CAAC,GAAG,KACF,EACE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,oBAAA,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;wBAC/C,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CACrD,CACJ;YACH;QACF;aAAO;;AAEL,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;AACzE,YAAA,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;;gBAEpB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7C;iBAAO;;AAEL,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC;;YAGA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAC7C,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAC3C;AACD,YAAA,IAAI,YAAY,GAAG,CAAC,CAAC,EAAE;;gBAErB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAQ;AACjD,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU;YAClC;QACF;;QAGA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,SAAS,EAAE;QAEhB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACjD;AAEA;;;AAGG;AAEH,IAAA,eAAe,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,KAAK;YAAE,KAAK,CAAC,eAAe,EAAE;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa;QAExC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAChC,YAAA,IACE,CAAC,IAAI,CAAC,6BAA6B,CAAC,aAAa;gBACjD,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,EACvD;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa;YACtC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,KAClD,IAAI,CAAC,QAAQ,CAAC,GAAG;cACb,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CACpB,CAAC,CAAC,KACA,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;AAC/C,gBAAA,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;cAErD,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CACpC;AAED,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACjD,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,CACxB;QAED,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,mBAAmB,CAAC;AAC/D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,SAAS,EAAE;QAEhB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACjD;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAS,EAAA;;AAElB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,KACrD,IAAI,CAAC,QAAQ,CAAC,GAAG;cACb,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;AACjD,iBAAC,IAAI,CAAC,QAAQ,CAAC,IAAI;sBACf,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS;sBACjD,IAAI;AACV,cAAE,GAAG,KAAK,IAAI,CACjB;;AAGD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CACpC,CAAC,CAAM,KACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,gBAAA,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;oBAC7C,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CACvD;AACD,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,KAAK;YAC1C;QACF;aAAO;;AAEL,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACzD,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,KAAK;YAC1C;QACF;;QAGA,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE;QAEhB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACjD;AACA;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEA;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,IAAS,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI;AACxB,QAAA,OAAO,IAAI,IAAI,IAAI,IAAI,QAAQ;IACjC;AACA;;;AAGG;AAEH,IAAA,YAAY,CAAC,OAAa,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE;;AAG7B,QAAA,IAAI,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;gBACpB;YACF;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE;;AAGlC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,KAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG;cACb,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBAC/D;cACA,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CACnC;QACD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;YACpB;QACF;;AAGA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;cACnD,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,CAAC,GAAQ,KACP,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;AAC/D,gBAAA,QAAQ;AAEd,cAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC;QAEvE,IAAI,WAAW,EAAE;;AAEf,YAAA,WAAW,CAAC,UAAU,GAAG,IAAI;AAC7B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,KAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG;kBACb,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC;AACjD,oBAAA,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS;AAC1D,kBAAE,GAAG,KAAK,WAAW,CACxB;AACD,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QACtD;AAAO,aAAA,IAAI,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE;;YAEzD,IAAI,OAAO,GAAQ,GAAG;AACtB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE;AACxC,gBAAA,OAAO,GAAG;AACR,oBAAA,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,GAAG,IAAI;AAClD,oBAAA,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,GAAG,GAAG;oBACnD,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,IAAI;iBACjB;YACH;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QACpC;;AAGA,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;QAGpB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IACjD;IACA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;AACA;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IACE,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS;AAChD,YAAA,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtB;IACF;IAEA,oBAAoB,GAAA;;AAElB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,GAAQ,KACP,EACE,IAAI,CAAC,6BAA6B,CAAC,aAAa;YAChD,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CACtD,CACJ;AACD,QAAA,IAAI,CAAC,aAAa;YAChB,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IAC7E;wGAlXW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAdhC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gCAAgC,CAAC;AAC/D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBH,mrIA8HA,EAAA,MAAA,EAAA,CAAA,8wWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,+BAAE,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAiB/C,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAnB5C,SAAS;+BACE,4BAA4B,EAAA,OAAA,EAC7B,CAAC,YAAY,EAAE,WAAW,EAAE,qBAAqB,CAAC,EAAA,SAAA,EAGhD;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,sCAAsC,CAAC;AAC/D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,sCAAsC,CAAC;AAC/D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,IAAA,EACK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,mrIAAA,EAAA,MAAA,EAAA,CAAA,8wWAAA,CAAA,EAAA;;sBAKtB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEhBU,qBAAqB,CAAA;AACvB,IAAA,YAAY;AACX,IAAA,SAAS,GAA0B,IAAI,YAAY,EAAW;AAEhE,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IACxC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO;YACtD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAChD;IACF;;AAGA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;IACnC;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,UAAU;IACzC;wGA5BW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfH,0ZAcA,EAAA,MAAA,EAAA,CAAA,g7PAAA,CAAA,EAAA,CAAA;;4FDGa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;+BACE,uBAAuB,EAAA,OAAA,EACxB,EAAE,EAAA,SAAA,EAGA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,0ZAAA,EAAA,MAAA,EAAA,CAAA,g7PAAA,CAAA,EAAA;;sBAGA;;sBACA;;;MEFU,uBAAuB,CAAA;AAGzB,IAAA,cAAc;AACb,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAO;IAC9C,UAAU,GAAU,EAAE;IACtB,eAAe,GAAU,EAAE;AAE5B,IAAA,QAAQ,GAA2B,MAAK,EAAE,CAAC;AAC3C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAExC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,OAAO,IAAI,IAAI;IAC7C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,SAAS,IAAI,MAAM;IACjD;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;YAC9D,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;AAEA;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,IAAS,EAAA;QAC9B,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;QAE3B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC;QAEhC,OAAO,EAAE,CAAC;IACZ;AAEA;;;AAGG;IACK,oBAAoB,GAAA;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAM,KACjD,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAC/B;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC7C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;AACtB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;AAE1B,YAAA,MAAM,gBAAgB,GACpB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAE9D,YAAA,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAQ,KAAI;AAC7D,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE;AACpB,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI;gBAExB,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACpE;AACH,YAAA,CAAC,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,OAAO,EACL,gBAAgB,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AAClE,gBAAA,QAAQ,EAAE,eAAe;aAC1B;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,gBAAgB,CAAC,KAAY,EAAE,WAAmB,EAAE,QAAiB,EAAA;AACnE,QAAA,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO;AAE1D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAChD,YAAA,MAAM,QAAQ,GAAG;AACf,gBAAA,GAAG,IAAI;AACP,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;AAC9B,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;aAC9B;AAED,YAAA,IAAI,CAAC,KAAK,WAAW,EAAE;AACrB,gBAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;;AAE1B,oBAAA,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC1B,oBAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAQ,MAAM;AACvD,wBAAA,GAAG,GAAG;wBACN,OAAO;AACR,qBAAA,CAAC,CAAC;gBACL;AAAO,qBAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;;oBAEtC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,OAAO;;AAE7C,oBAAA,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,OAAO,CAAC;gBACvE;YACF;AAEA,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,aAAA,MAAM,CACL,CAAC,IAAI,KACH,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK;AACtB,YAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;AAEtD,aAAA,GAAG,CAAC,CAAC,IAAI,MAAM;AACd,YAAA,GAAG,IAAI;AACP,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;AACtE,SAAA,CAAC,CAAC;QAEL,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAClD,YAAA,GAAG,IAAI;AACP,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AACtD,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE;IAClB;AACA;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,IAAS,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM;AAAE,YAAA,OAAO,KAAK;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;QAC/D,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;IAChD;;AAGA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACrC,gBAAA,GAAG,IAAI;AACP,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AAClD,aAAA,CAAC,CAAC;QACL;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAClC,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAQ,MAAM,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AAC7D,YAAA,CAAC,CAAC;QACJ;IACF;wGAtKW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EARvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfH,y5CA2CA,EAAA,MAAA,EAAA,CAAA,64QAAA,CAAA,EAAA,CAAA;;4FD1Ba,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAC1B,EAAE,EAAA,SAAA,EAGA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,y5CAAA,EAAA,MAAA,EAAA,CAAA,64QAAA,CAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;;MEMU,oBAAoB,CAAA;AACtB,IAAA,MAAM;IACN,UAAU,GAAU,EAAE;AACrB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAO;;AAE1C,IAAA,aAAa;IAEtB,KAAK,GAAQ,IAAI;IACjB,UAAU,GAAG,KAAK;AAElB,IAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,EAAE,CAAC;AACzB,IAAA,SAAS,GAAG,MAAK,EAAE,CAAC;AAEpB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;YACvD,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE;AAEzB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;YAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;gBACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAEvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;;AAEhE,oBAAA,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ;gBACvD;AAAO,qBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;;oBAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;oBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC5C,oBAAA,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ;gBACvD;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAC;YAEF,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B;QACF;IACF;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;AACA;;;;AAIG;AACH,IAAA,YAAY,CAAC,MAAW,EAAA;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;AACA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,MAAW,EAAA;QACtB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5D,YAAA,OAAO,MAAM;QACf;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;AAC3C,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB;AAEA,IAAA,YAAY,CAAC,MAAW,EAAA;QACtB,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,YAAA,OAAO,MAAM;QAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO;AAC5C,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,KAAU,EAAA;QACvB,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAE9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1D,YAAA,OAAO,KAAK;QACd;;QAGA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI;AAC1C,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB;wGA1GW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EARpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BH,ouBAsBA,EAAA,MAAA,EAAA,CAAA,6kTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAWxB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAbhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WACvB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,SAAA,EAGzB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,ouBAAA,EAAA,MAAA,EAAA,CAAA,6kTAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBAEA;;;MELU,uBAAuB,CAAA;AA8CL,IAAA,MAAA;AACnB,IAAA,EAAA;AACA,IAAA,QAAA;AA7CA,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAO;AAC3C,IAAA,UAAU;AACV,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,gBAAgB;AACzB,IAAA,gBAAgB;AAChB,IAAA,WAAW,GAAG,IAAI,IAAI,EAAE;AACxB,IAAA,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC1C,IAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;IAC5C,YAAY,GAAkB,IAAI;IAClC,YAAY,GAAkB,IAAI;IAClC,QAAQ,GAAe,EAAE;IACzB,SAAS,GAAa,EAAE;IACxB,UAAU,GAAkB,IAAI;IAChC,QAAQ,GAAkB,IAAI;AAC9B,IAAA,aAAa;AACb,IAAA,YAAY;AACZ,IAAA,OAAO;IACP,cAAc,GAAY,KAAK;IAC/B,IAAI,GAAQ,EAAE;IACd,YAAY,GAAW,aAAa;IACpC,SAAS,GAAa,EAAE;IACxB,WAAW,GAAU,EAAE;IACvB,WAAW,GAAW,CAAC;AACvB,IAAA,iBAAiB;AACjB,IAAA,eAAe;IACf,MAAM,GAAY,KAAK;IACvB,gBAAgB,GAAG,KAAK;AACxB,IAAA,UAAU,GAAQ;AAChB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,KAAK;KACZ;AACD,IAAA,WAAA,CAC6B,MAAc,EACjC,EAAqB,EACrB,QAAkB,EAAA;QAFC,IAAA,CAAA,MAAM,GAAN,MAAM;QACzB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;AACH,IAAA,WAAW,CAAC,QAAuB,EAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,YAAY,EAAE;AAC/C,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;QAC5B;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC;IACF;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE;;QAExB,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;AAEQ,IAAA,iBAAiB,GAAe,MAAK,EAAE,CAAC;AACxC,IAAA,gBAAgB,GAAqB,MAAK,EAAE,CAAC;AACrD,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;QACxB;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAC7D;IACF;AACA;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AAEtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAEvD,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACrE,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3B;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACjE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACjE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;QAC/C;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,aAAa;QACjC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,GAAG,GAAG,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;YAC5D,UAAU,CAAC,MAAK;AACd,gBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE;AAC1B,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,aAAa;IACnC;AACA;;;;AAIG;IACH,YAAY,GAAA;QACV,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE;AAChD,gBAAA,KAAK,EAAE,MAAM;aACd,CAAC;YACF,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE;AAC/C,gBAAA,IAAI,EAAE,SAAS;aAChB,CAAC;SACH;IACH;AAEA;;;AAGG;IACH,sBAAsB,GAAA;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACjD;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,aAAa;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,aAAa;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;;AAGG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;IAC1D;AAEA;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;IAC1D;AAEA;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB;QAC9C,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AACA;;;AAGG;IACH,iBAAiB,GAAA;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAClD,MAAM,SAAS,GAAG,WAAW,IAAI,WAAW,GAAG,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC;IACtE;AACA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AACxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AACxD,QAAA,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG;AAAE,YAAA,OAAO,KAAK;AACnC,QAAA,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG;AAAE,YAAA,OAAO,KAAK;AACnC,QAAA,OAAO,IAAI;IACb;AACA;;;;;AAKG;AACH,IAAA,aAAa,CAAC,GAAW,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CACnB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAC9B,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAC3B,GAAG,CACJ;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACrC;AACA;;;AAGG;IACH,gBAAgB,GAAA;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;QAEzC,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD,QAAA,MAAM,YAAY,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAExD,QAAA,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AACjE,QAAA,MAAM,mBAAmB,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AAE9D,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,YAAY,GAChB,EAAE;;AAGJ,QAAA,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,MAAM,GAAG,GAAG,mBAAmB,GAAG,CAAC;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;AAC3C,YAAA,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;QACzD;;AAGA,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,kBAAkB,EAAE,GAAG,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;AACvC,YAAA,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACxD;;AAGA,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC,MAAM;AAClD,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,SAAS,EAAE,GAAG,EAAE,EAAE;AACzC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;AAC3C,YAAA,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;QACzD;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY;IACjC;AAEA;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;;;AAIG;IACH,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;;AAG5B,QAAA,IACE,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;AACzC,YAAA,IAAI,CAAC,gBAAgB,YAAY,IAAI,EACrC;YACA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC5C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;AAGzC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CACzB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAClB;YACD,IAAI,CAAC,gBAAgB,EAAE;QACzB;;AAGK,aAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACjE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;;AAGnD,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE;AAEjC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAE9B,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE;AACzC,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW,EAAE;;AAG3C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,gBAAgB,EAAE;;YAGvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;;YAG9C,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAC/B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CACL;QACD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAErC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW;QAEpC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;aAAO;YACL,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE;AACrC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACtB;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI;AAC/D,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU;YACnE;QACF;QAEA,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;AACA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAA;QACtD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,QAAQ,EAAE;;AAE9C,YAAA,QACE,IAAI,CAAC,YAAY,KAAK,IAAI;gBAC1B,IAAI,CAAC,aAAa,KAAK,KAAK;AAC5B,gBAAA,IAAI,CAAC,YAAY,KAAK,IAAI;QAE9B;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,OAAO,EAAE;;AAEpD,YAAA,OAAO,CAAC,EACN,CAAC,IAAI,CAAC,UAAU;gBACd,IAAI,CAAC,UAAU,KAAK,IAAI;gBACxB,IAAI,CAAC,aAAa,KAAK,KAAK;AAC5B,gBAAA,IAAI,CAAC,YAAY,KAAK,IAAI;iBAC3B,IAAI,CAAC,QAAQ;oBACZ,IAAI,CAAC,QAAQ,KAAK,IAAI;oBACtB,IAAI,CAAC,aAAa,KAAK,KAAK;AAC5B,oBAAA,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;iBAC5B,IAAI,CAAC,UAAU;AACd,oBAAA,IAAI,CAAC,QAAQ;oBACb,IAAI,GAAG,IAAI,CAAC,UAAU;oBACtB,IAAI,GAAG,IAAI,CAAC,QAAQ;oBACpB,IAAI,CAAC,aAAa,KAAK,KAAK;AAC5B,oBAAA,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAC9B;QACH;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;QAC5B,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACnD,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/D,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACtD,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACtC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,IAAI;AACb,SAAA,CAAC;IACJ;AACA;;;;;;AAMG;IACH,cAAc,CAAC,QAAc,EAAE,YAA2B,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,CAAC,YAAY,EAAE;;YAEjB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAE;QACrD;AAEA,QAAA,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;;AAGlD,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAAE,KAAK,IAAI,EAAE;AAChD,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAAE,KAAK,GAAG,CAAC;QAE9C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAEnC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,oBAAoB,CAAE;IAC7D;AAEA;;;;AAIG;IACH,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpD,YAAA,OAAO;QACT;QACA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,QAAQ,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE;AAExB,YAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CACvB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,CAClB;YAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CACzC,QAAQ,IAAI,EAAE,EACd,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CACtD;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY;YAC7B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAEjD;QACF;QACA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,OAAO,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AAExC,YAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,CAChB;AACD,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CACtB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,QAAQ,CACd;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CACvC,SAAS,EACT,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CACtD;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CACrC,OAAO,EACP,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CACtD;YAED,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;AAE9D,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC;IACF;AAhjBW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBA8CxB,SAAS,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AA9CR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAfvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,uBAAuB;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,uBAAuB;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;YACD,QAAQ;AACT,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BH,+sLAmLA,EAAA,MAAA,EAAA,CAAA,q0dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxKY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA;;4FAkBlC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBApBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,WAC3B,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAA,SAAA,EAGnC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,uBAAyB;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAA,uBAAyB;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;wBACD,QAAQ;AACT,qBAAA,EAAA,IAAA,EACK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,+sLAAA,EAAA,MAAA,EAAA,CAAA,q0dAAA,CAAA,EAAA;;0BAgDpB,MAAM;2BAAC,SAAS;;sBA3ClB;;sBACA;;sBACA;;sBACA;;sBACA;;;MEvBU,sBAAsB,CAAA;AAMb,IAAA,EAAA;AAAwB,IAAA,QAAA;IALpB,WAAW,GAAG,EAAE;IAC/B,YAAY,GAAY,EAAE;AAE3B,IAAA,SAAS;IAEjB,WAAA,CAAoB,EAAc,EAAU,QAAmB,EAAA;QAA3C,IAAA,CAAA,EAAE,GAAF,EAAE;QAAsB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAc;IAElE,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;IACpB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE;IACtB;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,eAAe,EAAE;IACxB;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE;IACtB;IAIA,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,eAAe,EAAE;IAC5C;AAEA;;;;AAIG;IACK,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,SAAS;YAAE;QAEpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW;AAE3C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;;;;;;;;AAQ3D,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;QAC3D;aAAO;;YAEL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC;QACjE;QAEA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C;AAEA;;;AAGG;IACK,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAW;QAC9B;IACF;AAEA;;;AAGG;IACK,eAAe,GAAA;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE;AAE1D,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,GAAG,OAAO;AAC9D,QAAA,MAAM,SAAS,GACb,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,GAAG,OAAO;QACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,GAAG,OAAO;AAC7D,QAAA,MAAM,SAAS,GACb,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,GAAG,OAAO;QAEnE,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,IAAI,GAAG,CAAC;;QAGZ,IAAI,SAAS,EAAE;AACb,YAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,OAAO;AAC/B,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC;QACjE;aAAO,IAAI,SAAS,EAAE;YACpB,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,OAAO;AACjD,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC;QACjE;aAAO,IAAI,SAAS,EAAE;AACpB,YAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC;AAC/D,YAAA,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,OAAO;QACjC;aAAO,IAAI,QAAQ,EAAE;AACnB,YAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC;YAC/D,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,OAAO;QACpD;aAAO;;AAEL,YAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,OAAO;YAC/B,IAAI,GAAG,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAC3B,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,GAAG,EAAE,CAC3C;QACH;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,CAAC;IAC7D;wGArHW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;sBAEE,KAAK;uBAAC,eAAe;;sBACrB;;sBAcA,YAAY;uBAAC,YAAY;;sBAMzB,YAAY;uBAAC,YAAY;;sBAKzB,YAAY;uBAAC,eAAe;;sBAC5B,YAAY;uBAAC,eAAe;;;MCjClB,kBAAkB,CAAA;IAC7B,WAAW,GAAkB,IAAI;AAEjC;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;IAC9D;AAEA;;;;;AAKG;AACH,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,KAAK;IACnC;wGApBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,6ECR/B,uHAGA,EAAA,MAAA,EAAA,CAAA,66MAAA,CAAA,EAAA,CAAA;;4FDKa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,EAAE,EAAA,QAAA,EAAA,uHAAA,EAAA,MAAA,EAAA,CAAA,66MAAA,CAAA,EAAA;;;MEYA,sBAAsB,CAAA;AAQK,IAAA,SAAA;IAP7B,KAAK,GAAW,EAAE;IAClB,KAAK,GAAW,CAAC;;IAGC,eAAe,GAA4B,IAAI;AAE1E,IAAA,WAAA,CACsC,SAA6B,EAAA;QAA7B,IAAA,CAAA,SAAS,GAAT,SAAS;IAC5C;AAEH;;;;AAIG;IACH,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C;AAEA;;;AAGG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEA;;;AAGG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,OAAO,CAAC,KAAK,CACX,kDAAkD,EAClD,IAAI,CAAC,KAAK,CACX;QACH;IACF;AAvCW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAQvB,kBAAkB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AARjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKnB,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB3B,oaAaA,8sPDDY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAIX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,oaAAA,EAAA,MAAA,EAAA,CAAA,upPAAA,CAAA,EAAA;;0BAYpB,MAAM;2BAAC,kBAAkB;;sBAP3B;;sBACA;;sBAGA,YAAY;uBAAC,WAAW;;;MEfd,mBAAmB,CAAA;AACX,IAAA,QAAA;AAAnB,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAqB;wGADrC,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCCY,mBAAmB,CAAA;AACX,IAAA,QAAA;AAAnB,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAqB;wGADrC,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCKY,gBAAgB,CAAA;AACQ,IAAA,OAAO;AACP,IAAA,OAAO;wGAF/B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACb,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,mBAAmB,gDCZnC,4BACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDSa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,QAAA,EAAA,4BAAA,EAAA;;sBAKV,YAAY;uBAAC,mBAAmB;;sBAChC,YAAY;uBAAC,mBAAmB;;;MEKtB,YAAY,CAAA;IACd,SAAS,GAAG,CAAC;IACb,YAAY,GAAa,EAAE;AAE1B,IAAA,SAAS,GAAyB,IAAI,YAAY,EAAU;AAEnC,IAAA,KAAK;AAExC;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;IACF;wGAlBW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAMN,gBAAgB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBnC,+qBAyBA,6RDVY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAEX,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;+BACE,aAAa,EAAA,OAAA,EAGd,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,+qBAAA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA;;sBAGtB;;sBACA;;sBAEA;;sBAEA,eAAe;uBAAC,gBAAgB;;;AEvBnC;;AAEG;;ACFH;;AAEG;;;;"}
|