37781 Commits

Author SHA1 Message Date
leonsenft 89e2c77974 release: cut the v22.0.6 release v22.0.6 2026-07-08 14:36:38 -07:00
Kam d1aaf1a178 feat(docs-infra): add Angie mascot to the not found page
Replaces the plain "Page Not Found" text with the sad Angie mascot
speaking the message from a speech bubble, for a warmer, more on-brand
not-found page. Copy is unchanged and the "Feeling lucky?" search
results are untouched.

The sad pose is added as an SVG asset (cropped tight to the artwork) under
assets/images/angie/. The mascot is decorative (aria-hidden), and it scales
down to stay beside the bubble on mobile.

(cherry picked from commit 3ac2c7b2bc)
2026-07-08 12:45:48 -07:00
franmc01 2cb034ff1d docs: clarify runtime component comparison in elements guide
The popup service example framed the comparison against a vague
'previously you had to define a dynamic component' workflow and pointed
readers at steps no guide describes. Compare against today's
programmatic rendering approach with createComponent instead, which is
what the accompanying example actually uses, and link to the
programmatic rendering guide.

Also remove the note about excluding the component from compilation,
which no longer applies to standalone components.

Fixes #55148

(cherry picked from commit eac04cfb16)
2026-07-08 12:19:59 -07:00
Kam 87ab9f7fa4 feat(docs-infra): add Angie mascot to adev empty and error states
Several adev states show only plain text today. This brings the Angie
mascot into them for warmer, more on-brand empty states, with no change
to copy or behavior:

- Search dialog: a magnifying-glass Angie on "Start typing to see
  results", a questioning Angie on "No results found".
- API reference: a questioning Angie on "No API items found." and on the
  package filter's "No results found".
- Deprecated API pages: the back-turned orthos pose in the shared
  deprecation warning.

The mascots are decorative (aria-hidden) and sized per placement; the
poses are added as SVG assets under assets/images/angie/.

Also moves the Shiki highlighter init in the jsdoc-transforms spec into a
beforeAll, fixing a flake where the spec failed under randomized test
order.

(cherry picked from commit 95fbd0bd48)
2026-07-08 12:18:46 -07:00
Matthieu Riegler ab18f5ff0b refactor(core): cleanup Meta service
The service had a rather old implementation. This is mostly a cleanup.

(cherry picked from commit c0eaaedef3)
2026-07-08 11:23:58 -07:00
volkanfilazi eca3395019 removed console log
(cherry picked from commit 8e8c5524bb)
2026-07-08 11:23:05 -07:00
volkanfilazi 171669f7b2 fix(forms/signals): make extractValue reactive for compat AbstractControl values
(cherry picked from commit b542302a23)
2026-07-08 11:23:05 -07:00
ZorphDark 66e054fc2e docs: update e2e-testing guide and skill for official integrations
(cherry picked from commit 3cd98ffc1f)
2026-07-08 11:20:05 -07:00
Matthieu Riegler 2d52d5384e docs: update optional chaining behavior
+ mention the `$safeNavigationMigration` magic function

(cherry picked from commit 4e4eb6b707)
2026-07-08 10:46:08 -07:00
Matthieu Riegler ad3693f44f docs(forms): add jsdoc for ReadonlyFieldState
(cherry picked from commit d93e922517)
2026-07-08 10:45:36 -07:00
aparziale 2aa8e68685 docs: add global form state signals to signal forms guide
Add a new section for 'Form State Signals' in the signal forms essential guide. This documents global signals such as dirty(), valid(), invalid(), pending(), and touched() at the form level, as requested in issue #69544.

Fixes #69544

(cherry picked from commit 43996cf748)
2026-07-08 10:42:23 -07:00
SkyZeroZx 748faa4f95 docs(docs-infra): Add build-time validation for API and guide links using route manifest
Adds build-time validation to catch broken, stale, or miscased internal documentation links in both JSDoc and markdown, including `/api/` and `/guide/` URLs and their fragments. Updates the documentation pipeline to share the canonical route manifest, ensuring that all references are checked against the current navigation structure.

(cherry picked from commit c1829f6d7c)
2026-07-08 10:24:51 -07:00
Matthieu Riegler bec1413e7d docs: update formatting
(cherry picked from commit 42862f7df4)
2026-07-08 08:54:22 -07:00
Ambati Mohan Kumar 4314f721e4 docs: fix import of AdminPage in Angular routing documentation. #69670
(cherry picked from commit 95b7385cfb)
2026-07-07 16:46:42 -07:00
Angular Robot f4d20693d5 build: lock file maintenance
See associated pull request for more information.
2026-07-07 13:48:52 -07:00
P4 534fe81a89 fix(compiler-cli): apply debugName transform to required signal queries
Transform assumed `.required` functions always take options as the first argument.
This is true for `input` and `model`, but not for `viewChild` and `contentChild`,
which take the same arguments as non-required versions.

