@ngbase/adk 0.1.19 → 0.1.21

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.
Files changed (70) hide show
  1. package/fesm2022/ngbase-adk-a11y.mjs +15 -15
  2. package/fesm2022/ngbase-adk-accordion.mjs +12 -12
  3. package/fesm2022/ngbase-adk-autocomplete.mjs +6 -6
  4. package/fesm2022/ngbase-adk-avatar.mjs +6 -6
  5. package/fesm2022/ngbase-adk-bidi.mjs +3 -3
  6. package/fesm2022/ngbase-adk-breadcrumb.mjs +12 -12
  7. package/fesm2022/ngbase-adk-cache.mjs +3 -3
  8. package/fesm2022/ngbase-adk-carousel.mjs +15 -15
  9. package/fesm2022/ngbase-adk-checkbox.mjs +6 -6
  10. package/fesm2022/ngbase-adk-chip.mjs +9 -9
  11. package/fesm2022/ngbase-adk-clipboard.mjs +3 -3
  12. package/fesm2022/ngbase-adk-color-picker.mjs +30 -30
  13. package/fesm2022/ngbase-adk-cookies.mjs +3 -3
  14. package/fesm2022/ngbase-adk-datepicker.mjs +36 -36
  15. package/fesm2022/ngbase-adk-dialog.mjs +12 -12
  16. package/fesm2022/ngbase-adk-drag.mjs +12 -12
  17. package/fesm2022/ngbase-adk-form-field.mjs +20 -20
  18. package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
  19. package/fesm2022/ngbase-adk-hover-card.mjs +3 -3
  20. package/fesm2022/ngbase-adk-icon.mjs +6 -6
  21. package/fesm2022/ngbase-adk-inline-edit.mjs +9 -9
  22. package/fesm2022/ngbase-adk-jwt.mjs +6 -6
  23. package/fesm2022/ngbase-adk-keys.mjs +6 -6
  24. package/fesm2022/ngbase-adk-list.mjs +6 -6
  25. package/fesm2022/ngbase-adk-mask.mjs +6 -6
  26. package/fesm2022/ngbase-adk-menu.mjs +24 -24
  27. package/fesm2022/ngbase-adk-network.mjs +3 -3
  28. package/fesm2022/ngbase-adk-otp.mjs +9 -9
  29. package/fesm2022/ngbase-adk-pagination.mjs +6 -6
  30. package/fesm2022/ngbase-adk-popover.mjs +21 -21
  31. package/fesm2022/ngbase-adk-portal.mjs +12 -12
  32. package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
  33. package/fesm2022/ngbase-adk-progress.mjs +6 -6
  34. package/fesm2022/ngbase-adk-radio.mjs +9 -9
  35. package/fesm2022/ngbase-adk-resizable.mjs +39 -131
  36. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
  37. package/fesm2022/ngbase-adk-scroll-area.mjs +6 -6
  38. package/fesm2022/ngbase-adk-select.mjs +245 -102
  39. package/fesm2022/ngbase-adk-select.mjs.map +1 -1
  40. package/fesm2022/ngbase-adk-selectable.mjs +6 -6
  41. package/fesm2022/ngbase-adk-sheet.mjs +3 -3
  42. package/fesm2022/ngbase-adk-sidenav.mjs +18 -18
  43. package/fesm2022/ngbase-adk-slider.mjs +12 -12
  44. package/fesm2022/ngbase-adk-sonner.mjs +9 -9
  45. package/fesm2022/ngbase-adk-stepper.mjs +12 -12
  46. package/fesm2022/ngbase-adk-switch.mjs +12 -12
  47. package/fesm2022/ngbase-adk-table.mjs +39 -39
  48. package/fesm2022/ngbase-adk-tabs.mjs +21 -21
  49. package/fesm2022/ngbase-adk-toggle-group.mjs +6 -6
  50. package/fesm2022/ngbase-adk-toggle.mjs +3 -3
  51. package/fesm2022/ngbase-adk-tooltip.mjs +9 -9
  52. package/fesm2022/ngbase-adk-tour.mjs +12 -12
  53. package/fesm2022/ngbase-adk-translate.mjs +6 -6
  54. package/fesm2022/ngbase-adk-tree.mjs +15 -15
  55. package/fesm2022/ngbase-adk-utils.mjs +14 -10
  56. package/fesm2022/ngbase-adk-utils.mjs.map +1 -1
  57. package/fesm2022/ngbase-adk-virtualizer.mjs +11 -8
  58. package/fesm2022/ngbase-adk-virtualizer.mjs.map +1 -1
  59. package/package.json +1 -1
  60. package/schematics/components/files/pagination/pagination.ts.template +2 -2
  61. package/schematics/components/files/select/select.ts.template +92 -15
  62. package/schematics/components/files/sidenav/sidenav.ts.template +16 -8
  63. package/schematics/components/files/switch/switch.ts.template +1 -1
  64. package/types/ngbase-adk-color-picker.d.ts +1 -1
  65. package/types/ngbase-adk-form-field.d.ts +1 -1
  66. package/types/ngbase-adk-portal.d.ts +2 -3
  67. package/types/ngbase-adk-resizable.d.ts +3 -3
  68. package/types/ngbase-adk-scroll-area.d.ts +1 -1
  69. package/types/ngbase-adk-select.d.ts +27 -6
  70. package/types/ngbase-adk-virtualizer.d.ts +3 -2
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, input, booleanAttribute, output, signal, linkedSignal, Directive, contentChildren, viewChild, TemplateRef, model, computed, effect, untracked, contentChild } from '@angular/core';
2
+ import { signal, Directive, inject, ElementRef, viewChild, TemplateRef, model, input, booleanAttribute, output, computed, effect, untracked, contentChild, numberAttribute, linkedSignal, forwardRef, DestroyRef } from '@angular/core';
3
3
  import * as i1 from '@ngbase/adk/a11y';
