Commit Graph

38001 Commits

Author SHA1 Message Date
Pawel Kozlowski 1b85b3cd86 release: cut the v22.1.0-rc.0 release v22.1.0-rc.0 2026-07-22 16:41:22 +02:00
Pawel Kozlowski 509cad6e15 docs: release notes for the v22.0.8 release 2026-07-22 16:35:02 +02:00
Pawel Kozlowski e428df2b89 build: update pnpm-lock.yaml
Update pnpm lock after it got desychronized in
791b0646c8 build: update all non-major dependencies
2026-07-22 16:18:13 +02:00
Kam ab52df470a fix(docs-infra): fail the guide build when a markdown file starts with a BOM
A leading UTF-8 byte order mark (U+FEFF) before the first `#` stops the
Markdown parser from recognizing the heading, so the guide renders its
title as a paragraph and drops the standard docs header. The character
is invisible, so it cannot be caught in review.

Add a check in the guides generation pipeline that throws when a source
file starts with a BOM, failing the build with the offending file name.
This sits alongside the existing unknown-anchor check and prevents the
regression fixed in #69889 from recurring.
2026-07-22 14:26:19 +02:00
Kam f12db89659 docs: fix first heading rendering as paragraph on two template guides
The ng-container and binding template guide files each began with a
UTF-8 BOM (EF BB BF) before the leading `#`. The docs markdown parser
only promotes `#` to an H1 when it is the first character on the line,
so the BOM demoted the title to paragraph text (`<p># ...</p>`) and the
standard docs header (breadcrumbs, page title, edit button) never
rendered.

Stripping the BOM restores `#` as the first character, so both pages
now generate the proper `<header class="docs-header">` block. Verified
by rebuilding //adev/src/content/guide/templates:templates and
inspecting the generated HTML.

Fixes #69889
2026-07-22 14:26:19 +02:00
Angular Robot 9a1e620603 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-07-22 13:25:54 +02:00
hawkgs e23541b263 fix(zone.js): vitest patching of describe/it curried calls
Separate direct from curried calls of `describe`/`it` modifiers
(direct: `skip`, `only`, etc.; curried: `runIf`, `each`, etc.)
and perform the required patching to them.

Fixes: #69748
2026-07-22 12:34:00 +02:00
Jaime Burgos d14696e430 fix(common): preserve crossorigin on image preloads
Propagate the crossorigin attribute from priority NgOptimizedImage hosts to SSR-generated preload links. Keep preload and image requests in the same credentials mode to avoid an anonymous image issuing an earlier credentialed request.
2026-07-22 12:31:52 +02:00
Kam 6557df5dbe docs: update stale Twitter reference to X in the URL matcher guide
Twitter is now X. In the custom-route-matcher guide, point the author-credit
link at x.com and refer to an "X (formerly Twitter) handle" (clarified once,
then "X handle"), matching the "X (formerly Twitter)" wording already used in
the footer, navigation, and update guide.
2026-07-22 12:01:16 +02:00
Nikita Barsukov cb1841d10b docs: outdated section in the Signal Forms | Custom controls page 2026-07-22 12:00:06 +02:00
SkyZeroZx d955d67b57 docs: clarify usage of 'same-origin' mode and add SSR considerations 2026-07-22 11:58:56 +02:00
SkyZeroZx 6371f0beb1 docs: add skills for Angular pipes 2026-07-22 11:52:33 +02:00
SkyZeroZx 6ac3e26fe0 docs: clarify pipe usage to avoid DI misuse 2026-07-22 11:50:12 +02:00
Suraj Yadav 49672c437b fix(migrations): correctly migrate ngClass with mixed space-separated keys
Preserve NgClass import on partial migration and increment
skippedNgClassCount when an unmigrable mixed binding is encountered.
2026-07-21 19:20:20 +02:00
splincode 8201cebc49 refactor(compiler): enforce exhaustive defer trigger handling
Store the trigger kind before each switch and assign the value to `never` in the fallback branch.

This removes the `any` casts and makes the switches exhaustive. Adding a new `DeferTriggerKind` without handling it in either phase now produces a TypeScript compilation error.

Runtime behavior and error messages remain unchanged.
2026-07-21 19:19:02 +02:00
Angular Robot 9bf8b8ca56 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-07-21 17:20:55 +02:00
Kam 8422da814d feat(docs-infra): react with Angie in the playground minigame
The angle-guessing minigame's result popup personifies your score with a
hand-drawn stick-figure that changes expression by accuracy. Now that Angie
appears across adev — the 404 page, docs search, the embedded editor, the
tutorial intros and completions — give the minigame the same treatment so
its result feels consistent with the rest of the docs.

Replace the result reactor's stick-figure illustration with an Angie pose
keyed to accuracy (seven tiers, superhero down to angry). She is revealed
once the accuracy counter finishes counting up, popping in beside a speech
bubble that carries the round's existing quote. The result popup is widened
so Angie and the bubble sit side by side, and the share link is moved from
twitter.com to x.com.