Change the code to put options for signal queries in the right position,
causing debugName to be correctly generated for signal queries.

(cherry picked from commit eb2a8ff63f)
2026-07-07 11:05:28 -07:00
Cameron Smick c91a951817 refactor(core): move devtools ai tool definition types to primitives
Extract the AI tool definition interfaces from the core debug module to the devtools primitives module. This relocates ToolDefinition, ToolGroup, and DevtoolsToolDiscoveryEvent to the primitives folder, exposing them cleanly via "export type" in the devtools entry point, improving module organization and readability.

(cherry picked from commit bf6dba878e)
2026-07-07 10:18:10 -07:00
Kam ab721b4807 refactor(vscode-extension): remove duplicated getTokenAtPosition in completions handler
The completions handler kept a local copy of getTokenAtPosition plus three stale TODO comments noting the duplication, but the function is already exported from server/src/utils.ts (hover.ts and others import it from there). Drop the local copy, import the canonical one, and remove the now-meaningless comments.

(cherry picked from commit 6edabc64e5)
2026-07-07 10:11:08 -07:00
rootvector2 8e6d7f7190 fix(router): use safe hasOwnProperty when parsing query params
`parseQueryParam` and the AngularJS-compat `parseKeyValue` accumulate query params into a plain object and check key presence with `obj.hasOwnProperty`, so a `hasOwnProperty` query key clobbers the method and the next lookup throws `TypeError`. Switch both to `Object.hasOwn`, which can't be shadowed by a query key.

(cherry picked from commit e5c37f21de)
2026-07-07 10:09:38 -07:00
cexbrayat d4a926a762 fix(migrations): remove stale model import in model-output migration
Remove the model import after migrating all model() usages in a file.

(cherry picked from commit fbb705e6fd)
2026-07-07 10:08:48 -07:00
arturovt f5e69de1e0 refactor(compiler-cli): use BindingType enum check in suffix-not-supported extended diagnostic
Replaces the `node.keySpan.toString().startsWith('attr.')` string allocation in the `suffixNotSupported` extended template check with an O(1) `node.type === BindingType.Attribute` enum comparison.

The diagnostic message string is also extracted to a module-level constant so it is created once at module load time instead of on every diagnostic emit.

Additionally, this change adds missing test coverage for the `.%` and `.em` suffixes, as well as for a plain `attr.` binding without a style suffix.

Measured with a 100-iteration microbenchmark before and after the change (MacBook Pro 2018, Intel CPU):

```ts
const start = performance.now();
for (let i = 0; i < 100; i++) {
  new ExtendedTemplateCheckerImpl(templateTypeChecker, program.getTypeChecker(),
    [suffixNotSupportedFactory], {}).getDiagnosticsForComponent(component);
}
console.log((performance.now() - start) / 100, 'ms/iter');
```

Before: `~0.24 ms/iter`
After: `~0.14 ms/iter` (~40% faster)
(cherry picked from commit ab618bdc0f)
2026-07-07 10:05:10 -07:00
Ben Hong b9e2465682 docs: add signal forms testing guide
(cherry picked from commit b340e44a86)
2026-07-07 10:03:21 -07:00
cexbrayat 3b08201bfb fix(compiler-cli): detect uninvoked signals in bound expressions using ternary
Extend the interpolated signal extended diagnostic to inspect ternary-bound expressions and report uninvoked signal reads in bound bindings.

```
<div [style.width]="width() ? 1 : width"></div>
```

where the false branch should invoke the signal as `width()`.

(cherry picked from commit eac363e92e)
2026-07-07 10:01:55 -07:00
SkyZeroZx 0a6af1496b fix(migrations): preserve transitive NgModule references when pruning
avoids unintended removal of indirectly required modules

Fixes #62865

(cherry picked from commit 0a5a2b768c)
2026-07-07 10:01:17 -07:00
Kam e839891a71 fix(docs-infra): disable nav-list tooltip on mobile
On mobile, focusing a long nav item shows a matTooltip that escapes the
drawer, ignores inner scroll, and blocks scrolling while open. Suppress
it on mobile using the existing isMobile helper.

(cherry picked from commit 5ec0b1668b)
2026-07-07 09:54:52 -07:00
Kam 978448dcb6 fix(docs-infra): keep mobile nav open when closing the search dialog
Backdrop clicks on the search dialog were also closing the open mobile nav drawers. Adds an id to `<dialog>` and references it from both navs' `docsClickOutsideIgnore` arrays.