4
- import { AccessibleItem, AccessibleGroup, Autofocus } from '@ngbase/adk/a11y';
4
+ import { AccessibleGroup, AccessibleItem, Autofocus } from '@ngbase/adk/a11y';
5
5
  import { uniqueId, filterFunction } from '@ngbase/adk/utils';
6
6
  import { Directionality } from '@ngbase/adk/bidi';
7
7
  import { ngbPopoverPortal } from '@ngbase/adk/popover';
@@ -9,80 +9,34 @@ import { Subject } from 'rxjs';
9
9
  import * as i2 from '@ngbase/adk/form-field';
10
10
  import { InputBase } from '@ngbase/adk/form-field';
11
11
 
12
- class NgbOption {
13
- constructor() {
14
- this.allyItem = inject(AccessibleItem);
15
- this.el = inject(ElementRef);
16
- // inputs
17
- this.value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
18
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
19
- this.ayId = input(...(ngDevMode ? [undefined, { debugName: "ayId" }] : []));
20
- // outputs
21
- this.onSelectionChange = output();
22
- this.multiple = signal(false, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
23
- this.checked = signal(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
24
- this.active = signal(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
25
- this._ayId = linkedSignal({ ...(ngDevMode ? { debugName: "_ayId" } : {}), source: this.ayId, computation: id => id || '' });
26
- this.allyItem._ayId = this._ayId;
27
- this.allyItem._disabled = this.disabled;
28
- }
29
- selectOption() { }
30
- setAyId(id) {
31
- this._ayId.set(id);
32
- }
33
- label() {
34
- return this.el.nativeElement.textContent || '';
35
- }
36
- focus() {
37
- this.el.nativeElement.scrollIntoView({ block: 'nearest' });
38
- this.el.nativeElement.classList.add('bg-muted');
39
- }
40
- unselect() {
41
- this.el.nativeElement.classList.remove('bg-muted');
42
- }
43
- getValue() {
44
- if (this.value() === undefined) {
45
- return this.label();
46
- }
47
- return this.value();
48
- }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbOption, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
50
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgbOption, isStandalone: true, selector: "[ngbOption]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ayId: { classPropertyName: "ayId", publicName: "ayId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelectionChange: "onSelectionChange" }, host: { attributes: { "role": "option", "tabindex": "-1" }, listeners: { "click": "selectOption()" } }, hostDirectives: [{ directive: i1.AccessibleItem }], ngImport: i0 }); }
51
- }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbOption, decorators: [{
53
- type: Directive,
54
- args: [{
55
- selector: '[ngbOption]',
56
- hostDirectives: [AccessibleItem],
57
- host: {
58
- role: 'option',
59
- tabindex: '-1',
60
- '(click)': 'selectOption()',
61
- },
62
- }]
63
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ayId: [{ type: i0.Input, args: [{ isSignal: true, alias: "ayId", required: false }] }], onSelectionChange: [{ type: i0.Output, args: ["onSelectionChange"] }] } });
64
-
65
12
  class NgbSelectTarget {
66
13
  constructor() {
67
14
  this.target = signal(null, ...(ngDevMode ? [{ debugName: "target" }] : []));
68
15
  }
69
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectTarget, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
70
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgbSelectTarget, isStandalone: true, selector: "[ngbSelectTarget]", ngImport: i0 }); }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectTarget, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NgbSelectTarget, isStandalone: true, selector: "[ngbSelectTarget]", ngImport: i0 }); }
71
18
  }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectTarget, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectTarget, decorators: [{
73
20
  type: Directive,
74
21
  args: [{
75
22
  selector: '[ngbSelectTarget]',
76
23
  }]
77
24
  }] });