This removes the previous hand-drawn stick-figure result art. NG the Angle,
the interactive character in the play area, is unchanged.
2026-07-21 17:19:58 +02:00
Angular Robot 791b0646c8 build: update all non-major dependencies
See associated pull request for more information.
2026-07-21 17:17:43 +02:00
Matthieu Riegler 3497c9b943 fix(forms): ensure pending status propagates to the root form in signal forms
Previously, the `pending()` status on a field's `ValidationState` only checked if the field itself or its immediate children had a pending asynchronous validator by directly inspecting `asyncErrors()`. This meant that a pending asynchronous validator deep within a nested form (e.g. on a grand-child) would not correctly bubble the `pending` state up to the root form.

fixes #69840
2026-07-21 13:48:32 +02:00
Angular Robot 22aecf5ed9 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-07-21 13:28:27 +02:00
Angular Robot 9ca95d8f0e build: update bazel dependencies
See associated pull request for more information.
2026-07-21 13:25:46 +02:00
Angular Robot 2bc2146e09 build: update pnpm to v11.15.1
See associated pull request for more information.
2026-07-21 12:08:13 +02:00
Matthew Beck eb3e480360 test(compiler-cli): cover DOM-only vs full instruction set across compilation modes
Adds a compliance case pinning the instruction-set selection for a
directive-free standalone component:

  - full compile: the compiler can prove the template has no directive
    dependencies, so it takes the DOM-only fast path
    (`ɵɵdomElementStart`/`ɵɵdomElementEnd`).
  - local compile: the compiler cannot inspect dependencies, so
    `hasDirectiveDependencies` is forced true and the full instruction
    set is emitted (`ɵɵelementStart`/`ɵɵelementEnd`).

This mode-dependent switch was previously only exercised incidentally by
the `foreign_component` case, which couples it with foreign-component
compilation. The new case isolates it.
2026-07-21 11:06:36 +02:00
Alan Agius 3499a1321b fix(core): ensure SVG animation attributeName is checked case-insensitively
Currently, the SVG sanitizer checks a static set of candidate attribute
names (`attributeName` and `attributename`). This approach misses other case
variations (such as `attributenAme` or others), which could potentially
bypass sanitization when binding sensitive attributes like `href` on
`<set>` or `<animate>` elements.

This change retrieves all attribute names of the SVG element, performs a
case-insensitive comparison with `'attributename'`, and sanitizes the value
if a match is found.
2026-07-21 11:05:02 +02:00
Kam d2c0e1ec77 feat(docs-infra): bookend the tutorials with Angie
The tutorial intro and "next steps" pages were plain headings with no
send-off. Bookend each tutorial with Angie: a greeting pose welcoming
learners on the intro page, and a superhero pose congratulating them on
the completion page, each beside a speech bubble.

The bubble treatment from the 404 page lived inside the not-found
component, so it's extracted into a reusable docs-content style
(docs-tutorial-mascot) usable from tutorial markdown, and applied to the
intro and completion pages of the Learn Angular, Signals, and Signal
Forms tutorials.
2026-07-21 11:03:21 +02:00
Alan Agius 4461e8fdbc build: update devinfra commit and correct module file reference in ts version validation
Update devinfra sha to latest version.
2026-07-21 11:01:03 +02:00
Angular Robot 3c9820f3e0 build: lock file maintenance
See associated pull request for more information.
2026-07-21 10:58:37 +02:00
Suraj Yadav 223e40279f fix(migrations): preserve NgClass import on partial migration
When only some NgClass usages are migrated (partial migration),
the NgClass import should be preserved in the module/component
imports if it is still used elsewhere.
2026-07-20 18:14:35 +02:00
Kam 79fe1c3a05 fix(docs-infra): only claim a search on the 404 page when results exist
The "Page Not Found" page always rendered the sentence "We have
initiated a search for the term extracted from the URL", but the
NotFound component only runs a search when a term can be extracted,
and only renders results when there is at least one hit. On a 404
with no extractable term or no matching results, the page asserted
a search it never backed up.

Gate the sentence behind the same searchResults() check that guards
the results list, so the empty state simply reads "We couldn't find
what you were looking for."
2026-07-20 16:04:29 +02:00
Pawel Kozlowski b8a0fa00c9 build: update pnpm-lock.yaml
This commit updates the pnpm-lock.yaml to reflect differences in node and https-proxy-agent transitive dependencies.
2026-07-20 16:02:38 +02:00
arshiya tabasum 3192dccaa3 fix(http): prevent transfer cache key collisions
`makeCacheKey` joined the request fields with `|` before hashing. The url
and the serialized body can contain `|` themselves, so a shifted field
boundary (url `/items/a` + body `b|c` vs url `/items/a|b` + body `c`)
produced the same joined string and the same key, letting two distinct
requests share a transfer cache slot.

