Skip to content

Commit ce53c67

Browse files
committed
feat(aria/combobox): promote simple-combobox to stable un-prefixed combobox
- Relocates public, private, and example directories to clean `combobox` entry points. - Renames internal layout symbols, selectors, and uppercase tokens (`SIMPLE_COMBOBOX_POPUP` -> `COMBOBOX_POPUP`). - Establishes full documentation extraction parity with the `json_api` Bazel rule target. - Standardizes the accompanying toolbar component showcase into the clean `aria-toolbar` path. - Re-routes dev-app navigation links and migrates public API golden records.
1 parent c968c9b commit ce53c67

99 files changed

Lines changed: 356 additions & 339 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.
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
## API Report File for "@angular/aria_simple-combobox"
1+
## API Report File for "@angular/aria_combobox"
22

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

77
import * as _angular_core from '@angular/core';
8+
import { ComboboxPattern } from '@angular/aria/private';
9+
import { ComboboxPopupPattern } from '@angular/aria/private';
810
import { DeferredContentAware } from '@angular/aria/private';
911
import * as i1 from '@angular/aria/private';
1012
import { OnDestroy } from '@angular/core';
1113
import { OnInit } from '@angular/core';
12-
import { SimpleComboboxPattern } from '@angular/aria/private';
13-
import { SimpleComboboxPopupPattern } from '@angular/aria/private';
1414

