@amro93/ngb-select 0.1.1 → 0.1.4

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 CHANGED
@@ -1,64 +1,235 @@
1
- # NgbSelect
1
+ # Ngb-Select (Angular Bootstrap Select Component)
2
2
 
3
- This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 21.2.0.
3
+ [![NPM Version](https://img.shields.io/npm/v/@amro93/ngb-select.svg)](https://www.npmjs.com/package/@amro93/ngb-select)
4
+ [![CI/CD Pipeline](https://github.com/amro93/ngb-select/actions/workflows/deploy.yml/badge.svg)](https://github.com/amro93/ngb-select/actions)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
6
 
5
- ## Code scaffolding
7
+ A comprehensive, lightweight Angular Standalone select component that utilizes **pure Bootstrap 5 classes** (no external UI libraries required). It covers all advanced features found in modern select components, optimized for standard Bootstrap environments.
6
8
 
7
- Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
9
+ ---
8
10
 
9
- ```bash
10
- ng generate component component-name
11
- ```
11
+ ## 🚀 Features at a Glance
12
12
 
13
- For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
13
+ - 📦 **Standalone Architecture** - Modern Angular 15+ design, easy to import without NgModules.
14
+ - 🎨 **Pure Bootstrap 5** - Uses `.form-select`, `.dropdown-menu`, and `.list-group` internally. No extra CSS payload.
15
+ - 🔍 **Filtering & Match Modes** - Fast, client-side search supporting `contains`, `startsWith`, `endsWith`, `equals`.
16
+ - 🗂️ **Grouping** - Categorize options with nested headers.
17
+ - 🛠️ **Advanced Templating** - Replace default text with fully custom DOM for items, headers, footers, and selected states.
18
+ - ⌨️ **Forms Native & Signals** - Implements `ControlValueAccessor` for seamless `ngModel`, `FormControl` (Reactive Forms), and modern Angular `model()` Signal support.
19
+ - 🛡️ **Robust Fallbacks** - Defensively programmed to gracefully handle `null`, `undefined`, and empty strings across inputs.
20
+ - ♿ **Accessible** - ARIA roles implemented (`combobox`, `listbox`, `option`) alongside keyboard navigation.
21
+ - ⚡ **Editable Combobox** - Allows custom user typing directly into the select input.
22
+ - 🎯 **Focus on Open** - Programmatically scroll and focus a specific option index when the popup opens.
14
23
 
15
- ```bash
16
- ng generate --help
17
- ```
24
+ ---
18
25
 
19
- ## Building
26
+ ## 📦 Installation
20
27
 
21
- To build the library, run:
28
+ Install `@amro93/ngb-select` along with peer dependencies:
22
29
 
23
30
  ```bash
24
- ng build ngb-select
31
+ npm install @amro93/ngb-select bootstrap bootstrap-icons
25
32
  ```
26
33
 
27
- This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
34
+ Ensure Bootstrap 5 CSS is included in your `angular.json` or `src/styles.scss`:
28
35
 
29
- ### Publishing the Library
36
+ ```scss
37
+ @import 'bootstrap/scss/bootstrap';
38
+ @import 'bootstrap-icons/font/bootstrap-icons.css';
39
+ ```
30
40
 
31
- Once the project is built, you can publish your library by following these steps:
41
+ ---
42
+
43
+ ## 💻 Usage Examples
44
+
45
+ ### 1. Basic Setup (Template Driven)
46
+
47
+ ```typescript
48
+ import { Component } from '@angular/core';
49
+ import { FormsModule } from '@angular/forms';
50
+ import { NgbSelectComponent } from '@amro93/ngb-select';
51
+
52
+ @Component({
53
+ standalone: true,
54
+ imports: [NgbSelectComponent, FormsModule],
55
+ template: `
56
+ <ngb-select
57
+ [options]="cities"
58
+ [(ngModel)]="selectedCity"
59
+ optionLabel="name"
60
+ optionValue="code"
61
+ placeholder="Select a City"
62
+ >
63
+ </ngb-select>
64
+ `,
65
+ })
66
+ export class AppComponent {
67
+ cities = [
68
+ { name: 'New York', code: 'NY' },
69
+ { name: 'Rome', code: 'RM' },
70
+ { name: 'London', code: 'LDN' },
71
+ ];
72
+ selectedCity: string = 'NY';
73
+ }
74
+ ```
32
75
 
33
- 1. Navigate to the `dist` directory:
76
+ ---
77
+
78
+ ### 2. Reactive Forms with Validation
79
+
80
+ ```typescript
81
+ import { Component } from '@angular/core';
82
+ import { ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';
83
+ import { NgbSelectComponent } from '@amro93/ngb-select';
84
+
85
+ @Component({
86
+ standalone: true,
87
+ imports: [NgbSelectComponent, ReactiveFormsModule],
88
+ template: `
89
+ <form [formGroup]="form">
90
+ <ngb-select
91
+ [options]="countries"
92
+ formControlName="selectedCountry"
93
+ optionLabel="name"
94
+ optionValue="code"
95
+ [invalid]="form.get('selectedCountry')?.invalid && form.get('selectedCountry')?.touched"
96
+ [showClear]="true"
97
+ placeholder="Select Country"
98
+ >
99
+ </ngb-select>
100
+ </form>
101
+ `,
102
+ })
103
+ export class AppComponent {
104
+ form = new FormGroup({
105
+ selectedCountry: new FormControl(null, [Validators.required]),
106
+ });
107
+ }
108
+ ```
34
109
 
35
- ```bash
36
- cd dist/ngb-select
37
- ```
110
+ ---
111
+
112
+ ### 3. Filtering and Custom Search Modes
113
+
114
+ ```html
115
+ <ngb-select
116
+ [options]="countries"
117
+ [(ngModel)]="selectedCountry"
118
+ optionLabel="name"
119
+ [filter]="true"
120
+ filterBy="name,code"
121
+ filterMatchMode="startsWith"
122
+ filterPlaceholder="Search countries..."
123
+ [showClear]="true"
124
+ placeholder="Select a Country"
125
+ >
126
+ </ngb-select>
127
+ ```
38
128
 
39
- 2. Run the `npm publish` command to publish your library to the npm registry:
40
- ```bash
41
- npm publish
42
- ```
129
+ ---
130
+
131
+ ### 4. Custom Templating
132
+
133
+ Override default rendering for options and the selected value using `<ng-template>`:
134
+
135
+ ```html
136
+ <ngb-select [options]="users" [(ngModel)]="selectedUser" optionLabel="name">
137
+ <!-- Custom Selected Item -->
138
+ <ng-template #selectedItem let-user>
139
+ <div class="d-flex align-items-center gap-2">
140
+ <img [src]="user.avatar" class="rounded-circle" width="22" height="22" />
141
+ <strong>{{ user.name }}</strong>
142
+ </div>
143
+ </ng-template>
144
+
145
+ <!-- Custom Dropdown Item -->
146
+ <ng-template #item let-user>
147
+ <div class="d-flex align-items-center justify-content-between w-100 py-1">
148
+ <div class="d-flex align-items-center gap-2">
149
+ <img [src]="user.avatar" class="rounded-circle" width="28" height="28" />
150
+ <div>
151
+ <div class="fw-semibold">{{ user.name }}</div>
152
+ <small class="text-muted">{{ user.email }}</small>
153
+ </div>
154
+ </div>
155
+ <span class="badge bg-primary-subtle text-primary-emphasis">{{ user.role }}</span>
156
+ </div>
157
+ </ng-template>
158
+ </ngb-select>
159
+ ```
43
160
 
44
- ## Running unit tests
161
+ ---
162
+
163
+ ### 5. Searchable Multi-Select with Checkboxes & Chips
164
+
165
+ ```html
166
+ <ngb-select
167
+ [options]="countries"
168
+ [(ngModel)]="selectedCountries"
169
+ optionLabel="name"
170
+ optionValue="code"
171
+ [multiple]="true"
172
+ display="chip"
173
+ [filter]="true"
174
+ filterBy="name,code"
175
+ searchPlaceholder="Search countries by name or code..."
176
+ [showSelectAll]="true"
177
+ [showClear]="true"
178
+ placeholder="Select Countries"
179
+ >
180
+ </ngb-select>
181
+ ```
45
182
 
46
- To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
183
+ ---
184
+
185
+ ### 6. Grouped Options
186
+
187
+ ```html
188
+ <ngb-select
189
+ [options]="groupedCars"
190
+ [(ngModel)]="selectedCar"
191
+ [group]="true"
192
+ optionGroupLabel="brand"
193
+ optionGroupChildren="cars"
194
+ optionLabel="name"
195
+ optionValue="value"
196
+ placeholder="Choose vehicle brand"
197
+ >
198
+ </ngb-select>
199
+ ```
47
200
 
48
- ```bash
49
- ng test
201
+ ---
202
+
203
+ ### 7. RTL (Right-to-Left) & Arabic Support
204
+
205
+ ```html
206
+ <div dir="rtl" lang="ar">
207
+ <ngb-select
208
+ [options]="arabicCountries"
209
+ [(ngModel)]="selectedCountry"
210
+ optionLabel="name"
211
+ optionValue="code"
212
+ [filter]="true"
213
+ filterPlaceholder="ابحث عن دولة..."
214
+ placeholder="اختر الدولة"
215
+ emptyMessage="لا توجد نتائج"
216
+ >
217
+ </ngb-select>
218
+ </div>
50
219
  ```
51
220
 
52
- ## Running end-to-end tests
221
+ ---
53
222
 
54
- For end-to-end (e2e) testing, run:
223
+ ## 📖 Documentation & Links
55
224
 
56
- ```bash
57
- ng e2e
58
- ```
225
+ - 🌐 **[Live Demo & Showcase](https://amro93.github.io/ngb-select/)**
226
+ - ⚡ **[StackBlitz Sandbox](https://stackblitz.com/github/amro93/ngb-select)**
227
+ - 📘 **[Architecture & Features Guide](https://github.com/amro93/ngb-select/blob/main/docs/01-architecture-and-features.md)**
228
+ - 📘 **[API & Interfaces Reference](https://github.com/amro93/ngb-select/blob/main/docs/02-api-and-interfaces.md)**
229
+ - 📘 **[Installation & Setup Guide](https://github.com/amro93/ngb-select/blob/main/docs/08-installation-guide.md)**
59
230
 
60
- Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
231
+ ---
61
232
 
62
- ## Additional Resources
233
+ ## 📄 License
63
234
 
64
- For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
235
+ Distributed under the MIT License. See [LICENSE](https://github.com/amro93/ngb-select/blob/main/LICENSE) for more information.
@@ -4,7 +4,7 @@ import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
6
6
 
7
- const NGB_SELECT_VERSION = '0.1.1';
7
+ const NGB_SELECT_VERSION = '0.1.4';
8
8
 
9
9
  class NgbSelectComponent {
10
10
  elementRef;
@@ -1 +1 @@
1
- {"version":3,"file":"amro93-ngb-select.mjs","sources":["../../../projects/ngb-select/src/lib/ngb-select.interface.ts","../../../projects/ngb-select/src/lib/ngb-select.component.ts","../../../projects/ngb-select/src/lib/ngb-select.component.html","../../../projects/ngb-select/src/amro93-ngb-select.ts"],"sourcesContent":["export type SelectSize = 'small' | 'medium' | 'large';\r\n\r\nexport type SelectDisplayMode = 'comma' | 'chip';\r\n\r\nexport type SelectVariant = 'filled' | 'outlined';\r\n\r\nexport type SelectFilterMatchMode = 'contains' | 'startsWith' | 'endsWith' | 'equals' | 'notEquals';\r\n\r\nexport type FocusOnOpenStrategy = 'always' | 'notSelected';\r\n\r\nexport type FloatLabelVariant = 'on' | 'in' | 'over';\r\n\r\nexport type DropdownDirection = 'auto' | 'up' | 'down' | 'top' | 'bottom';\r\nexport type DropdownPosition = DropdownDirection;\r\nexport type SelectDropdownPosition = DropdownDirection;\r\n\r\nexport interface SelectOption {\r\n label?: string;\r\n value?: any;\r\n disabled?: boolean;\r\n styleClass?: string;\r\n icon?: string;\r\n title?: string;\r\n items?: SelectOption[]; // For grouped options\r\n [key: string]: any; // Allow arbitrary custom metadata\r\n}\r\n\r\nexport interface SelectChangeEvent<T = any> {\r\n originalEvent: Event | null;\r\n value: T;\r\n}\r\n\r\nexport interface SelectFilterEvent {\r\n originalEvent: Event;\r\n filter: string;\r\n}\r\n\r\nexport interface SelectSelectAllChangeEvent {\r\n originalEvent: Event;\r\n checked: boolean;\r\n}\r\n\r\nexport interface SelectRemoveChipEvent {\r\n originalEvent: Event;\r\n value: any;\r\n}\r\n\r\nexport interface SelectLazyLoadEvent {\r\n first: number;\r\n last: number;\r\n [key: string]: any;\r\n}\r\n\r\nexport const NGB_SELECT_VERSION = '0.1.1';\r\n","import {\r\n Component,\r\n forwardRef,\r\n ElementRef,\r\n ViewChild,\r\n ContentChild,\r\n TemplateRef,\r\n HostListener,\r\n OnInit,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n input,\r\n output,\r\n model,\r\n signal,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport {\r\n SelectOption,\r\n SelectFilterMatchMode,\r\n SelectSize,\r\n SelectVariant,\r\n SelectDisplayMode,\r\n FocusOnOpenStrategy,\r\n FloatLabelVariant,\r\n SelectChangeEvent,\r\n SelectFilterEvent,\r\n SelectSelectAllChangeEvent,\r\n SelectRemoveChipEvent,\r\n SelectLazyLoadEvent,\r\n DropdownPosition,\r\n DropdownDirection,\r\n NGB_SELECT_VERSION,\r\n} from './ngb-select.interface';\r\n\r\n@Component({\r\n selector: 'ngb-select',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './ngb-select.component.html',\r\n styleUrls: ['./ngb-select.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgbSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgbSelectComponent implements ControlValueAccessor, OnInit, OnDestroy {\r\n public static readonly VERSION = NGB_SELECT_VERSION;\r\n\r\n // --- Basic & Data Inputs ---\r\n options = input<any[]>([]);\r\n optionLabel = input<string>('label');\r\n optionValue = input<string>('value');\r\n optionDisabled = input<string>('disabled');\r\n optionGroupLabel = input<string>('label');\r\n optionGroupChildren = input<string>('items');\r\n group = input<boolean>(false);\r\n dataKey = input<string | undefined>(undefined);\r\n placeholder = input<string | undefined>(undefined);\r\n\r\n // --- Multi-Select Inputs ---\r\n multiple = input<boolean>(false);\r\n display = input<SelectDisplayMode>('comma');\r\n showSelectAll = input<boolean>(false);\r\n maxSelectedLabels = input<number>(3);\r\n selectedItemsLabel = input<string>('{0} items selected');\r\n selectionLimit = input<number | undefined>(undefined);\r\n closeOnSelect = input<boolean>(false);\r\n\r\n // --- Filtering Inputs ---\r\n filter = input<boolean>(false);\r\n filterBy = input<string | undefined>(undefined);\r\n filterMatchMode = input<SelectFilterMatchMode>('contains');\r\n filterLocale = input<string | undefined>(undefined);\r\n filterNormalizeArabic = input<boolean>(true);\r\n filterPlaceholder = input<string | undefined>(undefined);\r\n searchPlaceholder = input<string | undefined>(undefined);\r\n filterInTrigger = input<boolean>(false);\r\n resetFilterOnHide = input<boolean>(false);\r\n emptyMessage = input<string>('No results found');\r\n emptyFilterMessage = input<string>('No results found');\r\n\r\n // --- State & Form Inputs ---\r\n disabled = model<boolean>(false);\r\n readonly = input<boolean>(false);\r\n loading = input<boolean>(false);\r\n showClear = input<boolean>(false);\r\n invalid = input<boolean>(false);\r\n floatLabel = input<boolean>(false);\r\n floatLabelVariant = input<FloatLabelVariant>('on');\r\n autofocus = input<boolean>(false);\r\n tabindex = input<number>(0);\r\n id = input<string | undefined>(undefined);\r\n ariaLabel = input<string | undefined>(undefined);\r\n ariaLabelledBy = input<string | undefined>(undefined);\r\n dir = input<'ltr' | 'rtl' | 'auto' | undefined>(undefined);\r\n\r\n // --- Display & Styling Inputs ---\r\n dropdownPosition = input<DropdownPosition>('auto');\r\n dropdownDirection = input<DropdownDirection | undefined>(undefined);\r\n direction = input<DropdownDirection | undefined>(undefined);\r\n size = input<SelectSize | undefined>(undefined);\r\n variant = input<SelectVariant>('outlined');\r\n fluid = input<boolean>(false);\r\n scrollHeight = input<string>('200px');\r\n style = input<{ [klass: string]: any } | null | undefined>(undefined);\r\n styleClass = input<string | undefined>(undefined);\r\n panelStyle = input<{ [klass: string]: any } | null | undefined>(undefined);\r\n panelStyleClass = input<string | undefined>(undefined);\r\n appendTo = input<'body' | HTMLElement | string | undefined>(undefined);\r\n\r\n // --- Modal / Popup Window Inputs ---\r\n modal = input<boolean>(false);\r\n popup = input<boolean>(false);\r\n touchUI = input<boolean>(false);\r\n popupTitle = input<string | undefined>(undefined);\r\n modalTitle = input<string | undefined>(undefined);\r\n\r\n // --- Advanced Features ---\r\n editable = input<boolean>(false);\r\n maxLength = input<number | undefined>(undefined);\r\n selectOnFocus = input<boolean>(false);\r\n autoOptionFocus = input<boolean>(true);\r\n focusOnOpen = input<number | undefined>(undefined);\r\n focusOnOpenStrategy = input<FocusOnOpenStrategy>('always');\r\n lazy = input<boolean>(false);\r\n\r\n // --- Two-way Overlay Visibility Binding ---\r\n overlayVisible = model<boolean>(false);\r\n\r\n // --- Event Outputs ---\r\n onChange = output<SelectChangeEvent>();\r\n onFilter = output<SelectFilterEvent>();\r\n onFocus = output<Event>();\r\n onBlur = output<Event>();\r\n onShow = output<Event | null>();\r\n onHide = output<Event | null>();\r\n onClear = output<Event>();\r\n onSelectAllChange = output<SelectSelectAllChangeEvent>();\r\n onRemoveChip = output<SelectRemoveChipEvent>();\r\n onLazyLoad = output<SelectLazyLoadEvent>();\r\n\r\n // --- Custom Content Templates ---\r\n @ContentChild('item') itemTemplate?: TemplateRef<any>;\r\n @ContentChild('selectedItem') selectedItemTemplate?: TemplateRef<any>;\r\n @ContentChild('label') labelTemplate?: TemplateRef<any>;\r\n @ContentChild('chip') chipTemplate?: TemplateRef<any>;\r\n @ContentChild('headerCheckbox') headerCheckboxTemplate?: TemplateRef<any>;\r\n @ContentChild('header') headerTemplate?: TemplateRef<any>;\r\n @ContentChild('footer') footerTemplate?: TemplateRef<any>;\r\n @ContentChild('group') groupTemplate?: TemplateRef<any>;\r\n @ContentChild('empty') emptyTemplate?: TemplateRef<any>;\r\n @ContentChild('clearIcon') clearIconTemplate?: TemplateRef<any>;\r\n @ContentChild('dropdownIcon') dropdownIconTemplate?: TemplateRef<any>;\r\n @ContentChild('filterIcon') filterIconTemplate?: TemplateRef<any>;\r\n\r\n // --- View References ---\r\n @ViewChild('filterInput') filterInputElement?: ElementRef<HTMLInputElement>;\r\n @ViewChild('triggerFilterInput') triggerFilterInputElement?: ElementRef<HTMLInputElement>;\r\n @ViewChild('editableInput') editableInputElement?: ElementRef<HTMLInputElement>;\r\n @ViewChild('dropdownMenu') dropdownMenuElement?: ElementRef<HTMLDivElement>;\r\n\r\n effectiveSearchPlaceholder = computed(() => {\r\n return this.searchPlaceholder() || this.filterPlaceholder() || this.placeholder() || 'Search...';\r\n });\r\n\r\n effectiveDropdownPosition = computed<DropdownPosition>(() => {\r\n return this.dropdownDirection() || this.direction() || this.dropdownPosition() || 'auto';\r\n });\r\n\r\n currentPlacement = signal<'bottom' | 'top'>('bottom');\r\n isDropup = computed(() => this.currentPlacement() === 'top');\r\n\r\n isModalMode = computed(() => this.modal() || this.popup() || this.touchUI());\r\n effectivePopupTitle = computed(() => {\r\n return this.popupTitle() || this.modalTitle() || this.placeholder() || 'Select an Option';\r\n });\r\n\r\n effectiveFilterValue = computed(() => {\r\n return this.overlayVisible()\r\n ? this.filterValue()\r\n : this.hasSelectedValue()\r\n ? ''\r\n : this.filterValue();\r\n });\r\n\r\n // --- Internal State ---\r\n public value = signal<any>(null);\r\n public filteredOptions = signal<any[]>([]);\r\n public filterValue = signal<string>('');\r\n public focusedIndex = signal<number>(-1);\r\n public selectAll = signal<boolean | null>(null);\r\n\r\n // --- ControlValueAccessor Callbacks ---\r\n private onModelChange: (value: any) => void = () => {};\r\n private onModelTouched: () => void = () => {};\r\n\r\n constructor(\r\n public elementRef: ElementRef,\r\n private cdr: ChangeDetectorRef,\r\n ) {\r\n effect(() => {\r\n // React to options or group changes\r\n this.options();\r\n this.group();\r\n this.updateFilteredOptions();\r\n this.updateSelectAllState();\r\n });\r\n\r\n effect(() => {\r\n // React to overlayVisible changes\r\n const visible = this.overlayVisible();\r\n if (visible) {\r\n this.openOverlay();\r\n } else {\r\n this.closeOverlay();\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.autofocus()) {\r\n setTimeout(() => this.focus());\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanAppendTo();\r\n }\r\n\r\n safeOptions = computed(() => {\r\n const opts = this.options();\r\n return Array.isArray(opts) ? opts : [];\r\n });\r\n\r\n writeValue(obj: any): void {\r\n if (this.multiple()) {\r\n this.value.set(Array.isArray(obj) ? [...obj] : []);\r\n } else {\r\n this.value.set(obj !== undefined ? obj : null);\r\n }\r\n this.updateSelectAllState();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n hasSelectedValue = computed(() => {\r\n const val = this.value();\r\n if (this.multiple()) {\r\n return Array.isArray(val) && val.length > 0;\r\n }\r\n return val !== null && val !== undefined && val !== '';\r\n });\r\n\r\n getDisplayLabel(): string {\r\n if (!this.hasSelectedValue()) {\r\n return '';\r\n }\r\n\r\n if (this.multiple()) {\r\n const selectedList = Array.isArray(this.value()) ? this.value() : [];\r\n if (selectedList.length > this.maxSelectedLabels()) {\r\n return this.selectedItemsLabel().replace('{0}', String(selectedList.length));\r\n }\r\n return selectedList.map((val: any) => this.resolveOptionLabelByValue(val)).join(', ');\r\n }\r\n\r\n if (this.editable() && typeof this.value() === 'string') {\r\n return this.value();\r\n }\r\n\r\n return this.resolveOptionLabelByValue(this.value());\r\n }\r\n\r\n resolveOptionLabelByValue(val: any): string {\r\n const selectedOpt = this.findOptionByValue(val);\r\n if (selectedOpt !== undefined && selectedOpt !== null) {\r\n return this.resolveOptionLabel(selectedOpt);\r\n }\r\n return this.resolveOptionLabel(val);\r\n }\r\n\r\n resolveOptionLabel(option: any): string {\r\n if (option === null || option === undefined) return '';\r\n if (typeof option === 'object') {\r\n if (this.optionLabel() && option[this.optionLabel()] !== undefined) {\r\n return String(option[this.optionLabel()]);\r\n }\r\n if (option.label !== undefined) {\r\n return String(option.label);\r\n }\r\n return JSON.stringify(option);\r\n }\r\n return String(option);\r\n }\r\n\r\n resolveOptionValue(option: any): any {\r\n if (option === null || option === undefined) return null;\r\n if (typeof option === 'object') {\r\n if (this.optionValue() && option[this.optionValue()] !== undefined) {\r\n return option[this.optionValue()];\r\n }\r\n if (option.value !== undefined) {\r\n return option.value;\r\n }\r\n }\r\n return option;\r\n }\r\n\r\n isOptionDisabled(option: any): boolean {\r\n if (this.disabled()) return true;\r\n if (option && typeof option === 'object') {\r\n if (this.optionDisabled() && option[this.optionDisabled()] !== undefined) {\r\n return Boolean(option[this.optionDisabled()]);\r\n }\r\n return Boolean(option.disabled);\r\n }\r\n return false;\r\n }\r\n\r\n resolveOptionGroupLabel(groupOption: any): string {\r\n if (!groupOption) return '';\r\n if (this.optionGroupLabel() && groupOption[this.optionGroupLabel()] !== undefined) {\r\n return String(groupOption[this.optionGroupLabel()]);\r\n }\r\n return String(groupOption.label || '');\r\n }\r\n\r\n resolveOptionGroupChildren(groupOption: any): any[] {\r\n if (!groupOption) return [];\r\n if (this.optionGroupChildren() && Array.isArray(groupOption[this.optionGroupChildren()])) {\r\n return groupOption[this.optionGroupChildren()];\r\n }\r\n return Array.isArray(groupOption.items) ? groupOption.items : [];\r\n }\r\n\r\n findOptionByValue(val: any): any {\r\n if (val === null || val === undefined) return undefined;\r\n if (this.group()) {\r\n for (const grp of this.safeOptions()) {\r\n const children = this.resolveOptionGroupChildren(grp);\r\n const match = children.find((opt) =>\r\n this.areValuesEqual(this.resolveOptionValue(opt), val),\r\n );\r\n if (match !== undefined) return match;\r\n }\r\n return undefined;\r\n }\r\n return this.safeOptions().find((opt) => this.areValuesEqual(this.resolveOptionValue(opt), val));\r\n }\r\n\r\n areValuesEqual(val1: any, val2: any): boolean {\r\n if (val1 === val2) return true;\r\n if (val1 === null || val1 === undefined || val2 === null || val2 === undefined) return false;\r\n if (typeof val1 === 'object' && typeof val2 === 'object') {\r\n const dataKey = this.dataKey();\r\n if (dataKey && val1[dataKey] !== undefined && val2[dataKey] !== undefined) {\r\n return val1[dataKey] === val2[dataKey];\r\n }\r\n if (\r\n this.optionValue() &&\r\n val1[this.optionValue()] !== undefined &&\r\n val2[this.optionValue()] !== undefined\r\n ) {\r\n return val1[this.optionValue()] === val2[this.optionValue()];\r\n }\r\n try {\r\n return JSON.stringify(val1) === JSON.stringify(val2);\r\n } catch {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n isSelected(option: any): boolean {\r\n const optVal = this.resolveOptionValue(option);\r\n if (this.multiple() && Array.isArray(this.value())) {\r\n return this.value().some((item: any) => this.areValuesEqual(item, optVal));\r\n }\r\n return this.areValuesEqual(this.value(), optVal);\r\n }\r\n\r\n isOptionsEmpty(): boolean {\r\n if (this.filteredOptions().length === 0) return true;\r\n if (this.group()) {\r\n return this.filteredOptions().every((grp) => this.resolveOptionGroupChildren(grp).length === 0);\r\n }\r\n return false;\r\n }\r\n\r\n onTriggerClick(event: MouseEvent): void {\r\n if (this.disabled() || this.readonly()) return;\r\n this.toggleOverlay(event);\r\n }\r\n\r\n calculateDropdownPosition(): void {\r\n const pref = this.effectiveDropdownPosition();\r\n if (pref === 'top' || pref === 'up') {\r\n this.currentPlacement.set('top');\r\n return;\r\n }\r\n if (pref === 'bottom' || pref === 'down') {\r\n this.currentPlacement.set('bottom');\r\n return;\r\n }\r\n\r\n // Auto positioning based on viewport space\r\n if (typeof window === 'undefined' || !this.elementRef?.nativeElement) {\r\n this.currentPlacement.set('bottom');\r\n return;\r\n }\r\n\r\n const triggerRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const spaceBelow = window.innerHeight - triggerRect.bottom;\r\n const spaceAbove = triggerRect.top;\r\n\r\n let panelHeight = 200;\r\n if (this.dropdownMenuElement?.nativeElement?.offsetHeight) {\r\n panelHeight = this.dropdownMenuElement.nativeElement.offsetHeight;\r\n } else if (this.scrollHeight()) {\r\n const parsed = parseInt(this.scrollHeight(), 10);\r\n if (!isNaN(parsed) && parsed > 0) {\r\n panelHeight = parsed;\r\n }\r\n }\r\n\r\n if (spaceBelow < panelHeight && spaceAbove > spaceBelow) {\r\n this.currentPlacement.set('top');\r\n } else {\r\n this.currentPlacement.set('bottom');\r\n }\r\n }\r\n\r\n toggleOverlay(event?: Event): void {\r\n if (this.overlayVisible()) {\r\n this.closeOverlay(event);\r\n } else {\r\n this.openOverlay(event);\r\n }\r\n }\r\n\r\n openOverlay(event?: Event): void {\r\n if (this.disabled() || this.readonly() || this.overlayVisible()) return;\r\n\r\n this.calculateDropdownPosition();\r\n this.overlayVisible.set(true);\r\n this.onShow.emit(event || null);\r\n this.onModelTouched();\r\n\r\n setTimeout(() => {\r\n this.calculateDropdownPosition();\r\n if (this.filterInTrigger() && this.triggerFilterInputElement) {\r\n this.triggerFilterInputElement.nativeElement.focus();\r\n } else if (this.filter() && this.filterInputElement) {\r\n this.filterInputElement.nativeElement.focus();\r\n }\r\n this.handleFocusOnOpen();\r\n this.handleAppendTo();\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n closeOverlay(event?: Event): void {\r\n if (!this.overlayVisible()) return;\r\n\r\n this.overlayVisible.set(false);\r\n this.onHide.emit(event || null);\r\n\r\n if (this.resetFilterOnHide() && this.filterValue()) {\r\n this.filterValue.set('');\r\n this.updateFilteredOptions();\r\n }\r\n this.focusedIndex.set(-1);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n private handleFocusOnOpen(): void {\r\n const flatItems = this.getFlatFilteredOptions();\r\n let targetIndex = -1;\r\n\r\n const hasSelection = this.hasSelectedValue();\r\n const selectedIdx = flatItems.findIndex((opt) => this.isSelected(opt));\r\n\r\n const focusOnOpen = this.focusOnOpen();\r\n if (\r\n focusOnOpen !== undefined &&\r\n focusOnOpen >= 0 &&\r\n focusOnOpen < flatItems.length\r\n ) {\r\n if (this.focusOnOpenStrategy() === 'notSelected' && hasSelection && selectedIdx !== -1) {\r\n targetIndex = selectedIdx;\r\n } else {\r\n targetIndex = focusOnOpen;\r\n }\r\n } else if (this.autoOptionFocus()) {\r\n targetIndex = selectedIdx !== -1 ? selectedIdx : 0;\r\n }\r\n\r\n if (targetIndex !== -1 && this.dropdownMenuElement) {\r\n this.focusedIndex.set(targetIndex);\r\n const elements = this.dropdownMenuElement.nativeElement.querySelectorAll(\r\n '.dropdown-item[role=\"option\"]',\r\n );\r\n const targetElement = elements[targetIndex] as HTMLElement;\r\n if (targetElement && typeof targetElement.scrollIntoView === 'function') {\r\n targetElement.scrollIntoView({ block: 'nearest', inline: 'start' });\r\n }\r\n }\r\n }\r\n\r\n onOptionClick(option: any, event: Event): void {\r\n if (this.isOptionDisabled(option)) return;\r\n\r\n const val = this.resolveOptionValue(option);\r\n\r\n if (this.multiple()) {\r\n let currentSelection: any[] = Array.isArray(this.value()) ? [...this.value()] : [];\r\n const selectedIndex = currentSelection.findIndex((item) => this.areValuesEqual(item, val));\r\n\r\n if (selectedIndex !== -1) {\r\n currentSelection.splice(selectedIndex, 1);\r\n } else {\r\n if (this.selectionLimit() !== undefined && currentSelection.length >= this.selectionLimit()!) {\r\n return;\r\n }\r\n currentSelection.push(val);\r\n }\r\n\r\n this.updateModel(currentSelection, event);\r\n this.updateSelectAllState();\r\n\r\n if (this.closeOnSelect()) {\r\n this.closeOverlay(event);\r\n }\r\n } else {\r\n this.updateModel(val, event);\r\n if (this.filterInTrigger()) {\r\n this.filterValue.set('');\r\n this.updateFilteredOptions();\r\n if (this.triggerFilterInputElement) {\r\n this.triggerFilterInputElement.nativeElement.value = '';\r\n }\r\n }\r\n this.closeOverlay(event);\r\n }\r\n }\r\n\r\n removeChip(val: any, event: Event): void {\r\n event.stopPropagation();\r\n if (this.disabled() || this.readonly()) return;\r\n\r\n if (Array.isArray(this.value())) {\r\n const nextVal = this.value().filter((item: any) => !this.areValuesEqual(item, val));\r\n this.updateModel(nextVal, event);\r\n this.onRemoveChip.emit({ originalEvent: event, value: val });\r\n this.updateSelectAllState();\r\n }\r\n }\r\n\r\n toggleSelectAll(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n const targetOptions = this.getFlatFilteredOptions().filter(\r\n (opt) => !this.isOptionDisabled(opt),\r\n );\r\n\r\n if (checked) {\r\n let allValues = targetOptions.map((opt) => this.resolveOptionValue(opt));\r\n if (this.selectionLimit() !== undefined) {\r\n allValues = allValues.slice(0, this.selectionLimit());\r\n }\r\n this.value.set(allValues);\r\n } else {\r\n this.value.set([]);\r\n }\r\n\r\n this.selectAll.set(checked);\r\n this.updateModel(this.value(), event);\r\n this.onSelectAllChange.emit({ originalEvent: event, checked });\r\n }\r\n\r\n updateSelectAllState(): void {\r\n if (!this.multiple() || !this.showSelectAll()) return;\r\n const targetOptions = this.getFlatFilteredOptions().filter(\r\n (opt) => !this.isOptionDisabled(opt),\r\n );\r\n if (targetOptions.length === 0) {\r\n this.selectAll.set(false);\r\n return;\r\n }\r\n this.selectAll.set(targetOptions.every((opt) => this.isSelected(opt)));\r\n }\r\n\r\n private updateModel(val: any, event: Event | null): void {\r\n this.value.set(val);\r\n this.onModelChange(this.value());\r\n this.onChange.emit({\r\n originalEvent: event,\r\n value: this.value(),\r\n });\r\n this.cdr.markForCheck();\r\n }\r\n\r\n onClearClick(event: Event): void {\r\n event.stopPropagation();\r\n if (this.disabled() || this.readonly()) return;\r\n\r\n const clearedValue = this.multiple() ? [] : null;\r\n this.updateModel(clearedValue, event);\r\n this.updateSelectAllState();\r\n this.onClear.emit(event);\r\n }\r\n\r\n onEditableInput(event: Event): void {\r\n const inputVal = (event.target as HTMLInputElement).value;\r\n this.updateModel(inputVal, event);\r\n }\r\n\r\n onEditableFocus(event: FocusEvent): void {\r\n if (this.selectOnFocus() && this.editableInputElement) {\r\n this.editableInputElement.nativeElement.select();\r\n }\r\n this.onFocus.emit(event);\r\n }\r\n\r\n onFilterChange(event: Event): void {\r\n const raw = (event.target as HTMLInputElement).value || '';\r\n this.filterValue.set(raw);\r\n this.updateFilteredOptions();\r\n this.updateSelectAllState();\r\n this.onFilter.emit({\r\n originalEvent: event,\r\n filter: this.filterValue(),\r\n });\r\n }\r\n\r\n updateFilteredOptions(): void {\r\n if (!this.filterValue()) {\r\n this.filteredOptions.set([...this.safeOptions()]);\r\n return;\r\n }\r\n\r\n const query = this.filterValue();\r\n\r\n if (this.group()) {\r\n this.filteredOptions.set(this.safeOptions()\r\n .map((group) => {\r\n const children = this.resolveOptionGroupChildren(group);\r\n const filteredChildren = children.filter((opt) => this.matchesFilter(opt, query));\r\n return {\r\n ...group,\r\n [this.optionGroupChildren()]: filteredChildren,\r\n };\r\n })\r\n .filter((group) => this.resolveOptionGroupChildren(group).length > 0));\r\n } else {\r\n this.filteredOptions.set(this.safeOptions().filter((opt) => this.matchesFilter(opt, query)));\r\n }\r\n }\r\n\r\n private matchesFilter(option: any, query: string): boolean {\r\n if (!option) return false;\r\n const fieldsToSearch = this.getFilterFields();\r\n\r\n return fieldsToSearch.some((field) => {\r\n const val = this.resolveFieldData(option, field);\r\n if (val === null || val === undefined) return false;\r\n\r\n const stringVal = String(val);\r\n return this.compareStrings(stringVal, query, this.filterMatchMode(), this.filterLocale());\r\n });\r\n }\r\n\r\n private getFilterFields(): string[] {\r\n if (this.filterBy()) {\r\n return this.filterBy()!.split(',').map((f) => f.trim());\r\n }\r\n return [this.optionLabel() || 'label'];\r\n }\r\n\r\n private resolveFieldData(data: any, field: string): any {\r\n if (data && field) {\r\n if (field.indexOf('.') === -1) {\r\n return data[field] !== undefined\r\n ? data[field]\r\n : typeof data === 'string' || typeof data === 'number'\r\n ? data\r\n : null;\r\n }\r\n const fields = field.split('.');\r\n let value = data;\r\n for (const f of fields) {\r\n if (value === null || value === undefined) return null;\r\n value = value[f];\r\n }\r\n return value;\r\n }\r\n return null;\r\n }\r\n\r\n private normalizeArabicText(text: string): string {\r\n return text\r\n .replace(/[\\u064B-\\u065F\\u0670\\u0640]/g, '') // Remove Arabic Tashkeel diacritics & Tatweel\r\n .replace(/[إأآا]/g, 'ا') // Normalize Alef forms\r\n .replace(/[يى]/g, 'ي') // Normalize Yaa & Alef Maksura\r\n .replace(/[ة]/g, 'ه'); // Normalize Taa Marbuta\r\n }\r\n\r\n private compareStrings(\r\n val: string,\r\n query: string,\r\n mode: SelectFilterMatchMode,\r\n locale?: string,\r\n ): boolean {\r\n let v = locale ? val.toLocaleLowerCase(locale) : val.toLowerCase();\r\n let q = locale ? query.toLocaleLowerCase(locale) : query.toLowerCase();\r\n\r\n if (this.filterNormalizeArabic()) {\r\n v = this.normalizeArabicText(v);\r\n q = this.normalizeArabicText(q);\r\n }\r\n\r\n switch (mode) {\r\n case 'startsWith':\r\n return v.startsWith(q);\r\n case 'endsWith':\r\n return v.endsWith(q);\r\n case 'equals':\r\n return v === q;\r\n case 'notEquals':\r\n return v !== q;\r\n case 'contains':\r\n default:\r\n return v.includes(q);\r\n }\r\n }\r\n\r\n public getFlatFilteredOptions(): any[] {\r\n if (this.group()) {\r\n const flat: any[] = [];\r\n for (const grp of this.filteredOptions()) {\r\n flat.push(...this.resolveOptionGroupChildren(grp));\r\n }\r\n return flat;\r\n }\r\n return this.filteredOptions();\r\n }\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled() || this.readonly()) return;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.overlayVisible()) {\r\n this.openOverlay(event);\r\n } else {\r\n this.navigateOption(1);\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (!this.overlayVisible()) {\r\n this.openOverlay(event);\r\n } else {\r\n this.navigateOption(-1);\r\n }\r\n break;\r\n\r\n case 'Enter':\r\n case ' ':\r\n if (\r\n event.key === ' ' &&\r\n ((this.filter() && this.filterInputElement?.nativeElement === document.activeElement) ||\r\n (this.filterInTrigger() &&\r\n this.triggerFilterInputElement?.nativeElement === document.activeElement))\r\n ) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (!this.overlayVisible()) {\r\n this.openOverlay(event);\r\n } else {\r\n const flatItems = this.getFlatFilteredOptions();\r\n if (this.focusedIndex() >= 0 && this.focusedIndex() < flatItems.length) {\r\n this.onOptionClick(flatItems[this.focusedIndex()], event);\r\n }\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.overlayVisible()) {\r\n event.preventDefault();\r\n this.closeOverlay(event);\r\n }\r\n break;\r\n\r\n case 'Tab':\r\n if (this.overlayVisible()) {\r\n this.closeOverlay(event);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n onFilterKeydown(event: KeyboardEvent): void {\r\n if (\r\n event.key === 'ArrowDown' ||\r\n event.key === 'ArrowUp' ||\r\n event.key === 'Enter' ||\r\n event.key === 'Escape'\r\n ) {\r\n this.onKeydown(event);\r\n }\r\n }\r\n\r\n private navigateOption(step: number): void {\r\n const flatItems = this.getFlatFilteredOptions();\r\n if (flatItems.length === 0) return;\r\n\r\n let nextIdx = this.focusedIndex() + step;\r\n if (nextIdx < 0) nextIdx = 0;\r\n if (nextIdx >= flatItems.length) nextIdx = flatItems.length - 1;\r\n\r\n while (\r\n nextIdx >= 0 &&\r\n nextIdx < flatItems.length &&\r\n this.isOptionDisabled(flatItems[nextIdx])\r\n ) {\r\n nextIdx += step;\r\n }\r\n\r\n if (nextIdx >= 0 && nextIdx < flatItems.length) {\r\n this.focusedIndex.set(nextIdx);\r\n if (this.dropdownMenuElement) {\r\n const elements = this.dropdownMenuElement.nativeElement.querySelectorAll(\r\n '.dropdown-item[role=\"option\"]',\r\n );\r\n const targetElement = elements[nextIdx] as HTMLElement;\r\n if (targetElement && typeof targetElement.scrollIntoView === 'function') {\r\n targetElement.scrollIntoView({ block: 'nearest', inline: 'start' });\r\n }\r\n }\r\n }\r\n }\r\n\r\n isOptionFocused(option: any): boolean {\r\n if (this.focusedIndex() < 0) return false;\r\n const flat = this.getFlatFilteredOptions();\r\n if (this.focusedIndex() >= flat.length) return false;\r\n return this.areValuesEqual(\r\n this.resolveOptionValue(flat[this.focusedIndex()]),\r\n this.resolveOptionValue(option),\r\n );\r\n }\r\n\r\n onOverlayScroll(event: Event): void {\r\n if (!this.lazy()) return;\r\n const target = event.target as HTMLElement;\r\n if (target.scrollTop + target.clientHeight >= target.scrollHeight - 10) {\r\n const flat = this.getFlatFilteredOptions();\r\n this.onLazyLoad.emit({\r\n first: flat.length,\r\n last: flat.length + 10,\r\n });\r\n }\r\n }\r\n\r\n private handleAppendTo(): void {\r\n const appendTo = this.appendTo();\r\n if (!appendTo || !this.dropdownMenuElement) return;\r\n if (appendTo === 'body') {\r\n document.body.appendChild(this.dropdownMenuElement.nativeElement);\r\n this.repositionOverlay();\r\n } else if (appendTo instanceof HTMLElement) {\r\n appendTo.appendChild(this.dropdownMenuElement.nativeElement);\r\n this.repositionOverlay();\r\n }\r\n }\r\n\r\n private repositionOverlay(): void {\r\n if (!this.dropdownMenuElement || this.isModalMode()) return;\r\n this.calculateDropdownPosition();\r\n const triggerRect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const dropdown = this.dropdownMenuElement.nativeElement;\r\n dropdown.style.position = 'fixed';\r\n dropdown.style.left = `${triggerRect.left}px`;\r\n dropdown.style.width = `${triggerRect.width}px`;\r\n dropdown.style.minWidth = `${triggerRect.width}px`;\r\n dropdown.style.maxWidth = `${triggerRect.width}px`;\r\n dropdown.style.boxSizing = 'border-box';\r\n dropdown.style.zIndex = '1060';\r\n\r\n if (this.isDropup()) {\r\n dropdown.style.top = 'auto';\r\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + 2}px`;\r\n } else {\r\n dropdown.style.top = `${triggerRect.bottom + 2}px`;\r\n dropdown.style.bottom = 'auto';\r\n }\r\n }\r\n\r\n private cleanAppendTo(): void {\r\n if (this.appendTo() && this.dropdownMenuElement) {\r\n const el = this.dropdownMenuElement.nativeElement;\r\n if (el.parentElement) {\r\n el.parentElement.removeChild(el);\r\n }\r\n }\r\n }\r\n\r\n onTriggerFocus(event: FocusEvent): void {\r\n this.onFocus.emit(event);\r\n }\r\n\r\n onTriggerBlur(event: FocusEvent): void {\r\n this.onBlur.emit(event);\r\n }\r\n\r\n public focus(): void {\r\n if (this.filterInTrigger() && this.triggerFilterInputElement) {\r\n this.triggerFilterInputElement.nativeElement.focus();\r\n } else if (this.editable() && !this.multiple() && this.editableInputElement) {\r\n this.editableInputElement.nativeElement.focus();\r\n } else {\r\n const trigger = this.elementRef.nativeElement.querySelector('.form-select');\r\n if (trigger) trigger.focus();\r\n }\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n if (this.overlayVisible()) {\r\n this.calculateDropdownPosition();\r\n if (this.appendTo()) {\r\n this.repositionOverlay();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('window:scroll')\r\n onWindowScroll(): void {\r\n if (this.overlayVisible()) {\r\n this.calculateDropdownPosition();\r\n if (this.appendTo()) {\r\n this.repositionOverlay();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (this.overlayVisible() && !this.elementRef.nativeElement.contains(event.target)) {\r\n if (\r\n this.dropdownMenuElement &&\r\n this.dropdownMenuElement.nativeElement.contains(event.target as Node)\r\n ) {\r\n return;\r\n }\r\n this.closeOverlay(event);\r\n }\r\n }\r\n}\r\n","<div\n class=\"ngb-select-container position-relative\"\n [class.form-floating]=\"floatLabel()\"\n [class.float-variant-on]=\"floatLabel() && floatLabelVariant() === 'on'\"\n [class.float-variant-in]=\"floatLabel() && floatLabelVariant() === 'in'\"\n [class.float-variant-over]=\"floatLabel() && floatLabelVariant() === 'over'\"\n [class.floating-active]=\"hasSelectedValue() || overlayVisible()\"\n [class.dropup]=\"isDropup()\"\n [class.dropdown-up]=\"isDropup()\"\n [class.w-100]=\"fluid()\"\n [attr.dir]=\"dir() || null\"\n [ngStyle]=\"style()\"\n [ngClass]=\"styleClass()\"\n (keydown)=\"onKeydown($event)\"\n>\n <!-- Select Trigger Box -->\n <div\n class=\"form-select d-flex align-items-center justify-content-between\"\n [class.is-invalid]=\"invalid()\"\n [class.disabled]=\"disabled()\"\n [class.form-select-sm]=\"size() === 'small'\"\n [class.form-select-lg]=\"size() === 'large'\"\n [class.bg-light]=\"variant() === 'filled'\"\n [attr.id]=\"id()\"\n [attr.tabindex]=\"disabled() ? -1 : tabindex()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.aria-expanded]=\"overlayVisible()\"\n [attr.aria-haspopup]=\"'listbox'\"\n role=\"combobox\"\n (click)=\"onTriggerClick($event)\"\n (focus)=\"onTriggerFocus($event)\"\n (blur)=\"onTriggerBlur($event)\"\n >\n <!-- Selected Value / Input / Chips Area -->\n <span class=\"text-truncate flex-grow-1 me-2 d-flex flex-wrap align-items-center gap-1\">\n <!-- Filter directly in Trigger Box -->\n @if (filterInTrigger()) {\n <!-- Chips in multiple mode when filterInTrigger is active -->\n @if (multiple() && display() === 'chip' && hasSelectedValue()) {\n @for (val of value(); track val) {\n <span\n class=\"badge bg-light text-dark border d-inline-flex align-items-center gap-1 py-1 px-2\"\n >\n @if (chipTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n chipTemplate;\n context: { $implicit: findOptionByValue(val) ?? val, value: val }\n \"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabelByValue(val) }}</span>\n }\n @if (!disabled() && !readonly()) {\n <i\n class=\"bi bi-x ms-1 cursor-pointer fw-bold\"\n (click)=\"removeChip(val, $event)\"\n ></i>\n }\n </span>\n }\n }\n <!-- Search Filter Input embedded inside the trigger -->\n <input\n #triggerFilterInput\n type=\"text\"\n class=\"form-control border-0 bg-transparent p-0 shadow-none flex-grow-1\"\n style=\"min-width: 80px\"\n [class.form-control-sm]=\"size() === 'small'\"\n [class.form-control-lg]=\"size() === 'large'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [value]=\"effectiveFilterValue()\"\n [placeholder]=\"\n multiple() && hasSelectedValue()\n ? ''\n : hasSelectedValue() && !overlayVisible()\n ? getDisplayLabel()\n : effectiveSearchPlaceholder()\n \"\n (input)=\"onFilterChange($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n (focus)=\"openOverlay($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <!-- Editable Input (Single mode only) -->\n @if (editable() && !multiple()) {\n <input\n #editableInput\n type=\"text\"\n class=\"form-control border-0 bg-transparent p-0 shadow-none\"\n [class.form-control-sm]=\"size() === 'small'\"\n [class.form-control-lg]=\"size() === 'large'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [attr.maxlength]=\"maxLength()\"\n [value]=\"getDisplayLabel()\"\n [placeholder]=\"placeholder() || ''\"\n (input)=\"onEditableInput($event)\"\n (focus)=\"onEditableFocus($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <!-- Multi-Select Chips Display Mode -->\n @if (multiple() && display() === 'chip' && hasSelectedValue()) {\n @for (val of value(); track val) {\n <span\n class=\"badge bg-light text-dark border d-inline-flex align-items-center gap-1 py-1 px-2\"\n >\n @if (chipTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n chipTemplate;\n context: { $implicit: findOptionByValue(val) ?? val, value: val }\n \"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabelByValue(val) }}</span>\n }\n @if (!disabled() && !readonly()) {\n <i\n class=\"bi bi-x ms-1 cursor-pointer fw-bold\"\n (click)=\"removeChip(val, $event)\"\n ></i>\n }\n </span>\n }\n } @else {\n @if (hasSelectedValue()) {\n @if (selectedItemTemplate || labelTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n selectedItemTemplate || labelTemplate;\n context: { $implicit: findOptionByValue(value()) ?? value(), value: value() }\n \"\n ></ng-container>\n } @else {\n <span>{{ getDisplayLabel() }}</span>\n }\n } @else {\n <span class=\"text-muted\">{{ floatLabel() ? '' : placeholder() || '' }}</span>\n }\n }\n <!-- Standard Single or Comma Multi-Select Text -->\n }\n }\n </span>\n\n <!-- Icons & Spinners Area -->\n <div class=\"d-flex align-items-center flex-shrink-0 gap-1 ms-auto\">\n <!-- Clear Icon -->\n @if (showClear() && hasSelectedValue() && !disabled() && !readonly()) {\n <span\n class=\"ngb-select-clear-icon text-muted me-1\"\n (click)=\"onClearClick($event)\"\n title=\"Clear\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Clear value\"\n >\n @if (clearIconTemplate) {\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n } @else {\n <i class=\"bi bi-x-circle-fill\"></i>\n }\n </span>\n }\n\n <!-- Loading Spinner -->\n @if (loading()) {\n <div class=\"spinner-border spinner-border-sm text-secondary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n }\n\n <!-- Dropdown Caret Icon -->\n @if (!loading()) {\n <span class=\"ngb-select-dropdown-icon text-secondary\">\n @if (dropdownIconTemplate) {\n <ng-container *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-container>\n } @else {\n <i class=\"bi bi-chevron-down\" [class.rotate-180]=\"overlayVisible()\"></i>\n }\n </span>\n }\n </div>\n </div>\n\n <!-- Float Label Support -->\n @if (floatLabel() && placeholder()) {\n <label [attr.for]=\"id()\">{{ placeholder() }}</label>\n }\n\n <ng-template #dropdownContent>\n <!-- Header Template -->\n @if (headerTemplate) {\n <div class=\"p-2 border-bottom\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </div>\n }\n\n <!-- Header: Select All Checkbox & Search / Filter Box -->\n @if ((filter() && !filterInTrigger()) || (multiple() && showSelectAll())) {\n <div class=\"p-2 border-bottom bg-light bg-opacity-50\">\n <!-- Select All Checkbox -->\n @if (multiple() && showSelectAll()) {\n <div class=\"d-flex align-items-center mb-2 px-1\">\n <input\n type=\"checkbox\"\n class=\"form-check-input me-2 mt-0 cursor-pointer\"\n [checked]=\"selectAll()\"\n (change)=\"toggleSelectAll($event)\"\n id=\"selectAllCheckbox\"\n />\n <label\n class=\"form-check-label small fw-semibold cursor-pointer user-select-none\"\n for=\"selectAllCheckbox\"\n >\n @if (headerCheckboxTemplate) {\n <ng-container\n *ngTemplateOutlet=\"headerCheckboxTemplate; context: { $implicit: selectAll() }\"\n ></ng-container>\n } @else {\n Select All\n }\n </label>\n </div>\n }\n <!-- Search Box -->\n @if (filter() && !filterInTrigger()) {\n <div class=\"input-group input-group-sm\">\n <span class=\"input-group-text bg-transparent border-end-0\">\n @if (filterIconTemplate) {\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n } @else {\n <i class=\"bi bi-search text-muted\"></i>\n }\n </span>\n <input\n #filterInput\n type=\"text\"\n class=\"form-control border-start-0\"\n [placeholder]=\"effectiveSearchPlaceholder()\"\n [value]=\"filterValue()\"\n (input)=\"onFilterChange($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n }\n </div>\n }\n\n <!-- Grouped Options Mode -->\n @if (group()) {\n @for (groupOption of filteredOptions(); track groupOption) {\n <div>\n <!-- Group Header -->\n <h6\n class=\"dropdown-header text-muted py-2 px-3 m-0 bg-light bg-opacity-75 d-flex align-items-center\"\n >\n @if (groupTemplate) {\n <ng-container\n *ngTemplateOutlet=\"groupTemplate; context: { $implicit: groupOption }\"\n ></ng-container>\n } @else {\n {{ resolveOptionGroupLabel(groupOption) }}\n }\n </h6>\n <!-- Group Items -->\n @for (option of resolveOptionGroupChildren(groupOption); track option) {\n <button\n type=\"button\"\n class=\"dropdown-item d-flex align-items-center py-2 px-3\"\n [class.active]=\"!multiple() && isSelected(option)\"\n [class.bg-light]=\"multiple() && isSelected(option)\"\n [class.fw-semibold]=\"multiple() && isSelected(option)\"\n [class.focus]=\"isOptionFocused(option)\"\n [class.bg-body-secondary]=\"isOptionFocused(option) && !isSelected(option)\"\n [class.disabled]=\"isOptionDisabled(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-checked]=\"multiple() ? isSelected(option) : null\"\n (click)=\"onOptionClick(option, $event)\"\n >\n <!-- Checkbox in Multiple Mode synced to selection -->\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"form-check-input me-2 mt-0\"\n style=\"pointer-events: none\"\n [checked]=\"isSelected(option)\"\n tabindex=\"-1\"\n />\n }\n @if (itemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: option }\"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabel(option) }}</span>\n }\n </button>\n }\n </div>\n }\n } @else {\n @for (option of filteredOptions(); track option; let i = $index) {\n <button\n type=\"button\"\n class=\"dropdown-item d-flex align-items-center py-2 px-3\"\n [class.active]=\"!multiple() && isSelected(option)\"\n [class.bg-light]=\"multiple() && isSelected(option)\"\n [class.fw-semibold]=\"multiple() && isSelected(option)\"\n [class.focus]=\"isOptionFocused(option)\"\n [class.bg-body-secondary]=\"isOptionFocused(option) && !isSelected(option)\"\n [class.disabled]=\"isOptionDisabled(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-checked]=\"multiple() ? isSelected(option) : null\"\n (click)=\"onOptionClick(option, $event)\"\n >\n <!-- Checkbox in Multiple Mode synced to selection -->\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"form-check-input me-2 mt-0\"\n style=\"pointer-events: none\"\n [checked]=\"isSelected(option)\"\n tabindex=\"-1\"\n />\n }\n @if (itemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: option }\"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabel(option) }}</span>\n }\n </button>\n }\n }\n\n <!-- Empty State Message -->\n @if (isOptionsEmpty()) {\n <div class=\"dropdown-item text-muted text-center py-3\">\n @if (emptyTemplate) {\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n } @else {\n <small>{{\n filterValue()\n ? emptyFilterMessage() || 'No results found'\n : emptyMessage() || 'No results found'\n }}</small>\n }\n </div>\n }\n </ng-template>\n\n @if (isModalMode()) {\n <!-- Bootstrap Modal Overlay -->\n @if (overlayVisible()) {\n <div\n class=\"modal fade show d-block\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n style=\"background-color: rgba(0, 0, 0, 0.45); z-index: 1075\"\n (click)=\"closeOverlay($event)\"\n >\n <div\n class=\"modal-dialog modal-dialog-centered modal-dialog-scrollable\"\n role=\"document\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"modal-content shadow\" [ngClass]=\"panelStyleClass()\" [ngStyle]=\"panelStyle()\">\n <!-- Modal Header -->\n <div class=\"modal-header bg-light bg-opacity-50 py-2 px-3\">\n <h6 class=\"modal-title m-0 fw-semibold text-truncate\">{{ effectivePopupTitle() }}</h6>\n <button\n type=\"button\"\n class=\"btn-close\"\n aria-label=\"Close\"\n (click)=\"closeOverlay($event)\"\n ></button>\n </div>\n\n <!-- Modal Body (Options Content) -->\n <div\n class=\"modal-body p-0\"\n #dropdownMenu\n role=\"listbox\"\n (scroll)=\"onOverlayScroll($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n </div>\n\n <!-- Modal Footer (Custom Template or Done Button) -->\n @if (footerTemplate || multiple()) {\n <div\n class=\"modal-footer p-2 bg-light bg-opacity-50 d-flex align-items-center justify-content-end\"\n >\n @if (footerTemplate) {\n <div class=\"w-100\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary px-3\"\n (click)=\"closeOverlay($event)\"\n >\n Done\n </button>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Standard Dropdown Menu -->\n <div\n #dropdownMenu\n class=\"dropdown-menu shadow-sm p-0\"\n [class.show]=\"overlayVisible()\"\n [ngStyle]=\"panelStyle()\"\n [ngClass]=\"panelStyleClass()\"\n [style.max-height]=\"scrollHeight()\"\n style=\"overflow-y: auto\"\n role=\"listbox\"\n (scroll)=\"onOverlayScroll($event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n\n <!-- Footer Template -->\n @if (footerTemplate) {\n <div class=\"p-2 border-top\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"amro93-ngb-select.mjs","sources":["../../../projects/ngb-select/src/lib/ngb-select.interface.ts","../../../projects/ngb-select/src/lib/ngb-select.component.ts","../../../projects/ngb-select/src/lib/ngb-select.component.html","../../../projects/ngb-select/src/amro93-ngb-select.ts"],"sourcesContent":["export type SelectSize = 'small' | 'medium' | 'large';\n\nexport type SelectDisplayMode = 'comma' | 'chip';\n\nexport type SelectVariant = 'filled' | 'outlined';\n\nexport type SelectFilterMatchMode = 'contains' | 'startsWith' | 'endsWith' | 'equals' | 'notEquals';\n\nexport type FocusOnOpenStrategy = 'always' | 'notSelected';\n\nexport type FloatLabelVariant = 'on' | 'in' | 'over';\n\nexport type DropdownDirection = 'auto' | 'up' | 'down' | 'top' | 'bottom';\nexport type DropdownPosition = DropdownDirection;\nexport type SelectDropdownPosition = DropdownDirection;\n\nexport interface SelectOption {\n label?: string;\n value?: any;\n disabled?: boolean;\n styleClass?: string;\n icon?: string;\n title?: string;\n items?: SelectOption[]; // For grouped options\n [key: string]: any; // Allow arbitrary custom metadata\n}\n\nexport interface SelectChangeEvent<T = any> {\n originalEvent: Event | null;\n value: T;\n}\n\nexport interface SelectFilterEvent {\n originalEvent: Event;\n filter: string;\n}\n\nexport interface SelectSelectAllChangeEvent {\n originalEvent: Event;\n checked: boolean;\n}\n\nexport interface SelectRemoveChipEvent {\n originalEvent: Event;\n value: any;\n}\n\nexport interface SelectLazyLoadEvent {\n first: number;\n last: number;\n [key: string]: any;\n}\n\nexport const NGB_SELECT_VERSION = '0.1.4';\n","import {\n Component,\n forwardRef,\n ElementRef,\n ViewChild,\n ContentChild,\n TemplateRef,\n HostListener,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n input,\n output,\n model,\n signal,\n computed,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport {\n SelectOption,\n SelectFilterMatchMode,\n SelectSize,\n SelectVariant,\n SelectDisplayMode,\n FocusOnOpenStrategy,\n FloatLabelVariant,\n SelectChangeEvent,\n SelectFilterEvent,\n SelectSelectAllChangeEvent,\n SelectRemoveChipEvent,\n SelectLazyLoadEvent,\n DropdownPosition,\n DropdownDirection,\n NGB_SELECT_VERSION,\n} from './ngb-select.interface';\n\n@Component({\n selector: 'ngb-select',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './ngb-select.component.html',\n styleUrls: ['./ngb-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgbSelectComponent),\n multi: true,\n },\n ],\n})\nexport class NgbSelectComponent implements ControlValueAccessor, OnInit, OnDestroy {\n public static readonly VERSION = NGB_SELECT_VERSION;\n\n // --- Basic & Data Inputs ---\n options = input<any[]>([]);\n optionLabel = input<string>('label');\n optionValue = input<string>('value');\n optionDisabled = input<string>('disabled');\n optionGroupLabel = input<string>('label');\n optionGroupChildren = input<string>('items');\n group = input<boolean>(false);\n dataKey = input<string | undefined>(undefined);\n placeholder = input<string | undefined>(undefined);\n\n // --- Multi-Select Inputs ---\n multiple = input<boolean>(false);\n display = input<SelectDisplayMode>('comma');\n showSelectAll = input<boolean>(false);\n maxSelectedLabels = input<number>(3);\n selectedItemsLabel = input<string>('{0} items selected');\n selectionLimit = input<number | undefined>(undefined);\n closeOnSelect = input<boolean>(false);\n\n // --- Filtering Inputs ---\n filter = input<boolean>(false);\n filterBy = input<string | undefined>(undefined);\n filterMatchMode = input<SelectFilterMatchMode>('contains');\n filterLocale = input<string | undefined>(undefined);\n filterNormalizeArabic = input<boolean>(true);\n filterPlaceholder = input<string | undefined>(undefined);\n searchPlaceholder = input<string | undefined>(undefined);\n filterInTrigger = input<boolean>(false);\n resetFilterOnHide = input<boolean>(false);\n emptyMessage = input<string>('No results found');\n emptyFilterMessage = input<string>('No results found');\n\n // --- State & Form Inputs ---\n disabled = model<boolean>(false);\n readonly = input<boolean>(false);\n loading = input<boolean>(false);\n showClear = input<boolean>(false);\n invalid = input<boolean>(false);\n floatLabel = input<boolean>(false);\n floatLabelVariant = input<FloatLabelVariant>('on');\n autofocus = input<boolean>(false);\n tabindex = input<number>(0);\n id = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n ariaLabelledBy = input<string | undefined>(undefined);\n dir = input<'ltr' | 'rtl' | 'auto' | undefined>(undefined);\n\n // --- Display & Styling Inputs ---\n dropdownPosition = input<DropdownPosition>('auto');\n dropdownDirection = input<DropdownDirection | undefined>(undefined);\n direction = input<DropdownDirection | undefined>(undefined);\n size = input<SelectSize | undefined>(undefined);\n variant = input<SelectVariant>('outlined');\n fluid = input<boolean>(false);\n scrollHeight = input<string>('200px');\n style = input<{ [klass: string]: any } | null | undefined>(undefined);\n styleClass = input<string | undefined>(undefined);\n panelStyle = input<{ [klass: string]: any } | null | undefined>(undefined);\n panelStyleClass = input<string | undefined>(undefined);\n appendTo = input<'body' | HTMLElement | string | undefined>(undefined);\n\n // --- Modal / Popup Window Inputs ---\n modal = input<boolean>(false);\n popup = input<boolean>(false);\n touchUI = input<boolean>(false);\n popupTitle = input<string | undefined>(undefined);\n modalTitle = input<string | undefined>(undefined);\n\n // --- Advanced Features ---\n editable = input<boolean>(false);\n maxLength = input<number | undefined>(undefined);\n selectOnFocus = input<boolean>(false);\n autoOptionFocus = input<boolean>(true);\n focusOnOpen = input<number | undefined>(undefined);\n focusOnOpenStrategy = input<FocusOnOpenStrategy>('always');\n lazy = input<boolean>(false);\n\n // --- Two-way Overlay Visibility Binding ---\n overlayVisible = model<boolean>(false);\n\n // --- Event Outputs ---\n onChange = output<SelectChangeEvent>();\n onFilter = output<SelectFilterEvent>();\n onFocus = output<Event>();\n onBlur = output<Event>();\n onShow = output<Event | null>();\n onHide = output<Event | null>();\n onClear = output<Event>();\n onSelectAllChange = output<SelectSelectAllChangeEvent>();\n onRemoveChip = output<SelectRemoveChipEvent>();\n onLazyLoad = output<SelectLazyLoadEvent>();\n\n // --- Custom Content Templates ---\n @ContentChild('item') itemTemplate?: TemplateRef<any>;\n @ContentChild('selectedItem') selectedItemTemplate?: TemplateRef<any>;\n @ContentChild('label') labelTemplate?: TemplateRef<any>;\n @ContentChild('chip') chipTemplate?: TemplateRef<any>;\n @ContentChild('headerCheckbox') headerCheckboxTemplate?: TemplateRef<any>;\n @ContentChild('header') headerTemplate?: TemplateRef<any>;\n @ContentChild('footer') footerTemplate?: TemplateRef<any>;\n @ContentChild('group') groupTemplate?: TemplateRef<any>;\n @ContentChild('empty') emptyTemplate?: TemplateRef<any>;\n @ContentChild('clearIcon') clearIconTemplate?: TemplateRef<any>;\n @ContentChild('dropdownIcon') dropdownIconTemplate?: TemplateRef<any>;\n @ContentChild('filterIcon') filterIconTemplate?: TemplateRef<any>;\n\n // --- View References ---\n @ViewChild('filterInput') filterInputElement?: ElementRef<HTMLInputElement>;\n @ViewChild('triggerFilterInput') triggerFilterInputElement?: ElementRef<HTMLInputElement>;\n @ViewChild('editableInput') editableInputElement?: ElementRef<HTMLInputElement>;\n @ViewChild('dropdownMenu') dropdownMenuElement?: ElementRef<HTMLDivElement>;\n\n effectiveSearchPlaceholder = computed(() => {\n return this.searchPlaceholder() || this.filterPlaceholder() || this.placeholder() || 'Search...';\n });\n\n effectiveDropdownPosition = computed<DropdownPosition>(() => {\n return this.dropdownDirection() || this.direction() || this.dropdownPosition() || 'auto';\n });\n\n currentPlacement = signal<'bottom' | 'top'>('bottom');\n isDropup = computed(() => this.currentPlacement() === 'top');\n\n isModalMode = computed(() => this.modal() || this.popup() || this.touchUI());\n effectivePopupTitle = computed(() => {\n return this.popupTitle() || this.modalTitle() || this.placeholder() || 'Select an Option';\n });\n\n effectiveFilterValue = computed(() => {\n return this.overlayVisible()\n ? this.filterValue()\n : this.hasSelectedValue()\n ? ''\n : this.filterValue();\n });\n\n // --- Internal State ---\n public value = signal<any>(null);\n public filteredOptions = signal<any[]>([]);\n public filterValue = signal<string>('');\n public focusedIndex = signal<number>(-1);\n public selectAll = signal<boolean | null>(null);\n\n // --- ControlValueAccessor Callbacks ---\n private onModelChange: (value: any) => void = () => {};\n private onModelTouched: () => void = () => {};\n\n constructor(\n public elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n ) {\n effect(() => {\n // React to options or group changes\n this.options();\n this.group();\n this.updateFilteredOptions();\n this.updateSelectAllState();\n });\n\n effect(() => {\n // React to overlayVisible changes\n const visible = this.overlayVisible();\n if (visible) {\n this.openOverlay();\n } else {\n this.closeOverlay();\n }\n });\n }\n\n ngOnInit(): void {\n if (this.autofocus()) {\n setTimeout(() => this.focus());\n }\n }\n\n ngOnDestroy(): void {\n this.cleanAppendTo();\n }\n\n safeOptions = computed(() => {\n const opts = this.options();\n return Array.isArray(opts) ? opts : [];\n });\n\n writeValue(obj: any): void {\n if (this.multiple()) {\n this.value.set(Array.isArray(obj) ? [...obj] : []);\n } else {\n this.value.set(obj !== undefined ? obj : null);\n }\n this.updateSelectAllState();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onModelTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n this.cdr.markForCheck();\n }\n\n hasSelectedValue = computed(() => {\n const val = this.value();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined && val !== '';\n });\n\n getDisplayLabel(): string {\n if (!this.hasSelectedValue()) {\n return '';\n }\n\n if (this.multiple()) {\n const selectedList = Array.isArray(this.value()) ? this.value() : [];\n if (selectedList.length > this.maxSelectedLabels()) {\n return this.selectedItemsLabel().replace('{0}', String(selectedList.length));\n }\n return selectedList.map((val: any) => this.resolveOptionLabelByValue(val)).join(', ');\n }\n\n if (this.editable() && typeof this.value() === 'string') {\n return this.value();\n }\n\n return this.resolveOptionLabelByValue(this.value());\n }\n\n resolveOptionLabelByValue(val: any): string {\n const selectedOpt = this.findOptionByValue(val);\n if (selectedOpt !== undefined && selectedOpt !== null) {\n return this.resolveOptionLabel(selectedOpt);\n }\n return this.resolveOptionLabel(val);\n }\n\n resolveOptionLabel(option: any): string {\n if (option === null || option === undefined) return '';\n if (typeof option === 'object') {\n if (this.optionLabel() && option[this.optionLabel()] !== undefined) {\n return String(option[this.optionLabel()]);\n }\n if (option.label !== undefined) {\n return String(option.label);\n }\n return JSON.stringify(option);\n }\n return String(option);\n }\n\n resolveOptionValue(option: any): any {\n if (option === null || option === undefined) return null;\n if (typeof option === 'object') {\n if (this.optionValue() && option[this.optionValue()] !== undefined) {\n return option[this.optionValue()];\n }\n if (option.value !== undefined) {\n return option.value;\n }\n }\n return option;\n }\n\n isOptionDisabled(option: any): boolean {\n if (this.disabled()) return true;\n if (option && typeof option === 'object') {\n if (this.optionDisabled() && option[this.optionDisabled()] !== undefined) {\n return Boolean(option[this.optionDisabled()]);\n }\n return Boolean(option.disabled);\n }\n return false;\n }\n\n resolveOptionGroupLabel(groupOption: any): string {\n if (!groupOption) return '';\n if (this.optionGroupLabel() && groupOption[this.optionGroupLabel()] !== undefined) {\n return String(groupOption[this.optionGroupLabel()]);\n }\n return String(groupOption.label || '');\n }\n\n resolveOptionGroupChildren(groupOption: any): any[] {\n if (!groupOption) return [];\n if (this.optionGroupChildren() && Array.isArray(groupOption[this.optionGroupChildren()])) {\n return groupOption[this.optionGroupChildren()];\n }\n return Array.isArray(groupOption.items) ? groupOption.items : [];\n }\n\n findOptionByValue(val: any): any {\n if (val === null || val === undefined) return undefined;\n if (this.group()) {\n for (const grp of this.safeOptions()) {\n const children = this.resolveOptionGroupChildren(grp);\n const match = children.find((opt) =>\n this.areValuesEqual(this.resolveOptionValue(opt), val),\n );\n if (match !== undefined) return match;\n }\n return undefined;\n }\n return this.safeOptions().find((opt) => this.areValuesEqual(this.resolveOptionValue(opt), val));\n }\n\n areValuesEqual(val1: any, val2: any): boolean {\n if (val1 === val2) return true;\n if (val1 === null || val1 === undefined || val2 === null || val2 === undefined) return false;\n if (typeof val1 === 'object' && typeof val2 === 'object') {\n const dataKey = this.dataKey();\n if (dataKey && val1[dataKey] !== undefined && val2[dataKey] !== undefined) {\n return val1[dataKey] === val2[dataKey];\n }\n if (\n this.optionValue() &&\n val1[this.optionValue()] !== undefined &&\n val2[this.optionValue()] !== undefined\n ) {\n return val1[this.optionValue()] === val2[this.optionValue()];\n }\n try {\n return JSON.stringify(val1) === JSON.stringify(val2);\n } catch {\n return false;\n }\n }\n return false;\n }\n\n isSelected(option: any): boolean {\n const optVal = this.resolveOptionValue(option);\n if (this.multiple() && Array.isArray(this.value())) {\n return this.value().some((item: any) => this.areValuesEqual(item, optVal));\n }\n return this.areValuesEqual(this.value(), optVal);\n }\n\n isOptionsEmpty(): boolean {\n if (this.filteredOptions().length === 0) return true;\n if (this.group()) {\n return this.filteredOptions().every((grp) => this.resolveOptionGroupChildren(grp).length === 0);\n }\n return false;\n }\n\n onTriggerClick(event: MouseEvent): void {\n if (this.disabled() || this.readonly()) return;\n this.toggleOverlay(event);\n }\n\n calculateDropdownPosition(): void {\n const pref = this.effectiveDropdownPosition();\n if (pref === 'top' || pref === 'up') {\n this.currentPlacement.set('top');\n return;\n }\n if (pref === 'bottom' || pref === 'down') {\n this.currentPlacement.set('bottom');\n return;\n }\n\n // Auto positioning based on viewport space\n if (typeof window === 'undefined' || !this.elementRef?.nativeElement) {\n this.currentPlacement.set('bottom');\n return;\n }\n\n const triggerRect = this.elementRef.nativeElement.getBoundingClientRect();\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n\n let panelHeight = 200;\n if (this.dropdownMenuElement?.nativeElement?.offsetHeight) {\n panelHeight = this.dropdownMenuElement.nativeElement.offsetHeight;\n } else if (this.scrollHeight()) {\n const parsed = parseInt(this.scrollHeight(), 10);\n if (!isNaN(parsed) && parsed > 0) {\n panelHeight = parsed;\n }\n }\n\n if (spaceBelow < panelHeight && spaceAbove > spaceBelow) {\n this.currentPlacement.set('top');\n } else {\n this.currentPlacement.set('bottom');\n }\n }\n\n toggleOverlay(event?: Event): void {\n if (this.overlayVisible()) {\n this.closeOverlay(event);\n } else {\n this.openOverlay(event);\n }\n }\n\n openOverlay(event?: Event): void {\n if (this.disabled() || this.readonly() || this.overlayVisible()) return;\n\n this.calculateDropdownPosition();\n this.overlayVisible.set(true);\n this.onShow.emit(event || null);\n this.onModelTouched();\n\n setTimeout(() => {\n this.calculateDropdownPosition();\n if (this.filterInTrigger() && this.triggerFilterInputElement) {\n this.triggerFilterInputElement.nativeElement.focus();\n } else if (this.filter() && this.filterInputElement) {\n this.filterInputElement.nativeElement.focus();\n }\n this.handleFocusOnOpen();\n this.handleAppendTo();\n this.cdr.markForCheck();\n });\n }\n\n closeOverlay(event?: Event): void {\n if (!this.overlayVisible()) return;\n\n this.overlayVisible.set(false);\n this.onHide.emit(event || null);\n\n if (this.resetFilterOnHide() && this.filterValue()) {\n this.filterValue.set('');\n this.updateFilteredOptions();\n }\n this.focusedIndex.set(-1);\n this.cdr.markForCheck();\n }\n\n private handleFocusOnOpen(): void {\n const flatItems = this.getFlatFilteredOptions();\n let targetIndex = -1;\n\n const hasSelection = this.hasSelectedValue();\n const selectedIdx = flatItems.findIndex((opt) => this.isSelected(opt));\n\n const focusOnOpen = this.focusOnOpen();\n if (\n focusOnOpen !== undefined &&\n focusOnOpen >= 0 &&\n focusOnOpen < flatItems.length\n ) {\n if (this.focusOnOpenStrategy() === 'notSelected' && hasSelection && selectedIdx !== -1) {\n targetIndex = selectedIdx;\n } else {\n targetIndex = focusOnOpen;\n }\n } else if (this.autoOptionFocus()) {\n targetIndex = selectedIdx !== -1 ? selectedIdx : 0;\n }\n\n if (targetIndex !== -1 && this.dropdownMenuElement) {\n this.focusedIndex.set(targetIndex);\n const elements = this.dropdownMenuElement.nativeElement.querySelectorAll(\n '.dropdown-item[role=\"option\"]',\n );\n const targetElement = elements[targetIndex] as HTMLElement;\n if (targetElement && typeof targetElement.scrollIntoView === 'function') {\n targetElement.scrollIntoView({ block: 'nearest', inline: 'start' });\n }\n }\n }\n\n onOptionClick(option: any, event: Event): void {\n if (this.isOptionDisabled(option)) return;\n\n const val = this.resolveOptionValue(option);\n\n if (this.multiple()) {\n let currentSelection: any[] = Array.isArray(this.value()) ? [...this.value()] : [];\n const selectedIndex = currentSelection.findIndex((item) => this.areValuesEqual(item, val));\n\n if (selectedIndex !== -1) {\n currentSelection.splice(selectedIndex, 1);\n } else {\n if (this.selectionLimit() !== undefined && currentSelection.length >= this.selectionLimit()!) {\n return;\n }\n currentSelection.push(val);\n }\n\n this.updateModel(currentSelection, event);\n this.updateSelectAllState();\n\n if (this.closeOnSelect()) {\n this.closeOverlay(event);\n }\n } else {\n this.updateModel(val, event);\n if (this.filterInTrigger()) {\n this.filterValue.set('');\n this.updateFilteredOptions();\n if (this.triggerFilterInputElement) {\n this.triggerFilterInputElement.nativeElement.value = '';\n }\n }\n this.closeOverlay(event);\n }\n }\n\n removeChip(val: any, event: Event): void {\n event.stopPropagation();\n if (this.disabled() || this.readonly()) return;\n\n if (Array.isArray(this.value())) {\n const nextVal = this.value().filter((item: any) => !this.areValuesEqual(item, val));\n this.updateModel(nextVal, event);\n this.onRemoveChip.emit({ originalEvent: event, value: val });\n this.updateSelectAllState();\n }\n }\n\n toggleSelectAll(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n const targetOptions = this.getFlatFilteredOptions().filter(\n (opt) => !this.isOptionDisabled(opt),\n );\n\n if (checked) {\n let allValues = targetOptions.map((opt) => this.resolveOptionValue(opt));\n if (this.selectionLimit() !== undefined) {\n allValues = allValues.slice(0, this.selectionLimit());\n }\n this.value.set(allValues);\n } else {\n this.value.set([]);\n }\n\n this.selectAll.set(checked);\n this.updateModel(this.value(), event);\n this.onSelectAllChange.emit({ originalEvent: event, checked });\n }\n\n updateSelectAllState(): void {\n if (!this.multiple() || !this.showSelectAll()) return;\n const targetOptions = this.getFlatFilteredOptions().filter(\n (opt) => !this.isOptionDisabled(opt),\n );\n if (targetOptions.length === 0) {\n this.selectAll.set(false);\n return;\n }\n this.selectAll.set(targetOptions.every((opt) => this.isSelected(opt)));\n }\n\n private updateModel(val: any, event: Event | null): void {\n this.value.set(val);\n this.onModelChange(this.value());\n this.onChange.emit({\n originalEvent: event,\n value: this.value(),\n });\n this.cdr.markForCheck();\n }\n\n onClearClick(event: Event): void {\n event.stopPropagation();\n if (this.disabled() || this.readonly()) return;\n\n const clearedValue = this.multiple() ? [] : null;\n this.updateModel(clearedValue, event);\n this.updateSelectAllState();\n this.onClear.emit(event);\n }\n\n onEditableInput(event: Event): void {\n const inputVal = (event.target as HTMLInputElement).value;\n this.updateModel(inputVal, event);\n }\n\n onEditableFocus(event: FocusEvent): void {\n if (this.selectOnFocus() && this.editableInputElement) {\n this.editableInputElement.nativeElement.select();\n }\n this.onFocus.emit(event);\n }\n\n onFilterChange(event: Event): void {\n const raw = (event.target as HTMLInputElement).value || '';\n this.filterValue.set(raw);\n this.updateFilteredOptions();\n this.updateSelectAllState();\n this.onFilter.emit({\n originalEvent: event,\n filter: this.filterValue(),\n });\n }\n\n updateFilteredOptions(): void {\n if (!this.filterValue()) {\n this.filteredOptions.set([...this.safeOptions()]);\n return;\n }\n\n const query = this.filterValue();\n\n if (this.group()) {\n this.filteredOptions.set(this.safeOptions()\n .map((group) => {\n const children = this.resolveOptionGroupChildren(group);\n const filteredChildren = children.filter((opt) => this.matchesFilter(opt, query));\n return {\n ...group,\n [this.optionGroupChildren()]: filteredChildren,\n };\n })\n .filter((group) => this.resolveOptionGroupChildren(group).length > 0));\n } else {\n this.filteredOptions.set(this.safeOptions().filter((opt) => this.matchesFilter(opt, query)));\n }\n }\n\n private matchesFilter(option: any, query: string): boolean {\n if (!option) return false;\n const fieldsToSearch = this.getFilterFields();\n\n return fieldsToSearch.some((field) => {\n const val = this.resolveFieldData(option, field);\n if (val === null || val === undefined) return false;\n\n const stringVal = String(val);\n return this.compareStrings(stringVal, query, this.filterMatchMode(), this.filterLocale());\n });\n }\n\n private getFilterFields(): string[] {\n if (this.filterBy()) {\n return this.filterBy()!.split(',').map((f) => f.trim());\n }\n return [this.optionLabel() || 'label'];\n }\n\n private resolveFieldData(data: any, field: string): any {\n if (data && field) {\n if (field.indexOf('.') === -1) {\n return data[field] !== undefined\n ? data[field]\n : typeof data === 'string' || typeof data === 'number'\n ? data\n : null;\n }\n const fields = field.split('.');\n let value = data;\n for (const f of fields) {\n if (value === null || value === undefined) return null;\n value = value[f];\n }\n return value;\n }\n return null;\n }\n\n private normalizeArabicText(text: string): string {\n return text\n .replace(/[\\u064B-\\u065F\\u0670\\u0640]/g, '') // Remove Arabic Tashkeel diacritics & Tatweel\n .replace(/[إأآا]/g, 'ا') // Normalize Alef forms\n .replace(/[يى]/g, 'ي') // Normalize Yaa & Alef Maksura\n .replace(/[ة]/g, 'ه'); // Normalize Taa Marbuta\n }\n\n private compareStrings(\n val: string,\n query: string,\n mode: SelectFilterMatchMode,\n locale?: string,\n ): boolean {\n let v = locale ? val.toLocaleLowerCase(locale) : val.toLowerCase();\n let q = locale ? query.toLocaleLowerCase(locale) : query.toLowerCase();\n\n if (this.filterNormalizeArabic()) {\n v = this.normalizeArabicText(v);\n q = this.normalizeArabicText(q);\n }\n\n switch (mode) {\n case 'startsWith':\n return v.startsWith(q);\n case 'endsWith':\n return v.endsWith(q);\n case 'equals':\n return v === q;\n case 'notEquals':\n return v !== q;\n case 'contains':\n default:\n return v.includes(q);\n }\n }\n\n public getFlatFilteredOptions(): any[] {\n if (this.group()) {\n const flat: any[] = [];\n for (const grp of this.filteredOptions()) {\n flat.push(...this.resolveOptionGroupChildren(grp));\n }\n return flat;\n }\n return this.filteredOptions();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.overlayVisible()) {\n this.openOverlay(event);\n } else {\n this.navigateOption(1);\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.overlayVisible()) {\n this.openOverlay(event);\n } else {\n this.navigateOption(-1);\n }\n break;\n\n case 'Enter':\n case ' ':\n if (\n event.key === ' ' &&\n ((this.filter() && this.filterInputElement?.nativeElement === document.activeElement) ||\n (this.filterInTrigger() &&\n this.triggerFilterInputElement?.nativeElement === document.activeElement))\n ) {\n return;\n }\n event.preventDefault();\n if (!this.overlayVisible()) {\n this.openOverlay(event);\n } else {\n const flatItems = this.getFlatFilteredOptions();\n if (this.focusedIndex() >= 0 && this.focusedIndex() < flatItems.length) {\n this.onOptionClick(flatItems[this.focusedIndex()], event);\n }\n }\n break;\n\n case 'Escape':\n if (this.overlayVisible()) {\n event.preventDefault();\n this.closeOverlay(event);\n }\n break;\n\n case 'Tab':\n if (this.overlayVisible()) {\n this.closeOverlay(event);\n }\n break;\n }\n }\n\n onFilterKeydown(event: KeyboardEvent): void {\n if (\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'Enter' ||\n event.key === 'Escape'\n ) {\n this.onKeydown(event);\n }\n }\n\n private navigateOption(step: number): void {\n const flatItems = this.getFlatFilteredOptions();\n if (flatItems.length === 0) return;\n\n let nextIdx = this.focusedIndex() + step;\n if (nextIdx < 0) nextIdx = 0;\n if (nextIdx >= flatItems.length) nextIdx = flatItems.length - 1;\n\n while (\n nextIdx >= 0 &&\n nextIdx < flatItems.length &&\n this.isOptionDisabled(flatItems[nextIdx])\n ) {\n nextIdx += step;\n }\n\n if (nextIdx >= 0 && nextIdx < flatItems.length) {\n this.focusedIndex.set(nextIdx);\n if (this.dropdownMenuElement) {\n const elements = this.dropdownMenuElement.nativeElement.querySelectorAll(\n '.dropdown-item[role=\"option\"]',\n );\n const targetElement = elements[nextIdx] as HTMLElement;\n if (targetElement && typeof targetElement.scrollIntoView === 'function') {\n targetElement.scrollIntoView({ block: 'nearest', inline: 'start' });\n }\n }\n }\n }\n\n isOptionFocused(option: any): boolean {\n if (this.focusedIndex() < 0) return false;\n const flat = this.getFlatFilteredOptions();\n if (this.focusedIndex() >= flat.length) return false;\n return this.areValuesEqual(\n this.resolveOptionValue(flat[this.focusedIndex()]),\n this.resolveOptionValue(option),\n );\n }\n\n onOverlayScroll(event: Event): void {\n if (!this.lazy()) return;\n const target = event.target as HTMLElement;\n if (target.scrollTop + target.clientHeight >= target.scrollHeight - 10) {\n const flat = this.getFlatFilteredOptions();\n this.onLazyLoad.emit({\n first: flat.length,\n last: flat.length + 10,\n });\n }\n }\n\n private handleAppendTo(): void {\n const appendTo = this.appendTo();\n if (!appendTo || !this.dropdownMenuElement) return;\n if (appendTo === 'body') {\n document.body.appendChild(this.dropdownMenuElement.nativeElement);\n this.repositionOverlay();\n } else if (appendTo instanceof HTMLElement) {\n appendTo.appendChild(this.dropdownMenuElement.nativeElement);\n this.repositionOverlay();\n }\n }\n\n private repositionOverlay(): void {\n if (!this.dropdownMenuElement || this.isModalMode()) return;\n this.calculateDropdownPosition();\n const triggerRect = this.elementRef.nativeElement.getBoundingClientRect();\n const dropdown = this.dropdownMenuElement.nativeElement;\n dropdown.style.position = 'fixed';\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.width = `${triggerRect.width}px`;\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.maxWidth = `${triggerRect.width}px`;\n dropdown.style.boxSizing = 'border-box';\n dropdown.style.zIndex = '1060';\n\n if (this.isDropup()) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + 2}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + 2}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private cleanAppendTo(): void {\n if (this.appendTo() && this.dropdownMenuElement) {\n const el = this.dropdownMenuElement.nativeElement;\n if (el.parentElement) {\n el.parentElement.removeChild(el);\n }\n }\n }\n\n onTriggerFocus(event: FocusEvent): void {\n this.onFocus.emit(event);\n }\n\n onTriggerBlur(event: FocusEvent): void {\n this.onBlur.emit(event);\n }\n\n public focus(): void {\n if (this.filterInTrigger() && this.triggerFilterInputElement) {\n this.triggerFilterInputElement.nativeElement.focus();\n } else if (this.editable() && !this.multiple() && this.editableInputElement) {\n this.editableInputElement.nativeElement.focus();\n } else {\n const trigger = this.elementRef.nativeElement.querySelector('.form-select');\n if (trigger) trigger.focus();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.overlayVisible()) {\n this.calculateDropdownPosition();\n if (this.appendTo()) {\n this.repositionOverlay();\n }\n }\n }\n\n @HostListener('window:scroll')\n onWindowScroll(): void {\n if (this.overlayVisible()) {\n this.calculateDropdownPosition();\n if (this.appendTo()) {\n this.repositionOverlay();\n }\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.overlayVisible() && !this.elementRef.nativeElement.contains(event.target)) {\n if (\n this.dropdownMenuElement &&\n this.dropdownMenuElement.nativeElement.contains(event.target as Node)\n ) {\n return;\n }\n this.closeOverlay(event);\n }\n }\n}\n","<div\n class=\"ngb-select-container position-relative\"\n [class.form-floating]=\"floatLabel()\"\n [class.float-variant-on]=\"floatLabel() && floatLabelVariant() === 'on'\"\n [class.float-variant-in]=\"floatLabel() && floatLabelVariant() === 'in'\"\n [class.float-variant-over]=\"floatLabel() && floatLabelVariant() === 'over'\"\n [class.floating-active]=\"hasSelectedValue() || overlayVisible()\"\n [class.dropup]=\"isDropup()\"\n [class.dropdown-up]=\"isDropup()\"\n [class.w-100]=\"fluid()\"\n [attr.dir]=\"dir() || null\"\n [ngStyle]=\"style()\"\n [ngClass]=\"styleClass()\"\n (keydown)=\"onKeydown($event)\"\n>\n <!-- Select Trigger Box -->\n <div\n class=\"form-select d-flex align-items-center justify-content-between\"\n [class.is-invalid]=\"invalid()\"\n [class.disabled]=\"disabled()\"\n [class.form-select-sm]=\"size() === 'small'\"\n [class.form-select-lg]=\"size() === 'large'\"\n [class.bg-light]=\"variant() === 'filled'\"\n [attr.id]=\"id()\"\n [attr.tabindex]=\"disabled() ? -1 : tabindex()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.aria-expanded]=\"overlayVisible()\"\n [attr.aria-haspopup]=\"'listbox'\"\n role=\"combobox\"\n (click)=\"onTriggerClick($event)\"\n (focus)=\"onTriggerFocus($event)\"\n (blur)=\"onTriggerBlur($event)\"\n >\n <!-- Selected Value / Input / Chips Area -->\n <span class=\"text-truncate flex-grow-1 me-2 d-flex flex-wrap align-items-center gap-1\">\n <!-- Filter directly in Trigger Box -->\n @if (filterInTrigger()) {\n <!-- Chips in multiple mode when filterInTrigger is active -->\n @if (multiple() && display() === 'chip' && hasSelectedValue()) {\n @for (val of value(); track val) {\n <span\n class=\"badge bg-light text-dark border d-inline-flex align-items-center gap-1 py-1 px-2\"\n >\n @if (chipTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n chipTemplate;\n context: { $implicit: findOptionByValue(val) ?? val, value: val }\n \"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabelByValue(val) }}</span>\n }\n @if (!disabled() && !readonly()) {\n <i\n class=\"bi bi-x ms-1 cursor-pointer fw-bold\"\n (click)=\"removeChip(val, $event)\"\n ></i>\n }\n </span>\n }\n }\n <!-- Search Filter Input embedded inside the trigger -->\n <input\n #triggerFilterInput\n type=\"text\"\n class=\"form-control border-0 bg-transparent p-0 shadow-none flex-grow-1\"\n style=\"min-width: 80px\"\n [class.form-control-sm]=\"size() === 'small'\"\n [class.form-control-lg]=\"size() === 'large'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [value]=\"effectiveFilterValue()\"\n [placeholder]=\"\n multiple() && hasSelectedValue()\n ? ''\n : hasSelectedValue() && !overlayVisible()\n ? getDisplayLabel()\n : effectiveSearchPlaceholder()\n \"\n (input)=\"onFilterChange($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n (focus)=\"openOverlay($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <!-- Editable Input (Single mode only) -->\n @if (editable() && !multiple()) {\n <input\n #editableInput\n type=\"text\"\n class=\"form-control border-0 bg-transparent p-0 shadow-none\"\n [class.form-control-sm]=\"size() === 'small'\"\n [class.form-control-lg]=\"size() === 'large'\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [attr.maxlength]=\"maxLength()\"\n [value]=\"getDisplayLabel()\"\n [placeholder]=\"placeholder() || ''\"\n (input)=\"onEditableInput($event)\"\n (focus)=\"onEditableFocus($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <!-- Multi-Select Chips Display Mode -->\n @if (multiple() && display() === 'chip' && hasSelectedValue()) {\n @for (val of value(); track val) {\n <span\n class=\"badge bg-light text-dark border d-inline-flex align-items-center gap-1 py-1 px-2\"\n >\n @if (chipTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n chipTemplate;\n context: { $implicit: findOptionByValue(val) ?? val, value: val }\n \"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabelByValue(val) }}</span>\n }\n @if (!disabled() && !readonly()) {\n <i\n class=\"bi bi-x ms-1 cursor-pointer fw-bold\"\n (click)=\"removeChip(val, $event)\"\n ></i>\n }\n </span>\n }\n } @else {\n @if (hasSelectedValue()) {\n @if (selectedItemTemplate || labelTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n selectedItemTemplate || labelTemplate;\n context: { $implicit: findOptionByValue(value()) ?? value(), value: value() }\n \"\n ></ng-container>\n } @else {\n <span>{{ getDisplayLabel() }}</span>\n }\n } @else {\n <span class=\"text-muted\">{{ floatLabel() ? '' : placeholder() || '' }}</span>\n }\n }\n <!-- Standard Single or Comma Multi-Select Text -->\n }\n }\n </span>\n\n <!-- Icons & Spinners Area -->\n <div class=\"d-flex align-items-center flex-shrink-0 gap-1 ms-auto\">\n <!-- Clear Icon -->\n @if (showClear() && hasSelectedValue() && !disabled() && !readonly()) {\n <span\n class=\"ngb-select-clear-icon text-muted me-1\"\n (click)=\"onClearClick($event)\"\n title=\"Clear\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Clear value\"\n >\n @if (clearIconTemplate) {\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n } @else {\n <i class=\"bi bi-x-circle-fill\"></i>\n }\n </span>\n }\n\n <!-- Loading Spinner -->\n @if (loading()) {\n <div class=\"spinner-border spinner-border-sm text-secondary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n }\n\n <!-- Dropdown Caret Icon -->\n @if (!loading()) {\n <span class=\"ngb-select-dropdown-icon text-secondary\">\n @if (dropdownIconTemplate) {\n <ng-container *ngTemplateOutlet=\"dropdownIconTemplate\"></ng-container>\n } @else {\n <i class=\"bi bi-chevron-down\" [class.rotate-180]=\"overlayVisible()\"></i>\n }\n </span>\n }\n </div>\n </div>\n\n <!-- Float Label Support -->\n @if (floatLabel() && placeholder()) {\n <label [attr.for]=\"id()\">{{ placeholder() }}</label>\n }\n\n <ng-template #dropdownContent>\n <!-- Header Template -->\n @if (headerTemplate) {\n <div class=\"p-2 border-bottom\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </div>\n }\n\n <!-- Header: Select All Checkbox & Search / Filter Box -->\n @if ((filter() && !filterInTrigger()) || (multiple() && showSelectAll())) {\n <div class=\"p-2 border-bottom bg-light bg-opacity-50\">\n <!-- Select All Checkbox -->\n @if (multiple() && showSelectAll()) {\n <div class=\"d-flex align-items-center mb-2 px-1\">\n <input\n type=\"checkbox\"\n class=\"form-check-input me-2 mt-0 cursor-pointer\"\n [checked]=\"selectAll()\"\n (change)=\"toggleSelectAll($event)\"\n id=\"selectAllCheckbox\"\n />\n <label\n class=\"form-check-label small fw-semibold cursor-pointer user-select-none\"\n for=\"selectAllCheckbox\"\n >\n @if (headerCheckboxTemplate) {\n <ng-container\n *ngTemplateOutlet=\"headerCheckboxTemplate; context: { $implicit: selectAll() }\"\n ></ng-container>\n } @else {\n Select All\n }\n </label>\n </div>\n }\n <!-- Search Box -->\n @if (filter() && !filterInTrigger()) {\n <div class=\"input-group input-group-sm\">\n <span class=\"input-group-text bg-transparent border-end-0\">\n @if (filterIconTemplate) {\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\n } @else {\n <i class=\"bi bi-search text-muted\"></i>\n }\n </span>\n <input\n #filterInput\n type=\"text\"\n class=\"form-control border-start-0\"\n [placeholder]=\"effectiveSearchPlaceholder()\"\n [value]=\"filterValue()\"\n (input)=\"onFilterChange($event)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n }\n </div>\n }\n\n <!-- Grouped Options Mode -->\n @if (group()) {\n @for (groupOption of filteredOptions(); track groupOption) {\n <div>\n <!-- Group Header -->\n <h6\n class=\"dropdown-header text-muted py-2 px-3 m-0 bg-light bg-opacity-75 d-flex align-items-center\"\n >\n @if (groupTemplate) {\n <ng-container\n *ngTemplateOutlet=\"groupTemplate; context: { $implicit: groupOption }\"\n ></ng-container>\n } @else {\n {{ resolveOptionGroupLabel(groupOption) }}\n }\n </h6>\n <!-- Group Items -->\n @for (option of resolveOptionGroupChildren(groupOption); track option) {\n <button\n type=\"button\"\n class=\"dropdown-item d-flex align-items-center py-2 px-3\"\n [class.active]=\"!multiple() && isSelected(option)\"\n [class.bg-light]=\"multiple() && isSelected(option)\"\n [class.fw-semibold]=\"multiple() && isSelected(option)\"\n [class.focus]=\"isOptionFocused(option)\"\n [class.bg-body-secondary]=\"isOptionFocused(option) && !isSelected(option)\"\n [class.disabled]=\"isOptionDisabled(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-checked]=\"multiple() ? isSelected(option) : null\"\n (click)=\"onOptionClick(option, $event)\"\n >\n <!-- Checkbox in Multiple Mode synced to selection -->\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"form-check-input me-2 mt-0\"\n style=\"pointer-events: none\"\n [checked]=\"isSelected(option)\"\n tabindex=\"-1\"\n />\n }\n @if (itemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: option }\"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabel(option) }}</span>\n }\n </button>\n }\n </div>\n }\n } @else {\n @for (option of filteredOptions(); track option; let i = $index) {\n <button\n type=\"button\"\n class=\"dropdown-item d-flex align-items-center py-2 px-3\"\n [class.active]=\"!multiple() && isSelected(option)\"\n [class.bg-light]=\"multiple() && isSelected(option)\"\n [class.fw-semibold]=\"multiple() && isSelected(option)\"\n [class.focus]=\"isOptionFocused(option)\"\n [class.bg-body-secondary]=\"isOptionFocused(option) && !isSelected(option)\"\n [class.disabled]=\"isOptionDisabled(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-checked]=\"multiple() ? isSelected(option) : null\"\n (click)=\"onOptionClick(option, $event)\"\n >\n <!-- Checkbox in Multiple Mode synced to selection -->\n @if (multiple()) {\n <input\n type=\"checkbox\"\n class=\"form-check-input me-2 mt-0\"\n style=\"pointer-events: none\"\n [checked]=\"isSelected(option)\"\n tabindex=\"-1\"\n />\n }\n @if (itemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: option }\"\n ></ng-container>\n } @else {\n <span>{{ resolveOptionLabel(option) }}</span>\n }\n </button>\n }\n }\n\n <!-- Empty State Message -->\n @if (isOptionsEmpty()) {\n <div class=\"dropdown-item text-muted text-center py-3\">\n @if (emptyTemplate) {\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n } @else {\n <small>{{\n filterValue()\n ? emptyFilterMessage() || 'No results found'\n : emptyMessage() || 'No results found'\n }}</small>\n }\n </div>\n }\n </ng-template>\n\n @if (isModalMode()) {\n <!-- Bootstrap Modal Overlay -->\n @if (overlayVisible()) {\n <div\n class=\"modal fade show d-block\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n style=\"background-color: rgba(0, 0, 0, 0.45); z-index: 1075\"\n (click)=\"closeOverlay($event)\"\n >\n <div\n class=\"modal-dialog modal-dialog-centered modal-dialog-scrollable\"\n role=\"document\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"modal-content shadow\" [ngClass]=\"panelStyleClass()\" [ngStyle]=\"panelStyle()\">\n <!-- Modal Header -->\n <div class=\"modal-header bg-light bg-opacity-50 py-2 px-3\">\n <h6 class=\"modal-title m-0 fw-semibold text-truncate\">{{ effectivePopupTitle() }}</h6>\n <button\n type=\"button\"\n class=\"btn-close\"\n aria-label=\"Close\"\n (click)=\"closeOverlay($event)\"\n ></button>\n </div>\n\n <!-- Modal Body (Options Content) -->\n <div\n class=\"modal-body p-0\"\n #dropdownMenu\n role=\"listbox\"\n (scroll)=\"onOverlayScroll($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n </div>\n\n <!-- Modal Footer (Custom Template or Done Button) -->\n @if (footerTemplate || multiple()) {\n <div\n class=\"modal-footer p-2 bg-light bg-opacity-50 d-flex align-items-center justify-content-end\"\n >\n @if (footerTemplate) {\n <div class=\"w-100\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary px-3\"\n (click)=\"closeOverlay($event)\"\n >\n Done\n </button>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n } @else {\n <!-- Standard Dropdown Menu -->\n <div\n #dropdownMenu\n class=\"dropdown-menu shadow-sm p-0\"\n [class.show]=\"overlayVisible()\"\n [ngStyle]=\"panelStyle()\"\n [ngClass]=\"panelStyleClass()\"\n [style.max-height]=\"scrollHeight()\"\n style=\"overflow-y: auto\"\n role=\"listbox\"\n (scroll)=\"onOverlayScroll($event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n\n <!-- Footer Template -->\n @if (footerTemplate) {\n <div class=\"p-2 border-top\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amro93/ngb-select",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Lightweight, accessible, standalone Angular Select dropdown component built with pure Bootstrap 5",
5
5
  "keywords": [
6
6
  "angular",
@@ -42,12 +42,12 @@ interface SelectLazyLoadEvent {
42
42
  last: number;
43
43
  [key: string]: any;
44
44
  }
45
- declare const NGB_SELECT_VERSION = "0.1.1";
45
+ declare const NGB_SELECT_VERSION = "0.1.4";
46
46
 
47
47
  declare class NgbSelectComponent implements ControlValueAccessor, OnInit, OnDestroy {
48
48
  elementRef: ElementRef;
49
49
  private cdr;
50
- static readonly VERSION = "0.1.1";
50
+ static readonly VERSION = "0.1.4";
51
51
  options: _angular_core.InputSignal<any[]>;
52
52
  optionLabel: _angular_core.InputSignal<string>;
53
53
  optionValue: _angular_core.InputSignal<string>;