78
25
  class SelectBase {
26
+ registerOption(option) {
27
+ this.registered.update(list => [...list, option]);
28
+ }
29
+ unregisterOption(option) {
30
+ this.registered.update(list => list.filter(o => o !== option));
31
+ }
79
32
  constructor(isSelect) {
80
33
  this.isSelect = isSelect;
81
34
  // Dependencies
82
35
  this.el = inject(ElementRef);
83
36
  this.dir = inject(Directionality);
84
37
  this.target = inject(NgbSelectTarget, { optional: true });
85
- this.list = contentChildren(NgbOption, { ...(ngDevMode ? { debugName: "list" } : {}), descendants: true });
38
+ this.registered = signal([], ...(ngDevMode ? [{ debugName: "registered" }] : []));
39
+ this.list = this.registered.asReadonly();
86
40
  this.popover = ngbPopoverPortal();
87
41
  this.optionsTemplate = viewChild('optionsTemplate', { ...(ngDevMode ? { debugName: "optionsTemplate" } : {}), read: TemplateRef });
88
42
  this.container = viewChild('container', { ...(ngDevMode ? { debugName: "container" } : {}), read: ElementRef });
@@ -91,6 +45,7 @@ class SelectBase {
91
45
  this.value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
92
46
  this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
93
47
  this.touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
48
+ this.labelFn = input(undefined, ...(ngDevMode ? [{ debugName: "labelFn" }] : []));
94
49
  this.multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : {}), transform: booleanAttribute });
95
50
  this.noAutoClose = input(false, { ...(ngDevMode ? { debugName: "noAutoClose" } : {}), transform: booleanAttribute });
96
51
  this.options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