(cherry picked from commit 4b0c066e22)
2026-07-07 09:54:18 -07:00
Ben Hong 46af971454 docs: add composability section to custom controls signal forms
(cherry picked from commit 7dd35913b6)
2026-07-07 09:52:22 -07:00
arturovt 3ac3753cd9 refactor(forms): avoid unnecessary Set allocation in maybeRemoveStaleArrayFields
Three small, behavior-neutral cleanups to maybeRemoveStaleArrayFields:

1. Avoid allocating an empty Set when prevData.byTrackingKey is
   undefined. new Set(undefined) previously created an unused empty
   Set on every call for parents with no tracking keys.

2. Guard the per-element tracking-key check on `oldTracking` being
   defined, skipping the isObject/hasOwn check entirely when there's
   nothing to track.

3. Replace childValue.hasOwnProperty(identitySymbol) with
   Object.hasOwn(childValue, identitySymbol). hasOwnProperty throws
   on null-prototype array elements (Object.create(null)), which
   would crash computeChildrenMap. Object.hasOwn is null-prototype-safe
   and preserves "own property" semantics (does not match inherited
   identitySymbol values).

4. Replace `data.byTrackingKey?.delete(id)` with
   `data.byTrackingKey!.delete(id)`. The optional chaining was dead:
   if oldTracking.size > 0, prevData.byTrackingKey (and therefore
   data.byTrackingKey, same Map reference via the spread) is always
   defined. The `?.` masked this invariant; `!` documents it and
   would surface a runtime error instead of a silent no-op if the
   invariant is ever violated.

Verified via performance.mark/measure instrumented directly inside
the function (count=1 call for a single-field edit in both cases).
Total duration dropped from ~0.7ms to ~0.1ms, consistent with the
avoided Set allocation in (1) and (2).

(cherry picked from commit 73ab88e65b)
2026-07-07 09:51:48 -07:00
Shuaib Hasan Akib 45caa92e2a refactor(core): remove unused utility functions
Remove `isIterable` from `util/iterable.ts` and
`newTrustedFunctionForDev` from `util/security/trusted_types.ts`
as they are no longer referenced anywhere in the codebase.

(cherry picked from commit 01bb0a2f28)
2026-07-07 09:48:11 -07:00
Angular Robot 3b037dc089 build: update all github actions
See associated pull request for more information.
2026-07-07 09:47:28 -07:00
moraisacr e878d7c8b1 docs(ai-tutor): add troubleshooting for MCP setup issues
(cherry picked from commit e91046ffdb)
2026-07-07 09:37:01 -07:00
Ben Hong 2a05de4851 docs: add signal forms dynamic forms with json guide
Co-authored-by: Matthieu Riegler <kyro38@gmail.com>
(cherry picked from commit d837d6270a)
2026-07-07 09:27:19 -07:00
Hien Pham 64268970e1 docs: enhance readability of utility methods section in testing guide
(cherry picked from commit 1f6b1cee22)
2026-07-07 09:20:27 -07:00
Hien Pham e263ffcf71 docs: improve readability of inject, initTestEnvironment, and resetTestEnvironment descriptions
(cherry picked from commit cfe847eea8)
2026-07-07 09:20:27 -07:00
Jan Pilzer 6dcf7ef453 docs(docs-infra): Social & Theme menu placement
Bottom align menus with trigger buttons
Align height of social link icons

(cherry picked from commit f3e2b6bf6a)
2026-07-07 09:19:47 -07:00
marktechson b7d95d260e docs: updates press kit
Adds a link to Angular's official mascot, Angie! Community members can now have access to Angie for use that falls within the community guidelines.

(cherry picked from commit c587555fdd)
2026-07-07 09:18:59 -07:00
Shuaib Hasan Akib 8e0e92fe18 docs: fix code snippet formatting and highlight lines
Correct a mismatched line highlight in the documentation examples
and convert tags to the preferred self-closing format for consistency.

