@apexara/ng-components 1.0.6-test.7 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/fesm2022/apexara-ng-components-button.mjs +15 -3
- package/fesm2022/apexara-ng-components-button.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-chip.mjs +1 -1
- package/fesm2022/apexara-ng-components-chip.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-datepicker.mjs +1 -1
- package/fesm2022/apexara-ng-components-datepicker.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-dialog.mjs +26 -3
- package/fesm2022/apexara-ng-components-dialog.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-drawer.mjs +26 -7
- package/fesm2022/apexara-ng-components-drawer.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-expander.mjs +5 -2
- package/fesm2022/apexara-ng-components-expander.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-filter-pill.mjs +58 -0
- package/fesm2022/apexara-ng-components-filter-pill.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-image.mjs +15 -5
- package/fesm2022/apexara-ng-components-image.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-input.mjs +30 -7
- package/fesm2022/apexara-ng-components-input.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-more-options.mjs +1 -1
- package/fesm2022/apexara-ng-components-more-options.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-select.mjs +258 -9
- package/fesm2022/apexara-ng-components-select.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-services.mjs +6 -0
- package/fesm2022/apexara-ng-components-services.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-snackbar.mjs +2 -2
- package/fesm2022/apexara-ng-components-snackbar.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-table.mjs +154 -2
- package/fesm2022/apexara-ng-components-table.mjs.map +1 -1
- package/fesm2022/apexara-ng-components-textarea.mjs +10 -2
- package/fesm2022/apexara-ng-components-textarea.mjs.map +1 -1
- package/package.json +5 -1
- package/types/apexara-ng-components-button.d.ts +3 -2
- package/types/apexara-ng-components-dialog.d.ts +6 -1
- package/types/apexara-ng-components-drawer.d.ts +10 -2
- package/types/apexara-ng-components-expander.d.ts +2 -0
- package/types/apexara-ng-components-filter-pill.d.ts +30 -0
- package/types/apexara-ng-components-image.d.ts +2 -1
- package/types/apexara-ng-components-input.d.ts +14 -2
- package/types/apexara-ng-components-select.d.ts +31 -1
- package/types/apexara-ng-components-services.d.ts +1 -0
- package/types/apexara-ng-components-table.d.ts +36 -3
- package/types/apexara-ng-components-textarea.d.ts +5 -0
|
@@ -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 // 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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"}
|
|
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, computed} from '@angular/core';\nimport { NgClass, NgTemplateOutlet, 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\n// Trigger appearance. Default is the standard single-line trigger; Inset moves the\n// field label inside the trigger, stacks it above the value, and swaps the caret for\n// an inline clear (×). Add a new appearance by extending this enum, then giving it its\n// own predicate + overlay block + CSS namespace — existing variants stay closed.\nexport enum ApexSelectVariant {\n Default = 'default',\n Inset = 'inset',\n}\n\nexport interface ApexSelectOptions {\n label: string;\n // Accessible name override for the combobox trigger — falls back to label,\n // then placeholder, so visually-hidden-label designs still announce a name.\n ariaLabel?: 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 // Dropdown width strategy. Default 'trigger' keeps backwards-compatible\n // behavior — the dropdown matches the trigger width. Pass an explicit\n // pixel value when the dropdown needs to be wider (e.g. grouped options\n // with long labels). The value is clamped to the viewport on small\n // screens so the dropdown can never exceed `window.innerWidth - 16px`.\n dropdownWidth?: number | 'trigger';\n // Horizontal anchor of the dropdown relative to the trigger.\n // 'start' — dropdown left edge aligns with trigger left edge\n // 'end' — dropdown right edge aligns with trigger right edge\n // 'auto' — start-align if it fits, else flip to end-align; if both\n // edges would still overflow the viewport, pin to viewport\n // with 8px padding.\n // Default is 'start' when `dropdownWidth === 'trigger'` (backwards-\n // compatible: matches the previous behavior) and 'auto' when an explicit\n // numeric width is provided.\n dropdownAlign?: 'start' | 'end' | 'auto';\n // Grouped multi-select only: lays the groups out in this many columns instead of a single tall\n // list, so a long grouped menu (e.g. property types) reads wide-and-short rather than a narrow\n // ribbon. Omitted or 1 keeps the single column. Pair with an explicit `dropdownWidth` wide enough\n // for the columns; each group stays whole (never splits across a column) and Select all spans the top.\n dropdownColumns?: number;\n // Trigger appearance (see ApexSelectVariant). Omitted or 'default' keeps the\n // standard single-line trigger; 'inset' opts into the filter-chip look. The\n // outside label header is suppressed for any non-default variant.\n variant?: ApexSelectVariant;\n // Multiple + grouped only: renders a \"Select all\" master row at the top of the dropdown that\n // toggles every option on or off. The master is ticked when all are selected and empty\n // otherwise — there is no partial (indeterminate) state.\n selectAll?: boolean;\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 NgTemplateOutlet,\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 // Exposes the variant enum to the template (mirrors TableColumnType on apex-table).\n public Variant = ApexSelectVariant;\n\n private static nextA11yId = 0;\n\n // Ids wiring the APG combobox pattern: trigger (combobox) ↔ dropdown\n // (listbox) ↔ options, all referenced via aria-controls/activedescendant.\n public readonly selectA11yId = `apex-select-${ApexSelectComponent.nextA11yId++}`;\n public readonly listboxId = `${this.selectA11yId}-listbox`;\n\n // Accessible-name fallback chain: explicit ariaLabel → visible label → placeholder.\n public get ariaLabelValue(): string | null {\n return this.options?.ariaLabel ?? (this.options?.label || this.options?.placeholder || null);\n }\n\n public optionId(index: number): string {\n return `${this.listboxId}-opt-${index}`;\n }\n\n // Flat index of an option across groups, so grouped options share the same\n // id scheme as the virtual-scrolled flat list.\n public flatIndexOf(data: ApexSelectData): number {\n return this.getNavigableOptions().indexOf(data);\n }\n\n // The keyboard-highlighted option's id, exposed on the trigger as\n // aria-activedescendant so AT tracks arrow-key navigation.\n public activeOptionId(): string | null {\n if (!this.isDropdown()) {\n return null;\n }\n\n const index = this.getNavigableOptions().findIndex(option => option.isHover);\n\n return index >= 0 ? this.optionId(index) : null;\n }\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 // The groups split into `dropdownColumns` side-by-side lists (one list when the option is unset or\n // 1). Each group stays whole in one column; groups are handed to the currently-shortest column so\n // the columns end up roughly equal height. The template lays these out as flex columns that scroll\n // together, so a capped, columned menu never clips.\n public groupColumns = computed<ApexSelectGroup[][]>(() => {\n const columnCount = this.options?.dropdownColumns ?? 1;\n const groups = this.filteredGroups();\n\n if (columnCount <= 1) {\n return [groups];\n }\n\n const columns: ApexSelectGroup[][] = Array.from({ length: columnCount }, () => []);\n const heights = new Array<number>(columnCount).fill(0);\n\n for (const group of groups) {\n const shortest = heights.indexOf(Math.min(...heights));\n columns[shortest].push(group);\n heights[shortest] += group.data.length + 1; // + 1 for the group header row\n }\n\n return columns;\n });\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 // The active trigger appearance; defaults to Default when unset. Single source\n // for every variant check + the wrapper's variant class.\n public variant(): ApexSelectVariant {\n return this.options?.variant ?? ApexSelectVariant.Default;\n }\n\n public isInsetLabel(): boolean {\n return this.variant() === ApexSelectVariant.Inset;\n }\n\n // The selected option's label for the inset-variant overlay. Reads the reactive\n // controlValue (an { label, value } object, or a raw value) and resolves it to a\n // label via the option list. Empty when nothing is selected.\n public insetValueLabel(): string {\n const controlVal = this.controlValue();\n\n if (controlVal == null || controlVal === '') {\n return '';\n }\n\n // Multiple selects show a count, matching the counterAsValue trigger.\n if (this.options.multiple) {\n const count = Array.isArray(controlVal) ? controlVal.length : 0;\n\n return count ? `${count} selected` : '';\n }\n\n if (typeof controlVal === 'object' && controlVal.label) {\n return controlVal.label;\n }\n\n return this.getAllOptions().find(option => option.value === controlVal)?.label ?? '';\n }\n\n // The inset variant only shows its stacked caption + value + clear once a value\n // is set; empty, it renders the normal placeholder + caret.\n public hasInsetValue(): boolean {\n return this.isInsetLabel() && !!this.insetValueLabel();\n }\n\n // Inline clear (×) on the inset trigger. Stops the click from toggling the\n // dropdown, then resets the bound control to null so the placeholder returns.\n public clearInsetValue(event: Event): void {\n event.stopPropagation();\n\n // A multiple control holds an array — clearing it to null would break the next toggle, which\n // reads `.length`. Reset to an empty array there, and to null for a single select.\n const cleared = this.options.multiple ? [] : null;\n\n this.control.setValue(cleared);\n this.controlValue.set(cleared);\n\n if (this.input) {\n this.input.nativeElement.value = '';\n }\n\n this.selectChange.emit(cleared as unknown as ApexSelectData);\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 // Whether every option is currently selected — drives the Select All master's ticked state.\n public isAllSelected(): boolean {\n const all = this.getAllOptions();\n\n return all.length > 0 && all.every(option => this.isMultipleSelected(option));\n }\n\n // Select All toggles the whole set: clear it when everything is already picked, otherwise\n // select every option. Mirrors setMultipleValue's stored shape ({ label, value } only).\n public toggleSelectAll(event?: Event): void {\n if (event) {\n event.preventDefault();\n }\n\n const next = this.isAllSelected()\n ? []\n : this.getAllOptions().map(option => ({ label: option.label, value: option.value }));\n\n this.control.setValue(next);\n this.selectChange.emit(next as unknown as ApexSelectData);\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 // ── Width ──\n // 'trigger' (default) → match the trigger; otherwise use the explicit px\n // value, clamped so the dropdown can never exceed viewport minus 2× the\n // safe-area padding on very narrow screens.\n const VIEWPORT_PADDING = 8;\n const widthOption = this.options.dropdownWidth ?? 'trigger';\n const maxWidth = Math.max(elementRefRect.width, window.innerWidth - VIEWPORT_PADDING * 2);\n\n const desiredWidth = typeof widthOption === 'number'\n ? Math.min(widthOption, maxWidth)\n : elementRefRect.width;\n\n dropdownEl.style.width = desiredWidth + 'px';\n\n // ── Horizontal alignment ──\n // Default is 'start' for trigger-width dropdowns (preserves the\n // pre-existing behavior) and 'auto' for explicit-width dropdowns so a\n // wider menu near the right edge of the viewport flips to end-align\n // instead of clipping.\n const defaultAlign: 'start' | 'auto' = typeof widthOption === 'number' ? 'auto' : 'start';\n const alignOption = this.options.dropdownAlign ?? defaultAlign;\n\n let resolvedLeft = this.resolveDropdownLeft(alignOption, elementRefRect, desiredWidth, VIEWPORT_PADDING);\n\n // Final clamp keeps the dropdown inside the viewport at any width.\n const minLeft = VIEWPORT_PADDING;\n const maxLeft = Math.max(VIEWPORT_PADDING, window.innerWidth - desiredWidth - VIEWPORT_PADDING);\n resolvedLeft = Math.max(minLeft, Math.min(resolvedLeft, maxLeft));\n\n dropdownEl.style.left = resolvedLeft + 'px';\n dropdownEl.style.top = elementRefRect.y + elementRefRect.height + 'px';\n\n // Size the grouped-dropdown body to the space available below the trigger\n // (with `maxDropdownHeightPx` as an optional cap). Non-grouped selects\n // are handled by `updateDropdownHeight()` via virtual scroll height.\n this.adjustGroupedDropdownMaxHeight(false, elementRefRect);\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 // Reflow grouped body for the above-trigger space after flipping up.\n this.adjustGroupedDropdownMaxHeight(true, elementRefRect);\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 // Resolves the dropdown's left coordinate against the trigger and viewport.\n // 'start' → trigger left edge\n // 'end' → trigger right edge minus dropdown width\n // 'auto' → start if it fits, else end if it fits, else pinned padding\n // The 'auto' branch is the only place where viewport-overflow detection\n // matters; keeping it isolated avoids the nested-else chain in the caller.\n private resolveDropdownLeft(\n align: 'start' | 'end' | 'auto',\n triggerRect: DOMRect,\n desiredWidth: number,\n padding: number,\n ): number {\n const startLeft = triggerRect.x;\n const endLeft = triggerRect.right - desiredWidth;\n\n if (align === 'start') {\n return startLeft;\n }\n\n if (align === 'end') {\n return endLeft;\n }\n\n const fitsAtStart = startLeft + desiredWidth <= window.innerWidth - padding;\n\n if (fitsAtStart) {\n return startLeft;\n }\n\n const fitsAtEnd = endLeft >= padding;\n\n if (fitsAtEnd) {\n return endLeft;\n }\n\n // Both edges would still overflow — pin to viewport with padding.\n return padding;\n }\n\n // Sets `--apex-select-dropdown-body-max-height` on the dropdown root so the\n // grouped + searchInDropdown body grows to fill the viewport instead of the\n // hardcoded 320 px CSS fallback. Called twice: once for the default\n // below-trigger anchor, again after the reverse-flip handler so the value\n // matches the chosen side. `maxDropdownHeightPx` (when provided) caps the\n // dynamic value — useful when callers want a smaller-than-viewport dropdown.\n private adjustGroupedDropdownMaxHeight(reversed: boolean, triggerRect: DOMRect): void {\n if (!this.hasGroups()) {\n return;\n }\n\n const dropdownEl = this.getDropdownEl();\n\n if (!dropdownEl) {\n return;\n }\n\n const VIEWPORT_PADDING = 16;\n const SEARCH_HEADER_PX = this.isSearchInDropdown() ? 52 : 0;\n // The `.dropdown` root sits `margin-top` below its anchor and carries a 1px border top and\n // bottom — chrome that lives OUTSIDE the body the max-height caps. Left unaccounted, the body\n // fills the whole gap and the assembled dropdown lands a hair past the viewport edge, tripping\n // the flip-up check even when there is room below. Reserving it keeps a below-anchored grouped\n // dropdown open downward. A search dropdown never noticed because its header offset absorbed it.\n const DROPDOWN_CHROME_PX = 17;\n const MIN_BODY_PX = 160;\n\n const availableSpace = reversed\n ? triggerRect.y - VIEWPORT_PADDING - DROPDOWN_CHROME_PX\n : window.innerHeight - (triggerRect.y + triggerRect.height) - VIEWPORT_PADDING - DROPDOWN_CHROME_PX;\n\n let bodyMax = Math.max(MIN_BODY_PX, availableSpace - SEARCH_HEADER_PX);\n\n const cap = this.options.maxDropdownHeightPx;\n\n if (cap !== undefined && cap > 0) {\n bodyMax = Math.min(bodyMax, cap);\n }\n\n dropdownEl.style.setProperty('--apex-select-dropdown-body-max-height', bodyMax + 'px');\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 case 'Home':\n this.documentHomeEndKeyup(true);\n\n return;\n case 'End':\n this.documentHomeEndKeyup(false);\n\n return;\n }\n\n this.documentKeyup(event);\n }\n\n // Home/End jump the keyboard highlight to the first/last option (APG combobox).\n private documentHomeEndKeyup(toFirst: boolean): void {\n const data = this.getNavigableOptions();\n\n if (!data.length || !this.isDropdown()) {\n return;\n }\n\n for (let i = 0; i < data.length; i++) {\n data[i].isHover = false;\n }\n\n const newIndex = toFirst ? 0 : data.length - 1;\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 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 target = event.target as HTMLElement | null;\n const isInsideDropdown = !!target && this.isDescendant(dropdownEl, target);\n\n if (isInsideDropdown) {\n const canScroll = this.canScrollAt(target!, dropdownEl);\n\n if (!canScroll) {\n event.preventDefault();\n }\n\n return;\n }\n\n event.preventDefault();\n }\n\n private canScrollAt(start: HTMLElement, boundary: HTMLElement): boolean {\n let el: HTMLElement | null = start;\n\n while (el !== null) {\n if (el.scrollHeight > el.clientHeight) {\n const overflowY = getComputedStyle(el).overflowY;\n\n if (overflowY === 'auto' || overflowY === 'scroll') {\n return true;\n }\n }\n\n if (el === boundary || el === document.body) {\n break;\n }\n\n el = el.parentElement;\n }\n\n return false;\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 !== '' && variant() === Variant.Default) {\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(), 'inset': isInsetLabel(), 'inset-has-value': hasInsetValue() }\">\n @if (options.prefixImg) {\n <apex-img class=\"prefix\" [src]=\"'assets/img/' + this.options.prefixImg\" [alt]=\"''\"></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 role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isDropdown()\"\n [attr.aria-controls]=\"isDropdown() ? listboxId : null\"\n [attr.aria-label]=\"ariaLabelValue\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-invalid]=\"checkIfControlInvalid() ? 'true' : null\"\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 role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"isDropdown()\"\n [attr.aria-controls]=\"isDropdown() ? listboxId : null\"\n [attr.aria-label]=\"ariaLabelValue\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-invalid]=\"checkIfControlInvalid() ? 'true' : null\"\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 role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isDropdown()\"\n [attr.aria-controls]=\"isDropdown() ? listboxId : null\"\n [attr.aria-label]=\"ariaLabelValue\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\n [attr.aria-invalid]=\"checkIfControlInvalid() ? 'true' : null\"\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 @if (isInsetLabel() && hasInsetValue()) {\n <div class=\"inset-stack\" aria-hidden=\"true\">\n <span class=\"inset-label\">{{ options.label }}</span>\n <span class=\"inset-value\">{{ insetValueLabel() }}</span>\n </div>\n\n <button type=\"button\" class=\"inset-clear\" [attr.aria-label]=\"'Clear ' + (options.label || options.placeholder || 'filter')\" (click)=\"clearInsetValue($event)\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3 3 9 9M9 3 3 9\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n\n <div class=\"arrow-wrapper\" aria-hidden=\"true\">\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 aria-label=\"Search options\"\n [attr.aria-controls]=\"listboxId\"\n [attr.aria-activedescendant]=\"activeOptionId()\"\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\" role=\"listbox\" [class.dropdown-body-columns]=\"(options.dropdownColumns ?? 1) > 1\" [id]=\"listboxId\" [attr.aria-multiselectable]=\"options.multiple ? 'true' : null\" [attr.aria-label]=\"ariaLabelValue\">\n <ng-container [ngTemplateOutlet]=\"groupBody\"></ng-container>\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"optionItemSizePx\" [style.height.px]=\"dropdownHeightPx()\" class=\"dropdown-body dropdown-body-virtual\" role=\"listbox\" [id]=\"listboxId\" [attr.aria-multiselectable]=\"options.multiple ? 'true' : null\" [attr.aria-label]=\"ariaLabelValue\" #dropdown>\n <div class=\"option\"\n *cdkVirtualFor=\"let data of filteredData(); let i = index\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [attr.aria-selected]=\"options.multiple ? isMultipleSelected(data) : isValueSelected(data)\"\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]=\"''\"></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]=\"''\"></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 if (options.groups && options.groups.length > 0) {\n <div #dropdownContainer class=\"dropdown dropdown-wrapper\">\n <div class=\"dropdown-body\" role=\"listbox\" [class.dropdown-body-columns]=\"(options.dropdownColumns ?? 1) > 1\" [id]=\"listboxId\" [attr.aria-multiselectable]=\"options.multiple ? 'true' : null\" [attr.aria-label]=\"ariaLabelValue\">\n <ng-container [ngTemplateOutlet]=\"groupBody\"></ng-container>\n </div>\n </div>\n } @else {\n <cdk-virtual-scroll-viewport [itemSize]=\"optionItemSizePx\" [style.height.px]=\"dropdownHeightPx()\" class=\"dropdown\" role=\"listbox\" [id]=\"listboxId\" [attr.aria-multiselectable]=\"options.multiple ? 'true' : null\" [attr.aria-label]=\"ariaLabelValue\" #dropdown>\n <div class=\"option\"\n *cdkVirtualFor=\"let data of filteredData(); let i = index\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [attr.aria-selected]=\"options.multiple ? isMultipleSelected(data) : isValueSelected(data)\"\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]=\"''\"></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]=\"''\"></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<!-- The grouped option list, shared by the search and no-search dropdowns so the group + option\n markup lives in one place. The Select All master (multiple mode + selectAll) sits above the\n groups and toggles every option. -->\n<ng-template #groupBody>\n @if (options.selectAll && options.multiple) {\n <div class=\"option checkbox select-all-option\"\n role=\"option\"\n [attr.aria-selected]=\"isAllSelected()\"\n (click)=\"toggleSelectAll($event)\">\n <apex-checkbox [checked]=\"isAllSelected()\">\n <div class=\"multiple-checkbox-container\"><span>Select all</span></div>\n </apex-checkbox>\n </div>\n }\n\n @if ((options.dropdownColumns ?? 1) > 1) {\n <div class=\"group-columns\">\n @for (column of groupColumns(); track $index) {\n <div class=\"select-col\">\n @for (group of column; track group.label) {\n <ng-container [ngTemplateOutlet]=\"groupBlock\" [ngTemplateOutletContext]=\"{ $implicit: group }\"></ng-container>\n }\n </div>\n }\n </div>\n } @else {\n @for (group of filteredGroups(); track group.label) {\n <ng-container [ngTemplateOutlet]=\"groupBlock\" [ngTemplateOutletContext]=\"{ $implicit: group }\"></ng-container>\n }\n }\n\n @if (filteredGroups().length === 0) {\n <div class=\"option disabled\">No options to select from.</div>\n }\n</ng-template>\n\n<!-- One group: its header followed by its options. Shared by the single-column list and by each\n flex column, so the option markup lives in exactly one place. -->\n<ng-template #groupBlock let-group>\n <div class=\"group-header\" role=\"presentation\">{{ group.label }}</div>\n @for (data of group.data; track data.value) {\n <div class=\"option\"\n role=\"option\"\n [id]=\"optionId(flatIndexOf(data))\"\n [attr.aria-selected]=\"options.multiple ? isMultipleSelected(data) : isValueSelected(data)\"\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]=\"''\"></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]=\"''\"></apex-img>\n </div>\n }\n {{ data.label }}\n }\n </div>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -150,6 +150,9 @@ class OverlayService {
|
|
|
150
150
|
this.focusTrapFactory = focusTrapFactory;
|
|
151
151
|
this.scrollBlockService = scrollBlockService;
|
|
152
152
|
this.document = document;
|
|
153
|
+
// The element focused before the overlay opened — focus returns to it when
|
|
154
|
+
// the overlay closes, per the APG modal pattern.
|
|
155
|
+
this.previouslyFocused = null;
|
|
153
156
|
this.blockActivated = false;
|
|
154
157
|
this.overlayChildren = [];
|
|
155
158
|
}
|
|
@@ -201,6 +204,7 @@ class OverlayService {
|
|
|
201
204
|
overlayDiv.style.pointerEvents = 'none';
|
|
202
205
|
this.overlayElement = overlayDiv;
|
|
203
206
|
document.body.appendChild(overlayDiv);
|
|
207
|
+
this.previouslyFocused = this.document.activeElement;
|
|
204
208
|
this.focusTrap = this.focusTrapFactory.create(this.overlayElement);
|
|
205
209
|
this.focusTrap.focusInitialElementWhenReady();
|
|
206
210
|
}
|
|
@@ -208,6 +212,8 @@ class OverlayService {
|
|
|
208
212
|
this.focusTrap.destroy();
|
|
209
213
|
overlayElement.remove();
|
|
210
214
|
this.overlayElement = null;
|
|
215
|
+
this.previouslyFocused?.focus();
|
|
216
|
+
this.previouslyFocused = null;
|
|
211
217
|
}
|
|
212
218
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: OverlayService, deps: [{ token: i0.Injector }, { token: i1.FocusTrapFactory }, { token: ScrollBlockService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
213
219
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: OverlayService, providedIn: 'root' }); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apexara-ng-components-services.mjs","sources":["../../../../projects/apexara/ng-components/services/src/user-agent.service.ts","../../../../projects/apexara/ng-components/services/src/os.service.ts","../../../../projects/apexara/ng-components/services/src/theme.service.ts","../../../../projects/apexara/ng-components/services/src/scroll-block.service.ts","../../../../projects/apexara/ng-components/services/src/overlay.service.ts","../../../../projects/apexara/ng-components/services/src/loader/loader.component.ts","../../../../projects/apexara/ng-components/services/src/loader/loader.component.html","../../../../projects/apexara/ng-components/services/src/loader/loader.service.ts","../../../../projects/apexara/ng-components/services/apexara-ng-components-services.ts"],"sourcesContent":["import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserAgentService {\n\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\n this.init();\n }\n\n private userAgent: string | undefined;\n\n public getUserAgent(): string | undefined {\n return this.userAgent;\n }\n\n private init(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.userAgent = navigator.userAgent;\n } else {\n this.userAgent = undefined;\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { UserAgentService } from './user-agent.service';\n\nexport enum MobileOS {\n iOS,\n Android,\n WindowsPhone,\n Other,\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class OSService {\n\n constructor(private userAgentService: UserAgentService) { }\n\n public mobileOS = this.getMobileOS();\n\n private getMobileOS(): MobileOS {\n const userAgent = this.userAgentService.getUserAgent();\n\n if (!userAgent) {\n return MobileOS.Other;\n }\n \n switch (true) {\n case /windows phone/i.test(userAgent):\n return MobileOS.WindowsPhone;\n case /android/i.test(userAgent): \n return MobileOS.Android;\n case /iPad|iPhone|iPod/.test(userAgent): \n return MobileOS.iOS;\n default: \n return MobileOS.Other;\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nexport enum Theme {\n First,\n Second,\n Third\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class ThemeService {\n\n private currentTheme = Theme.First;\n\n public setTheme(theme: Theme): void {\n this.currentTheme = theme;\n }\n\n public getTheme(): Theme {\n return this.currentTheme;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\ninterface scrollBlockingStyles {\n top: string,\n height: string,\n position: string,\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class ScrollBlockService {\n\n private isActivated = false;\n\n private previousStyles: scrollBlockingStyles = {\n position: '',\n top: '',\n height: '',\n }\n\n public activate(): void {\n if (this.isActivated) {\n return;\n }\n\n this.isActivated = true;\n\n this.previousStyles = this.getPreviousStyles();\n\n const yOffset = window.scrollY;\n\n document.body.style.position = 'fixed';\n document.body.style.top = '-' + yOffset + 'px';\n document.body.style.height = 'calc(100% + ' + yOffset + 'px)';\n }\n\n public deactivate(): void {\n if (!this.isActivated) {\n return;\n }\n\n this.isActivated = false;\n\n const top = Math.abs(parseInt(document.body.style.top));\n\n document.body.style.position = this.previousStyles.position;\n document.body.style.top = this.previousStyles.top;\n document.body.style.height = this.previousStyles.height;\n\n window.scrollTo(0, top);\n }\n\n private getPreviousStyles(): scrollBlockingStyles {\n return { \n position: document.body.style.position,\n top: document.body.style.top,\n height: document.body.style.height\n };\n }\n\n}\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\n\nimport { ScrollBlockService } from './scroll-block.service';\n\ninterface OverlayChildElement {\n element: HTMLElement;\n /* If atleast one element has the blockable property the overlay scrolling will be prevented */\n blockable: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class OverlayService {\n\n constructor(\n private injector: Injector,\n private focusTrapFactory: FocusTrapFactory,\n private scrollBlockService: ScrollBlockService,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n private focusTrap!: FocusTrap;\n\n private blockActivated = false;\n\n private overlayElement!: HTMLElement | null;\n private overlayChildren: OverlayChildElement[] = [];\n\n public get overlay(): HTMLElement | null {\n return this.overlayElement;\n }\n\n public appendToOverlay(content: HTMLElement, blockable = false): void {\n if (!this.overlayElement) {\n this.createOverlay();\n }\n \n const overlayChild: OverlayChildElement = {\n element: content,\n blockable\n };\n\n this.overlayElement!.appendChild(overlayChild.element);\n this.overlayChildren.push(overlayChild);\n\n if (overlayChild.blockable && !this.blockActivated) {\n this.scrollBlockService.activate();\n this.blockActivated = true;\n }\n }\n\n public removeFromOverlay(content: HTMLElement): void {\n if (!this.overlayElement || !content) {\n return;\n }\n\n const componentIndex = this.overlayChildren.findIndex(comp => comp.element === content);\n\n if (componentIndex > -1) {\n this.overlayChildren.splice(componentIndex, 1);\n }\n\n if (content.parentNode === this.overlayElement) {\n this.overlayElement.removeChild(content);\n }\n\n if (!this.overlayChildren.some(comp => comp.blockable) && this.blockActivated) {\n this.blockActivated = false;\n\n this.scrollBlockService.deactivate();\n }\n\n if (this.overlayElement.childElementCount === 0) {\n this.removeOverlay(this.overlayElement);\n }\n }\n\n private createOverlay(): void {\n const overlayDiv = this.document.createElement('div');\n\n overlayDiv.style.top = '0';\n overlayDiv.style.left = '0';\n overlayDiv.style.width = '100vw';\n overlayDiv.style.height = '100vh';\n overlayDiv.style.zIndex = '900';\n overlayDiv.style.position = 'fixed';\n overlayDiv.style.pointerEvents = 'none';\n\n this.overlayElement = overlayDiv;\n document.body.appendChild(overlayDiv);\n\n this.focusTrap = this.focusTrapFactory.create(this.overlayElement);\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n private removeOverlay(overlayElement: HTMLElement): void {\n this.focusTrap.destroy();\n \n overlayElement.remove();\n this.overlayElement = null;\n }\n\n}\n","import { Component, ElementRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'apex-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.css'],\n})\n\nexport class ApexLoaderComponent {\n\n}\n","<div class=\"backdrop\"></div>\n\n<div class=\"container\">\n <div class=\"spinner\">\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n </div>\n</div>\n","import { ComponentRef, Injectable, ViewContainerRef } from '@angular/core';\n\nimport { OverlayService } from '../overlay.service';\n\nimport { ApexLoaderComponent } from './loader.component';\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class LoaderService {\n\n constructor(\n private overlayService: OverlayService) { }\n\n private viewContainerRef: ViewContainerRef | null = null;\n private appContainerElement: HTMLDivElement | null = null;\n\n private loaderRef: ComponentRef<ApexLoaderComponent> | null = null;\n\n /**\n * Call this method globally in order to set a more global ViewContainerRef\n * @param viewContainerRef - the Host Container Ref where we want the Loader to be attached. i.e the App Component or Layout Component\n * @param appContainerElement - An optional app container selector. When provided it will set opacity 0.4 to that container when Loader is shown. Example - '.app-container'\n */\n public init(viewContainerRef: ViewContainerRef, appContainerElement?: string) {\n this.viewContainerRef = viewContainerRef;\n\n if (appContainerElement) {\n this.appContainerElement = document.querySelector(appContainerElement) as HTMLDivElement;\n }\n }\n\n public show(): void {\n if (this.viewContainerRef) {\n if (this.loaderRef) {\n return;\n }\n\n this.loaderRef = this.viewContainerRef.createComponent(ApexLoaderComponent);\n this.setAppContainerOpacity('0.4');\n\n this.overlayService.appendToOverlay(this.loaderRef.location.nativeElement, true);\n }\n }\n\n public hide(): void {\n if (this.loaderRef) {\n this.loaderRef.destroy();\n this.setAppContainerOpacity('1');\n\n this.overlayService.removeFromOverlay(this.loaderRef.location.nativeElement);\n\n this.loaderRef = null;\n }\n }\n\n private setAppContainerOpacity(opacity: string): void {\n if (this.appContainerElement) {\n this.appContainerElement.style.opacity = opacity;\n }\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.UserAgentService","i1.OverlayService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apexara-ng-components-services.mjs","sources":["../../../../projects/apexara/ng-components/services/src/user-agent.service.ts","../../../../projects/apexara/ng-components/services/src/os.service.ts","../../../../projects/apexara/ng-components/services/src/theme.service.ts","../../../../projects/apexara/ng-components/services/src/scroll-block.service.ts","../../../../projects/apexara/ng-components/services/src/overlay.service.ts","../../../../projects/apexara/ng-components/services/src/loader/loader.component.ts","../../../../projects/apexara/ng-components/services/src/loader/loader.component.html","../../../../projects/apexara/ng-components/services/src/loader/loader.service.ts","../../../../projects/apexara/ng-components/services/apexara-ng-components-services.ts"],"sourcesContent":["import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserAgentService {\n\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\n this.init();\n }\n\n private userAgent: string | undefined;\n\n public getUserAgent(): string | undefined {\n return this.userAgent;\n }\n\n private init(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.userAgent = navigator.userAgent;\n } else {\n this.userAgent = undefined;\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { UserAgentService } from './user-agent.service';\n\nexport enum MobileOS {\n iOS,\n Android,\n WindowsPhone,\n Other,\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class OSService {\n\n constructor(private userAgentService: UserAgentService) { }\n\n public mobileOS = this.getMobileOS();\n\n private getMobileOS(): MobileOS {\n const userAgent = this.userAgentService.getUserAgent();\n\n if (!userAgent) {\n return MobileOS.Other;\n }\n \n switch (true) {\n case /windows phone/i.test(userAgent):\n return MobileOS.WindowsPhone;\n case /android/i.test(userAgent): \n return MobileOS.Android;\n case /iPad|iPhone|iPod/.test(userAgent): \n return MobileOS.iOS;\n default: \n return MobileOS.Other;\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nexport enum Theme {\n First,\n Second,\n Third\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class ThemeService {\n\n private currentTheme = Theme.First;\n\n public setTheme(theme: Theme): void {\n this.currentTheme = theme;\n }\n\n public getTheme(): Theme {\n return this.currentTheme;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\ninterface scrollBlockingStyles {\n top: string,\n height: string,\n position: string,\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class ScrollBlockService {\n\n private isActivated = false;\n\n private previousStyles: scrollBlockingStyles = {\n position: '',\n top: '',\n height: '',\n }\n\n public activate(): void {\n if (this.isActivated) {\n return;\n }\n\n this.isActivated = true;\n\n this.previousStyles = this.getPreviousStyles();\n\n const yOffset = window.scrollY;\n\n document.body.style.position = 'fixed';\n document.body.style.top = '-' + yOffset + 'px';\n document.body.style.height = 'calc(100% + ' + yOffset + 'px)';\n }\n\n public deactivate(): void {\n if (!this.isActivated) {\n return;\n }\n\n this.isActivated = false;\n\n const top = Math.abs(parseInt(document.body.style.top));\n\n document.body.style.position = this.previousStyles.position;\n document.body.style.top = this.previousStyles.top;\n document.body.style.height = this.previousStyles.height;\n\n window.scrollTo(0, top);\n }\n\n private getPreviousStyles(): scrollBlockingStyles {\n return { \n position: document.body.style.position,\n top: document.body.style.top,\n height: document.body.style.height\n };\n }\n\n}\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\n\nimport { ScrollBlockService } from './scroll-block.service';\n\ninterface OverlayChildElement {\n element: HTMLElement;\n /* If atleast one element has the blockable property the overlay scrolling will be prevented */\n blockable: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class OverlayService {\n\n constructor(\n private injector: Injector,\n private focusTrapFactory: FocusTrapFactory,\n private scrollBlockService: ScrollBlockService,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n private focusTrap!: FocusTrap;\n\n // The element focused before the overlay opened — focus returns to it when\n // the overlay closes, per the APG modal pattern.\n private previouslyFocused: HTMLElement | null = null;\n\n private blockActivated = false;\n\n private overlayElement!: HTMLElement | null;\n private overlayChildren: OverlayChildElement[] = [];\n\n public get overlay(): HTMLElement | null {\n return this.overlayElement;\n }\n\n public appendToOverlay(content: HTMLElement, blockable = false): void {\n if (!this.overlayElement) {\n this.createOverlay();\n }\n \n const overlayChild: OverlayChildElement = {\n element: content,\n blockable\n };\n\n this.overlayElement!.appendChild(overlayChild.element);\n this.overlayChildren.push(overlayChild);\n\n if (overlayChild.blockable && !this.blockActivated) {\n this.scrollBlockService.activate();\n this.blockActivated = true;\n }\n }\n\n public removeFromOverlay(content: HTMLElement): void {\n if (!this.overlayElement || !content) {\n return;\n }\n\n const componentIndex = this.overlayChildren.findIndex(comp => comp.element === content);\n\n if (componentIndex > -1) {\n this.overlayChildren.splice(componentIndex, 1);\n }\n\n if (content.parentNode === this.overlayElement) {\n this.overlayElement.removeChild(content);\n }\n\n if (!this.overlayChildren.some(comp => comp.blockable) && this.blockActivated) {\n this.blockActivated = false;\n\n this.scrollBlockService.deactivate();\n }\n\n if (this.overlayElement.childElementCount === 0) {\n this.removeOverlay(this.overlayElement);\n }\n }\n\n private createOverlay(): void {\n const overlayDiv = this.document.createElement('div');\n\n overlayDiv.style.top = '0';\n overlayDiv.style.left = '0';\n overlayDiv.style.width = '100vw';\n overlayDiv.style.height = '100vh';\n overlayDiv.style.zIndex = '900';\n overlayDiv.style.position = 'fixed';\n overlayDiv.style.pointerEvents = 'none';\n\n this.overlayElement = overlayDiv;\n document.body.appendChild(overlayDiv);\n\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\n\n this.focusTrap = this.focusTrapFactory.create(this.overlayElement);\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n private removeOverlay(overlayElement: HTMLElement): void {\n this.focusTrap.destroy();\n\n overlayElement.remove();\n this.overlayElement = null;\n\n this.previouslyFocused?.focus();\n this.previouslyFocused = null;\n }\n\n}\n","import { Component, ElementRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'apex-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.css'],\n})\n\nexport class ApexLoaderComponent {\n\n}\n","<div class=\"backdrop\"></div>\n\n<div class=\"container\">\n <div class=\"spinner\">\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n </div>\n</div>\n","import { ComponentRef, Injectable, ViewContainerRef } from '@angular/core';\n\nimport { OverlayService } from '../overlay.service';\n\nimport { ApexLoaderComponent } from './loader.component';\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class LoaderService {\n\n constructor(\n private overlayService: OverlayService) { }\n\n private viewContainerRef: ViewContainerRef | null = null;\n private appContainerElement: HTMLDivElement | null = null;\n\n private loaderRef: ComponentRef<ApexLoaderComponent> | null = null;\n\n /**\n * Call this method globally in order to set a more global ViewContainerRef\n * @param viewContainerRef - the Host Container Ref where we want the Loader to be attached. i.e the App Component or Layout Component\n * @param appContainerElement - An optional app container selector. When provided it will set opacity 0.4 to that container when Loader is shown. Example - '.app-container'\n */\n public init(viewContainerRef: ViewContainerRef, appContainerElement?: string) {\n this.viewContainerRef = viewContainerRef;\n\n if (appContainerElement) {\n this.appContainerElement = document.querySelector(appContainerElement) as HTMLDivElement;\n }\n }\n\n public show(): void {\n if (this.viewContainerRef) {\n if (this.loaderRef) {\n return;\n }\n\n this.loaderRef = this.viewContainerRef.createComponent(ApexLoaderComponent);\n this.setAppContainerOpacity('0.4');\n\n this.overlayService.appendToOverlay(this.loaderRef.location.nativeElement, true);\n }\n }\n\n public hide(): void {\n if (this.loaderRef) {\n this.loaderRef.destroy();\n this.setAppContainerOpacity('1');\n\n this.overlayService.removeFromOverlay(this.loaderRef.location.nativeElement);\n\n this.loaderRef = null;\n }\n }\n\n private setAppContainerOpacity(opacity: string): void {\n if (this.appContainerElement) {\n this.appContainerElement.style.opacity = opacity;\n }\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.UserAgentService","i1.OverlayService"],"mappings":"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"}
|