Join with `\0` instead, which cannot occur in a valid url or in encoded
params, so the field boundaries cannot be forged by field content.
2026-07-20 14:39:51 +02:00
Kam 00699f3e66 refactor(devtools): add alt text to the empty-state screen illustrations
The Angie illustrations on the DevTools empty-state screens (added in
#69786) shipped with an empty `alt` and `aria-hidden="true"`. Give them
descriptive alt text and drop `aria-hidden` to improve accessibility.
2026-07-20 14:25:17 +02:00
Angular Robot e27d67f3ec build: update github/codeql-action action to v4.37.1
See associated pull request for more information.
2026-07-20 14:23:57 +02:00
Kam d6cad90b3a docs: fix broken link to Angular AI Skills page
The MCP server setup guide linked to /ai/skills, which 404s. The
page lives at /ai/agent-skills. Update the link to point to the
correct route.

Fixes #69838
2026-07-20 11:50:35 +02:00
Kam b26c1abe07 feat(devtools): show Angie on tab empty states
The Transfer State and signal-graph tabs render bare-text placeholders
when there's nothing to show. Add the Angie mascot to both, matching the
pattern already shipped on the top-level DevTools screens (#69786):

- Transfer State "isn't using Transfer State" card: replace the
  swap_horiz icon with the teaching pose.
- Signal graph "No signals in this component": add the orthos-back pose
  above the message.
2026-07-20 11:50:05 +02:00
Kam f032f5ac1f docs: document the inlineStyleLanguage workspace config option
The `inlineStyleLanguage` build option has existed since v12 but was
never listed in the workspace configuration reference. Add it to the
"Extra build and test options" table alongside the other style options,
documenting its accepted values (css, less, sass, scss) and default.

Fixes #69801
2026-07-20 11:21:44 +02:00
hawkgs a7ebf1cd69 refactor(devtools): reorganize backend code
Organize code into domain/feature-specific folders and a shared API folder.
2026-07-20 11:15:53 +02:00
Angular Robot 79c81b62b9 build: update actions/setup-node action to v7
See associated pull request for more information.
2026-07-20 11:13:50 +02:00
hawkgs 2aecfb0f38 refactor(devtools): format code
Format DevTools TypeScript files.
2026-07-20 10:48:28 +02:00
Georgi Serev 075ed05480 docs(devtools): add a settings doc
Add a doc describing the settings mechanism and the process of updating the settings options.
2026-07-20 10:46:50 +02:00
Pawel Kozlowski 7a626175f7 Revert "fix(forms): preserve intermediate number values in signal forms"
This reverts commit 2e32872720.
2026-07-20 10:45:01 +02:00
Matthew Beck f8c9e9d736 release: cut the v22.1.0-next.6 release v22.1.0-next.6 2026-07-15 21:30:09 -07:00
Matthew Beck 265de873d8 docs: release notes for the v22.0.7 release 2026-07-15 21:25:30 -07:00
XananasX7 d43acaf80c ci: harden workflow against expression injection
Interpolating GitHub context values directly into `run:` steps creates
an expression-injection vector. Move the affected values into an `env:`
block and reference them as environment variables in the shell script
instead. This prevents shell metacharacters in context values from
altering step behaviour.

Signed-off-by: El Mehdi Abenhazou <mehdiananas007@gmail.com>
2026-07-15 17:44:44 -07:00
Jaime Burgos 2e32872720 fix(forms): preserve intermediate number values in signal forms
Preserve raw native input text while editing so parsed model values are not written back on every keystroke.
2026-07-15 15:56:48 -07:00
Angular Robot f034c02e67 build: update cross-repo angular dependencies to v22.1.0-next.4
See associated pull request for more information.
2026-07-15 14:49:48 -07:00
splincode 24a3c63976 test(elements): disambiguate the setTimeout spy type
Bind spyOn explicitly to Window so Jasmine uses the DOM setTimeout signature that returns a number instead of the Node.js Timeout type. Remove the unsafe any cast and the obsolete TODO.
2026-07-15 14:48:28 -07:00
Kam d4f2313e4d feat(devtools): show Angie on the empty-state screens
The DevTools state screens (Angular not detected, unsupported version,
production build) showed a plain Material icon above the message. Show
the Angie mascot instead, matching the treatment already used across
angular.dev (the 404 page, empty search, the preview error state).

Each screen uses a pose that fits its message: the dizzy `error` pose for
"application not detected", `coding-01` for the version-upgrade prompt,
and `sad` for the production build notice.
2026-07-15 14:48:01 -07:00
Doug Parker d7a13b989a release: bump Angular DevTools version to 1.17.0 2026-07-15 13:25:23 -07:00
cexbrayat 0ae6d81ed2 fix(core): preserve explicit input transform write type
If a directive has an input declared as `dismissible = input<boolean>(true, {transform: booleanAttribute});` then the following templates were not compiling:

```
<div directiveName dismissible="true"></div>
<div directiveName dismissible></div>
```

This commit fixes the issue, without breaking contravariant consumers.
2026-07-15 12:02:18 -07:00