(cherry picked from commit 81dd9d6091)
2026-07-07 09:15:44 -07:00
SkyZeroZx c1430152bf docs: clarify HttpClient default provider
(cherry picked from commit 901eb4607a)
2026-07-07 09:14:45 -07:00
Shuaib Hasan Akib b706813213 docs: update component and directive decorator examples to use concise syntax
(cherry picked from commit cf70bcfef8)
2026-07-07 09:14:18 -07:00
Angular Robot 6c2b80f4a0 docs: update cross-repo adev docs
Updated Angular adev cross repo docs files.
2026-07-07 09:13:05 -07:00
Sebastian Barfurth a95ac8848a docs: point out interoperability of custom Signal Form controls
Any custom Signal Form control
[will actually work](https://github.com/angular/angular/issues/69074#issuecomment-4601225278)
in both Reactive and Template-Driven form contexts. However, this is not obvious
from reading the docs. This PR points this out very explicitly in both the
migration and custom control guide for Signal Forms.

One notable advantage of this interoperability behavior is the ability to
migrate existing `ControlValueAccessor` controls without breaking users. I've
pointed this out separately.

(cherry picked from commit 19a66dcc15)
2026-07-07 09:11:45 -07:00
arturovt 97197786b3 docs: add NG05200 error reference page for SANITIZATION_UNSAFE_SCRIPT
Adds a reference page for `NG05200`, thrown by `DomSanitizer` when a value is bound to a `<script>` element without being marked trusted via `bypassSecurityTrustScript`. Covers why Angular rejects script content outright, how to reproduce the error, the escape hatch, and the XSS caveat.

(cherry picked from commit 806a3ada26)
2026-07-07 09:09:53 -07:00
Kam 80064128cf docs: fix layout shift when refreshing the stagger example
Clicking "Refresh" toggles the list out of and back into the DOM, but the
`<ul>` lived inside the `@if`, so removing it collapsed the layout and
caused a vertical jump. Wrap the list in a fixed-height `.items-container`
to reserve the space while it re-mounts. Also key the stagger delay off
`$index` so the first item animates immediately instead of being delayed a
step.

(cherry picked from commit cd8351a3af)
2026-07-06 14:04:50 -07:00
Kam a057320c91 docs: use descriptive link text for the AI overview page link
The link on the "develop with AI" page wrapped the verb phrase "to check
out the overview page" in the link text, burying the destination in a
call-to-action. Per the adev writing guide's descriptive-link-text rule,
link only the noun that names the destination.

Change the link text to "overview page" so it clearly indicates where the
link goes.

(cherry picked from commit 42fc9a4599)
2026-07-06 14:04:14 -07:00
Matthieu Riegler fd4ddcafed fix(compiler): use regular optional chaining expression for safe function calls in TCBs
Optional return types should not report non-nullable optional chaning on function calls.

fixes #69609

(cherry picked from commit 997b772f28)
2026-07-06 14:02:44 -07:00
SkyZeroZx 4d2133ec43 test(router): Update tests to use currentNavigation()
Updates router integration tests to use the `currentNavigation()` method instead of deprecated `getCurrentNavigation`.

Also replaces direct `setTimeout` calls with the `timeout()` utility function.

(cherry picked from commit d9639201b3)
2026-07-06 14:01:15 -07:00
Shuaib Hasan Akib c1a951aac3 refactor(forms): improve type safety of RadioControlRegistry._accessors
Replace `any[]` with `[NgControl, RadioControlValueAccessor][]` for the
private `_accessors` field in `RadioControlRegistry`. This aligns the
field type with how it is used in `add()`, `remove()`, `select()`, and
`_isSameGroup()`, which already typed its parameter as
`[NgControl, RadioControlValueAccessor]`.

(cherry picked from commit 0285f558f9)
2026-07-06 13:59:21 -07:00
Angular Robot 7c7b9b2afe build: update bazel dependencies
See associated pull request for more information.
2026-07-06 13:54:13 -07:00
Kam 371183db06 fix(docs-infra): lock background scroll while the search dialog is open
The search dialog (Cmd/Ctrl+K) opens as a native modal via `showModal()`, but the
page behind it stayed scrollable, so scrolling drifted the underlying content
beneath the blurred backdrop.

`body` already reserves a stable scrollbar gutter, so setting `overflow: hidden`
while the dialog is open blocks background scrolling with no layout shift. The rule
keys off the dialog's `[open]` state, so it restores automatically on every close
path (Escape, click-outside, navigation) with no script involved.

(cherry picked from commit 551cb3b8b5)
2026-07-06 13:48:57 -07:00
Kam 25542a2d2d fix(docs-infra): restyle prefer/avoid code block headers
The "Prefer" / "Avoid" code block headers rendered the style label as
plain inline text joined to the title with a bare "-" separator, giving
the two block types little visual distinction. The taller label also left
the prefer/avoid header at a different height from the plain filename
header, so the copy button's single "top" value could not center it in
both.

Style the label as a small uppercased pill tinted with the block's style
color, drop the "-" separator, add a subtle inset accent under the header,
and swap the heavier "dangerous" icon on "Avoid" for "close". Give every
header a fixed height with box-sizing: border-box and vertically center
its contents so all variants render at the same height and the copy button
stays centered.

This supersedes #69638, folding in its centering fix for the copy button
offset that #69030 introduced.

(cherry picked from commit 95a953145e)
2026-07-06 13:48:18 -07:00