@stackline/angular-multiselect-dropdown 22.0.0 → 22.0.2

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
@@ -9,13 +9,13 @@
9
9
  [![TypeScript](https://img.shields.io/badge/TypeScript-6.0-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org)
10
10
  [![Reddit community](https://img.shields.io/badge/community-r%2FStackline-ff4500?style=flat-square&logo=reddit&logoColor=white)](https://www.reddit.com/r/Stackline/)
11
11
 
12
- **[Documentation & Live Demos](https://alexandro.net/docs/angular/multiselect/)** | **[Angular 22 Demo](https://alexandro.net/docs/angular/multiselect/angular-22/)** | **[Angular 21 StackBlitz](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fbasic)** | **[npm](https://www.npmjs.com/package/@stackline/angular-multiselect-dropdown)** | **[Issues](https://github.com/alexandroit/angular-multiselect-dropdown/issues)** | **[Repository](https://github.com/alexandroit/angular-multiselect-dropdown)** | **[Community Discussions](https://www.reddit.com/r/Stackline/)**
12
+ **[Documentation & Live Demos](https://alexandro.net/docs/angular/multiselect/)** | **[Angular 22 Demo](https://alexandro.net/docs/angular/multiselect/angular-22/)** | **[Angular 22 StackBlitz](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fbasic)** | **[npm](https://www.npmjs.com/package/@stackline/angular-multiselect-dropdown)** | **[Issues](https://github.com/alexandroit/angular-multiselect-dropdown/issues)** | **[Repository](https://github.com/alexandroit/angular-multiselect-dropdown)** | **[Community Discussions](https://www.reddit.com/r/Stackline/)**
13
13
 
14
14
  <p align="center">
15
15
  <img src="https://alexandro.net/images/public/2026/06/dropdownlist.gif" alt="@stackline/angular-multiselect-dropdown live dropdown preview" width="420">
16
16
  </p>
17
17
 
18
- **Latest tested package release:** `22.0.0` for Angular `22.x`
18
+ **Latest tested package release:** `22.0.1` for Angular `22.x`
19
19
 
20
20
  ---
21
21
 
@@ -27,9 +27,9 @@
27
27
 
28
28
  The original `angular2-multiselect-dropdown` package became difficult to keep current across multiple Angular generations. This maintained package keeps the classic API and template structure intact, introduces the new primary selector `<angular-multiselect>`, preserves the legacy alias `<angular2-multiselect>`, and publishes the project line by line so older applications can keep a predictable upgrade path.
29
29
 
30
- The repository contains the full documentation matrix from Angular 2 through Angular 22. The current tested package release is `22.0.0` for Angular 22.x applications.
30
+ The repository contains the full documentation matrix from Angular 2 through Angular 22. The current tested package release is `22.0.1` for Angular 22.x applications.
31
31
 
32
- The Angular 22 package is compatible with Angular 22.x and was tested in a real Angular 22.0.0 application before publication. The 22.0.x line keeps the Angular 21.2.x behavior baseline: accessibility-focused keyboard navigation, focus handling, and ARIA support for the dropdown trigger, clear-all action, selected chips, listbox, and lazy-loaded results. It carries the React 19.1.x combobox contract into Angular patterns: configurable keyboard behavior, matching `aria-selected` plus `aria-checked`, selected-object preservation across async data refreshes, richer template contexts, and renderless state helpers for custom Angular HTML.
32
+ The Angular 22 package is compatible with Angular 22.x and was tested in a real Angular 22.0.0 application before publication. The 22.0.1 peer range is intentionally open through Angular 23.x (`>=22.0.0 <24.0.0`) so Angular 23 projects can install it on release day while the Angular 23-specific validation line is prepared. The 22.0.x line keeps the Angular 21.2.x behavior baseline: accessibility-focused keyboard navigation, focus handling, and ARIA support for the dropdown trigger, clear-all action, selected chips, listbox, and lazy-loaded results. It carries the React 19.1.x combobox contract into Angular patterns: configurable keyboard behavior, matching `aria-selected` plus `aria-checked`, selected-object preservation across async data refreshes, richer template contexts, and renderless state helpers for custom Angular HTML.
33
33
 
34
34
  ## Features
35
35
 
@@ -56,7 +56,7 @@ The Angular 22 package is compatible with Angular 22.x and was tested in a real
56
56
 
57
57
  1. [Rename Note](#rename-note)
58
58
  2. [Angular Version Compatibility](#angular-version-compatibility)
59
- 3. [Angular 21 StackBlitz Playground](#angular-21-stackblitz-playground)
59
+ 3. [Angular 22 StackBlitz Playground](#angular-22-stackblitz-playground)
60
60
  4. [Installation](#installation)
61
61
  5. [Setup](#setup)
62
62
  6. [Custom CSS and SCSS Themes](#custom-css-and-scss-themes)
@@ -83,11 +83,11 @@ The Angular 22 package is compatible with Angular 22.x and was tested in a real
83
83
 
84
84
  Each package family only installs on its matching Angular family. Framework major and package major are not always the same package number, so use the package family column below.
85
85
 
86
- Peer ranges are intentionally bounded to the tested Angular major. The Angular 22 line stays on `>=22.0.0 <23.0.0`; Angular 21 stays on `>=21.0.0 <22.0.0`. Do not treat one package family as an open-ended dependency for the next Angular major.
86
+ Peer ranges are normally bounded to the tested Angular major. The Angular 22 line is the exception: it uses `>=22.0.0 <24.0.0` so Angular 23 projects can install the package on launch day while the dedicated Angular 23 validation line is prepared. Angular 21 stays on `>=21.0.0 <22.0.0`.
87
87
 
88
88
  | Package family | Framework family | Peer range | Tested release window | Demo link |
89
89
  | :---: | :---: | :---: | :---: | :--- |
90
- | **22.x** | **Angular 22 only** | **`>=22.0.0 <23.0.0`** | **22.0.0 -> 22.0.0** | [Angular 22 family docs](https://alexandro.net/docs/angular/multiselect/angular-22/) |
90
+ | **22.x** | **Angular 22 tested, Angular 23 install-ready** | **`>=22.0.0 <24.0.0`** | **22.0.1 -> 22.0.0 runtime** | [Angular 22 family docs](https://alexandro.net/docs/angular/multiselect/angular-22/) |
91
91
  | **21.x** | **Angular 21 only** | **`>=21.0.0 <22.0.0`** | **21.2.1 -> 21.2.14** | [Angular 21 family docs](https://alexandro.net/docs/angular/multiselect/angular-21/) |
92
92
  | **20.x** | **Angular 20 only** | **`>=20.0.0 <21.0.0`** | **20.0.1 -> 20.3.21** | [Angular 20 family docs](https://alexandro.net/docs/angular/multiselect/angular-20/) |
93
93
  | **19.x** | **Angular 19 only** | **`>=19.0.0 <20.0.0`** | **19.0.1 -> 19.2.22** | [Angular 19 family docs](https://alexandro.net/docs/angular/multiselect/angular-19/) |
@@ -108,44 +108,44 @@ Peer ranges are intentionally bounded to the tested Angular major. The Angular 2
108
108
  | **4.x** | **Angular 4 only** | **`>=4.0.0 <5.0.0`** | **4.0.2 -> 4.4.7** | [Angular 4 family docs](https://alexandro.net/docs/angular/multiselect/angular-4/) |
109
109
  | **2.x** | **Angular 2 only** | **`>=2.0.0 <3.0.0`** | **compatible with 2.x; tested on 2.4.10** | [Angular 2 family docs](https://alexandro.net/docs/angular/multiselect/angular-2/) |
110
110
 
111
- ## Angular 21 StackBlitz Playground
111
+ ## Angular 22 StackBlitz Playground
112
112
 
113
- The editable StackBlitz entry is one Angular 21 playground with isolated lazy routes. Official links use `stackblitz.com/github` against the maintained GitHub repository, so they stay tied to the latest pushed source instead of creating stale forked copies for every example. Each example has its own folder, Angular module, data object, and URL.
113
+ The editable StackBlitz entry is one Angular 22 playground with isolated lazy routes. Official links use `stackblitz.com/github` against the maintained GitHub repository, so they stay tied to the latest pushed source instead of creating stale forked copies for every example. Each example has its own folder, Angular module, data object, and URL.
114
114
 
115
115
  | Example | StackBlitz |
116
116
  | :--- | :--- |
117
- | Basic example | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fbasic) |
118
- | Single selection | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fsingle-selection) |
119
- | Search filter | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fsearch-filter) |
120
- | Custom Search from API | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fcustom-search-api) |
121
- | Search Filter By Property | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fsearch-filter-by-property) |
122
- | Search and Add New Item | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fsearch-add-new-item) |
123
- | Group By | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fgroup-by) |
124
- | Templating | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Ftemplating) |
125
- | Using in Forms | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Ftemplate-driven-forms) |
126
- | Using in Reactive Forms | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Freactive-forms) |
127
- | Virtual Scrolling | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fvirtual-scrolling) |
128
- | Lazy Loading from API | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Flazy-loading-api) |
129
- | Data from remote API | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fremote-data) |
130
- | Using in List for loop | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Flist-loop) |
131
- | Using Inside Dialog | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fdialog) |
132
- | Multiple dropdowns | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fmultiple-dropdowns) |
133
- | Load dynamic data | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fdynamic-data) |
134
- | Methods | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fmethods) |
135
- | Events | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fevents) |
136
- | Disabled mode | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fdisabled) |
137
- | Limit selection | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Flimit-selection) |
138
- | Limit badges | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Flimit-badges) |
139
- | Custom placeholder | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fcustom-placeholder) |
140
- | Styling | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-21?startScript=start&initialpath=%2Fstyling) |
117
+ | Basic example | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fbasic) |
118
+ | Single selection | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fsingle-selection) |
119
+ | Search filter | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fsearch-filter) |
120
+ | Custom Search from API | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fcustom-search-api) |
121
+ | Search Filter By Property | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fsearch-filter-by-property) |
122
+ | Search and Add New Item | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fsearch-add-new-item) |
123
+ | Group By | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fgroup-by) |
124
+ | Templating | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Ftemplating) |
125
+ | Using in Forms | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Ftemplate-driven-forms) |
126
+ | Using in Reactive Forms | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Freactive-forms) |
127
+ | Virtual Scrolling | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fvirtual-scrolling) |
128
+ | Lazy Loading from API | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Flazy-loading-api) |
129
+ | Data from remote API | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fremote-data) |
130
+ | Using in List for loop | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Flist-loop) |
131
+ | Using Inside Dialog | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fdialog) |
132
+ | Multiple dropdowns | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fmultiple-dropdowns) |
133
+ | Load dynamic data | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fdynamic-data) |
134
+ | Methods | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fmethods) |
135
+ | Events | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fevents) |
136
+ | Disabled mode | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fdisabled) |
137
+ | Limit selection | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Flimit-selection) |
138
+ | Limit badges | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Flimit-badges) |
139
+ | Custom placeholder | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fcustom-placeholder) |
140
+ | Styling | [Open](https://stackblitz.com/github/alexandroit/stackline-angular-multiselect-angular-22?startScript=start&initialpath=%2Fstyling) |
141
141
 
142
142
  ## Installation
143
143
 
144
144
  ```bash
145
- npm install @stackline/angular-multiselect-dropdown@22.0.0 --save-exact
145
+ npm install @stackline/angular-multiselect-dropdown@22.0.1 --save-exact
146
146
  ```
147
147
 
148
- Install `22.0.0` for Angular 22.x applications. This line keeps the tested Angular behavior, makes `<angular-multiselect>` the documented standard selector, keeps `<angular2-multiselect>` only as a legacy compatibility alias, includes the accessibility-focused and keyboard/ARIA tested interaction contract, preserves selected objects during async refreshes, and keeps dropdown surfaces opaque in clipped containers.
148
+ Install `22.0.1` for Angular 22.x applications. This patch keeps the tested Angular behavior and opens the peer range through Angular 23.x for launch-day installation. It makes `<angular-multiselect>` the documented standard selector, keeps `<angular2-multiselect>` only as a legacy compatibility alias, includes the accessibility-focused and keyboard/ARIA tested interaction contract, preserves selected objects during async refreshes, and keeps dropdown surfaces opaque in clipped containers.
149
149
 
150
150
  ## Setup
151
151
 
@@ -241,7 +241,7 @@ dropdownSettings = {
241
241
 
242
242
  ## Official Angular 22 Test Matrix
243
243
 
244
- The Angular 22 release was tested in a real Angular `22.0.0` application with `@stackline/angular-multiselect-dropdown@22.0.0`. The docs use the same example pattern from the clean test app, including the accessibility-focused keyboard, focus, and ARIA behavior, responsive dropdown width handling, opaque menu surfaces, and dialog-safe positioning carried forward from the Angular 21.2.x line.
244
+ The Angular 22 release was tested in a real Angular `22.0.0` application with `@stackline/angular-multiselect-dropdown@22.0.1`. The docs use the same example pattern from the clean test app, including the accessibility-focused keyboard, focus, and ARIA behavior, responsive dropdown width handling, opaque menu surfaces, and dialog-safe positioning carried forward from the Angular 21.2.x line.
245
245
 
246
246
  Switch between skins through the settings object:
247
247
 
@@ -1549,6 +1549,8 @@ class AngularMultiSelect {
1549
1549
  this.dropdownAppendedToBody = false;
1550
1550
  this.overlayListenersBound = false;
1551
1551
  this.overlayPositionTimer = null;
1552
+ this.optionClickFromPointerDown = null;
1553
+ this.optionClickGuardTimer = null;
1552
1554
  this.boundOverlayPositionUpdate = () => this.scheduleDropdownPositionUpdate();
1553
1555
  this.overlayThemeVariables = [
1554
1556
  '--ms-primary',
@@ -1976,9 +1978,71 @@ class AngularMultiSelect {
1976
1978
  }
1977
1979
  onDropdownPanelPointerDown(event) {
1978
1980
  if (this.isBodyOverlayEnabled()) {
1981
+ var option = this.getPointerDownOption(event);
1982
+ if (option) {
1983
+ this.selectOptionFromPointerDown(option, event);
1984
+ return;
1985
+ }
1979
1986
  event.stopPropagation();
1980
1987
  }
1981
1988
  }
1989
+ getPointerDownOption(event) {
1990
+ var target = event && event.target;
1991
+ if (!target || !target.closest) {
1992
+ return null;
1993
+ }
1994
+ var option = target.closest('.dropdown-option');
1995
+ if (!option || option.classList.contains('is-disabled')) {
1996
+ return null;
1997
+ }
1998
+ return option;
1999
+ }
2000
+ selectOptionFromPointerDown(option, event) {
2001
+ var pointerEvent = event;
2002
+ if (event.type === 'pointerdown' && pointerEvent.button !== undefined && pointerEvent.button !== 0) {
2003
+ event.stopPropagation();
2004
+ return;
2005
+ }
2006
+ if (event.cancelable) {
2007
+ event.preventDefault();
2008
+ }
2009
+ event.stopPropagation();
2010
+ option.dispatchEvent(new MouseEvent('click', {
2011
+ bubbles: true,
2012
+ cancelable: true,
2013
+ view: window
2014
+ }));
2015
+ this.ignoreNextNativeOptionClick(option);
2016
+ }
2017
+ ignoreNextNativeOptionClick(option) {
2018
+ this.optionClickFromPointerDown = option;
2019
+ if (this.optionClickGuardTimer) {
2020
+ clearTimeout(this.optionClickGuardTimer);
2021
+ }
2022
+ this.optionClickGuardTimer = setTimeout(() => {
2023
+ if (this.optionClickFromPointerDown === option) {
2024
+ this.optionClickFromPointerDown = null;
2025
+ }
2026
+ }, 500);
2027
+ }
2028
+ shouldIgnoreNativeOptionClick(evt) {
2029
+ if (!this.optionClickFromPointerDown || !evt || evt.type !== 'click') {
2030
+ return false;
2031
+ }
2032
+ if (evt.currentTarget !== this.optionClickFromPointerDown) {
2033
+ return false;
2034
+ }
2035
+ this.optionClickFromPointerDown = null;
2036
+ if (this.optionClickGuardTimer) {
2037
+ clearTimeout(this.optionClickGuardTimer);
2038
+ this.optionClickGuardTimer = null;
2039
+ }
2040
+ if (evt.cancelable) {
2041
+ evt.preventDefault();
2042
+ }
2043
+ evt.stopPropagation();
2044
+ return true;
2045
+ }
1982
2046
  getAriaLabel() {
1983
2047
  if (this.settings && this.settings.ariaLabel) {
1984
2048
  return this.settings.ariaLabel;
@@ -2621,6 +2685,9 @@ class AngularMultiSelect {
2621
2685
  //this.calculateDropdownDirection();
2622
2686
  }
2623
2687
  onItemClick(item, index, evt) {
2688
+ if (this.shouldIgnoreNativeOptionClick(evt)) {
2689
+ return;
2690
+ }
2624
2691
  if (item.disabled) {
2625
2692
  return;
2626
2693
  }
@@ -2642,6 +2709,12 @@ class AngularMultiSelect {
2642
2709
  }
2643
2710
  }
2644
2711
  else {
2712
+ if (this.settings.singleSelection) {
2713
+ this.onTouchedCallback(this.selectedItems);
2714
+ this.closeDropdown();
2715
+ this.syncSelectAllState();
2716
+ return;
2717
+ }
2645
2718
  this.removeSelected(item);
2646
2719
  this.onDeSelect.emit(item);
2647
2720
  }
@@ -3194,6 +3267,11 @@ class AngularMultiSelect {
3194
3267
  }
3195
3268
  ngOnDestroy() {
3196
3269
  this.restoreDropdownPanel(true);
3270
+ if (this.optionClickGuardTimer) {
3271
+ clearTimeout(this.optionClickGuardTimer);
3272
+ this.optionClickGuardTimer = null;
3273
+ }
3274
+ this.optionClickFromPointerDown = null;
3197
3275
  if (this.subscription) {
3198
3276
  this.subscription.unsubscribe();
3199
3277
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "../../../node_modules/ng-packagr/package.schema.json",
3
3
  "name": "@stackline/angular-multiselect-dropdown",
4
- "version": "22.0.0",
4
+ "version": "22.0.2",
5
5
  "license": "MIT",
6
6
  "author": "Pradeep Terli (Original), Alexandro Paixao Marques (Maintainer)",
7
7
  "description": "Angular multiselect dropdown for Angular 22 with maintained release lines, accessibility-focused and keyboard/ARIA tested interactions, dialog-safe body overlays, Stackline skins, search, grouping, templates, headless helpers, and forms support.",
@@ -60,10 +60,6 @@
60
60
  "css-theme",
61
61
  "legacy-angular",
62
62
  "angular-compatibility",
63
- "angular21",
64
- "angular20",
65
- "angular19",
66
- "angular14",
67
63
  "angular2-multiselect",
68
64
  "angular2-multiselect-dropdown",
69
65
  "migration-friendly",
@@ -72,13 +68,14 @@
72
68
  "ngx-multiselect",
73
69
  "virtual-scroll",
74
70
  "angular22",
75
- "angular 22"
71
+ "angular 22",
72
+ "angular-22"
76
73
  ],
77
- "homepage": "https://alexandro.net/docs/angular/multiselect/",
74
+ "homepage": "https://alexandro.net/docs/angular/multiselect/angular-22/",
78
75
  "peerDependencies": {
79
- "@angular/core": ">=22.0.0 <23.0.0",
80
- "@angular/forms": ">=22.0.0 <23.0.0",
81
- "@angular/common": ">=22.0.0 <23.0.0"
76
+ "@angular/core": ">=22.0.0 <24.0.0",
77
+ "@angular/forms": ">=22.0.0 <24.0.0",
78
+ "@angular/common": ">=22.0.0 <24.0.0"
82
79
  },
83
80
  "repository": {
84
81
  "type": "git",
@@ -88,7 +85,7 @@
88
85
  "url": "https://github.com/alexandroit/angular-multiselect-dropdown/issues"
89
86
  },
90
87
  "engines": {
91
- "node": ">=22.22.3"
88
+ "node": "^22.22.3 || ^24.15.0 || >=26.0.0"
92
89
  },
93
90
  "module": "fesm2022/stackline-angular-multiselect-dropdown.mjs",
94
91
  "typings": "types/stackline-angular-multiselect-dropdown.d.ts",
@@ -408,6 +408,8 @@ declare class AngularMultiSelect implements OnInit, ControlValueAccessor, OnChan
408
408
  private dropdownAppendedToBody;
409
409
  private overlayListenersBound;
410
410
  private overlayPositionTimer;
411
+ private optionClickFromPointerDown;
412
+ private optionClickGuardTimer;
411
413
  private boundOverlayPositionUpdate;
412
414
  private overlayThemeVariables;
413
415
  id: any;
@@ -455,6 +457,10 @@ declare class AngularMultiSelect implements OnInit, ControlValueAccessor, OnChan
455
457
  private clearOverlayPositionTimer;
456
458
  private scheduleDropdownPositionUpdate;
457
459
  onDropdownPanelPointerDown(event: Event): void;
460
+ private getPointerDownOption;
461
+ private selectOptionFromPointerDown;
462
+ private ignoreNextNativeOptionClick;
463
+ private shouldIgnoreNativeOptionClick;
458
464
  getAriaLabel(): string;
459
465
  getListboxAriaLabel(): string;
460
466
  getSearchAriaLabel(): string;