Skip to content

Commit 249d896

Browse files
authored
Merge branch 'angular:main' into aria-validation
2 parents 17023ff + cd62949 commit 249d896

209 files changed

Lines changed: 3275 additions & 12030 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,75 @@
1+
<a name="22.0.0-next.8"></a>
2+
# 22.0.0-next.8 "plastic-wallaby" (2026-05-06)
3+
## Breaking Changes
4+
### aria
5+
- The legacy combobox and autocomplete implementations have been removed. Use the new standalone combobox instead.
6+
7+
* feat(aria/combobox): promote simple-combobox to stable un-prefixed combobox
8+
9+
- Relocates public, private, and example directories to clean `combobox` entry points.
10+
- Renames internal layout symbols, selectors, and uppercase tokens (`SIMPLE_COMBOBOX_POPUP` -> `COMBOBOX_POPUP`).
11+
- Establishes full documentation extraction parity with the `json_api` Bazel rule target.
12+
- Standardizes the accompanying toolbar component showcase into the clean `aria-toolbar` path.
13+
- Re-routes dev-app navigation links and migrates public API golden records.
14+
- `SimpleCombobox` has been promoted to `Combobox`. All `simple-combobox` prefixed symbols, selectors, and tokens have been renamed to use the `combobox` prefix.
15+
16+
* refactor(aria/combobox): relocate and restructure autocomplete and toolbar examples
17+
Relocate the autocomplete examples to `src/components-examples/aria/autocomplete` and toolbar examples to `src/components-examples/aria/toolbar`.
18+
- Restore naming continuity with the historical codebase by stripping redundant prefixes from example filenames and component selectors.
19+
- Sync dev-app preview routing layout paths and strict Bazel target dependency links.
20+
### cdk
21+
- * `CDK_DESCRIBEDBY_HOST_ATTRIBUTE` has been removed.
22+
* `CDK_DESCRIBEDBY_ID_PREFIX` has been removed.
23+
* The `injector` parameter of the `ConfigurableFocusTrap` and `FocusTrap` constructors is now required.
24+
* The boolean parameter of `ConfigurableFocusTrapFactory.create` has been replaced with a config object.
25+
* `MESSAGES_CONTAINER_ID` has been removed.
26+
- * The `event` parameter of `DropListRef.drop` is now required.
27+
- * `ContextMenuTracker` has been renamed to `MenuTracker`.
28+
### material
29+
- * `MatListOption.checkboxPosition` has been removed. use `togglePosition` instead.
30+
* `MatListOptionCheckboxPosition` has been renamed to `MatListOptionTogglePosition`.
31+
- * `ArrowViewState` has been removed.
32+
* `ArrowViewStateTransition` has been removed.
33+
### google-maps
34+
| Commit | Type | Description |
35+
| -- | -- | -- |
36+
| [b8201edee](https://github.com/angular/components/commit/b8201edeef62258c3d1e1ebeaf8ee14766918c22) | fix | deprecate heatmap layer ([#33208](https://github.com/angular/components/pull/33208)) |
37+
### material
38+
| Commit | Type | Description |
39+
| -- | -- | -- |
40+
| [add8f16c0](https://github.com/angular/components/commit/add8f16c01ad683b9e2ab9e1bf5ad3a984dd9921) | fix | **list:** breaking changes for v22 |
41+
| [9d73c98b5](https://github.com/angular/components/commit/9d73c98b57d46454d51344bbd59055bc06dabc6b) | fix | **menu:** missing panelClass getter ([#33191](https://github.com/angular/components/pull/33191)) |
42+
| [75718e4fb](https://github.com/angular/components/commit/75718e4fbebce2a7f8aa30550a12d58a5a6f9b93) | fix | **sort:** breaking changes for v22 |
43+
### cdk
44+
| Commit | Type | Description |
45+
| -- | -- | -- |
46+
| [24115c021](https://github.com/angular/components/commit/24115c02189ca0b1b3f09a909b8962d330f55f91) | feat | **portal:** add directives support to ComponentPortal ([#33142](https://github.com/angular/components/pull/33142)) |
47+
| [7426334c5](https://github.com/angular/components/commit/7426334c5efb76ac3f359e26a7f6e48e29d4ec78) | fix | **a11y:** breaking changes for v22 |
48+
| [81c6bbd89](https://github.com/angular/components/commit/81c6bbd89da765a3ce8fd9dd8fd0b36b8eac4ca4) | fix | **drag-drop:** breaking changes for v22 |
49+
| [ffb23f6f8](https://github.com/angular/components/commit/ffb23f6f825a0e86cd6d9bf3505af70b2264e588) | fix | **menu:** breaking changes for v22 |
50+
### aria
51+
| Commit | Type | Description |
52+
| -- | -- | -- |
53+
| [e3d84f2e0](https://github.com/angular/components/commit/e3d84f2e0adb9254d804c10ba24e6c4528efad53) | feat | **combobox:** add test harnesses ([#33194](https://github.com/angular/components/pull/33194)) |
54+
| [0ca47b4a0](https://github.com/angular/components/commit/0ca47b4a060595919fd2b2cd62d0097071c4795d) | feat | **combobox:** migrate simple-combobox directly into primary entrypoints ([#33206](https://github.com/angular/components/pull/33206)) |
55+
| [218a77cf9](https://github.com/angular/components/commit/218a77cf946808ca966c131f56c393ef91c662b3) | fix | **combobox:** separates placeholder prefixes ([#33163](https://github.com/angular/components/pull/33163)) |
56+
| [4d045b823](https://github.com/angular/components/commit/4d045b823e5d6f6ed3512189624a06ae423e9296) | fix | **menu:** do not set default aria-label ([#33202](https://github.com/angular/components/pull/33202)) |
57+
### multiple
58+
| Commit | Type | Description |
59+
| -- | -- | -- |
60+
| [bb4f8ec50](https://github.com/angular/components/commit/bb4f8ec50407500ba4d1aa131bcd3c828cad67ae) | fix | re-export collection util ([#33171](https://github.com/angular/components/pull/33171)) |
61+
62+
<!-- CHANGELOG SPLIT MARKER -->
63+
64+
<a name="21.2.10"></a>
65+
# 21.2.10 "metal-wallaby" (2026-05-06)
66+
### aria
67+
| Commit | Type | Description |
68+
| -- | -- | -- |
69+
| [48973661e](https://github.com/angular/components/commit/48973661ec50649918e3dcafc096d340219135da) | fix | **menu:** do not set default aria-label ([#33202](https://github.com/angular/components/pull/33202)) |
70+
71+
<!-- CHANGELOG SPLIT MARKER -->
72+
173
<a name="22.0.0-next.7"></a>
274
# 22.0.0-next.7 "astatine-agriculture" (2026-04-29)
375
### aria

MODULE.bazel

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,28 @@ bazel_dep(name = "bazel_skylib", version = "1.9.0")
1818
bazel_dep(name = "rules_browsers")
1919
git_override(
2020
module_name = "rules_browsers",
21-
commit = "b03f09ef28a08f8ae07482851cf5ecbf6ac23a2a",
21+
commit = "f8a3a661882bf36e537971a9e50fd19cada0d471",
2222
remote = "https://github.com/angular/rules_browsers.git",
2323
)
2424

2525
bazel_dep(name = "rules_sass")
2626
git_override(
2727
module_name = "rules_sass",
28-
commit = "a65d937fabd87672f7245aeaa5eb5a0c5a2abead",
28+
commit = "53e635b7fe0c2132b3b61f17cf0631bb35364013",
2929
remote = "https://github.com/angular/rules_sass.git",
3030
)
3131

3232
bazel_dep(name = "rules_angular")
3333
git_override(
3434
module_name = "rules_angular",
35-
commit = "b1d295334e70335dab7ac9984a989fae0a9c9dc2",
35+
commit = "88a34a4f4f10f495b051c06c2ffa8698829b9215",
3636
remote = "https://github.com/angular/rules_angular.git",
3737
)
3838

3939
bazel_dep(name = "devinfra")
4040
git_override(
4141
module_name = "devinfra",
42-
commit = "48c48fa3848de5bb0ec1c3203558f099765165ab",
42+
commit = "bb79de4712147000f5f289eac67e2ec366f57dbc",
4343
remote = "https://github.com/angular/dev-infra.git",
4444
)
4545

goldens/aria/combobox/index.api.md

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,76 +4,74 @@
44
55
```ts
66

7-
import * as _angular_cdk_bidi from '@angular/cdk/bidi';
87
import * as _angular_core from '@angular/core';
8+
import { ComboboxPattern } from '@angular/aria/private';
9+
import { ComboboxPopupPattern } from '@angular/aria/private';
10+
import { DeferredContentAware } from '@angular/aria/private';
11+
import * as i1 from '@angular/aria/private';
912
import { OnDestroy } from '@angular/core';
13+
import { OnInit } from '@angular/core';
1014

1115
// @public
12-
export class Combobox<V> {
16+
export class Combobox extends DeferredContentAware implements OnInit {
1317
constructor();
1418
readonly alwaysExpanded: _angular_core.InputSignalWithTransform<boolean, unknown>;
15-
close(): void;
1619
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1720
readonly element: HTMLElement;
18-
readonly expanded: _angular_core.Signal<boolean>;
19-
readonly filterMode: _angular_core.InputSignal<"manual" | "auto-select" | "highlight">;
20-
readonly firstMatch: _angular_core.InputSignal<V | undefined>;
21-
readonly inputElement: _angular_core.Signal<HTMLInputElement | undefined>;
22-
open(): void;
23-
readonly _pattern: ComboboxPattern<any, V>;
24-
readonly popup: _angular_core.Signal<ComboboxPopup<V> | undefined>;
25-
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
26-
protected readonly textDirection: _angular_core.Signal<_angular_cdk_bidi.Direction>;
21+
readonly expanded: _angular_core.ModelSignal<boolean>;
22+
readonly inlineSuggestion: _angular_core.InputSignal<string | undefined>;
2723
// (undocumented)
28-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Combobox<any>, "[ngCombobox]", ["ngCombobox"], { "filterMode": { "alias": "filterMode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "firstMatch": { "alias": "firstMatch"; "required": false; "isSignal": true; }; "alwaysExpanded": { "alias": "alwaysExpanded"; "required": false; "isSignal": true; }; }, {}, ["popup"], never, true, [{ directive: typeof DeferredContentAware; inputs: { "preserveContent": "preserveContent"; }; outputs: {}; }]>;
24+
ngOnInit(): void;
25+
readonly _pattern: ComboboxPattern;
26+
readonly _popup: _angular_core.WritableSignal<ComboboxPopup | undefined>;
27+
_registerPopup(popup: ComboboxPopup): void;
28+
readonly softDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
29+
readonly tabIndex: _angular_core.InputSignalWithTransform<number | undefined, string | number | undefined>;
30+
_unregisterPopup(): void;
31+
readonly value: _angular_core.ModelSignal<string>;
32+
// (undocumented)
33+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Combobox, "[ngCombobox]", ["ngCombobox"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "softDisabled": { "alias": "softDisabled"; "required": false; "isSignal": true; }; "alwaysExpanded": { "alias": "alwaysExpanded"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "inlineSuggestion": { "alias": "inlineSuggestion"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "value": "valueChange"; }, never, never, true, never>;
2934
// (undocumented)
30-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Combobox<any>, never>;
35+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Combobox, never>;
3136
}
3237

3338
// @public
34-
export class ComboboxDialog {
35-
constructor();
39+
export class ComboboxPopup implements OnInit, OnDestroy {
40+
readonly activeDescendant: _angular_core.Signal<string | undefined>;
41+
readonly combobox: _angular_core.InputSignal<Combobox>;
42+
readonly controlTarget: _angular_core.Signal<HTMLElement | undefined>;
3643
// (undocumented)
37-
close(): void;
38-
readonly combobox: Combobox<any>;
39-
readonly element: HTMLDialogElement;
40-
readonly id: _angular_core.InputSignal<string>;
44+
ngOnDestroy(): void;
4145
// (undocumented)
42-
readonly _pattern: ComboboxDialogPattern;
46+
ngOnInit(): void;
47+
readonly _pattern: ComboboxPopupPattern;
48+
readonly popupId: _angular_core.Signal<string | undefined>;
49+
readonly popupType: _angular_core.InputSignal<"listbox" | "tree" | "grid" | "dialog">;
50+
_registerWidget(widget: ComboboxWidget): void;
51+
_unregisterWidget(): void;
52+
readonly _widget: _angular_core.WritableSignal<ComboboxWidget | undefined>;
4353
// (undocumented)
44-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ComboboxDialog, "dialog[ngComboboxDialog]", ["ngComboboxDialog"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof ComboboxPopup; inputs: {}; outputs: {}; }]>;
54+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ComboboxPopup, "ng-template[ngComboboxPopup]", ["ngComboboxPopup"], { "combobox": { "alias": "combobox"; "required": true; "isSignal": true; }; "popupType": { "alias": "popupType"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.DeferredContent; inputs: {}; outputs: {}; }]>;
4555
// (undocumented)
46-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComboboxDialog, never>;
56+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComboboxPopup, never>;
4757
}
4858

4959
// @public
50-
export class ComboboxInput {
60+
export class ComboboxWidget implements OnInit, OnDestroy {
5161
constructor();
52-
readonly combobox: Combobox<any>;
62+
readonly activeDescendant: _angular_core.InputSignal<string | undefined>;
5363
readonly element: HTMLElement;
54-
readonly value: _angular_core.ModelSignal<string>;
55-
// (undocumented)
56-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ComboboxInput, "input[ngComboboxInput]", ["ngComboboxInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
57-
// (undocumented)
58-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComboboxInput, never>;
59-
}
60-
61-
// @public
62-
export class ComboboxPopup<V> {
63-
readonly combobox: Combobox<V> | null;
64-
readonly _controls: _angular_core.WritableSignal<ComboboxListboxControls<any, V> | ComboboxTreeControls<any, V> | ComboboxDialogPattern | undefined>;
6564
// (undocumented)
66-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ComboboxPopup<any>, "[ngComboboxPopup]", ["ngComboboxPopup"], {}, {}, never, never, true, never>;
65+
ngOnDestroy(): void;
6766
// (undocumented)
68-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComboboxPopup<any>, never>;
69-
}
70-
71-
// @public
72-
export class ComboboxPopupContainer {
67+
ngOnInit(): void;
68+
onFocusin(): void;
69+
onFocusout(event: FocusEvent): void;
70+
readonly popupId: _angular_core.WritableSignal<string | undefined>;
7371
// (undocumented)
74-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ComboboxPopupContainer, "ng-template[ngComboboxPopupContainer]", ["ngComboboxPopupContainer"], {}, {}, never, never, true, [{ directive: typeof DeferredContent; inputs: {}; outputs: {}; }]>;
72+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ComboboxWidget, "[ngComboboxWidget]", ["ngComboboxWidget"], { "activeDescendant": { "alias": "activeDescendant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7573
// (undocumented)
76-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComboboxPopupContainer, never>;
74+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComboboxWidget, never>;
7775
}
7876

7977
// (No @packageDocumentation comment for this package)

goldens/aria/simple-combobox/testing/index.api.md renamed to goldens/aria/combobox/testing/index.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## API Report File for "@angular/aria_simple-combobox_testing"
1+
## API Report File for "@angular/aria_combobox_testing"
22

33
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
44

goldens/aria/listbox/index.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export class Listbox<V> implements OnDestroy {
3636
readonly value: _angular_core.ModelSignal<V[]>;
3737
readonly wrap: _angular_core.InputSignalWithTransform<boolean, unknown>;
3838
// (undocumented)
39-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Listbox<any>, "[ngListbox]", ["ngListbox"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "softDisabled": { "alias": "softDisabled"; "required": false; "isSignal": true; }; "focusMode": { "alias": "focusMode"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "typeaheadDelay": { "alias": "typeaheadDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, [{ directive: typeof ComboboxPopup; inputs: {}; outputs: {}; }]>;
39+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Listbox<any>, "[ngListbox]", ["ngListbox"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "softDisabled": { "alias": "softDisabled"; "required": false; "isSignal": true; }; "focusMode": { "alias": "focusMode"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "typeaheadDelay": { "alias": "typeaheadDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
4040
// (undocumented)
4141
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Listbox<any>, never>;
4242
}

0 commit comments

Comments
 (0)