Skip to content

Commit 0ca47b4

Browse files
authored
feat(aria/combobox): migrate simple-combobox directly into primary entrypoints (angular#33206)
* refactor(aria/combobox): deprecate and relocate legacy combobox entrypoints Relocate the public `src/aria/combobox` entrypoint to `src/aria/deprecated/combobox` and the private implementation patterns to `src/aria/private/deprecated/combobox`. This frees up the primary `combobox` namespace for the upcoming standalone combobox widget migration. - Add JSDoc `@deprecated` and `@breaking-change 22.0.0` markers to legacy classes and primitives. - Adjust relative imports outwards to accommodate the deeper directory nesting levels. - Re-wire build dependencies and entrypoint configurations across the framework package graph. - Bulk update consumer example module targets and prune unused dependencies. * refactor(aria/combobox): remove legacy combobox and autocomplete implementations Deletes the deprecated legacy combobox and autocomplete codebases, including their core entrypoints, integration layers within listbox and tree components, examples, dev-app pages, and associated API goldens. BREAKING CHANGE: The legacy combobox and autocomplete implementations have been removed. Use the new standalone combobox instead. * 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. BREAKING CHANGE: `SimpleCombobox` has been promoted to `Combobox`. All `simple-combobox` prefixed symbols, selectors, and tokens have been renamed to use the `combobox` prefix. * refactor(aria/combobox): relocate and restructure autocomplete and toolbar examples Relocate the autocomplete examples to `src/components-examples/aria/autocomplete` and toolbar examples to `src/components-examples/aria/toolbar`. - Restore naming continuity with the historical codebase by stripping redundant prefixes from example filenames and component selectors. - Sync dev-app preview routing layout paths and strict Bazel target dependency links.
1 parent b8201ed commit 0ca47b4

185 files changed

Lines changed: 2465 additions & 11230 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.

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)