@@ -106,21 +61,34 @@ class SelectBase {
106
61
  this.previousValue = '';
107
62
  this.events = new Subject();
108
63
  this.ayId = uniqueId();
64
+ // Cache of value -> label. Populated when options register/are selected.
65
+ // Allows display value to persist after option is destroyed (e.g. virtual scroll).
66
+ this.labelCache = signal(new Map(), ...(ngDevMode ? [{ debugName: "labelCache" }] : []));
109
67
  this.cValue = computed(() => {
110
68
  if (!this.isSelect && this.status() === 'opened') {
111
69
  return this.previousValue;
112
70
  }
113
71
  const multiple = this.multiple();
72
+ const filtered = this.values();
73
+ const labelFn = this.labelFn();
74
+ const cache = this.labelCache();
114
75
  const options = this.list();
115
- const filtered = this.values(); // .filter(x => x !== undefined && x !== null && x !== '');
116
- const values = filtered.length
117
- ? options.reduce((acc, option) => {
118
- if (filtered.includes(option.getValue())) {
119
- acc.push(option.label());
120
- }
121
- return acc;
122
- }, [])
123
- : [];
76
+ const values = filtered
77
+ .filter(v => v !== undefined && v !== null && v !== '')
78
+ .map(v => {
79
+ // Prefer fresh DOM label if option currently registered
80
+ const opt = options.find(o => o.getValue() === v);
81
+ if (opt)
82
+ return opt.label();
83
+ // Then cached label from previous registration
84
+ const cached = cache.get(v);
85
+ if (cached)
86
+ return cached;
87
+ // Then user-supplied label function (data-driven virtual scroll)
88
+ if (labelFn)
89
+ return labelFn(v);
90
+ return '';
91
+ });
124
92
  // if the value is greater than 1, then take the first value and add a plus sign with the length of the remaining values
125
93
  if (multiple && values.length > 1) {
126
94
  this.previousValue = `${values[0]} (+${values.length - 1})`;
@@ -175,6 +143,31 @@ class SelectBase {
175
143
  option.checked.set(values.includes(option.getValue()));
176
144
  });
177
145
  });
146
+ // Cache labels of currently-selected options so display value survives
147
+ // option destruction (e.g., virtual scroll removing off-screen items).
148
+ effect(() => {
149
+ const options = this.list();
150
+ const values = this.values();
151
+ untracked(() => {
152
+ const cache = this.labelCache();
153
+ let next = null;
154
+ for (const o of options) {
155
+ const v = o.getValue();
156
+ if (!values.includes(v))
157
+ continue;
158
+ const lbl = o.label();
159
+ if (!lbl)
160
+ continue;
161
+ if (cache.get(v) !== lbl) {
162
+ if (!next)
163
+ next = new Map(cache);
164
+ next.set(v, lbl);
165
+ }
166
+ }
167
+ if (next)
168
+ this.labelCache.set(next);
169
+ });
170
+ });
178
171
  // Sync value model to internal values array
179
172
  effect(() => this.updateValues(this.value()));
180
173
  }
@@ -204,10 +197,10 @@ class SelectBase {
204
197
  this.withInPopup = e.type !== 'mouseleave';
205
198
  });
206
199
  if (!this.isSelect) {
207
- diaRef.events.subscribe(() => {
208
- document.addEventListener('click', this.clickHandler);
209
- this.events.next('open');
210
- });
200
+ // diaRef.events.subscribe(() => {
201
+ document.addEventListener('click', this.clickHandler);
202
+ this.events.next('open');
203
+ // });
211
204
  }
212
205
  else {
213
206
  this.events.next('open');
@@ -285,21 +278,41 @@ class SelectBase {
285
278
  ngOnDestroy() {
286
279
  this.close();
287
280
  }
288
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: SelectBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
289
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: SelectBase, isStandalone: true, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, noAutoClose: { classPropertyName: "noAutoClose", publicName: "noAutoClose", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", opened: "opened", closed: "closed" }, queries: [{ propertyName: "list", predicate: NgbOption, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "optionsTemplate", first: true, predicate: ["optionsTemplate"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "optionsGroup", first: true, predicate: ["optionsGroup"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0 }); }
281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SelectBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
282
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.2", type: SelectBase, isStandalone: true, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, labelFn: { classPropertyName: "labelFn", publicName: "labelFn", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, noAutoClose: { classPropertyName: "noAutoClose", publicName: "noAutoClose", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", opened: "opened", closed: "closed" }, viewQueries: [{ propertyName: "optionsTemplate", first: true, predicate: ["optionsTemplate"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "optionsGroup", first: true, predicate: ["optionsGroup"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0 }); }
290
283
  }
291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: SelectBase, decorators: [{
284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SelectBase, decorators: [{
292
285
  type: Directive
293
- }], ctorParameters: () => [{ type: undefined }], propDecorators: { list: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => NgbOption), { ...{ descendants: true }, isSignal: true }] }], optionsTemplate: [{ type: i0.ViewChild, args: ['optionsTemplate', { ...{ read: TemplateRef }, isSignal: true }] }], container: [{ type: i0.ViewChild, args: ['container', { ...{ read: ElementRef }, isSignal: true }] }], optionsGroup: [{ type: i0.ViewChild, args: ['optionsGroup', { ...{ read: ElementRef }, isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], noAutoClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "noAutoClose", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
286
+ }], ctorParameters: () => [{ type: undefined }], propDecorators: { optionsTemplate: [{ type: i0.ViewChild, args: ['optionsTemplate', { ...{ read: TemplateRef }, isSignal: true }] }], container: [{ type: i0.ViewChild, args: ['container', { ...{ read: ElementRef }, isSignal: true }] }], optionsGroup: [{ type: i0.ViewChild, args: ['optionsGroup', { ...{ read: ElementRef }, isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], labelFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelFn", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], noAutoClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "noAutoClose", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
287
+
288
+ function flattenForVirtualScroll(items, groupKey, groupLabelKey) {
289
+ if (!groupKey) {
290
+ return items.map(item => ({ type: 'option', value: item }));
291
+ }
292
+ const result = [];
293
+ for (const group of items) {
294
+ result.push({
295
+ type: 'group-header',
296
+ label: group[groupLabelKey || 'label'],
297
+ });
298
+ const children = group[groupKey];
299
+ if (children) {
300
+ for (const child of children) {
301
+ result.push({ type: 'option', value: child });
302
+ }
303
+ }
304
+ }
305
+ return result;
306
+ }
294
307
 
295
308
  class NgbSelectOption {
296
309
  constructor() {
297
310
  this.template = inject((TemplateRef));
298
311
  }
299
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectOption, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
300
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgbSelectOption, isStandalone: true, selector: "[ngbSelectOption]", ngImport: i0 }); }
312
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectOption, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
313
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NgbSelectOption, isStandalone: true, selector: "[ngbSelectOption]", ngImport: i0 }); }
301
314
  }
