Skip to content

Commit 0d6fa41

Browse files
authored
Merge branch 'angular:main' into aria-tests
2 parents df3de98 + bb4f8ec commit 0d6fa41

68 files changed

Lines changed: 1536 additions & 426 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: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,45 @@
1+
<a name="22.0.0-next.7"></a>
2+
# 22.0.0-next.7 "astatine-agriculture" (2026-04-29)
3+
### aria
4+
| Commit | Type | Description |
5+
| -- | -- | -- |
6+
| [6ec07bc0c](https://github.com/angular/components/commit/6ec07bc0cbe39be48faaf6021caecf2d0037df1f) | feat | **grid:** add test harnesses ([#33081](https://github.com/angular/components/pull/33081)) |
7+
| [05419c552](https://github.com/angular/components/commit/05419c5522305275f45b33e844adb8f063454bc2) | fix | **menu:** use computed for menu item patterns, with trigger on visible ([#33118](https://github.com/angular/components/pull/33118)) |
8+
### cdk
9+
| Commit | Type | Description |
10+
| -- | -- | -- |
11+
| [1a5d5d101](https://github.com/angular/components/commit/1a5d5d101aa0c3d3113ca8e77f0dbe4175afe655) | feat | **dialog:** add the ability to pass bindings |
12+
| [b916ef907](https://github.com/angular/components/commit/b916ef907fc15fd889ff0fe6fdb7c054331c906b) | fix | **tree:** enter/space key on child node should not toggle parent node expansion ([#33125](https://github.com/angular/components/pull/33125)) |
13+
### material
14+
| Commit | Type | Description |
15+
| -- | -- | -- |
16+
| [867ba993b](https://github.com/angular/components/commit/867ba993b3baf35868d7c898e77289870316bbb9) | feat | **bottom-sheet:** add the ability to pass bindings |
17+
| [bf3596b53](https://github.com/angular/components/commit/bf3596b53ba1cf118ec06343f8a7772e0fb0e55d) | feat | **dialog:** add the ability to pass bindings |
18+
| [cb9148dca](https://github.com/angular/components/commit/cb9148dca63d4363bdd8b6d77cee46f93c5d2556) | fix | **stepper:** allow stepper to be labelled ([#33137](https://github.com/angular/components/pull/33137)) |
19+
### google-maps
20+
| Commit | Type | Description |
21+
| -- | -- | -- |
22+
| [e44ff8318](https://github.com/angular/components/commit/e44ff8318911927624d90e0d2fcba6ee94ec5ff7) | feat | Add support for the gmp-click event ([#33147](https://github.com/angular/components/pull/33147)) |
23+
24+
<!-- CHANGELOG SPLIT MARKER -->
25+
26+
<a name="21.2.9"></a>
27+
# 21.2.9 "astatine-astronaut" (2026-04-29)
28+
### aria
29+
| Commit | Type | Description |
30+
| -- | -- | -- |
31+
| [bf14cc9d9](https://github.com/angular/components/commit/bf14cc9d9fd349974cba853d4747b6859b3aae5b) | fix | **menu:** use computed for menu item patterns, with trigger on visible ([#33118](https://github.com/angular/components/pull/33118)) |
32+
### cdk
33+
| Commit | Type | Description |
34+
| -- | -- | -- |
35+
| [3a3852d45](https://github.com/angular/components/commit/3a3852d45a4bbcfb23b46ca00e0eba1d70081ba3) | fix | **tree:** enter/space key on child node should not toggle parent node expansion ([#33125](https://github.com/angular/components/pull/33125)) |
36+
### material
37+
| Commit | Type | Description |
38+
| -- | -- | -- |
39+
| [51271c619](https://github.com/angular/components/commit/51271c6194a9b55ee847c566a8960c9be5ec7cce) | fix | **stepper:** allow stepper to be labelled ([#33137](https://github.com/angular/components/pull/33137)) |
40+
41+
<!-- CHANGELOG SPLIT MARKER -->
42+
143
<a name="22.0.0-next.6"></a>
244
# 22.0.0-next.6 "v22-0-0-next-6" (2026-04-22)
345
### aria

MODULE.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ use_repo(node, "nodejs_toolchains")
7373
pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
7474
pnpm.pnpm(
7575
name = "pnpm",
76-
pnpm_version = "10.33.0",
77-
pnpm_version_integrity = "sha512-EFaLtKavtYyes2MNqQzJUWQXq+vT+rvmc58K55VyjaFJHp21pUTHatjrdXD1xLs9bGN7LLQb/c20f6gjyGSTGQ==",
76+
pnpm_version = "10.33.2",
77+
pnpm_version_integrity = "sha512-qQ+vb+6rca1sblf5Tg/hoS9dzCLNdU20CulZPraj4LaxLjVAIYuzeuCDQEsfLObbKkEh6XmCm0r/lLmfSdoc+A==",
7878
)
7979
use_repo(pnpm, "pnpm")
8080

goldens/aria/accordion/index.api.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as _angular_cdk_bidi from '@angular/cdk/bidi';
88
import * as _angular_core from '@angular/core';
99
import { OnDestroy } from '@angular/core';
1010
import { OnInit } from '@angular/core';
11+
import { Signal } from '@angular/core';
1112

1213
// @public
1314
export class AccordionContent {
@@ -18,17 +19,19 @@ export class AccordionContent {
1819
}
1920

2021
// @public
21-
export class AccordionGroup {
22+
export class AccordionGroup implements OnDestroy {
23+
constructor();
2224
collapseAll(): void;
25+
readonly _collection: SortedCollection<AccordionTrigger>;
2326
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2427
readonly element: HTMLElement;
2528
expandAll(): void;
2629
readonly multiExpandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
30+
// (undocumented)
31+
ngOnDestroy(): void;
2732
readonly _pattern: AccordionGroupPattern;
28-
_registerTrigger(trigger: AccordionTrigger): void;
2933
readonly softDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
3034
readonly textDirection: _angular_core.WritableSignal<_angular_cdk_bidi.Direction>;
31-
_unregisterTrigger(trigger: AccordionTrigger): void;
3235
readonly wrap: _angular_core.InputSignalWithTransform<boolean, unknown>;
3336
// (undocumented)
3437
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AccordionGroup, "[ngAccordionGroup]", ["ngAccordionGroup"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiExpandable": { "alias": "multiExpandable"; "required": false; "isSignal": true; }; "softDisabled": { "alias": "softDisabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -61,7 +64,6 @@ export class AccordionTrigger implements OnInit, OnDestroy {
6164
expand(): void;
6265
readonly expanded: _angular_core.ModelSignal<boolean>;
6366
readonly id: _angular_core.InputSignal<string>;
64-
readonly index: _angular_core.InputSignal<number | undefined>;
6567
// (undocumented)
6668
ngOnDestroy(): void;
6769
// (undocumented)
@@ -71,7 +73,7 @@ export class AccordionTrigger implements OnInit, OnDestroy {
7173
_pattern: AccordionTriggerPattern;
7274
toggle(): void;
7375
// (undocumented)
74-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AccordionTrigger, "[ngAccordionTrigger]", ["ngAccordionTrigger"], { "panel": { "alias": "panel"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, never, true, never>;
76+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AccordionTrigger, "[ngAccordionTrigger]", ["ngAccordionTrigger"], { "panel": { "alias": "panel"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, never, true, never>;
7577
// (undocumented)
7678
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionTrigger, never>;
7779
}

goldens/aria/listbox/index.api.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@
66

77
import * as _angular_cdk_bidi from '@angular/cdk/bidi';
88
import * as _angular_core from '@angular/core';
9+
import { OnDestroy } from '@angular/core';
10+
import { OnInit } from '@angular/core';
911
import { Signal } from '@angular/core';
1012

1113
// @public
12-
export class Listbox<V> {
14+
export class Listbox<V> implements OnDestroy {
1315
constructor();
1416
readonly activeDescendant: Signal<string | undefined>;
17+
readonly _collection: SortedCollection<Option_2<V>>;
1518
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1619
readonly element: HTMLElement;
1720
readonly focusMode: _angular_core.InputSignal<"roving" | "activedescendant">;
1821
gotoFirst(): void;
1922
readonly id: _angular_core.InputSignal<string>;
20-
protected readonly items: Signal<OptionPattern<V>[]>;
2123
readonly multi: _angular_core.InputSignalWithTransform<boolean, unknown>;
24+
// (undocumented)
25+
ngOnDestroy(): void;
2226
readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
2327
readonly _pattern: ListboxPattern<V>;
2428
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -32,18 +36,22 @@ export class Listbox<V> {
3236
readonly value: _angular_core.ModelSignal<V[]>;
3337
readonly wrap: _angular_core.InputSignalWithTransform<boolean, unknown>;
3438
// (undocumented)
35-
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"; }, ["_options"], 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, [{ directive: typeof ComboboxPopup; inputs: {}; outputs: {}; }]>;
3640
// (undocumented)
3741
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Listbox<any>, never>;
3842
}
3943

4044
// @public
41-
class Option_2<V> {
45+
class Option_2<V> implements OnInit, OnDestroy {
4246
readonly active: _angular_core.Signal<boolean>;
4347
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
4448
readonly element: HTMLElement;
4549
readonly id: _angular_core.InputSignal<string>;
4650
readonly label: _angular_core.InputSignal<string | undefined>;
51+
// (undocumented)
52+
ngOnDestroy(): void;
53+
// (undocumented)
54+
ngOnInit(): void;
4755
readonly _pattern: OptionPattern<V>;
4856
readonly selected: _angular_core.Signal<boolean | undefined>;
4957
readonly value: _angular_core.InputSignal<V>;

goldens/aria/private/index.api.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import * as _angular_core from '@angular/core';
88
import { ElementRef } from '@angular/core';
99
import { OnDestroy } from '@angular/core';
10+
import { Signal } from '@angular/core';
1011
import { untracked } from '@angular/core/primitives/signals';
1112

1213
// @public
@@ -671,6 +672,7 @@ export interface SimpleComboboxInputs extends ExpansionItem {
671672
element: SignalLike<HTMLElement>;
672673
inlineSuggestion: SignalLike<string | undefined>;
673674
popup: SignalLike<SimpleComboboxPopupPattern | undefined>;
675+
softDisabled?: SignalLike<boolean>;
674676
value: WritableSignalLike<string>;
675677
}
676678

@@ -701,6 +703,7 @@ export class SimpleComboboxPattern {
701703
onKeydown(event: KeyboardEvent): void;
702704
readonly popupId: _angular_core.Signal<string | undefined>;
703705
readonly popupType: _angular_core.Signal<"listbox" | "tree" | "grid" | "dialog" | undefined>;
706+
readonly softDisabled: () => boolean;
704707
readonly value: WritableSignalLike<string>;
705708
}
706709

@@ -729,6 +732,20 @@ export class SimpleComboboxPopupPattern {
729732
// @public
730733
export function sortDirectives(a: HasElement, b: HasElement): 1 | -1;
731734

735+
// @public
736+
export class SortedCollection<T extends HasElement> {
737+
// (undocumented)
738+
readonly orderedItems: Signal<T[]>;
739+
// (undocumented)
740+
register(item: T): void;
741+
// (undocumented)
742+
startObserving(element: HTMLElement): void;
743+
// (undocumented)
744+
stopObserving(): void;
745+
// (undocumented)
746+
unregister(item: T): void;
747+
}
748+
732749
// @public
733750
export interface TabInputs extends Omit<ListNavigationItem, 'index'>, Omit<ExpansionItem, 'expandable' | 'expanded'> {
734751
tabList: SignalLike<TabListPattern>;

goldens/aria/simple-combobox/index.api.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ export class Combobox extends DeferredContentAware implements OnInit {
2525
readonly _pattern: SimpleComboboxPattern;
2626
readonly _popup: _angular_core.WritableSignal<ComboboxPopup | undefined>;
2727
_registerPopup(popup: ComboboxPopup): void;
28+
readonly softDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2829
_unregisterPopup(): void;
2930
readonly value: _angular_core.ModelSignal<string>;
3031
// (undocumented)
31-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Combobox, "[ngCombobox]", ["ngCombobox"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "alwaysExpanded": { "alias": "alwaysExpanded"; "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>;
32+
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; }; "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>;
3233
// (undocumented)
3334
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Combobox, never>;
3435
}

goldens/aria/tabs/index.api.md

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as _angular_cdk_bidi from '@angular/cdk/bidi';
88
import * as _angular_core from '@angular/core';
99
import { OnDestroy } from '@angular/core';
1010
import { OnInit } from '@angular/core';
11+
import { Signal } from '@angular/core';
1112
import { WritableSignal } from '@angular/core';
1213

1314
// @public
@@ -21,7 +22,6 @@ export class Tab implements HasElement, OnInit, OnDestroy {
2122
// (undocumented)
2223
ngOnInit(): void;
2324
open(): void;
24-
readonly panel: _angular_core.Signal<TabPanel | undefined>;
2525
readonly _pattern: TabPattern;
2626
readonly selected: _angular_core.Signal<boolean>;
2727
readonly value: _angular_core.InputSignal<string>;
@@ -42,6 +42,7 @@ export class TabContent {
4242
// @public
4343
export class TabList implements OnInit, OnDestroy {
4444
constructor();
45+
readonly _collection: SortedCollection<Tab>;
4546
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
4647
readonly element: HTMLElement;
4748
// (undocumented)
@@ -54,15 +55,12 @@ export class TabList implements OnInit, OnDestroy {
5455
open(value: string): boolean;
5556
readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
5657
readonly _pattern: TabListPattern;
57-
// (undocumented)
58-
_registerTab(child: Tab): void;
5958
readonly selectedTab: _angular_core.ModelSignal<string | undefined>;
6059
readonly selectionMode: _angular_core.InputSignal<"follow" | "explicit">;
6160
readonly softDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
62-
readonly _sortedTabs: _angular_core.Signal<Tab[]>;
61+
readonly _tabPatterns: _angular_core.Signal<TabPattern[]>;
62+
readonly _tabsParent: Tabs;
6363
readonly textDirection: WritableSignal<_angular_cdk_bidi.Direction>;
64-
// (undocumented)
65-
_unregisterTab(child: Tab): void;
6664
readonly wrap: _angular_core.InputSignalWithTransform<boolean, unknown>;
6765
// (undocumented)
6866
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TabList, "[ngTabList]", ["ngTabList"], { "orientation": { "alias": "orientation"; "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; }; "selectedTab": { "alias": "selectedTab"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "selectedTab": "selectedTabChange"; }, never, never, true, never>;
@@ -80,7 +78,6 @@ export class TabPanel implements OnInit, OnDestroy {
8078
// (undocumented)
8179
ngOnInit(): void;
8280
readonly _pattern: TabPanelPattern;
83-
readonly _tabPattern: WritableSignal<TabPattern | undefined>;
8481
readonly value: _angular_core.InputSignal<string>;
8582
readonly visible: _angular_core.Signal<boolean>;
8683
// (undocumented)
@@ -90,19 +87,21 @@ export class TabPanel implements OnInit, OnDestroy {
9087
}
9188

9289
// @public
93-
export class Tabs {
90+
export class Tabs implements OnDestroy {
9491
constructor();
92+
readonly _collection: SortedCollection<TabPanel>;
9593
readonly element: HTMLElement;
9694
// (undocumented)
97-
findTabPanel(value?: string): TabPanel | undefined;
98-
// (undocumented)
99-
_registerList(list: TabList): void;
100-
// (undocumented)
101-
_registerPanel(panel: TabPanel): void;
95+
ngOnDestroy(): void;
96+
readonly _panelMap: _angular_core.Signal<Map<string, TabPanelPattern>>;
10297
// (undocumented)
103-
_unregisterList(list: TabList): void;
98+
_register(child: TabList): void;
99+
readonly _tabList: _angular_core.WritableSignal<TabList | undefined>;
100+
readonly _tabMap: _angular_core.Signal<Map<string, TabPattern>>;
101+
readonly _tabPanelPatterns: _angular_core.Signal<TabPanelPattern[]>;
102+
readonly _tabPatterns: _angular_core.Signal<TabPattern[] | undefined>;
104103
// (undocumented)
105-
_unregisterPanel(panel: TabPanel): void;
104+
_unregister(): void;
106105
// (undocumented)
107106
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Tabs, "[ngTabs]", ["ngTabs"], {}, {}, never, never, true, never>;
108107
// (undocumented)

0 commit comments

Comments
 (0)