1515
// @public
1616
export class Combobox extends DeferredContentAware implements OnInit {
@@ -22,7 +22,7 @@ export class Combobox extends DeferredContentAware implements OnInit {
2222
readonly inlineSuggestion: _angular_core.InputSignal<string | undefined>;
2323
// (undocumented)
2424
ngOnInit(): void;
25-
readonly _pattern: SimpleComboboxPattern;
25+
readonly _pattern: ComboboxPattern;
2626
readonly _popup: _angular_core.WritableSignal<ComboboxPopup | undefined>;
2727
_registerPopup(popup: ComboboxPopup): void;
2828
readonly softDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -44,7 +44,7 @@ export class ComboboxPopup implements OnInit, OnDestroy {
4444
ngOnDestroy(): void;
4545
// (undocumented)
4646
ngOnInit(): void;
47-
readonly _pattern: SimpleComboboxPopupPattern;
47+
readonly _pattern: ComboboxPopupPattern;
4848
readonly popupId: _angular_core.Signal<string | undefined>;
4949
readonly popupType: _angular_core.InputSignal<"listbox" | "tree" | "grid" | "dialog">;
5050
_registerWidget(widget: ComboboxWidget): void;

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/private/index.api.md

Lines changed: 64 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,70 @@ export class AccordionTriggerPattern implements ListNavigationItem, ListFocusIte
5959
toggle(): void;
6060
}
6161

62+
// @public
63+
export interface ComboboxInputs extends ExpansionItem {
64+
alwaysExpanded: SignalLike<boolean>;
65+
disabled: SignalLike<boolean>;
66+
element: SignalLike<HTMLElement>;
67+
inlineSuggestion: SignalLike<string | undefined>;
68+
popup: SignalLike<ComboboxPopupPattern | undefined>;
69+
softDisabled?: SignalLike<boolean>;
70+
value: WritableSignalLike<string>;
71+
}
72+
73+
// @public
74+
export class ComboboxPattern {
75+
constructor(inputs: ComboboxInputs);
76+
readonly activeDescendant: _angular_core.Signal<string | undefined>;
77+
readonly autocomplete: _angular_core.Signal<"none" | "inline" | "list" | "both">;
78+
click: _angular_core.Signal<ClickEventManager<PointerEvent>>;
79+
closePopupOnBlurEffect(): void;
80+
readonly disabled: () => boolean;
81+
readonly element: () => HTMLElement;
82+
highlightEffect(): void;
83+
readonly inlineSuggestion: () => string | undefined;
84+
// (undocumented)
85+
readonly inputs: ComboboxInputs;
86+
readonly isDeleting: _angular_core.WritableSignal<boolean>;
87+
readonly isEditable: _angular_core.Signal<boolean>;
88+
readonly isExpanded: _angular_core.Signal<boolean>;
89+
readonly isFocused: _angular_core.WritableSignal<boolean>;
90+
readonly keyboardEventRelay: _angular_core.WritableSignal<KeyboardEvent | undefined>;
91+
keyboardEventRelayEffect(): void;
92+
keydown: _angular_core.Signal<KeyboardEventManager<KeyboardEvent>>;
93+
onClick(event: PointerEvent): void;
94+
onFocusin(): void;
95+
onFocusout(event: FocusEvent): void;
96+
onInput(event: Event): void;
97+
onKeydown(event: KeyboardEvent): void;
98+
readonly popupId: _angular_core.Signal<string | undefined>;
99+
readonly popupType: _angular_core.Signal<"listbox" | "tree" | "grid" | "dialog" | undefined>;
100+
readonly softDisabled: () => boolean;
101+
readonly value: WritableSignalLike<string>;
102+
}
103+
104+
// @public
105+
export interface ComboboxPopupInputs {
106+
activeDescendant: SignalLike<string | undefined>;
107+
controlTarget: SignalLike<HTMLElement | undefined>;
108+
popupId: SignalLike<string | undefined>;
109+
popupType: SignalLike<'listbox' | 'tree' | 'grid' | 'dialog'>;
110+
}
111+
112+
// @public
113+
export class ComboboxPopupPattern {
114+
constructor(inputs: ComboboxPopupInputs);
115+
readonly activeDescendant: () => string | undefined;
116+
readonly controlTarget: () => HTMLElement | undefined;
117+
// (undocumented)
118+
readonly inputs: ComboboxPopupInputs;
119+
readonly isFocused: _angular_core.WritableSignal<boolean>;
120+
onFocusin(): void;
121+
onFocusout(event: FocusEvent): void;
122+
readonly popupId: () => string | undefined;
123+
readonly popupType: () => "listbox" | "tree" | "grid" | "dialog";
124+
}
125+
62126
// @public (undocumented)
63127
export function computed<T>(computation: () => T): SignalLike<T>;
64128

@@ -465,70 +529,6 @@ export function signal<T>(initialValue: T): WritableSignalLike<T>;
465529
// @public (undocumented)
466530
export type SignalLike<T> = () => T;
467531

468-
// @public
469-
export interface SimpleComboboxInputs extends ExpansionItem {
470-
alwaysExpanded: SignalLike<boolean>;
471-
disabled: SignalLike<boolean>;
472-
element: SignalLike<HTMLElement>;
473-
inlineSuggestion: SignalLike<string | undefined>;
474-
popup: SignalLike<SimpleComboboxPopupPattern | undefined>;
475-
softDisabled?: SignalLike<boolean>;
476-
value: WritableSignalLike<string>;
477-
}
478-
479-
// @public
480-
export class SimpleComboboxPattern {
481-
constructor(inputs: SimpleComboboxInputs);
482-
readonly activeDescendant: _angular_core.Signal<string | undefined>;
483-
readonly autocomplete: _angular_core.Signal<"none" | "inline" | "list" | "both">;
484-
click: _angular_core.Signal<ClickEventManager<PointerEvent>>;
485-
closePopupOnBlurEffect(): void;
486-
readonly disabled: () => boolean;
487-
readonly element: () => HTMLElement;
488-
highlightEffect(): void;
489-
readonly inlineSuggestion: () => string | undefined;
490-
// (undocumented)
491-
readonly inputs: SimpleComboboxInputs;
492-
readonly isDeleting: _angular_core.WritableSignal<boolean>;
493-
readonly isEditable: _angular_core.Signal<boolean>;
494-
readonly isExpanded: _angular_core.Signal<boolean>;
495-
readonly isFocused: _angular_core.WritableSignal<boolean>;
496-
readonly keyboardEventRelay: _angular_core.WritableSignal<KeyboardEvent | undefined>;
497-
keyboardEventRelayEffect(): void;
498-
keydown: _angular_core.Signal<KeyboardEventManager<KeyboardEvent>>;
499-
onClick(event: PointerEvent): void;
500-
onFocusin(): void;
501-
onFocusout(event: FocusEvent): void;
502-
onInput(event: Event): void;
503-
onKeydown(event: KeyboardEvent): void;
504-
readonly popupId: _angular_core.Signal<string | undefined>;
505-
readonly popupType: _angular_core.Signal<"listbox" | "tree" | "grid" | "dialog" | undefined>;
506-
readonly softDisabled: () => boolean;
507-
readonly value: WritableSignalLike<string>;
508-
}
509-
510-
// @public
511-
export interface SimpleComboboxPopupInputs {
512-
activeDescendant: SignalLike<string | undefined>;
513-
controlTarget: SignalLike<HTMLElement | undefined>;
514-
popupId: SignalLike<string | undefined>;
515-
popupType: SignalLike<'listbox' | 'tree' | 'grid' | 'dialog'>;
516-
}
517-
518-
// @public
519-
export class SimpleComboboxPopupPattern {
520-
constructor(inputs: SimpleComboboxPopupInputs);
521-
readonly activeDescendant: () => string | undefined;
522-
readonly controlTarget: () => HTMLElement | undefined;
523-
// (undocumented)
524-
readonly inputs: SimpleComboboxPopupInputs;
525-
readonly isFocused: _angular_core.WritableSignal<boolean>;
526-
onFocusin(): void;
527-
onFocusout(event: FocusEvent): void;
528-
readonly popupId: () => string | undefined;
529-
readonly popupType: () => "listbox" | "tree" | "grid" | "dialog";
530-
}
531-
532532
// @public
533533
export function sortDirectives(a: HasElement, b: HasElement): 1 | -1;
534534

src/aria/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ copy_to_directory(
4646
name = "adev_assets",
4747
srcs = [
4848
"//src/aria/accordion:json_api",
49+
"//src/aria/combobox:json_api",
4950
"//src/aria/grid:json_api",
5051
"//src/aria/listbox:json_api",
5152
"//src/aria/menu:json_api",
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
load("//tools:defaults.bzl", "ng_project", "ng_web_test_suite", "ts_project")
1+
load("//tools:defaults.bzl", "extract_api_to_json", "ng_project", "ng_web_test_suite", "ts_project")
22

33
package(default_visibility = ["//visibility:public"])
44

55
ng_project(
6-
name = "simple-combobox",
6+
name = "combobox",
77
srcs = glob(
88
["**/*.ts"],
99
exclude = ["**/*.spec.ts"],
@@ -23,7 +23,7 @@ ts_project(
2323
exclude = ["**/*.e2e.spec.ts"],
2424
),
2525
deps = [
26-
":simple-combobox",
26+
":combobox",
2727
"//:node_modules/@angular/common",
2828
"//:node_modules/@angular/core",
2929
"//:node_modules/@angular/platform-browser",
@@ -38,3 +38,23 @@ ng_web_test_suite(
3838
name = "unit_tests",
3939
deps = [":unit_test_sources"],
4040
)
41+
42+
filegroup(
43+
name = "source-files",
44+
srcs = glob(
45+
["**/*.ts"],
46+
exclude = ["**/*.spec.ts"],
47+
),
48+
)
49+
50+
extract_api_to_json(
51+
name = "json_api",
52+
srcs = [
53+
":source-files",
54+
],
55+
entry_point = ":index.ts",
56+
module_name = "@angular/aria/combobox",
57+
output_name = "aria-combobox.json",
58+
private_modules = [""],
59+
repo = "angular/components",
60+
)

src/aria/simple-combobox/simple-combobox-popup.ts renamed to src/aria/combobox/combobox-popup.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88

99
import {computed, Directive, inject, input, OnDestroy, OnInit, signal} from '@angular/core';
10-
import {DeferredContent, SimpleComboboxPopupPattern} from '@angular/aria/private';
11-
import type {Combobox} from './simple-combobox';
12-
import type {ComboboxWidget} from './simple-combobox-widget';
13-
import {SIMPLE_COMBOBOX_POPUP} from './simple-combobox-tokens';
10+
import {DeferredContent, ComboboxPopupPattern} from '@angular/aria/private';
11+
import type {Combobox} from './combobox';
12+
import type {ComboboxWidget} from './combobox-widget';
13+
import {COMBOBOX_POPUP} from './combobox-tokens';
1414

1515
/**
1616
* A structural directive that marks the `ng-template` to be used as the popup
@@ -30,7 +30,7 @@ import {SIMPLE_COMBOBOX_POPUP} from './simple-combobox-tokens';
3030
selector: 'ng-template[ngComboboxPopup]',
3131
exportAs: 'ngComboboxPopup',
3232
hostDirectives: [DeferredContent],
33-
providers: [{provide: SIMPLE_COMBOBOX_POPUP, useExisting: ComboboxPopup}],
33+
providers: [{provide: COMBOBOX_POPUP, useExisting: ComboboxPopup}],
3434
})
3535
export class ComboboxPopup implements OnInit, OnDestroy {
3636
private readonly _deferredContent = inject(DeferredContent);
@@ -54,7 +54,7 @@ export class ComboboxPopup implements OnInit, OnDestroy {
5454
readonly popupType = input<'listbox' | 'tree' | 'grid' | 'dialog'>('listbox');
5555

5656
/** The popup pattern. */
57-
readonly _pattern = new SimpleComboboxPopupPattern({
57+
readonly _pattern = new ComboboxPopupPattern({
5858
...this,
5959
});
6060

src/aria/simple-combobox/simple-combobox-tokens.ts renamed to src/aria/combobox/combobox-tokens.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88

99
import {InjectionToken} from '@angular/core';
10-
import type {ComboboxPopup} from './simple-combobox-popup';
10+
import type {ComboboxPopup} from './combobox-popup';
1111

1212
/** Token used to expose the combobox popup. */
13-
export const SIMPLE_COMBOBOX_POPUP = new InjectionToken<ComboboxPopup>('SIMPLE_COMBOBOX_POPUP');
13+
export const COMBOBOX_POPUP = new InjectionToken<ComboboxPopup>('COMBOBOX_POPUP');

src/aria/simple-combobox/simple-combobox-widget.ts renamed to src/aria/combobox/combobox-widget.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88

99
import {Directive, ElementRef, inject, input, OnDestroy, OnInit, signal} from '@angular/core';
10-
import {SIMPLE_COMBOBOX_POPUP} from './simple-combobox-tokens';
10+
import {COMBOBOX_POPUP} from './combobox-tokens';
1111

1212
/**
1313
* Identifies an element as a widget within a combobox popup.
@@ -27,7 +27,7 @@ import {SIMPLE_COMBOBOX_POPUP} from './simple-combobox-tokens';
2727
export class ComboboxWidget implements OnInit, OnDestroy {
2828
/** The element that the popup widget is attached to. */
2929
private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
30-
private readonly _popup = inject(SIMPLE_COMBOBOX_POPUP);
30+
private readonly _popup = inject(COMBOBOX_POPUP);
3131

3232
/** A reference to the popup widget element. */
3333
readonly element = this._elementRef.nativeElement;

src/aria/simple-combobox/simple-combobox.spec.ts renamed to src/aria/combobox/combobox.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import {
99
} from '@angular/core';
1010
import {ComponentFixture, TestBed} from '@angular/core/testing';
1111
import {By} from '@angular/platform-browser';
12-
import {Combobox} from './simple-combobox';
13-
import {ComboboxPopup} from './simple-combobox-popup';
14-
import {ComboboxWidget} from './simple-combobox-widget';
12+
import {Combobox} from './combobox';
13+
import {ComboboxPopup} from './combobox-popup';
14+
import {ComboboxWidget} from './combobox-widget';
1515

1616
import {Listbox, Option} from '../listbox';
1717
import {runAccessibilityChecks} from '@angular/cdk/testing/private';

src/aria/simple-combobox/simple-combobox.ts renamed to src/aria/combobox/combobox.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,8 @@ import {
1919
signal,
2020
Renderer2,
2121
} from '@angular/core';
22-
import {
23-
DeferredContentAware,
24-
SimpleComboboxPattern,
25-
tabIndexTransform,
26-
} from '@angular/aria/private';
27-
import type {ComboboxPopup} from './simple-combobox-popup';
22+
import {DeferredContentAware, ComboboxPattern, tabIndexTransform} from '@angular/aria/private';
23+
import type {ComboboxPopup} from './combobox-popup';
2824

2925
/**
3026
* The container element that wraps a combobox input and popup, and orchestrates its behavior.
@@ -103,7 +99,7 @@ export class Combobox extends DeferredContentAware implements OnInit {
10399
readonly inlineSuggestion = input<string | undefined>(undefined);
104100

105101
/** The combobox ui pattern. */
106-
readonly _pattern = new SimpleComboboxPattern({
102+
readonly _pattern = new ComboboxPattern({
107103
...this,
108104
element: () => this.element,
109105
expandable: () => true,

0 commit comments

Comments
 (0)