302
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectOption, decorators: [{
315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectOption, decorators: [{
303
316
  type: Directive,
304
317
  args: [{
305
318
  selector: '[ngbSelectOption]',
@@ -309,10 +322,10 @@ class SelectValue {
309
322
  constructor() {
310
323
  this.select = inject((NgbSelect));
311
324
  }
312
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: SelectValue, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
313
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: SelectValue, isStandalone: true, selector: "button[ngbSelectValue]", host: { attributes: { "type": "button", "role": "combobox", "tabindex": "-1" }, properties: { "disabled": "select.disabled()" } }, ngImport: i0 }); }
325
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SelectValue, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
326
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: SelectValue, isStandalone: true, selector: "button[ngbSelectValue]", host: { attributes: { "type": "button", "role": "combobox", "tabindex": "-1" }, properties: { "disabled": "select.disabled()" } }, ngImport: i0 }); }
314
327
  }
315
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: SelectValue, decorators: [{
328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: SelectValue, decorators: [{
316
329
  type: Directive,
317
330
  args: [{
318
331
  selector: 'button[ngbSelectValue]',
@@ -332,10 +345,10 @@ class NgbSelectOptionGroup {
332
345
  this.group._loop.set(false);
333
346
  this.group._ayId.set(this.select.ayId);
334
347
  }
335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
336
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgbSelectOptionGroup, isStandalone: true, selector: "[ngbSelectOptionGroup]", hostDirectives: [{ directive: i1.AccessibleGroup }], ngImport: i0 }); }
348
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
349
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NgbSelectOptionGroup, isStandalone: true, selector: "[ngbSelectOptionGroup]", hostDirectives: [{ directive: i1.AccessibleGroup }], ngImport: i0 }); }
337
350
  }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectOptionGroup, decorators: [{
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectOptionGroup, decorators: [{
339
352
  type: Directive,
340
353
  args: [{
341
354
  selector: '[ngbSelectOptionGroup]',
@@ -349,12 +362,84 @@ class NgbSelect extends SelectBase {
349
362
  this.search = model('', ...(ngDevMode ? [{ debugName: "search" }] : []));
350
363
  this.filterFn = input((option) => option, ...(ngDevMode ? [{ debugName: "filterFn" }] : []));
351
364
  this.filterOptions = input(...(ngDevMode ? [undefined, { debugName: "filterOptions" }] : []));
365
+ // Virtual scroll inputs
366
+ this.virtualScroll = input(false, { ...(ngDevMode ? { debugName: "virtualScroll" } : {}), transform: booleanAttribute });
367
+ this.itemSize = input(36, { ...(ngDevMode ? { debugName: "itemSize" } : {}), transform: numberAttribute });
368
+ this.groupKey = input(...(ngDevMode ? [undefined, { debugName: "groupKey" }] : []));
369
+ this.groupLabelKey = input(...(ngDevMode ? [undefined, { debugName: "groupLabelKey" }] : []));
352
370
  this.optionsFilter = filterFunction(this.options, computed(() => this.filterOptions() ?? { filter: this.filterFn() }));
371
+ // Flattened items for virtual scroll rendering
372
+ this.virtualItems = computed(() => {
373
+ if (!this.virtualScroll())
374
+ return [];
375
+ const filtered = this.optionsFilter.filteredList();
376
+ return flattenForVirtualScroll(filtered, this.groupKey(), this.groupLabelKey());
377
+ }, ...(ngDevMode ? [{ debugName: "virtualItems" }] : []));
378
+ // Keyboard navigation state for virtual mode
379
+ this.focusedVirtualIndex = signal(-1, ...(ngDevMode ? [{ debugName: "focusedVirtualIndex" }] : []));
380
+ this.scrollToIndexFn = signal(null, ...(ngDevMode ? [{ debugName: "scrollToIndexFn" }] : []));
381
+ // Reset scroll position when filtered list changes in virtual mode
382
+ effect(() => {
383
+ this.optionsFilter.filteredList();
384
+ untracked(() => {
385
+ if (this.virtualScroll()) {
386
+ this.focusedVirtualIndex.set(-1);
387
+ this.scrollToIndexFn()?.call(null, 0);
388
+ }
389
+ });
390
+ });
391
+ }
392
+ handleVirtualKeydown(event) {
393
+ const items = this.virtualItems();
394
+ if (!items.length)
395
+ return;
396
+ const current = this.focusedVirtualIndex();
397
+ let next = current;
398
+ switch (event.key) {
399
+ case 'ArrowDown':
400
+ next = current + 1;
401
+ break;
402
+ case 'ArrowUp':
403
+ next = current - 1;
404
+ break;
405
+ case 'Enter':
406
+ case ' ': {
407
+ const item = items[current];
408
+ if (item?.type === 'option' && item.value !== undefined) {
409
+ this.selectVirtualItem(item.value);
410
+ }
411
+ event.preventDefault();
412
+ return;
413
+ }
414
+ case 'Escape':
415
+ this.close();
416
+ event.preventDefault();
417
+ return;
418
+ default:
419
+ return;
420
+ }
421
+ event.preventDefault();
422
+ // Skip group headers
423
+ const dir = event.key === 'ArrowDown' ? 1 : -1;
424
+ while (next >= 0 && next < items.length && items[next].type === 'group-header') {
425
+ next += dir;
426
+ }
427
+ if (next < 0 || next >= items.length)
428
+ return;
429
+ this.focusedVirtualIndex.set(next);
430
+ this.scrollToIndexFn()?.call(null, next);
431
+ }
432
+ selectVirtualItem(value) {
433
+ const list = this.list();
434
+ const option = list.find(o => o.getValue() === value);
435
+ if (option) {
436
+ option.selectOption();
437
+ }
353
438
  }
354
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
355
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: NgbSelect, isStandalone: true, selector: "[ngbSelect]", inputs: { search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { search: "searchChange" }, host: { attributes: { "role": "listbox", "type": "button" }, listeners: { "click": "open()", "blur": "touched.set(true)", "keydown.arrowdown": "$event.preventDefault(); open()", "keydown.arrowup": "$event.preventDefault(); open()", "keydown.enter": "$event.preventDefault(); open()", "keydown.space": "$event.preventDefault(); open()" }, properties: { "tabindex": "disabled() ? -1 : 0" } }, providers: [{ provide: SelectBase, useExisting: NgbSelect }], queries: [{ propertyName: "optionTemplate", first: true, predicate: (NgbSelectOption), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 }); }
439
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
440
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.2", type: NgbSelect, isStandalone: true, selector: "[ngbSelect]", inputs: { search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, groupKey: { classPropertyName: "groupKey", publicName: "groupKey", isSignal: true, isRequired: false, transformFunction: null }, groupLabelKey: { classPropertyName: "groupLabelKey", publicName: "groupLabelKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { search: "searchChange" }, host: { attributes: { "role": "listbox", "type": "button" }, listeners: { "click": "open()", "blur": "touched.set(true)", "keydown.arrowdown": "$event.preventDefault(); open()", "keydown.arrowup": "$event.preventDefault(); open()", "keydown.enter": "$event.preventDefault(); open()", "keydown.space": "$event.preventDefault(); open()" }, properties: { "tabindex": "disabled() ? -1 : 0" } }, providers: [{ provide: SelectBase, useExisting: NgbSelect }], queries: [{ propertyName: "optionTemplate", first: true, predicate: (NgbSelectOption), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 }); }
356
441
  }
357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelect, decorators: [{
442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelect, decorators: [{
358
443
  type: Directive,
359
444
  args: [{
360
445
  selector: '[ngbSelect]',
@@ -371,7 +456,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
371
456
  '[tabindex]': 'disabled() ? -1 : 0',
372
457
  },
373
458
  }]
374
- }], ctorParameters: () => [], propDecorators: { optionTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgbSelectOption), { isSignal: true }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }, { type: i0.Output, args: ["searchChange"] }], filterFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterFn", required: false }] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }] } });
459
+ }], ctorParameters: () => [], propDecorators: { optionTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgbSelectOption), { isSignal: true }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }, { type: i0.Output, args: ["searchChange"] }], filterFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterFn", required: false }] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], virtualScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroll", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], groupKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupKey", required: false }] }], groupLabelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupLabelKey", required: false }] }] } });
375
460
  function aliasSelect(select) {
376
461
  return [
377
462
  { provide: SelectBase, useExisting: select },
@@ -379,15 +464,73 @@ function aliasSelect(select) {
379
464
  ];
380
465
  }
381
466
 
467
+ class NgbOption {
468
+ constructor() {
469
+ this.allyItem = inject(AccessibleItem);
470
+ this.el = inject(ElementRef);
471
+ // inputs
472
+ this.value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
473
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
474
+ this.ayId = input(...(ngDevMode ? [undefined, { debugName: "ayId" }] : []));
475
+ // outputs
476
+ this.onSelectionChange = output();
477
+ this.multiple = signal(false, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
478
+ this.checked = signal(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
479
+ this.active = signal(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
480
+ this._ayId = linkedSignal({ ...(ngDevMode ? { debugName: "_ayId" } : {}), source: this.ayId, computation: id => id || '' });
481
+ this.allyItem._ayId = this._ayId;
482
+ this.allyItem._disabled = this.disabled;
483
+ const select = inject(forwardRef(() => SelectBase), { optional: true });
484
+ if (select) {
485
+ select.registerOption(this);
486
+ inject(DestroyRef).onDestroy(() => select.unregisterOption(this));
487
+ }
488
+ }
489
+ selectOption() { }
490
+ setAyId(id) {
491
+ this._ayId.set(id);
492
+ }
493
+ label() {
494
+ return this.el.nativeElement.textContent || '';
495
+ }
496
+ focus() {
497
+ this.el.nativeElement.scrollIntoView({ block: 'nearest' });
498
+ this.el.nativeElement.classList.add('bg-muted');
499
+ }
500
+ unselect() {
501
+ this.el.nativeElement.classList.remove('bg-muted');
502
+ }
503
+ getValue() {
504
+ if (this.value() === undefined) {
505
+ return this.label();
506
+ }
507
+ return this.value();
508
+ }
509
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbOption, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
510
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.2", type: NgbOption, isStandalone: true, selector: "[ngbOption]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ayId: { classPropertyName: "ayId", publicName: "ayId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelectionChange: "onSelectionChange" }, host: { attributes: { "role": "option", "tabindex": "-1" }, listeners: { "click": "selectOption()" } }, hostDirectives: [{ directive: i1.AccessibleItem }], ngImport: i0 }); }
511
+ }
512
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbOption, decorators: [{
513
+ type: Directive,
514
+ args: [{
515
+ selector: '[ngbOption]',
516
+ hostDirectives: [AccessibleItem],
517
+ host: {
518
+ role: 'option',
519
+ tabindex: '-1',
520
+ '(click)': 'selectOption()',
521
+ },
522
+ }]
523
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ayId: [{ type: i0.Input, args: [{ isSignal: true, alias: "ayId", required: false }] }], onSelectionChange: [{ type: i0.Output, args: ["onSelectionChange"] }] } });
524
+
382
525
  class NgbOptionGroup {
383
526
  constructor() {
384
527
  this.label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
385
528
  this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
386
529
  }
387
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
388
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgbOptionGroup, isStandalone: true, selector: "[ngbOptionGroup]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
530
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
531
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.2", type: NgbOptionGroup, isStandalone: true, selector: "[ngbOptionGroup]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
389
532
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbOptionGroup, decorators: [{
533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbOptionGroup, decorators: [{
391
534
  type: Directive,
392
535
  args: [{
393
536
  selector: '[ngbOptionGroup]',
@@ -422,10 +565,10 @@ class NgbSelectInput {
422
565
  updateSearch(value) {
423
566
  this.inputBase.value.set(value);
424
567
  }
425
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
426
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgbSelectInput, isStandalone: true, selector: "input[ngbSelectInput]", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "placeholder": "placeholder()", "tabindex": "0" } }, exportAs: ["ngbSelectInput"], hostDirectives: [{ directive: i1.Autofocus }, { directive: i2.InputBase, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
568
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
569
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.2", type: NgbSelectInput, isStandalone: true, selector: "input[ngbSelectInput]", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "placeholder": "placeholder()", "tabindex": "0" } }, exportAs: ["ngbSelectInput"], hostDirectives: [{ directive: i1.Autofocus }, { directive: i2.InputBase, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
427
570
  }
428
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectInput, decorators: [{
571
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectInput, decorators: [{
429
572
  type: Directive,
430
573
  args: [{
431
574
  selector: 'input[ngbSelectInput]',
@@ -441,10 +584,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
441
584
  }]
442
585
  }], ctorParameters: () => [], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], filterFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterFn", required: false }] }] } });
443
586
  class NgbSelectTrigger {
444
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
445
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgbSelectTrigger, isStandalone: true, selector: "[ngbSelectTrigger]", ngImport: i0 }); }
587
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
588
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NgbSelectTrigger, isStandalone: true, selector: "[ngbSelectTrigger]", ngImport: i0 }); }
446
589
  }
447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbSelectTrigger, decorators: [{
590
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbSelectTrigger, decorators: [{
448
591
  type: Directive,
449
592
  args: [{
450
593
  selector: '[ngbSelectTrigger]',
@@ -455,10 +598,10 @@ class ListSelection extends SelectBase {
455
598
  constructor() {
456
599
  super(true);
457
600
  }
458
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ListSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
459
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: ListSelection, isStandalone: true, selector: "[ngbListSelection]", usesInheritance: true, ngImport: i0 }); }
601
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ListSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
602
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: ListSelection, isStandalone: true, selector: "[ngbListSelection]", usesInheritance: true, ngImport: i0 }); }
460
603
  }
461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ListSelection, decorators: [{
604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ListSelection, decorators: [{
462
605
  type: Directive,
463
606
  args: [{
464
607
  selector: '[ngbListSelection]',
@@ -473,5 +616,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
473
616
  * Generated bundle index. Do not edit.
474
617
  */
475
618
 
476
- export { ListSelection, NgbOption, NgbOptionGroup, NgbSelect, NgbSelectInput, NgbSelectOption, NgbSelectOptionGroup, NgbSelectTarget, NgbSelectTrigger, SelectBase, SelectValue, aliasSelect };
619
+ export { ListSelection, NgbOption, NgbOptionGroup, NgbSelect, NgbSelectInput, NgbSelectOption, NgbSelectOptionGroup, NgbSelectTarget, NgbSelectTrigger, SelectBase, SelectValue, aliasSelect, flattenForVirtualScroll };
477
620
  //# sourceMappingURL=ngbase-adk-select.mjs.map