@apexara/ng-components 1.0.6-test.5 → 1.0.6-test.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"apexara-ng-components-select.mjs","sources":["../../../../projects/apexara/ng-components/select/src/select.component.ts","../../../../projects/apexara/ng-components/select/src/select.component.html","../../../../projects/apexara/ng-components/select/apexara-ng-components-select.ts"],"sourcesContent":["import {\n Component, OnInit, ViewChild, Input,\n Output, inject, PLATFORM_ID, ElementRef,\n HostListener, EventEmitter, IterableDiffers,\n OnDestroy, AfterViewInit, SimpleChanges, IterableDiffer, signal} from '@angular/core';\nimport { NgClass, isPlatformServer } from '@angular/common';\nimport { FormGroup, FormsModule, ReactiveFormsModule, AbstractControl, TouchedChangeEvent } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { Subscription, debounceTime, filter, fromEvent, tap } from 'rxjs';\n\nimport { ApexChipComponent } from '@apexara/ng-components/chip';\nimport { ApexImageComponent } from '@apexara/ng-components/image';\nimport { ApexCheckboxComponent } from '@apexara/ng-components/checkbox';\n\nimport { OSService, MobileOS } from '@apexara/ng-components/services';\n\nimport { ApexTooltipDirective, TooltipPosition } from '@apexara/ng-components/tooltip';\n\nexport interface ApexSelectOptions {\n label: string;\n tooltip?: string;\n data: ApexSelectData[];\n multiple?: boolean;\n counterAsValue?: boolean;\n placeholder?: string;\n helperText?: string;\n helperRoute?: string;\n prefixImg?: string;\n suffixImg?: string;\n formGroup?: FormGroup;\n searchable?: boolean;\n formControlName?: string;\n errors?: ControlErrors;\n maxDropdownHeightPx?: number; // optional hard max height in px\n}\n\nexport interface ApexSelectData {\n label: string;\n value: any;\n description?: string;\n isHover?: boolean;\n icon?: string;\n}\n\nexport interface ControlErrors {\n [x: string]: string;\n}\n\n@Component({\n selector: 'apex-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.css'],\n imports: [\n NgClass,\n RouterLink,\n FormsModule,\n ScrollingModule,\n ApexChipComponent,\n ApexImageComponent,\n ApexTooltipDirective,\n ReactiveFormsModule,\n ApexCheckboxComponent,\n ]\n})\n\nexport class ApexSelectComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild('input') input: ElementRef<HTMLInputElement> | null = null;\n\n @ViewChild('label') label: ElementRef<HTMLLabelElement> | null = null;\n @ViewChild('dropdown') dropdown: CdkVirtualScrollViewport | null = null;\n @ViewChild('inputWrapper') inputWrapper: ElementRef<HTMLInputElement> | null = null;\n\n @Input() options!: ApexSelectOptions;\n\n\n @Output() selectChange = new EventEmitter<ApexSelectData>();\n @Output() helperTextChange = new EventEmitter<void>();\n\n constructor(\n private osService: OSService,\n private elementRef: ElementRef,\n private iterableDiffers: IterableDiffers) {\n\n this.dataDiffer = this.iterableDiffers.find([]).create<ApexSelectData>();\n\n this.handleEvents();\n }\n\n public firstDropdown = signal(0);\n public isDropdown = signal(false);\n public control!: AbstractControl;\n\n public tooltipPosition = TooltipPosition;\n\n private platformId = inject(PLATFORM_ID);\n\n private isDropdownReversed = false;\n\n private shouldPreventEvents = false;\n\n private documentKeyupValue = '';\n private documentKeyupValueResetTime = 1000;\n private documentKeyUpSubscription: Subscription | null = null;\n\n private dataDiffer!: IterableDiffer<ApexSelectData>;\n\n private controlSubscription: Subscription | null = null;\n\n public filteredData = signal<ApexSelectData[]>([]);\n\n private lastSearch = '';\n\n private keyListener = (event: KeyboardEvent) => this.blockArrowScroll(event);\n private wheelListener = (event: WheelEvent | TouchEvent) => this.blockScroll(event);\n\n private scrollBlockersAttached = false;\n\n // Virtual scroll config for options list\n public optionItemSizePx = 48; // must match .dropdown .option height in CSS\n public maxVisibleOptions = 8;\n public dropdownHeightPx = signal(this.optionItemSizePx);\n\n public controlInvalid = signal(false);\n public controlValue = signal<any>(null);\n public controlDisabled = signal(false);\n\n public ngOnInit(): void {\n this.control = this.getControl()!;\n\n if (this.control) {\n this.controlValue.set(this.control.value);\n this.controlDisabled.set(this.control.disabled);\n\n const touchedSub = this.control.events\n .pipe(filter(event => event instanceof TouchedChangeEvent))\n .subscribe(() => {\n this.controlInvalid.set(this.control.touched && this.control.invalid);\n });\n\n const statusSub = this.control.statusChanges.subscribe(() => {\n this.controlInvalid.set(this.control.touched && this.control.invalid);\n this.controlDisabled.set(this.control.disabled);\n });\n\n const valueSub = this.control.valueChanges.subscribe((value) => {\n this.controlValue.set(value);\n });\n\n this.controlSubscription = touchedSub;\n this.controlSubscription.add(statusSub);\n this.controlSubscription.add(valueSub);\n }\n\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.documentKeyUpSubscription = fromEvent<KeyboardEvent>(this.elementRef.nativeElement, 'keydown')\n .pipe(\n tap(event => { this.keyup(event) }),\n debounceTime(this.documentKeyupValueResetTime),\n )\n .subscribe(() => { this.documentKeyupValue = '' });\n }\n\n public ngDoCheck(): void {\n const data = this.options?.data || [];\n const diff = this.dataDiffer.diff(data);\n\n if (!diff) {\n return;\n }\n\n this.filteredData.set([...data]);\n\n // Sync controlValue signal and visible input when data changes.\n // The parent may have reset the control with { emitEvent: false },\n // which bypasses valueChanges — the only thing that updates controlValue.\n // Clone the value to force a new reference so the signal always fires.\n if (this.control) {\n const value = this.control.value;\n this.controlValue.set(Array.isArray(value) ? [...value] : value != null ? { ...value } : null);\n\n if (this.input) {\n this.setVisibleValue(value);\n }\n }\n }\n\n public ngAfterViewInit(): void {\n this.filteredData.set([...this.options.data]);\n\n setTimeout(() => {\n if (this.options.formGroup && this.options.formControlName) {\n this.setVisibleValue(this.options.formGroup.controls[this.options.formControlName].value);\n }\n })\n\n if (this.options.searchable) {\n this.controlSubscription!.add(this.control.valueChanges.subscribe((value) => {\n this.setVisibleValue(value);\n }));\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (!changes['options'] || changes['options'].firstChange) {\n return;\n }\n\n this.updateDropdownHeight();\n }\n\n public ngOnDestroy(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.detachGlobalScrollBlockers();\n window.removeEventListener('keydown', this.keyListener);\n\n if (this.documentKeyUpSubscription) {\n this.documentKeyUpSubscription.unsubscribe();\n }\n\n if (this.controlSubscription) {\n this.controlSubscription.unsubscribe();\n }\n }\n\n public onHelperText(): void {\n this.helperTextChange.emit();\n }\n\n public setValue(value: any): void {\n if (!this.options.multiple) {\n value = this.removeProperty(value, 'isHover');\n }\n\n this.control.setValue(value);\n this.input!.nativeElement.value = value.label ? value.label : '';\n\n this.selectChange.emit(value);\n\n if (value.value == null) {\n return;\n }\n\n setTimeout(() => {\n this.removeDropdown();\n\n if (!this.options.multiple) {\n this.lastSearch = '';\n }\n })\n }\n\n public setMultipleValue(data: any, event?: Event): void {\n if (event) {\n event.preventDefault();\n }\n\n const newValue = this.control.value;\n let indexOfValue = -1;\n\n for (let i = 0; i < newValue.length; i++) {\n if (newValue[i].value === data.value) {\n indexOfValue = i;\n }\n\n if (JSON.stringify(newValue[i].value) === JSON.stringify(data.value)) {\n indexOfValue = i;\n }\n }\n\n if (indexOfValue === -1) {\n newValue.push({ label: data.label, value: data.value });\n } else {\n newValue.splice(indexOfValue, 1);\n }\n\n this.lastSearch = '';\n this.input!.nativeElement.value = '';\n this.filteredData.set([...this.options.data]);\n\n this.control.setValue(newValue);\n this.selectChange.emit(newValue);\n }\n\n public setVisibleValue(newValue: any | any[]): void {\n if (newValue === null) {\n this.input!.nativeElement.value = '';\n\n return;\n }\n\n if (this.options.counterAsValue) {\n if (this.options.searchable) {\n return;\n }\n\n const count = Array.isArray(newValue) ? newValue.length : 0;\n this.input!.nativeElement.value = count > 0 ? count + ' selected' : '';\n\n return;\n }\n\n let visibleValue = '';\n\n for (let data of this.filteredData()) {\n // when newValue is object and not array\n if (data.value === newValue.value) {\n visibleValue = data.label;\n\n break;\n }\n\n if (this.options.multiple && !this.options.searchable) {\n // when newValue is array\n for (let item of newValue) {\n if (data.value === item.value) {\n visibleValue += item.label + ', ';\n\n break;\n }\n }\n }\n\n if (newValue.value) {\n // Edge case for when we use { label, value } pattern as value\n if (newValue.value.value && this.getControl()?.value.value.value === newValue.value.value) {\n visibleValue = data.label;\n\n break;\n }\n }\n }\n\n this.input!.nativeElement.value = visibleValue;\n }\n\n private updateDropdownHeight(): void {\n if (!this.isDropdown()) {\n return;\n }\n\n setTimeout(() => {\n const count = this.filteredData().length;\n const maxRows = this.maxVisibleOptions;\n\n let next = this.optionItemSizePx;\n\n if (count > 0 && count <= maxRows && this.dropdown) {\n const options = this.dropdown.elementRef.nativeElement.querySelectorAll('.option');\n\n let total = 0;\n\n options.forEach((option: any) => {\n const height = option.getBoundingClientRect().height;\n total += isFinite(height) ? height : 0;\n });\n\n next = total;\n } else {\n const rows = Math.min(count, maxRows);\n\n next = Math.max(rows * this.optionItemSizePx, this.optionItemSizePx);\n }\n\n const maxHeight = this.options.maxDropdownHeightPx;\n\n if (maxHeight) {\n next = Math.min(next, Math.max(this.optionItemSizePx, maxHeight));\n }\n\n this.dropdownHeightPx.set(next);\n\n setTimeout(() => {\n this.dropdown?.checkViewportSize();\n }, 100)\n\n });\n }\n\n public showMultipleCount(): number {\n const value = this.controlValue();\n if (!value || !value.length) {\n return 0;\n }\n\n return value.length;\n }\n\n public isValueSelected(value: ApexSelectData): boolean {\n const controlVal = this.controlValue();\n if (value.value == null || controlVal == null) {\n return false;\n }\n\n return value.value === controlVal.value;\n }\n\n public isMultipleSelected(value: ApexSelectData): boolean {\n const controlVal = this.controlValue();\n if (!controlVal || !controlVal.length) {\n return false;\n }\n\n for (let i = 0; i < controlVal.length; i++) {\n if (value.value === controlVal[i]) {\n return true;\n }\n\n if (controlVal[i].value === value.value) {\n return true;\n }\n\n if (JSON.stringify(controlVal[i].value) === JSON.stringify(value.value)) {\n return true;\n }\n }\n\n return false;\n }\n\n public activateDropdown(): void {\n if (this.checkIfControlDisabled()) {\n return;\n }\n\n this.isDropdown.set(true);\n this.input!.nativeElement.focus();\n\n if (this.firstDropdown() === 0) {\n this.firstDropdown.update(v => v + 1);\n\n setTimeout(() => this.generateDropdownPosition(true));\n }\n\n this.attachGlobalScrollBlockers();\n this.onSearch(this.lastSearch, false);\n }\n\n @HostListener('document:click', ['$event'])\n public deactivateControl(event: MouseEvent | KeyboardEvent): void {\n if (event instanceof KeyboardEvent) {\n this.removeDropdown();\n\n return;\n }\n\n if (!this.dropdown || !this.inputWrapper) {\n return;\n }\n\n const dropdownRect = this.dropdown.elementRef.nativeElement.getBoundingClientRect();\n const inputWrapperRect = this.inputWrapper.nativeElement.getBoundingClientRect();\n\n const isClickInsideDropdown = this.isWithinBounds(event, dropdownRect);\n const isClickInsideInputWrapper = this.isWithinBounds(event, inputWrapperRect);\n\n if (isClickInsideDropdown || isClickInsideInputWrapper) {\n return;\n }\n\n this.removeDropdown();\n }\n\n public onFocusIn(): void {\n this.shouldPreventEvents = true;\n\n this.activateDropdown();\n\n setTimeout(() => {\n this.shouldPreventEvents = false;\n }, 200);\n }\n\n public onFocusOut(): void {\n this.shouldPreventEvents = true;\n\n setTimeout(() => {\n this.shouldPreventEvents = false;\n }, 200);\n\n this.removeDropdown();\n }\n\n public toggleDropdown(): void {\n if (this.shouldPreventEvents) {\n return;\n }\n\n if (this.isDropdown()) {\n this.removeDropdown();\n } else {\n this.activateDropdown();\n }\n }\n\n private generateDropdownPosition(checkRevserse: boolean = false): void {\n if (!this.dropdown) {\n // method will keep executing until dropdown is rendered\n setTimeout(() => this.generateDropdownPosition(true));\n\n return;\n }\n\n const dropdownEl = this.dropdown.elementRef.nativeElement;\n const elementRefRect = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n elementRefRect.y += window.visualViewport!.offsetTop;\n elementRefRect.x += window.visualViewport!.offsetLeft;\n }\n\n dropdownEl.style.left = elementRefRect.x + 'px';\n dropdownEl.style.width = elementRefRect.width + 'px';\n dropdownEl.style.top = elementRefRect.y + elementRefRect.height + 'px';\n\n if (checkRevserse) {\n if (window.innerHeight < dropdownEl.getBoundingClientRect().bottom) {\n dropdownEl.style.top = 'unset';\n dropdownEl.style.bottom = window.innerHeight - elementRefRect.y + 10 + 'px';\n\n this.isDropdownReversed = true;\n }\n }\n\n if (this.isDropdownReversed) {\n dropdownEl.style.top = 'unset';\n dropdownEl.style.bottom = window.innerHeight - elementRefRect.y + 10 + 'px';\n }\n\n setTimeout(() => {\n this.updateDropdownHeight();\n }, 100);\n }\n\n public removeDropdown(): void {\n this.isDropdown.set(false);\n this.isDropdownReversed = false;\n this.firstDropdown.set(0);\n\n this.input!.nativeElement.blur();\n\n this.detachGlobalScrollBlockers();\n }\n\n public handleKeydown(event: any): void {\n if (event.code === 'Backspace') {\n this.onSearch('', true);\n }\n }\n\n public preventFocusChange(event: MouseEvent): void {\n if (this.input?.nativeElement === document.activeElement) {\n event.preventDefault();\n\n return;\n }\n }\n\n public onSearch(value: string, shouldResetHover?: boolean): void {\n this.lastSearch = value;\n\n if (!value) {\n // Reset to original data if input is empty\n this.filteredData.set([...this.options.data]);\n\n this.updateDropdownHeight();\n\n return;\n }\n\n const searchTerm = value.toLowerCase();\n\n const filtered = this.options.data.filter(item =>\n item.label.toLowerCase().includes(searchTerm)\n );\n\n if (filtered.length && shouldResetHover) {\n for (let i = 0; i < filtered.length; i++) {\n filtered[i].isHover = false;\n }\n\n filtered[0].isHover = true;\n }\n\n this.filteredData.set(filtered);\n\n this.updateDropdownHeight();\n }\n\n public getPlaceholder(): string {\n const options = this.options!;\n const formGroup = options.formGroup;\n const formControlName = options.formControlName;\n const controlVal = this.controlValue();\n\n let placeholder = '';\n\n if (options.placeholder) {\n placeholder = options.placeholder;\n }\n\n if (formGroup && formControlName && options.errors && this.checkIfControlInvalid()) {\n for (const error in options.errors) {\n if (formGroup.controls[formControlName].hasError(error)) {\n placeholder = options.errors[error];\n }\n }\n }\n\n if ((controlVal instanceof Array && controlVal.length) || (controlVal && !(controlVal instanceof Array))) {\n return '';\n }\n\n return placeholder;\n }\n\n public checkIfControlInvalid(): boolean {\n return this.controlInvalid();\n }\n\n public checkIfControlDisabled(): boolean {\n return this.controlDisabled();\n }\n\n private getControl(): AbstractControl | null {\n if (this.options && this.options.formGroup && this.options.formControlName) {\n return this.options.formGroup.controls[this.options.formControlName];\n }\n\n return null;\n }\n\n private isWithinBounds(event: MouseEvent, rect: DOMRect): boolean {\n return (\n event.clientX >= rect.left &&\n event.clientX <= rect.right &&\n event.clientY >= rect.top &&\n event.clientY <= rect.bottom\n );\n }\n\n private handleEvents(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n window.addEventListener('keydown', this.keyListener);\n }\n\n private keyup(event: KeyboardEvent): void {\n if (document.activeElement !== this.input?.nativeElement) {\n this.deactivateControl(event);\n\n return;\n }\n\n if (document.activeElement === this.input?.nativeElement) {\n if (document.activeElement !== this.input?.nativeElement) {\n return;\n }\n\n switch (event.code) {\n case 'Enter':\n this.documentEnterKeyup(event);\n\n return;\n case 'Space':\n if (!this.options.searchable) {\n this.documentEnterKeyup(event);\n }\n\n return;\n case 'Backspace':\n if (!this.options.multiple && this.options.searchable && this.control.value.value != null) {\n this.onSearch('', false);\n\n this.setValue('');\n }\n\n return;\n case 'Escape':\n this.deactivateControl(event);\n\n return;\n case 'ArrowDown':\n this.documentArrowsKeyup(true);\n\n return;\n case 'ArrowUp':\n this.documentArrowsKeyup(false);\n\n return;\n }\n\n this.documentKeyup(event);\n }\n }\n\n private documentEnterKeyup(event: KeyboardEvent): void {\n const data = this.filteredData();\n for (let i = 0; i < data.length; i++) {\n if (data[i].isHover) {\n switch(this.options.multiple) {\n case true:\n this.setMultipleValue(data[i], event);\n\n this.updateDropdownHeight();\n\n return;\n default:\n this.setValue(data[i]);\n\n this.removeDropdown();\n }\n }\n }\n }\n\n private documentArrowsKeyup(isDownArrow: boolean): void {\n if (!this.dropdown || !this.filteredData().length) {\n return;\n }\n\n const data = this.filteredData();\n const dataLength = data.length;\n const controlValue = this.control.getRawValue();\n const isControlValue = controlValue && controlValue !== '';\n\n let hoverIndex: number | null = null;\n let valueIndex: number | null = null;\n\n for (let i = 0; i < dataLength; i++) {\n if (data[i].isHover) {\n hoverIndex = i;\n }\n\n if (isControlValue && data[i].value === controlValue) {\n valueIndex = i;\n }\n\n data[i].isHover = false;\n }\n\n const currentIndex = hoverIndex ? hoverIndex : valueIndex ? valueIndex : 0;\n let newIndex = isDownArrow ? currentIndex + 1 : currentIndex - 1;\n\n newIndex = newIndex < 0 ? 0 : newIndex;\n newIndex = newIndex >= dataLength ? dataLength - 1 : newIndex;\n\n data[newIndex].isHover = true;\n\n this.filteredData.set([...data]);\n\n this.dropdown?.scrollToIndex(newIndex, 'auto');\n }\n\n private documentKeyup(event: KeyboardEvent): void {\n if (!this.isDropdown() || this.options.searchable) {\n return;\n }\n\n const data = this.filteredData();\n\n for (let i = 0; i < data.length; i++) {\n data[i].isHover = false;\n }\n\n this.documentKeyupValue = this.documentKeyupValue + event.key.toLowerCase();\n\n let newIndex: number | null = null;\n\n for (let i = 0; i < data.length; i++) {\n const subLabel = data[i].label.substring(0, this.documentKeyupValue.length).toLowerCase();\n\n if (subLabel === this.documentKeyupValue) {\n newIndex = i;\n\n break;\n }\n\n data[i].isHover = false;\n }\n\n if (newIndex !== null) {\n data[newIndex].isHover = true;\n\n this.dropdown?.scrollToIndex(newIndex, 'auto');\n }\n\n this.filteredData.set([...data]);\n }\n\n private removeProperty(obj: ApexSelectData, propertyName: keyof ApexSelectData): Partial<ApexSelectData> {\n let { [propertyName]: removedProperty, ...data } = obj;\n return data;\n }\n\n private blockArrowScroll(event: any) {\n if (!this.dropdown) {\n return;\n }\n\n if (event.key ==='ArrowDown' || event.key ==='ArrowUp') {\n event.preventDefault();\n }\n }\n\n private blockScroll(event: WheelEvent | TouchEvent): void {\n if (!this.dropdown) {\n return;\n }\n\n const dropdownEl = this.dropdown.elementRef.nativeElement;\n const isInsideDropdown = this.isDescendant(dropdownEl, event.target as HTMLElement);\n\n if (isInsideDropdown) {\n const canScroll = dropdownEl.scrollHeight > dropdownEl.clientHeight;\n\n if (!canScroll) {\n event.preventDefault();\n }\n\n return;\n }\n\n event.preventDefault();\n }\n\n private isDescendant(parent: HTMLElement, child: HTMLElement | null): boolean {\n while (child !== null) {\n if (child === parent) {\n return true;\n }\n child = child.parentElement;\n }\n\n return false;\n }\n\n private attachGlobalScrollBlockers(): void {\n if (this.scrollBlockersAttached) {\n return;\n }\n\n window.addEventListener('wheel', this.wheelListener, { passive: false });\n window.addEventListener('touchmove', this.wheelListener, { passive: false });\n\n this.scrollBlockersAttached = true;\n }\n\n private detachGlobalScrollBlockers(): void {\n if (!this.scrollBlockersAttached) {\n return;\n }\n\n window.removeEventListener('wheel', this.wheelListener as EventListener);\n window.removeEventListener('touchmove', this.wheelListener as EventListener);\n\n this.scrollBlockersAttached = false;\n }\n\n}\n","@if (options) {\n @if (options.formGroup && options.formControlName) {\n <div class=\"container\" (mousedown)=\"preventFocusChange($event)\">\n @if (options.label !== '') {\n <div class=\"header\">\n <div class=\"label-wrapper\">\n <label>{{ options.label }}</label>\n \n @if (options.tooltip) {\n <svg class=\"tooltip-icon\" [apexTooltip]=\"options.tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n }\n </div>\n \n @if (options.helperText) {\n <div class=\"header-helper\" (click)=\"onHelperText()\" [routerLink]=\"options.helperRoute\">{{ options.helperText }}</div>\n }\n </div>\n }\n\n <div #inputWrapper class=\"input-field-wrapper\" (click)=\"toggleDropdown()\" [formGroup]=\"options.formGroup\" [ngClass]=\"{ 'invalid': checkIfControlInvalid(), 'disabled': checkIfControlDisabled() }\">\n @if (options.prefixImg) {\n <apex-img class=\"prefix\" [src]=\"'assets/img/' + this.options.prefixImg\" [alt]=\"'Select prefix icon'\"></apex-img>\n }\n\n @if (options.searchable && options.multiple && this.showMultipleCount() > 0) {\n @if (options.counterAsValue) {\n <span class=\"multiple-count\">\n {{ this.showMultipleCount() }} selected\n </span>\n } @else {\n <div class=\"chips\">\n @for (data of options.data; track $index) {\n @if (isMultipleSelected(data)) {\n <apex-chip [closeIcon]=\"true\" (closeChange)=\"setMultipleValue(data)\">{{ data.label }}</apex-chip>\n }\n }\n </div>\n }\n }\n\n @if (options.searchable) {\n <!-- used for formControl data binding and reactivness -->\n <input #hiddenInput\n class=\"hidden\"\n [formControlName]=\"options.formControlName\">\n\n <!-- used for searching and data displaying -->\n <input #input\n [placeholder]=\"getPlaceholder()\"\n [readOnly]=\"!options.searchable\"\n [ngClass]=\"{ 'no-icon': !options.prefixImg }\"\n [disabled]=\"checkIfControlDisabled()\"\n (keydown)=\"handleKeydown($event)\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n (input)=\"onSearch(input.value, true)\"\n autocorrect=\"off\"\n spellcheck=\"false\">\n } @else {\n <input #input\n readonly\n [disabled]=\"checkIfControlDisabled()\"\n [placeholder]=\"getPlaceholder()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n [formControlName]=\"options.formControlName\"\n [ngClass]=\"{ 'no-icon': !options.prefixImg }\"\n (ngModelChange)=\"setVisibleValue($event)\"/>\n }\n \n <div class=\"arrow-wrapper\">\n <div class=\"arrow\" [class]=\"{ checked: this.isDropdown() }\"></div>\n </div>\n </div>\n\n @if (isDropdown()) {\n <cdk-virtual-scroll-viewport [itemSize]=\"optionItemSizePx\" [style.height.px]=\"dropdownHeightPx()\" class=\"dropdown\" #dropdown>\n <div class=\"option\"\n *cdkVirtualFor=\"let data of filteredData();\"\n [ngClass]=\"{ selected: !options.multiple ? isValueSelected(data) : false, preselected: data.isHover, checkbox: options.multiple }\"\n (click)=\"options.multiple ? setMultipleValue(data, $event) : setValue(data)\">\n @if (options.multiple) {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n <apex-checkbox [checked]=\"isMultipleSelected(data)\">\n <div class=\"multiple-checkbox-container\">\n <span>{{ data.label }}</span>\n @if (data.description) { <span>{{ data.description }}</span> }\n </div>\n </apex-checkbox>\n } @else {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n {{ data.label }}\n }\n </div>\n @if (filteredData().length === 0) {\n <div class=\"option disabled\">No options to select from.</div>\n }\n </cdk-virtual-scroll-viewport>\n }\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAmEa,mBAAmB,CAAA;AAc9B,IAAA,WAAA,CACU,SAAoB,EACpB,UAAsB,EACtB,eAAgC,EAAA;QAFhC,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,eAAe,GAAf,eAAe;QAfL,IAAA,CAAA,KAAK,GAAwC,IAAI;QAEjD,IAAA,CAAA,KAAK,GAAwC,IAAI;QAC9C,IAAA,CAAA,QAAQ,GAAoC,IAAI;QAC5C,IAAA,CAAA,YAAY,GAAwC,IAAI;AAKzE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAkB;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAY9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,CAAC,yDAAC;AACzB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;QAG1B,IAAA,CAAA,eAAe,GAAG,eAAe;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAEhC,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAE1B,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAE3B,IAAA,CAAA,kBAAkB,GAAG,EAAE;QACvB,IAAA,CAAA,2BAA2B,GAAG,IAAI;QAClC,IAAA,CAAA,yBAAyB,GAAwB,IAAI;QAIrD,IAAA,CAAA,mBAAmB,GAAwB,IAAI;AAEhD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAmB,EAAE,wDAAC;QAE1C,IAAA,CAAA,UAAU,GAAG,EAAE;AAEf,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,KAAoB,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACpE,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,KAA8B,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAE3E,IAAA,CAAA,sBAAsB,GAAG,KAAK;;AAG/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,EAAE,CAAC;QACtB,IAAA,CAAA,iBAAiB,GAAG,CAAC;AACrB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,4DAAC;AAEhD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK,0DAAC;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAM,IAAI,wDAAC;AAChC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;AAzCpC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAkB;QAExE,IAAI,CAAC,YAAY,EAAE;IACrB;IAwCO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAG;AAEjC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE/C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;iBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,kBAAkB,CAAC;iBACzD,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACvE,YAAA,CAAC,CAAC;YAEJ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBACrE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACjD,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC7D,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,mBAAmB,GAAG,UAAU;AACrC,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxC;AAEA,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS;aAC/F,IAAI,CACH,GAAG,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,EACnC,YAAY,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAE/C,aAAA,SAAS,CAAC,MAAK,EAAG,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA,CAAC,CAAC,CAAC;IACtD;IAEO,SAAS,GAAA;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAEvC,IAAI,CAAC,IAAI,EAAE;YACT;QACF;QAEA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;;;;;AAMhC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;AAE9F,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC7B;QACF;IACF;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE7C,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBAC1D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;YAC3F;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,mBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC1E,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL;IACF;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACzD;QACF;QAEA,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrC;QACF;QAEA,IAAI,CAAC,0BAA0B,EAAE;QACjC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE;QAC9C;AAEA,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;QACxC;IACF;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC9B;AAEO,IAAA,QAAQ,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1B,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/C;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE;AAEhE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAE7B,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE;YACvB;QACF;QAEA,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,cAAc,EAAE;AAErB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;YACtB;AACF,QAAA,CAAC,CAAC;IACJ;IAEO,gBAAgB,CAAC,IAAS,EAAE,KAAa,EAAA;QAC9C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,cAAc,EAAE;QACxB;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;AACnC,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;gBACpC,YAAY,GAAG,CAAC;YAClB;YAEA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACpE,YAAY,GAAG,CAAC;YAClB;QACF;AAEA,QAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;AACvB,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACzD;aAAO;AACL,YAAA,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClC;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7C,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC;AAEO,IAAA,eAAe,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;YAEpC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC3B;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC3D,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,WAAW,GAAG,EAAE;YAEtE;QACF;QAEA,IAAI,YAAY,GAAG,EAAE;QAErB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;;YAEpC,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE;AACjC,gBAAA,YAAY,GAAG,IAAI,CAAC,KAAK;gBAEzB;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;;AAErD,gBAAA,KAAK,IAAI,IAAI,IAAI,QAAQ,EAAE;oBACzB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AAC7B,wBAAA,YAAY,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI;wBAEjC;oBACF;gBACF;YACF;AAEA,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;;gBAElB,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;AACzF,oBAAA,YAAY,GAAG,IAAI,CAAC,KAAK;oBAEzB;gBACF;YACF;QACF;QAEA,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY;IAChD;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB;QACF;QAEA,UAAU,CAAC,MAAK;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM;AACxC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB;AAEtC,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB;AAEhC,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClD,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAElF,IAAI,KAAK,GAAG,CAAC;AAEb,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;oBAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACpD,oBAAA,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC;AACxC,gBAAA,CAAC,CAAC;gBAEF,IAAI,GAAG,KAAK;YACd;iBAAO;gBACL,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAErC,gBAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC;YACtE;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB;YAElD,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YACnE;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAE/B,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE;YACpC,CAAC,EAAE,GAAG,CAAC;AAET,QAAA,CAAC,CAAC;IACJ;IAEO,iBAAiB,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;QACjC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,YAAA,OAAO,CAAC;QACV;QAEA,OAAO,KAAK,CAAC,MAAM;IACrB;AAEO,IAAA,eAAe,CAAC,KAAqB,EAAA;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;QACtC,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE;AAC7C,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK;IACzC;AAEO,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AAC7C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;QACtC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACrC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;AACjC,gBAAA,OAAO,IAAI;YACb;YAEA,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;AACvC,gBAAA,OAAO,IAAI;YACb;YAEA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACvE,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;IACd;IAEO,gBAAgB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,KAAK,EAAE;AAEjC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAErC,UAAU,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACvD;QAEA,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;IACvC;AAGO,IAAA,iBAAiB,CAAC,KAAiC,EAAA;AACxD,QAAA,IAAI,KAAK,YAAY,aAAa,EAAE;YAClC,IAAI,CAAC,cAAc,EAAE;YAErB;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACxC;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACnF,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAEhF,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;QACtE,MAAM,yBAAyB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC;AAE9E,QAAA,IAAI,qBAAqB,IAAI,yBAAyB,EAAE;YACtD;QACF;QAEA,IAAI,CAAC,cAAc,EAAE;IACvB;IAEO,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAE/B,IAAI,CAAC,gBAAgB,EAAE;QAEvB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAClC,CAAC,EAAE,GAAG,CAAC;IACT;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAE/B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAClC,CAAC,EAAE,GAAG,CAAC;QAEP,IAAI,CAAC,cAAc,EAAE;IACvB;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,cAAc,EAAE;QACvB;aAAO;YACL,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;IAEQ,wBAAwB,CAAC,gBAAyB,KAAK,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;YAElB,UAAU,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAErD;QACF;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAE5E,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,EAAE;YAC5C,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,cAAe,CAAC,SAAS;YACpD,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,cAAe,CAAC,UAAU;QACvD;QAEA,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI;QAC/C,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI;AACpD,QAAA,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI;QAEtE,IAAI,aAAa,EAAE;YACjB,IAAI,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE;AAClE,gBAAA,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO;AAC9B,gBAAA,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;AAE3E,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO;AAC9B,YAAA,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;QAC7E;QAEA,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,oBAAoB,EAAE;QAC7B,CAAC,EAAE,GAAG,CAAC;IACT;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAEhC,IAAI,CAAC,0BAA0B,EAAE;IACnC;AAEO,IAAA,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACzB;IACF;AAEO,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QACzC,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE;YACxD,KAAK,CAAC,cAAc,EAAE;YAEtB;QACF;IACF;IAEO,QAAQ,CAAC,KAAa,EAAE,gBAA0B,EAAA;AACvD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QAEvB,IAAI,CAAC,KAAK,EAAE;;AAEV,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,CAAC,oBAAoB,EAAE;YAE3B;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC9C;AAED,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,gBAAgB,EAAE;AACvC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK;YAC7B;AAEA,YAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI;QAC5B;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE/B,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEO,cAAc,GAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAQ;AAC7B,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACnC,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;QAEtC,IAAI,WAAW,GAAG,EAAE;AAEpB,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,YAAA,WAAW,GAAG,OAAO,CAAC,WAAW;QACnC;AAEA,QAAA,IAAI,SAAS,IAAI,eAAe,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAClF,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;AAClC,gBAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACvD,oBAAA,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC;YACF;QACF;QAEA,IAAI,CAAC,UAAU,YAAY,KAAK,IAAI,UAAU,CAAC,MAAM,MAAM,UAAU,IAAI,EAAE,UAAU,YAAY,KAAK,CAAC,CAAC,EAAE;AACxG,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,WAAW;IACpB;IAEO,qBAAqB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE;IAC9B;IAEO,sBAAsB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAC1E,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QACtE;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,cAAc,CAAC,KAAiB,EAAE,IAAa,EAAA;AACrD,QAAA,QACE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI;AAC1B,YAAA,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK;AAC3B,YAAA,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG;AACzB,YAAA,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;IAEhC;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrC;QACF;QAEA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;IACtD;AAEQ,IAAA,KAAK,CAAC,KAAoB,EAAA;QAChC,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;AACxD,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAE7B;QACF;QAEA,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;YACxD,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;gBACxD;YACF;AAEA,YAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,gBAAA,KAAK,OAAO;AACV,oBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAE9B;AACF,gBAAA,KAAK,OAAO;AACV,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC5B,wBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAChC;oBAEA;AACF,gBAAA,KAAK,WAAW;oBACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE;AACzF,wBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;AAExB,wBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnB;oBAEA;AACF,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;oBAE7B;AACF,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;oBAE9B;AACF,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;oBAE/B;;AAGJ,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B;IACF;AAEQ,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACnB,gBAAA,QAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;AAC1B,oBAAA,KAAK,IAAI;wBACP,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;wBAErC,IAAI,CAAC,oBAAoB,EAAE;wBAE3B;AACF,oBAAA;wBACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAEtB,IAAI,CAAC,cAAc,EAAE;;YAE3B;QACF;IACF;AAEQ,IAAA,mBAAmB,CAAC,WAAoB,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE;YACjD;QACD;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC/C,QAAA,MAAM,cAAc,GAAG,YAAY,IAAI,YAAY,KAAK,EAAE;QAE1D,IAAI,UAAU,GAAkB,IAAI;QACpC,IAAI,UAAU,GAAkB,IAAI;AAEpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBACnB,UAAU,GAAG,CAAC;YAChB;YAEA,IAAI,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,EAAE;gBACpD,UAAU,GAAG,CAAC;YAChB;AAEA,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK;QACzB;AAEA,QAAA,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC;AAC1E,QAAA,IAAI,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC;AAEhE,QAAA,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ;AACtC,QAAA,QAAQ,GAAG,QAAQ,IAAI,UAAU,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ;AAE7D,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,IAAI;QAE7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChD;AAEQ,IAAA,aAAa,CAAC,KAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACjD;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAEhC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK;QACzB;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;QAE3E,IAAI,QAAQ,GAAkB,IAAI;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AAEzF,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE;gBACxC,QAAQ,GAAG,CAAC;gBAEZ;YACF;AAEA,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK;QACzB;AAEA,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,IAAI;YAE7B,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChD;QAEA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC;IAEQ,cAAc,CAAC,GAAmB,EAAE,YAAkC,EAAA;AAC5E,QAAA,IAAI,EAAE,CAAC,YAAY,GAAG,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;AACtD,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,gBAAgB,CAAC,KAAU,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAI,WAAW,IAAI,KAAK,CAAC,GAAG,KAAI,SAAS,EAAE;YACtD,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;AAEQ,IAAA,WAAW,CAAC,KAA8B,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;QACF;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa;AACzD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,MAAqB,CAAC;QAEnF,IAAI,gBAAgB,EAAE;YACpB,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY;YAEnE,IAAI,CAAC,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;YACxB;YAEA;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;IACxB;IAEQ,YAAY,CAAC,MAAmB,EAAE,KAAyB,EAAA;AACjE,QAAA,OAAO,KAAK,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,KAAK,GAAG,KAAK,CAAC,aAAa;QAC7B;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B;QACF;AAEA,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACxE,QAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAE5E,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;IACpC;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC;QACF;QAEA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAA8B,CAAC;QACxE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,aAA8B,CAAC;AAE5E,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;IACrC;8GAhyBW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,4nBCnEhC,uzMAmHA,EAAA,MAAA,EAAA,CAAA,ouNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5DI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,UAAU,mOACV,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,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,iBAAiB,kHACjB,kBAAkB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,gVACnB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIZ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EAGd;wBACP,OAAO;wBACP,UAAU;wBACV,WAAW;wBACX,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,oBAAoB;wBACpB,mBAAmB;wBACnB,qBAAqB;AACtB,qBAAA,EAAA,QAAA,EAAA,uzMAAA,EAAA,MAAA,EAAA,CAAA,ouNAAA,CAAA,EAAA;;sBAKA,SAAS;uBAAC,OAAO;;sBAEjB,SAAS;uBAAC,OAAO;;sBACjB,SAAS;uBAAC,UAAU;;sBACpB,SAAS;uBAAC,cAAc;;sBAExB;;sBAGA;;sBACA;;sBA+WA,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AE9b5C;;AAEG;;;;"}
1
+ {"version":3,"file":"apexara-ng-components-select.mjs","sources":["../../../../projects/apexara/ng-components/select/src/select.component.ts","../../../../projects/apexara/ng-components/select/src/select.component.html","../../../../projects/apexara/ng-components/select/apexara-ng-components-select.ts"],"sourcesContent":["import {\n Component, OnInit, ViewChild, Input,\n Output, inject, PLATFORM_ID, ElementRef,\n HostListener, EventEmitter, IterableDiffers,\n OnDestroy, AfterViewInit, SimpleChanges, IterableDiffer, signal} from '@angular/core';\nimport { NgClass, isPlatformServer } from '@angular/common';\nimport { FormGroup, FormsModule, ReactiveFormsModule, AbstractControl, TouchedChangeEvent } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { Subscription, debounceTime, filter, fromEvent, tap } from 'rxjs';\n\nimport { ApexChipComponent } from '@apexara/ng-components/chip';\nimport { ApexImageComponent } from '@apexara/ng-components/image';\nimport { ApexCheckboxComponent } from '@apexara/ng-components/checkbox';\n\nimport { OSService, MobileOS } from '@apexara/ng-components/services';\n\nimport { ApexTooltipDirective, TooltipPosition } from '@apexara/ng-components/tooltip';\n\nexport interface ApexSelectOptions {\n label: string;\n tooltip?: string;\n data: ApexSelectData[];\n multiple?: boolean;\n counterAsValue?: boolean;\n placeholder?: string;\n helperText?: string;\n helperRoute?: string;\n prefixImg?: string;\n suffixImg?: string;\n formGroup?: FormGroup;\n searchable?: boolean;\n formControlName?: string;\n errors?: ControlErrors;\n maxDropdownHeightPx?: number; // optional hard max height in px\n // When true, the search input is rendered inside the dropdown\n // (instead of the trigger row). Intended for multi-select.\n searchInDropdown?: boolean;\n // Grouped options. When provided, supersedes `data` and renders\n // category headers. Grouped mode does not use virtual scroll.\n groups?: ApexSelectGroup[];\n}\n\nexport interface ApexSelectData {\n label: string;\n value: any;\n description?: string;\n isHover?: boolean;\n icon?: string;\n}\n\nexport interface ApexSelectGroup {\n label: string;\n data: ApexSelectData[];\n}\n\nexport interface ControlErrors {\n [x: string]: string;\n}\n\n@Component({\n selector: 'apex-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.css'],\n imports: [\n NgClass,\n RouterLink,\n FormsModule,\n ScrollingModule,\n ApexChipComponent,\n ApexImageComponent,\n ApexTooltipDirective,\n ReactiveFormsModule,\n ApexCheckboxComponent,\n ]\n})\n\nexport class ApexSelectComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild('input') input: ElementRef<HTMLInputElement> | null = null;\n\n @ViewChild('label') label: ElementRef<HTMLLabelElement> | null = null;\n @ViewChild('dropdown') dropdown: CdkVirtualScrollViewport | null = null;\n @ViewChild('inputWrapper') inputWrapper: ElementRef<HTMLInputElement> | null = null;\n @ViewChild('dropdownSearch') dropdownSearch: ElementRef<HTMLInputElement> | null = null;\n @ViewChild('dropdownContainer') dropdownContainer: ElementRef<HTMLElement> | null = null;\n\n @Input() options!: ApexSelectOptions;\n\n\n @Output() selectChange = new EventEmitter<ApexSelectData>();\n @Output() helperTextChange = new EventEmitter<void>();\n\n constructor(\n private osService: OSService,\n private elementRef: ElementRef,\n private iterableDiffers: IterableDiffers) {\n\n this.dataDiffer = this.iterableDiffers.find([]).create<ApexSelectData>();\n this.groupsDiffer = this.iterableDiffers.find([]).create<ApexSelectGroup>();\n\n this.handleEvents();\n }\n\n public firstDropdown = signal(0);\n public isDropdown = signal(false);\n public control!: AbstractControl;\n\n public tooltipPosition = TooltipPosition;\n\n private platformId = inject(PLATFORM_ID);\n\n private isDropdownReversed = false;\n\n private shouldPreventEvents = false;\n\n private documentKeyupValue = '';\n private documentKeyupValueResetTime = 1000;\n private documentKeyUpSubscription: Subscription | null = null;\n\n private dataDiffer!: IterableDiffer<ApexSelectData>;\n private groupsDiffer!: IterableDiffer<ApexSelectGroup>;\n\n private controlSubscription: Subscription | null = null;\n\n public filteredData = signal<ApexSelectData[]>([]);\n public filteredGroups = signal<ApexSelectGroup[]>([]);\n\n private lastSearch = '';\n\n private keyListener = (event: KeyboardEvent) => this.blockArrowScroll(event);\n private wheelListener = (event: WheelEvent | TouchEvent) => this.blockScroll(event);\n\n private scrollBlockersAttached = false;\n\n // Virtual scroll config for options list\n public optionItemSizePx = 48; // must match .dropdown .option height in CSS\n public maxVisibleOptions = 8;\n public dropdownHeightPx = signal(this.optionItemSizePx);\n\n public controlInvalid = signal(false);\n public controlValue = signal<any>(null);\n public controlDisabled = signal(false);\n\n public ngOnInit(): void {\n this.control = this.getControl()!;\n\n if (this.control) {\n this.controlValue.set(this.control.value);\n this.controlDisabled.set(this.control.disabled);\n\n const touchedSub = this.control.events\n .pipe(filter(event => event instanceof TouchedChangeEvent))\n .subscribe(() => {\n this.controlInvalid.set(this.control.touched && this.control.invalid);\n });\n\n const statusSub = this.control.statusChanges.subscribe(() => {\n this.controlInvalid.set(this.control.touched && this.control.invalid);\n this.controlDisabled.set(this.control.disabled);\n });\n\n const valueSub = this.control.valueChanges.subscribe((value) => {\n this.controlValue.set(value);\n });\n\n this.controlSubscription = touchedSub;\n this.controlSubscription.add(statusSub);\n this.controlSubscription.add(valueSub);\n }\n\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.documentKeyUpSubscription = fromEvent<KeyboardEvent>(this.elementRef.nativeElement, 'keydown')\n .pipe(\n tap(event => { this.keyup(event) }),\n debounceTime(this.documentKeyupValueResetTime),\n )\n .subscribe(() => { this.documentKeyupValue = '' });\n }\n\n public ngDoCheck(): void {\n const data = this.options?.data || [];\n const groups = this.options?.groups || [];\n\n const dataDiff = this.dataDiffer.diff(data);\n const groupsDiff = this.groupsDiffer.diff(groups);\n\n if (!dataDiff && !groupsDiff) {\n return;\n }\n\n this.filteredData.set([...data]);\n this.filteredGroups.set(this.cloneGroups(groups));\n\n // Sync controlValue signal and visible input when data changes.\n // The parent may have reset the control with { emitEvent: false },\n // which bypasses valueChanges — the only thing that updates controlValue.\n // Clone the value to force a new reference so the signal always fires.\n if (this.control) {\n const value = this.control.value;\n this.controlValue.set(Array.isArray(value) ? [...value] : value != null ? { ...value } : null);\n\n if (this.input) {\n this.setVisibleValue(value);\n }\n }\n }\n\n public ngAfterViewInit(): void {\n this.filteredData.set([...(this.options.data || [])]);\n this.filteredGroups.set(this.cloneGroups(this.options.groups || []));\n\n setTimeout(() => {\n if (this.options.formGroup && this.options.formControlName) {\n this.setVisibleValue(this.options.formGroup.controls[this.options.formControlName].value);\n }\n })\n\n if (this.options.searchable) {\n this.controlSubscription!.add(this.control.valueChanges.subscribe((value) => {\n this.setVisibleValue(value);\n }));\n }\n }\n\n private cloneGroups(groups: ApexSelectGroup[]): ApexSelectGroup[] {\n return groups.map(group => ({\n label: group.label,\n data: [...group.data],\n }));\n }\n\n private hasGroups(): boolean {\n return !!this.options?.groups && this.options.groups.length > 0;\n }\n\n public isSearchInDropdown(): boolean {\n return !!this.options?.searchInDropdown;\n }\n\n public getAllOptions(): ApexSelectData[] {\n if (this.hasGroups()) {\n return (this.options.groups || []).flatMap(group => group.data);\n }\n\n return this.options.data || [];\n }\n\n private getDropdownEl(): HTMLElement | null {\n if (this.dropdownContainer) {\n return this.dropdownContainer.nativeElement;\n }\n\n return this.dropdown?.elementRef.nativeElement ?? null;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (!changes['options'] || changes['options'].firstChange) {\n return;\n }\n\n this.updateDropdownHeight();\n }\n\n public ngOnDestroy(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.detachGlobalScrollBlockers();\n window.removeEventListener('keydown', this.keyListener);\n\n if (this.documentKeyUpSubscription) {\n this.documentKeyUpSubscription.unsubscribe();\n }\n\n if (this.controlSubscription) {\n this.controlSubscription.unsubscribe();\n }\n }\n\n public onHelperText(): void {\n this.helperTextChange.emit();\n }\n\n public setValue(value: any): void {\n if (!this.options.multiple) {\n value = this.removeProperty(value, 'isHover');\n }\n\n this.control.setValue(value);\n this.input!.nativeElement.value = value.label ? value.label : '';\n\n this.selectChange.emit(value);\n\n if (value.value == null) {\n return;\n }\n\n setTimeout(() => {\n this.removeDropdown();\n\n if (!this.options.multiple) {\n this.lastSearch = '';\n }\n })\n }\n\n public setMultipleValue(data: any, event?: Event): void {\n if (event) {\n event.preventDefault();\n }\n\n const newValue = this.control.value;\n let indexOfValue = -1;\n\n for (let i = 0; i < newValue.length; i++) {\n if (newValue[i].value === data.value) {\n indexOfValue = i;\n }\n\n if (JSON.stringify(newValue[i].value) === JSON.stringify(data.value)) {\n indexOfValue = i;\n }\n }\n\n if (indexOfValue === -1) {\n newValue.push({ label: data.label, value: data.value });\n } else {\n newValue.splice(indexOfValue, 1);\n }\n\n this.lastSearch = '';\n this.input!.nativeElement.value = '';\n this.filteredData.set([...(this.options.data || [])]);\n\n if (this.hasGroups()) {\n this.filteredGroups.set(this.cloneGroups(this.options.groups || []));\n }\n\n if (this.dropdownSearch) {\n this.dropdownSearch.nativeElement.value = '';\n }\n\n this.control.setValue(newValue);\n this.selectChange.emit(newValue);\n\n if (this.isSearchInDropdown() && this.dropdownSearch) {\n setTimeout(() => this.dropdownSearch?.nativeElement.focus());\n }\n }\n\n public setVisibleValue(newValue: any | any[]): void {\n if (newValue === null) {\n this.input!.nativeElement.value = '';\n\n return;\n }\n\n if (this.isSearchInDropdown()) {\n // Chips / counter span next to the input own the selection display.\n // Keep the input empty so the placeholder can show when nothing is selected.\n this.input!.nativeElement.value = '';\n\n return;\n }\n\n if (this.options.counterAsValue) {\n if (this.options.searchable) {\n return;\n }\n\n const count = Array.isArray(newValue) ? newValue.length : 0;\n this.input!.nativeElement.value = count > 0 ? count + ' selected' : '';\n\n return;\n }\n\n let visibleValue = '';\n\n const sourceList = this.hasGroups()\n ? this.filteredGroups().flatMap(group => group.data)\n : this.filteredData();\n\n for (let data of sourceList) {\n // when newValue is object and not array\n if (data.value === newValue.value) {\n visibleValue = data.label;\n\n break;\n }\n\n if (this.options.multiple && !this.options.searchable) {\n // when newValue is array\n for (let item of newValue) {\n if (data.value === item.value) {\n visibleValue += item.label + ', ';\n\n break;\n }\n }\n }\n\n if (newValue.value) {\n // Edge case for when we use { label, value } pattern as value\n if (newValue.value.value && this.getControl()?.value.value.value === newValue.value.value) {\n visibleValue = data.label;\n\n break;\n }\n }\n }\n\n this.input!.nativeElement.value = visibleValue;\n }\n\n private updateDropdownHeight(): void {\n if (!this.isDropdown() || this.hasGroups()) {\n return;\n }\n\n setTimeout(() => {\n const count = this.filteredData().length;\n const maxRows = this.maxVisibleOptions;\n\n let next = this.optionItemSizePx;\n\n if (count > 0 && count <= maxRows && this.dropdown) {\n const options = this.dropdown.elementRef.nativeElement.querySelectorAll('.option');\n\n let total = 0;\n\n options.forEach((option: any) => {\n const height = option.getBoundingClientRect().height;\n total += isFinite(height) ? height : 0;\n });\n\n next = total;\n } else {\n const rows = Math.min(count, maxRows);\n\n next = Math.max(rows * this.optionItemSizePx, this.optionItemSizePx);\n }\n\n const maxHeight = this.options.maxDropdownHeightPx;\n\n if (maxHeight) {\n next = Math.min(next, Math.max(this.optionItemSizePx, maxHeight));\n }\n\n this.dropdownHeightPx.set(next);\n\n setTimeout(() => {\n this.dropdown?.checkViewportSize();\n }, 100)\n\n });\n }\n\n public showMultipleCount(): number {\n const value = this.controlValue();\n if (!value || !value.length) {\n return 0;\n }\n\n return value.length;\n }\n\n public isValueSelected(value: ApexSelectData): boolean {\n const controlVal = this.controlValue();\n if (value.value == null || controlVal == null) {\n return false;\n }\n\n return value.value === controlVal.value;\n }\n\n public isMultipleSelected(value: ApexSelectData): boolean {\n const controlVal = this.controlValue();\n if (!controlVal || !controlVal.length) {\n return false;\n }\n\n for (let i = 0; i < controlVal.length; i++) {\n if (value.value === controlVal[i]) {\n return true;\n }\n\n if (controlVal[i].value === value.value) {\n return true;\n }\n\n if (JSON.stringify(controlVal[i].value) === JSON.stringify(value.value)) {\n return true;\n }\n }\n\n return false;\n }\n\n public activateDropdown(): void {\n if (this.checkIfControlDisabled()) {\n return;\n }\n\n this.isDropdown.set(true);\n\n if (!this.isSearchInDropdown()) {\n this.input!.nativeElement.focus();\n }\n\n if (this.firstDropdown() === 0) {\n this.firstDropdown.update(v => v + 1);\n\n setTimeout(() => this.generateDropdownPosition(true));\n }\n\n this.attachGlobalScrollBlockers();\n this.onSearch(this.lastSearch, false);\n\n if (this.isSearchInDropdown()) {\n setTimeout(() => this.dropdownSearch?.nativeElement.focus());\n }\n }\n\n @HostListener('document:click', ['$event'])\n public deactivateControl(event: MouseEvent | KeyboardEvent): void {\n if (event instanceof KeyboardEvent) {\n this.removeDropdown();\n\n return;\n }\n\n const dropdownEl = this.getDropdownEl();\n\n if (!dropdownEl || !this.inputWrapper) {\n return;\n }\n\n const dropdownRect = dropdownEl.getBoundingClientRect();\n const inputWrapperRect = this.inputWrapper.nativeElement.getBoundingClientRect();\n\n const isClickInsideDropdown = this.isWithinBounds(event, dropdownRect);\n const isClickInsideInputWrapper = this.isWithinBounds(event, inputWrapperRect);\n\n if (isClickInsideDropdown || isClickInsideInputWrapper) {\n return;\n }\n\n this.removeDropdown();\n }\n\n public onFocusIn(): void {\n this.shouldPreventEvents = true;\n\n this.activateDropdown();\n\n setTimeout(() => {\n this.shouldPreventEvents = false;\n }, 200);\n }\n\n public onFocusOut(): void {\n this.shouldPreventEvents = true;\n\n setTimeout(() => {\n this.shouldPreventEvents = false;\n }, 200);\n\n this.removeDropdown();\n }\n\n public toggleDropdown(): void {\n if (this.shouldPreventEvents) {\n return;\n }\n\n if (this.isDropdown()) {\n this.removeDropdown();\n } else {\n this.activateDropdown();\n }\n }\n\n private generateDropdownPosition(checkRevserse: boolean = false): void {\n const dropdownEl = this.getDropdownEl();\n\n if (!dropdownEl) {\n // method will keep executing until dropdown is rendered\n setTimeout(() => this.generateDropdownPosition(true));\n\n return;\n }\n\n const elementRefRect = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n elementRefRect.y += window.visualViewport!.offsetTop;\n elementRefRect.x += window.visualViewport!.offsetLeft;\n }\n\n dropdownEl.style.left = elementRefRect.x + 'px';\n dropdownEl.style.width = elementRefRect.width + 'px';\n dropdownEl.style.top = elementRefRect.y + elementRefRect.height + 'px';\n\n if (checkRevserse) {\n if (window.innerHeight < dropdownEl.getBoundingClientRect().bottom) {\n dropdownEl.style.top = 'unset';\n dropdownEl.style.bottom = window.innerHeight - elementRefRect.y + 10 + 'px';\n\n this.isDropdownReversed = true;\n }\n }\n\n if (this.isDropdownReversed) {\n dropdownEl.style.top = 'unset';\n dropdownEl.style.bottom = window.innerHeight - elementRefRect.y + 10 + 'px';\n }\n\n setTimeout(() => {\n this.updateDropdownHeight();\n }, 100);\n }\n\n public removeDropdown(): void {\n this.isDropdown.set(false);\n this.isDropdownReversed = false;\n this.firstDropdown.set(0);\n\n this.input!.nativeElement.blur();\n\n this.detachGlobalScrollBlockers();\n }\n\n public handleKeydown(event: any): void {\n if (event.code === 'Backspace') {\n this.onSearch('', true);\n }\n }\n\n public preventFocusChange(event: MouseEvent): void {\n if (this.input?.nativeElement === document.activeElement) {\n event.preventDefault();\n\n return;\n }\n }\n\n public onSearch(value: string, shouldResetHover?: boolean): void {\n this.lastSearch = value;\n\n if (this.hasGroups()) {\n this.filterGroups(value, shouldResetHover);\n this.updateDropdownHeight();\n\n return;\n }\n\n if (!value) {\n // Reset to original data if input is empty\n this.filteredData.set([...this.options.data]);\n\n this.updateDropdownHeight();\n\n return;\n }\n\n const searchTerm = value.toLowerCase();\n\n const filtered = this.options.data.filter(item =>\n item.label.toLowerCase().includes(searchTerm)\n );\n\n if (filtered.length && shouldResetHover) {\n for (let i = 0; i < filtered.length; i++) {\n filtered[i].isHover = false;\n }\n\n filtered[0].isHover = true;\n }\n\n this.filteredData.set(filtered);\n\n this.updateDropdownHeight();\n }\n\n private filterGroups(value: string, shouldResetHover?: boolean): void {\n const sourceGroups = this.options.groups || [];\n\n if (!value) {\n this.filteredGroups.set(this.cloneGroups(sourceGroups));\n\n return;\n }\n\n const searchTerm = value.toLowerCase();\n\n const result: ApexSelectGroup[] = [];\n\n for (const group of sourceGroups) {\n const matches = group.data.filter(item =>\n item.label.toLowerCase().includes(searchTerm)\n );\n\n if (matches.length) {\n result.push({ label: group.label, data: matches });\n }\n }\n\n if (shouldResetHover) {\n let firstHoverSet = false;\n\n for (const group of result) {\n for (const item of group.data) {\n if (!firstHoverSet) {\n item.isHover = true;\n firstHoverSet = true;\n } else {\n item.isHover = false;\n }\n }\n }\n }\n\n this.filteredGroups.set(result);\n }\n\n public getPlaceholder(): string {\n const options = this.options!;\n const formGroup = options.formGroup;\n const formControlName = options.formControlName;\n const controlVal = this.controlValue();\n\n let placeholder = '';\n\n if (options.placeholder) {\n placeholder = options.placeholder;\n }\n\n if (formGroup && formControlName && options.errors && this.checkIfControlInvalid()) {\n for (const error in options.errors) {\n if (formGroup.controls[formControlName].hasError(error)) {\n placeholder = options.errors[error];\n }\n }\n }\n\n if ((controlVal instanceof Array && controlVal.length) || (controlVal && !(controlVal instanceof Array))) {\n return '';\n }\n\n return placeholder;\n }\n\n public checkIfControlInvalid(): boolean {\n return this.controlInvalid();\n }\n\n public checkIfControlDisabled(): boolean {\n return this.controlDisabled();\n }\n\n private getControl(): AbstractControl | null {\n if (this.options && this.options.formGroup && this.options.formControlName) {\n return this.options.formGroup.controls[this.options.formControlName];\n }\n\n return null;\n }\n\n private isWithinBounds(event: MouseEvent, rect: DOMRect): boolean {\n return (\n event.clientX >= rect.left &&\n event.clientX <= rect.right &&\n event.clientY >= rect.top &&\n event.clientY <= rect.bottom\n );\n }\n\n private handleEvents(): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n window.addEventListener('keydown', this.keyListener);\n }\n\n private keyup(event: KeyboardEvent): void {\n const activeEl = document.activeElement;\n const triggerInputEl = this.input?.nativeElement ?? null;\n const searchInputEl = this.dropdownSearch?.nativeElement ?? null;\n const isTriggerFocused = activeEl === triggerInputEl;\n const isDropdownSearchFocused = this.isSearchInDropdown() && activeEl === searchInputEl;\n\n if (!isTriggerFocused && !isDropdownSearchFocused) {\n this.deactivateControl(event);\n\n return;\n }\n\n if (isDropdownSearchFocused) {\n switch (event.code) {\n case 'Enter':\n this.documentEnterKeyup(event);\n\n return;\n case 'Escape':\n this.deactivateControl(event);\n\n return;\n case 'ArrowDown':\n this.documentArrowsKeyup(true);\n\n return;\n case 'ArrowUp':\n this.documentArrowsKeyup(false);\n\n return;\n }\n\n // Typing is handled by the input's (input) event, not here.\n return;\n }\n\n switch (event.code) {\n case 'Enter':\n this.documentEnterKeyup(event);\n\n return;\n case 'Space':\n if (!this.options.searchable) {\n this.documentEnterKeyup(event);\n }\n\n return;\n case 'Backspace':\n if (!this.options.multiple && this.options.searchable && this.control.value.value != null) {\n this.onSearch('', false);\n\n this.setValue('');\n }\n\n return;\n case 'Escape':\n this.deactivateControl(event);\n\n return;\n case 'ArrowDown':\n this.documentArrowsKeyup(true);\n\n return;\n case 'ArrowUp':\n this.documentArrowsKeyup(false);\n\n return;\n }\n\n this.documentKeyup(event);\n }\n\n private documentEnterKeyup(event: KeyboardEvent): void {\n const data = this.getNavigableOptions();\n for (let i = 0; i < data.length; i++) {\n if (data[i].isHover) {\n switch(this.options.multiple) {\n case true:\n this.setMultipleValue(data[i], event);\n\n this.updateDropdownHeight();\n\n return;\n default:\n this.setValue(data[i]);\n\n this.removeDropdown();\n }\n }\n }\n }\n\n private documentArrowsKeyup(isDownArrow: boolean): void {\n const data = this.getNavigableOptions();\n const dataLength = data.length;\n\n if (!dataLength) {\n return;\n }\n\n const controlValue = this.control.getRawValue();\n const isControlValue = controlValue && controlValue !== '';\n\n let hoverIndex: number | null = null;\n let valueIndex: number | null = null;\n\n for (let i = 0; i < dataLength; i++) {\n if (data[i].isHover) {\n hoverIndex = i;\n }\n\n if (isControlValue && data[i].value === controlValue) {\n valueIndex = i;\n }\n\n data[i].isHover = false;\n }\n\n const currentIndex = hoverIndex ? hoverIndex : valueIndex ? valueIndex : 0;\n let newIndex = isDownArrow ? currentIndex + 1 : currentIndex - 1;\n\n newIndex = newIndex < 0 ? 0 : newIndex;\n newIndex = newIndex >= dataLength ? dataLength - 1 : newIndex;\n\n data[newIndex].isHover = true;\n\n if (this.hasGroups()) {\n this.filteredGroups.set([...this.filteredGroups()]);\n this.scrollGroupedOptionIntoView(newIndex);\n } else {\n this.filteredData.set([...this.filteredData()]);\n this.dropdown?.scrollToIndex(newIndex, 'auto');\n }\n }\n\n public getNavigableOptions(): ApexSelectData[] {\n if (this.hasGroups()) {\n return this.filteredGroups().flatMap(group => group.data);\n }\n\n return this.filteredData();\n }\n\n private scrollGroupedOptionIntoView(index: number): void {\n if (!this.dropdownContainer) {\n return;\n }\n\n const optionEls = this.dropdownContainer.nativeElement.querySelectorAll('.option');\n const target = optionEls[index] as HTMLElement | undefined;\n\n target?.scrollIntoView({ block: 'nearest' });\n }\n\n private documentKeyup(event: KeyboardEvent): void {\n if (!this.isDropdown() || this.options.searchable) {\n return;\n }\n\n const data = this.getNavigableOptions();\n\n for (let i = 0; i < data.length; i++) {\n data[i].isHover = false;\n }\n\n this.documentKeyupValue = this.documentKeyupValue + event.key.toLowerCase();\n\n let newIndex: number | null = null;\n\n for (let i = 0; i < data.length; i++) {\n const subLabel = data[i].label.substring(0, this.documentKeyupValue.length).toLowerCase();\n\n if (subLabel === this.documentKeyupValue) {\n newIndex = i;\n\n break;\n }\n\n data[i].isHover = false;\n }\n\n if (newIndex !== null) {\n data[newIndex].isHover = true;\n\n if (this.hasGroups()) {\n this.filteredGroups.set([...this.filteredGroups()]);\n this.scrollGroupedOptionIntoView(newIndex);\n } else {\n this.dropdown?.scrollToIndex(newIndex, 'auto');\n }\n }\n\n if (!this.hasGroups()) {\n this.filteredData.set([...this.filteredData()]);\n }\n }\n\n private removeProperty(obj: ApexSelectData, propertyName: keyof ApexSelectData): Partial<ApexSelectData> {\n let { [propertyName]: removedProperty, ...data } = obj;\n return data;\n }\n\n private blockArrowScroll(event: any) {\n if (!this.dropdown) {\n return;\n }\n\n if (event.key ==='ArrowDown' || event.key ==='ArrowUp') {\n event.preventDefault();\n }\n }\n\n private blockScroll(event: WheelEvent | TouchEvent): void {\n const dropdownEl = this.getDropdownEl();\n\n if (!dropdownEl) {\n return;\n }\n\n const isInsideDropdown = this.isDescendant(dropdownEl, event.target as HTMLElement);\n\n if (isInsideDropdown) {\n const canScroll = dropdownEl.scrollHeight > dropdownEl.clientHeight;\n\n if (!canScroll) {\n event.preventDefault();\n }\n\n return;\n }\n\n event.preventDefault();\n }\n\n private isDescendant(parent: HTMLElement, child: HTMLElement | null): boolean {\n while (child !== null) {\n if (child === parent) {\n return true;\n }\n child = child.parentElement;\n }\n\n return false;\n }\n\n private attachGlobalScrollBlockers(): void {\n if (this.scrollBlockersAttached) {\n return;\n }\n\n window.addEventListener('wheel', this.wheelListener, { passive: false });\n window.addEventListener('touchmove', this.wheelListener, { passive: false });\n\n this.scrollBlockersAttached = true;\n }\n\n private detachGlobalScrollBlockers(): void {\n if (!this.scrollBlockersAttached) {\n return;\n }\n\n window.removeEventListener('wheel', this.wheelListener as EventListener);\n window.removeEventListener('touchmove', this.wheelListener as EventListener);\n\n this.scrollBlockersAttached = false;\n }\n\n}\n","@if (options) {\n @if (options.formGroup && options.formControlName) {\n <div class=\"container\" (mousedown)=\"preventFocusChange($event)\">\n @if (options.label !== '') {\n <div class=\"header\">\n <div class=\"label-wrapper\">\n <label>{{ options.label }}</label>\n\n @if (options.tooltip) {\n <svg class=\"tooltip-icon\" [apexTooltip]=\"options.tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n }\n </div>\n\n @if (options.helperText) {\n <div class=\"header-helper\" (click)=\"onHelperText()\" [routerLink]=\"options.helperRoute\">{{ options.helperText }}</div>\n }\n </div>\n }\n\n <div #inputWrapper class=\"input-field-wrapper\" (click)=\"toggleDropdown()\" [formGroup]=\"options.formGroup\" [ngClass]=\"{ 'invalid': checkIfControlInvalid(), 'disabled': checkIfControlDisabled() }\">\n @if (options.prefixImg) {\n <apex-img class=\"prefix\" [src]=\"'assets/img/' + this.options.prefixImg\" [alt]=\"'Select prefix icon'\"></apex-img>\n }\n\n @if (isSearchInDropdown() && options.multiple && this.showMultipleCount() > 0) {\n @if (options.counterAsValue) {\n <span class=\"multiple-count\">\n {{ this.showMultipleCount() }} selected\n </span>\n } @else {\n <div class=\"chips\">\n @for (data of getAllOptions(); track $index) {\n @if (isMultipleSelected(data)) {\n <apex-chip [closeIcon]=\"true\" (closeChange)=\"setMultipleValue(data)\">{{ data.label }}</apex-chip>\n }\n }\n </div>\n }\n }\n\n @if (!isSearchInDropdown() && options.searchable && options.multiple && this.showMultipleCount() > 0) {\n @if (options.counterAsValue) {\n <span class=\"multiple-count\">\n {{ this.showMultipleCount() }} selected\n </span>\n } @else {\n <div class=\"chips\">\n @for (data of getAllOptions(); track $index) {\n @if (isMultipleSelected(data)) {\n <apex-chip [closeIcon]=\"true\" (closeChange)=\"setMultipleValue(data)\">{{ data.label }}</apex-chip>\n }\n }\n </div>\n }\n }\n\n @if (isSearchInDropdown()) {\n <!-- Hidden input owns the form binding; the visible one is a placeholder slot. -->\n <input #hiddenInput\n class=\"hidden\"\n [formControlName]=\"options.formControlName\">\n\n <input #input\n readonly\n [disabled]=\"checkIfControlDisabled()\"\n [placeholder]=\"getPlaceholder()\"\n [ngClass]=\"{ 'no-icon': !options.prefixImg }\"/>\n } @else if (options.searchable) {\n <!-- used for formControl data binding and reactivness -->\n <input #hiddenInput\n class=\"hidden\"\n [formControlName]=\"options.formControlName\">\n\n <!-- used for searching and data displaying -->\n <input #input\n [placeholder]=\"getPlaceholder()\"\n [readOnly]=\"!options.searchable\"\n [ngClass]=\"{ 'no-icon': !options.prefixImg }\"\n [disabled]=\"checkIfControlDisabled()\"\n (keydown)=\"handleKeydown($event)\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n (input)=\"onSearch(input.value, true)\"\n autocorrect=\"off\"\n spellcheck=\"false\">\n } @else {\n <input #input\n readonly\n [disabled]=\"checkIfControlDisabled()\"\n [placeholder]=\"getPlaceholder()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut()\"\n [formControlName]=\"options.formControlName\"\n [ngClass]=\"{ 'no-icon': !options.prefixImg }\"\n (ngModelChange)=\"setVisibleValue($event)\"/>\n }\n\n <div class=\"arrow-wrapper\">\n <div class=\"arrow\" [class]=\"{ checked: this.isDropdown() }\"></div>\n </div>\n </div>\n\n @if (isDropdown()) {\n @if (isSearchInDropdown()) {\n <div #dropdownContainer class=\"dropdown dropdown-wrapper\">\n <div class=\"dropdown-search\">\n <svg class=\"dropdown-search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M11 11L14 14\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <input #dropdownSearch\n type=\"text\"\n placeholder=\"Search\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n (input)=\"onSearch(dropdownSearch.value, true)\"\n (keydown)=\"handleKeydown($event)\"/>\n </div>\n\n @if (options.groups && options.groups.length > 0) {\n <div class=\"dropdown-body\">\n @for (group of filteredGroups(); track group.label) {\n <div class=\"group-header\">{{ group.label }}</div>\n @for (data of group.data; track data.value) {\n <div class=\"option\"\n [ngClass]=\"{ selected: !options.multiple ? isValueSelected(data) : false, preselected: data.isHover, checkbox: options.multiple }\"\n (click)=\"options.multiple ? setMultipleValue(data, $event) : setValue(data)\">\n @if (options.multiple) {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n <apex-checkbox [checked]=\"isMultipleSelected(data)\">\n <div class=\"multiple-checkbox-container\">\n <span>{{ data.label }}</span>\n @if (data.description) { <span>{{ data.description }}</span> }\n </div>\n </apex-checkbox>\n } @else {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n {{ data.label }}\n }\n </div>\n }\n }\n\n @if (filteredGroups().length === 0) {\n <div class=\"option disabled\">No options to select from.</div>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"optionItemSizePx\" [style.height.px]=\"dropdownHeightPx()\" class=\"dropdown-body dropdown-body-virtual\" #dropdown>\n <div class=\"option\"\n *cdkVirtualFor=\"let data of filteredData();\"\n [ngClass]=\"{ selected: !options.multiple ? isValueSelected(data) : false, preselected: data.isHover, checkbox: options.multiple }\"\n (click)=\"options.multiple ? setMultipleValue(data, $event) : setValue(data)\">\n @if (options.multiple) {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n <apex-checkbox [checked]=\"isMultipleSelected(data)\">\n <div class=\"multiple-checkbox-container\">\n <span>{{ data.label }}</span>\n @if (data.description) { <span>{{ data.description }}</span> }\n </div>\n </apex-checkbox>\n } @else {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n {{ data.label }}\n }\n </div>\n @if (filteredData().length === 0) {\n <div class=\"option disabled\">No options to select from.</div>\n }\n </cdk-virtual-scroll-viewport>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"optionItemSizePx\" [style.height.px]=\"dropdownHeightPx()\" class=\"dropdown\" #dropdown>\n <div class=\"option\"\n *cdkVirtualFor=\"let data of filteredData();\"\n [ngClass]=\"{ selected: !options.multiple ? isValueSelected(data) : false, preselected: data.isHover, checkbox: options.multiple }\"\n (click)=\"options.multiple ? setMultipleValue(data, $event) : setValue(data)\">\n @if (options.multiple) {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n <apex-checkbox [checked]=\"isMultipleSelected(data)\">\n <div class=\"multiple-checkbox-container\">\n <span>{{ data.label }}</span>\n @if (data.description) { <span>{{ data.description }}</span> }\n </div>\n </apex-checkbox>\n } @else {\n @if (data.icon) {\n <div class=\"option-icon\">\n <apex-img [src]=\"'assets/img/' + data.icon\" [alt]=\"'Option icon.'\"></apex-img>\n </div>\n }\n {{ data.label }}\n }\n </div>\n @if (filteredData().length === 0) {\n <div class=\"option disabled\">No options to select from.</div>\n }\n </cdk-virtual-scroll-viewport>\n }\n }\n </div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}