From 56f2aa4594bb802d77f67ac15e83680489570049 Mon Sep 17 00:00:00 2001
From: Amy Sorto <8575252+amysorto@users.noreply.github.com>
Date: Wed, 8 Jan 2025 21:24:07 +0000
Subject: [PATCH 01/91] release: cut the v19.1.0-rc.0 release

---
 CHANGELOG.md | 29 +++++++++++++++++++++++++++++
 package.json |  2 +-
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1a411c664d97..eddd3a1cbce9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,32 @@
+<a name="19.1.0-rc.0"></a>
+# 19.1.0-rc.0 "paper-plane" (2025-01-08)
+### cdk
+| Commit | Type | Description |
+| -- | -- | -- |
+| [52758beab0](https://github.com/angular/components/commit/52758beab0997341afd651b339e2f4825e99409d) | fix | **menu:** avoid re-opening the menu on enter ([#30263](https://github.com/angular/components/pull/30263)) |
+| [2be0afcfb5](https://github.com/angular/components/commit/2be0afcfb54b16dd426e5ad65f6aa52301dc2d45) | fix | **menu:** avoid resetting the scroll position when using the mouse ([#30249](https://github.com/angular/components/pull/30249)) |
+| [e421765d8d](https://github.com/angular/components/commit/e421765d8d05806be46ff53ce92ed43e4a82dbf9) | fix | **menu:** not responding to position changes ([#30234](https://github.com/angular/components/pull/30234)) |
+| [5c75bbecb2](https://github.com/angular/components/commit/5c75bbecb24f49779baf86203a7e626d34e39f8c) | fix | **scrolling:** avoid SSR error in CdkVirtualScrollableWindow ([#30259](https://github.com/angular/components/pull/30259)) |
+| [0f053ff685](https://github.com/angular/components/commit/0f053ff6858b57aa4d1816cfa927f7e7284813af) | fix | **tree:** expandAll not expanding all nodes ([#30226](https://github.com/angular/components/pull/30226)) |
+| [d721f0c2bc](https://github.com/angular/components/commit/d721f0c2bcfb4bdfe4cc0655d61ca0537a6e4bf5) | perf | **table:** Use afterNextRender for sticky styling. Fixes a performance regression dating back to [#28393](https://github.com/angular/components/pull/28393) and removes need for coalesced sticky styler. ([#30242](https://github.com/angular/components/pull/30242)) |
+### material
+| Commit | Type | Description |
+| -- | -- | -- |
+| [4e04540792](https://github.com/angular/components/commit/4e04540792b7742e6ef63dc7b16b6a3a8b909c54) | fix | **datepicker:** simplify DI setup ([#30247](https://github.com/angular/components/pull/30247)) |
+| [66741b8132](https://github.com/angular/components/commit/66741b81321e6a70a16af2622fa6daf13732af80) | fix | **sidenav:** remove deprecated API usage ([#30268](https://github.com/angular/components/pull/30268)) |
+| [31896c8a35](https://github.com/angular/components/commit/31896c8a357ab06708f3224b4ce537f996cd3000) | fix | **sidenav:** switch away from animations module ([#30235](https://github.com/angular/components/pull/30235)) |
+| [0c099ff024](https://github.com/angular/components/commit/0c099ff02436b9c3d6fd2440df4cc1c4e70278ca) | fix | **sort:** avoid center align for sort header |
+| [1c1ebfd87b](https://github.com/angular/components/commit/1c1ebfd87be2cbbc56970b782c5d2b528002be02) | fix | **sort:** show arrow on focus ([#30217](https://github.com/angular/components/pull/30217)) |
+| [2219b1198f](https://github.com/angular/components/commit/2219b1198fa763ffd4ff7cb0656356745369d4f2) | fix | **timepicker:** don't mark as touched when blurred while dropdown is open ([#30228](https://github.com/angular/components/pull/30228)) |
+| [af29a92c01](https://github.com/angular/components/commit/af29a92c01fd425537a8f28fc71b24aeb027b0ab) | perf | **tooltip:** Tiny but measurable optimization to MatTooltip construction. Defer hooking up to directionality changes until overlay is created. ([#30214](https://github.com/angular/components/pull/30214)) |
+| [980f9ba7bb](https://github.com/angular/components/commit/980f9ba7bb4fab8dfe4f3a4f30bb224ec635a626) | perf | **tooltip:** Use afterNextRender to invoke aria describer to align layout updates with other components using afterNextRender. ([#30265](https://github.com/angular/components/pull/30265)) |
+### cdk-experimental
+| Commit | Type | Description |
+| -- | -- | -- |
+| [9f73fed470](https://github.com/angular/components/commit/9f73fed4702f79a6461fd2cf86ecb311c9530a78) | perf | **column-resize:** Use ResizeObserver to avoid layout thrashing ([#30215](https://github.com/angular/components/pull/30215)) |
+
+<!-- CHANGELOG SPLIT MARKER -->
+
 <a name="19.0.5"></a>
 # 19.0.5 "silk-sky" (2025-01-08)
 ### cdk
diff --git a/package.json b/package.json
index 2c94530cc6e4..1560578f4d08 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.0-next.3",
+  "version": "19.1.0-rc.0",
   "dependencies": {
     "@angular/animations": "^19.1.0-next.3",
     "@angular/common": "^19.1.0-next.3",

From e52a369a1bef46cacfb7055f9c21585790228a30 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Thu, 9 Jan 2025 09:12:07 +0100
Subject: [PATCH 02/91] fix(material-luxon-adapter): infer first day of week
 from locale (#30285)

Fixes that the Luxon date adapter was hardcoding the first day of the week to Sunday, unless it's provided through DI.

Fixes #30278.

(cherry picked from commit 659e5d44beb533ba52894950188d112606fe922c)
---
 .../adapter/luxon-date-adapter.spec.ts                   | 3 ++-
 src/material-luxon-adapter/adapter/luxon-date-adapter.ts | 9 ++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/material-luxon-adapter/adapter/luxon-date-adapter.spec.ts b/src/material-luxon-adapter/adapter/luxon-date-adapter.spec.ts
index 12a4a95f81f3..5eed39517609 100644
--- a/src/material-luxon-adapter/adapter/luxon-date-adapter.spec.ts
+++ b/src/material-luxon-adapter/adapter/luxon-date-adapter.spec.ts
@@ -258,7 +258,8 @@ describe('LuxonDateAdapter', () => {
   });
 
   it('should get first day of week', () => {
-    expect(adapter.getFirstDayOfWeek()).toBe(0);
+    adapter.setLocale('bg-BG');
+    expect(adapter.getFirstDayOfWeek()).toBe(1);
   });
 
   it('should create Luxon date', () => {
diff --git a/src/material-luxon-adapter/adapter/luxon-date-adapter.ts b/src/material-luxon-adapter/adapter/luxon-date-adapter.ts
index 5e7ade456685..58296201a97d 100644
--- a/src/material-luxon-adapter/adapter/luxon-date-adapter.ts
+++ b/src/material-luxon-adapter/adapter/luxon-date-adapter.ts
@@ -27,7 +27,7 @@ export interface MatLuxonDateAdapterOptions {
    * Sets the first day of week.
    * Changing this will change how Angular Material components like DatePicker shows start of week.
    */
-  firstDayOfWeek: number;
+  firstDayOfWeek?: number;
 
   /**
    * Sets the output Calendar.
@@ -49,7 +49,6 @@ export const MAT_LUXON_DATE_ADAPTER_OPTIONS = new InjectionToken<MatLuxonDateAda
 export function MAT_LUXON_DATE_ADAPTER_OPTIONS_FACTORY(): MatLuxonDateAdapterOptions {
   return {
     useUtc: false,
-    firstDayOfWeek: 0,
     defaultOutputCalendar: 'gregory',
   };
 }
@@ -67,7 +66,7 @@ function range<T>(length: number, valueFunction: (index: number) => T): T[] {
 @Injectable()
 export class LuxonDateAdapter extends DateAdapter<LuxonDateTime> {
   private _useUTC: boolean;
-  private _firstDayOfWeek: number;
+  private _firstDayOfWeek: number | undefined;
   private _defaultOutputCalendar: LuxonCalendarSystem;
 
   constructor(...args: unknown[]);
@@ -81,7 +80,7 @@ export class LuxonDateAdapter extends DateAdapter<LuxonDateTime> {
     });
 
     this._useUTC = !!options?.useUtc;
-    this._firstDayOfWeek = options?.firstDayOfWeek || 0;
+    this._firstDayOfWeek = options?.firstDayOfWeek;
     this._defaultOutputCalendar = options?.defaultOutputCalendar || 'gregory';
     this.setLocale(dateLocale || LuxonDateTime.local().locale);
   }
@@ -134,7 +133,7 @@ export class LuxonDateAdapter extends DateAdapter<LuxonDateTime> {
   }
 
   getFirstDayOfWeek(): number {
-    return this._firstDayOfWeek;
+    return this._firstDayOfWeek ?? LuxonInfo.getStartOfWeek({locale: this.locale});
   }
 
   getNumDaysInMonth(date: LuxonDateTime): number {

From 0aa36f4e033667c0bc0a467049f2baee124023d4 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 10 Jan 2025 13:26:14 +0100
Subject: [PATCH 03/91] build: update to Angular 19.1 RC (#30297)

Updates us to the latest version of Angular so we can validate it.

(cherry picked from commit c37f29eeb8477d67534dd0de231d406a53e1c408)
---
 package.json |  34 +-
 yarn.lock    | 991 ++++++++++++++++++++++++++-------------------------
 2 files changed, 529 insertions(+), 496 deletions(-)

diff --git a/package.json b/package.json
index 1560578f4d08..1a5fad3d3804 100644
--- a/package.json
+++ b/package.json
@@ -56,12 +56,12 @@
   },
   "version": "19.1.0-rc.0",
   "dependencies": {
-    "@angular/animations": "^19.1.0-next.3",
-    "@angular/common": "^19.1.0-next.3",
-    "@angular/compiler": "^19.1.0-next.3",
-    "@angular/core": "^19.1.0-next.3",
-    "@angular/forms": "^19.1.0-next.3",
-    "@angular/platform-browser": "^19.1.0-next.3",
+    "@angular/animations": "^19.1.0-rc.0",
+    "@angular/common": "^19.1.0-rc.0",
+    "@angular/compiler": "^19.1.0-rc.0",
+    "@angular/core": "^19.1.0-rc.0",
+    "@angular/forms": "^19.1.0-rc.0",
+    "@angular/platform-browser": "^19.1.0-rc.0",
     "@types/google.maps": "^3.54.10",
     "@types/youtube": "^0.1.0",
     "rxjs": "^6.6.7",
@@ -70,19 +70,19 @@
     "zone.js": "~0.15.0"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^19.1.0-next.1",
-    "@angular-devkit/core": "^19.1.0-next.1",
-    "@angular-devkit/schematics": "^19.1.0-next.1",
+    "@angular-devkit/build-angular": "^19.1.0-rc.0",
+    "@angular-devkit/core": "^19.1.0-rc.0",
+    "@angular-devkit/schematics": "^19.1.0-rc.0",
     "@angular/bazel": "https://github.com/angular/bazel-builds.git#d9a8ea4f9e62cb475eff89519426a38631b2704d",
     "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#74e0e7b090c6e16056290836b2d936ca7820b86f",
-    "@angular/build": "^19.1.0-next.1",
-    "@angular/cli": "^19.1.0-next.1",
-    "@angular/compiler-cli": "^19.1.0-next.3",
-    "@angular/localize": "^19.1.0-next.3",
+    "@angular/build": "^19.1.0-rc.0",
+    "@angular/cli": "^19.1.0-rc.0",
+    "@angular/compiler-cli": "^19.1.0-rc.0",
+    "@angular/localize": "^19.1.0-rc.0",
     "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#36946be4df61f6549ae3829c026022e47674eae2",
-    "@angular/platform-browser-dynamic": "^19.1.0-next.3",
-    "@angular/platform-server": "^19.1.0-next.3",
-    "@angular/router": "^19.1.0-next.3",
+    "@angular/platform-browser-dynamic": "^19.1.0-rc.0",
+    "@angular/platform-server": "^19.1.0-rc.0",
+    "@angular/router": "^19.1.0-rc.0",
     "@babel/core": "^7.16.12",
     "@babel/helper-explode-assignable-expression": "^7.18.6",
     "@babel/helper-string-parser": "^7.22.5",
@@ -102,7 +102,7 @@
     "@octokit/rest": "18.3.5",
     "@rollup/plugin-commonjs": "^21.0.0",
     "@rollup/plugin-node-resolve": "^13.1.3",
-    "@schematics/angular": "^19.1.0-next.1",
+    "@schematics/angular": "^19.1.0-rc.0",
     "@types/babel__core": "^7.1.18",
     "@types/browser-sync": "^2.26.3",
     "@types/fs-extra": "^9.0.13",
diff --git a/yarn.lock b/yarn.lock
index 7ead5fd0f283..d5aa53699896 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18,24 +18,24 @@
     "@angular-devkit/core" "18.1.0-next.0"
     rxjs "7.8.1"
 
-"@angular-devkit/architect@0.1901.0-next.1":
-  version "0.1901.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1901.0-next.1.tgz#e2f10e4eb750a3cae149f25c791ea46d12a3a72f"
-  integrity sha512-bZS5UlLsdL5eF3JqMaheYdIBVYrEIoDs6Q5UN50cJe5gKcakDvn8ky/Dhmv8kxfq5efb9zUevTC5xqnu+cgcmg==
+"@angular-devkit/architect@0.1901.0-rc.0":
+  version "0.1901.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1901.0-rc.0.tgz#0f3c39529b2639910ae0cf084d43187bffffef8e"
+  integrity sha512-BDZV/o1afvbUu8dqr77jjTovcC03DfQB/LGoSN6BkW2vu0jwFCHPXdc/D588p0Bw8cdlMJghkyQhqZ7SHPRivg==
   dependencies:
-    "@angular-devkit/core" "19.1.0-next.1"
+    "@angular-devkit/core" "19.1.0-rc.0"
     rxjs "7.8.1"
 
-"@angular-devkit/build-angular@^19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-19.1.0-next.1.tgz#31444f969375d8ea8d8a4b4253f55a9dd7f098b8"
-  integrity sha512-UTK+ZMEJBC6dYqaUUSN0s5h3AzVfSmz8rAFLBzapdUZ9CnUEunURR/Hkvtrh4533g/8qNN4WJQ1ixlNEZ/OQGQ==
+"@angular-devkit/build-angular@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-19.1.0-rc.0.tgz#f47f4e7aa08b1d23fd4345eda7837c48f1f6c412"
+  integrity sha512-hVuVwGASabKYOFZVnBxCzt+1eqw9bEtNA/N3XZMTkVz0kU12Okw7V78+fmlxODD3T//DuBF39w/UjwpsSAq7ag==
   dependencies:
     "@ampproject/remapping" "2.3.0"
-    "@angular-devkit/architect" "0.1901.0-next.1"
-    "@angular-devkit/build-webpack" "0.1901.0-next.1"
-    "@angular-devkit/core" "19.1.0-next.1"
-    "@angular/build" "19.1.0-next.1"
+    "@angular-devkit/architect" "0.1901.0-rc.0"
+    "@angular-devkit/build-webpack" "0.1901.0-rc.0"
+    "@angular-devkit/core" "19.1.0-rc.0"
+    "@angular/build" "19.1.0-rc.0"
     "@babel/core" "7.26.0"
     "@babel/generator" "7.26.3"
     "@babel/helper-annotate-as-pure" "7.25.9"
@@ -46,7 +46,7 @@
     "@babel/preset-env" "7.26.0"
     "@babel/runtime" "7.26.0"
     "@discoveryjs/json-ext" "0.6.3"
-    "@ngtools/webpack" "19.1.0-next.1"
+    "@ngtools/webpack" "19.1.0-rc.0"
     "@vitejs/plugin-basic-ssl" "1.2.0"
     ansi-colors "4.1.3"
     autoprefixer "10.4.20"
@@ -54,8 +54,8 @@
     browserslist "^4.21.5"
     copy-webpack-plugin "12.0.2"
     css-loader "7.1.2"
-    esbuild-wasm "0.24.0"
-    fast-glob "3.3.2"
+    esbuild-wasm "0.24.2"
+    fast-glob "3.3.3"
     http-proxy-middleware "3.0.3"
     istanbul-lib-instrument "6.0.3"
     jsonc-parser "3.3.1"
@@ -73,7 +73,7 @@
     postcss-loader "8.1.1"
     resolve-url-loader "5.0.0"
     rxjs "7.8.1"
-    sass "1.82.0"
+    sass "1.83.1"
     sass-loader "16.0.4"
     semver "7.6.3"
     source-map-loader "5.0.0"
@@ -87,14 +87,14 @@
     webpack-merge "6.0.1"
     webpack-subresource-integrity "5.1.0"
   optionalDependencies:
-    esbuild "0.24.0"
+    esbuild "0.24.2"
 
-"@angular-devkit/build-webpack@0.1901.0-next.1":
-  version "0.1901.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1901.0-next.1.tgz#a3c0f8b16cc4c4178690758d7cd3f52efa778a8e"
-  integrity sha512-CxsEINoLsDRRS+89so2xLLVCISRrUoS9CvrUkpU92lNPzjnLLQW4NQfNc88oqBrxPIwr63+ymG7Wo8PQKLjKIg==
+"@angular-devkit/build-webpack@0.1901.0-rc.0":
+  version "0.1901.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1901.0-rc.0.tgz#44b734e3224703649833ced10a4094cc5b7a61c3"
+  integrity sha512-1rxJ2oNqjeWF7rXkElGWtWeR6F4C+uF1HU1b65OI9pYNjzUp5Wh7+z1V/l3gfexohkv7W+7KyQkAFzFjwoJMpw==
   dependencies:
-    "@angular-devkit/architect" "0.1901.0-next.1"
+    "@angular-devkit/architect" "0.1901.0-rc.0"
     rxjs "7.8.1"
 
 "@angular-devkit/core@18.1.0-next.0":
@@ -109,10 +109,10 @@
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/core@19.1.0-next.1", "@angular-devkit/core@^19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.1.0-next.1.tgz#8f46c3e25cc811945880bb5ebb42b1c885c91ac9"
-  integrity sha512-2xzT/jBSKuDO2avbB00qiuM4Moir9RcLtK++oyJm/CVQ8tUFppVvpb2MIp0TB/FuV+Tfm8APf0etY0w/fWfWZA==
+"@angular-devkit/core@19.1.0-rc.0", "@angular-devkit/core@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.1.0-rc.0.tgz#b71c99234200e85d0a74ba526fceb9e465fb50bf"
+  integrity sha512-0kGErE+1jgEU2a6Q2JCg0XHeI+3PW48ZkINWMgD249TyRO7vC/VChSBMTi3CxuEatxp+1t9MQgMehZSuN4JL9w==
   dependencies:
     ajv "8.17.1"
     ajv-formats "3.0.1"
@@ -121,21 +121,21 @@
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/schematics@19.1.0-next.1", "@angular-devkit/schematics@^19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.1.0-next.1.tgz#9bb430a9a6f405b668708dd67ec96809ce9e55f4"
-  integrity sha512-3jqaSPMvKcqeo013DOUDBdUcgsRTEZmuWM1JWgae6TilYH+Ud8A0RcpIiEkf9tAfIu11afvAbggjMUMPyomBjA==
+"@angular-devkit/schematics@19.1.0-rc.0", "@angular-devkit/schematics@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.1.0-rc.0.tgz#ec47363d7dc98c7d468ed5991fe6b119651cd4fb"
+  integrity sha512-SfgiXmRsfqH+zn6vkO1Oi4PpzQ9QA6G/ACV65+fgm3YeAaiD2v2h6UXOF/CVC2yjRfzD5ychEIcsY2YPAsvJIA==
   dependencies:
-    "@angular-devkit/core" "19.1.0-next.1"
+    "@angular-devkit/core" "19.1.0-rc.0"
     jsonc-parser "3.3.1"
-    magic-string "0.30.15"
+    magic-string "0.30.17"
     ora "5.4.1"
     rxjs "7.8.1"
 
-"@angular/animations@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-19.1.0-next.3.tgz#b77f4b55cf3bba5ef22547922c943bbd306727c5"
-  integrity sha512-Uf0NbInXdT5CnpuG7bF6a9TwBrnecfIHqsfJqzzGPnx1hWssCgyvNLnWIBn3tToJtooTE669PNsHIdSDabKnaA==
+"@angular/animations@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-19.1.0-rc.0.tgz#08d5b25f3b57eb8acc9cc8fd2d188d0c76bf31b8"
+  integrity sha512-CAbv8Zr7RLYUFh6afw/3k7OHXvpxJvXDl5YeXWw5gBC7j1zHWochCVcEZVqBnrumGllVhxctM7L6gCI0x+EG/g==
   dependencies:
     tslib "^2.3.0"
 
@@ -231,50 +231,50 @@
     vite "5.2.12"
     watchpack "2.4.1"
 
-"@angular/build@19.1.0-next.1", "@angular/build@^19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular/build/-/build-19.1.0-next.1.tgz#8b9ff247f3ec9463dc9bdf99640ede88feb70726"
-  integrity sha512-rLzY+2AxkNb82TSRp7DaZH/y0/ZdUV3g0OwJl7ajXvyIH0oJgq5mtNAO4VUreU+MR6h3tGO+XJRg6W0OUM9rzw==
+"@angular/build@19.1.0-rc.0", "@angular/build@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/build/-/build-19.1.0-rc.0.tgz#7ac3a48be233c2978d94d3587badc74a817d60bd"
+  integrity sha512-ALl+MVMYBF+E7HyAQ+1MtE6sNIOAX0o2Sfs0wdIQfM2unRl6jPsz/Ker4BjnNQIK4wRCcstyzBv5mZBDulfFIQ==
   dependencies:
     "@ampproject/remapping" "2.3.0"
-    "@angular-devkit/architect" "0.1901.0-next.1"
+    "@angular-devkit/architect" "0.1901.0-rc.0"
     "@babel/core" "7.26.0"
     "@babel/helper-annotate-as-pure" "7.25.9"
     "@babel/helper-split-export-declaration" "7.24.7"
     "@babel/plugin-syntax-import-attributes" "7.26.0"
-    "@inquirer/confirm" "5.1.0"
+    "@inquirer/confirm" "5.1.1"
     "@vitejs/plugin-basic-ssl" "1.2.0"
     beasties "0.2.0"
     browserslist "^4.23.0"
-    esbuild "0.24.0"
-    fast-glob "3.3.2"
+    esbuild "0.24.2"
+    fast-glob "3.3.3"
     https-proxy-agent "7.0.6"
     istanbul-lib-instrument "6.0.3"
     listr2 "8.2.5"
-    magic-string "0.30.15"
+    magic-string "0.30.17"
     mrmime "2.0.0"
     parse5-html-rewriting-stream "7.0.0"
     picomatch "4.0.2"
     piscina "4.8.0"
-    rollup "4.28.1"
-    sass "1.82.0"
+    rollup "4.30.1"
+    sass "1.83.1"
     semver "7.6.3"
-    vite "6.0.3"
+    vite "6.0.7"
     watchpack "2.4.2"
   optionalDependencies:
-    lmdb "3.2.0"
+    lmdb "3.2.2"
 
-"@angular/cli@^19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-19.1.0-next.1.tgz#752412696cad177f3a5053943993c5624349ff5d"
-  integrity sha512-bwHemDALFs3UvPv3YN0dl007B/YSuzbQ3QhUOWkP3r79WnvMDPQmA7t0RlJwrskzCtRmfSR7kF6nNUS0QEzMnw==
+"@angular/cli@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-19.1.0-rc.0.tgz#f83c8fce3addda86d59c4741c676b62270962743"
+  integrity sha512-NWrXdaGxC4l8mJTeJDVDd8eKFIvWa+S0grQON88orL4Rm5n7LwT8SC3vPPDIrc/W6m8Z9Wc+JBrI3VPI9lZh3w==
   dependencies:
-    "@angular-devkit/architect" "0.1901.0-next.1"
-    "@angular-devkit/core" "19.1.0-next.1"
-    "@angular-devkit/schematics" "19.1.0-next.1"
-    "@inquirer/prompts" "7.2.0"
+    "@angular-devkit/architect" "0.1901.0-rc.0"
+    "@angular-devkit/core" "19.1.0-rc.0"
+    "@angular-devkit/schematics" "19.1.0-rc.0"
+    "@inquirer/prompts" "7.2.1"
     "@listr2/prompt-adapter-inquirer" "2.0.18"
-    "@schematics/angular" "19.1.0-next.1"
+    "@schematics/angular" "19.1.0-rc.0"
     "@yarnpkg/lockfile" "1.1.0"
     ini "5.0.0"
     jsonc-parser "3.3.1"
@@ -282,22 +282,22 @@
     npm-package-arg "12.0.1"
     npm-pick-manifest "10.0.0"
     pacote "20.0.0"
-    resolve "1.22.8"
+    resolve "1.22.10"
     semver "7.6.3"
     symbol-observable "4.0.0"
     yargs "17.7.2"
 
-"@angular/common@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/common/-/common-19.1.0-next.3.tgz#e7fa00ed6424064aac685c020a877a7df2be331e"
-  integrity sha512-vyPSuB/TD/Tba9gCPa4pUTSNAd3Fcul7Kd0prHIiJ/MpocEp+JFBeeedgFumRB2sdP5xfuvPK3cqPF/e+6AklQ==
+"@angular/common@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/common/-/common-19.1.0-rc.0.tgz#eaceae526eee21403b922583d94cb79ea3a7beac"
+  integrity sha512-kDo8El2h4I90Cai2lI7hIV4vMMqEfPz/sM9FmogwzJZ2t5ao5PtutbaoInF3w1xyQj9cnVx2UH5Q0in04uwS4g==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/compiler-cli@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-19.1.0-next.3.tgz#4769e98a0d03f31b956e18542e37eddb97752590"
-  integrity sha512-FtBVAG566WcpuW8c1NJiF8KVwPDrYD+ang6Npk4JCwetX6ien+4B2qM/l11YPW1Bm1uWunUvziOV6oW997t1Uw==
+"@angular/compiler-cli@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-19.1.0-rc.0.tgz#f3645dc3764138f043ecbeb1b4f01ff851acfd39"
+  integrity sha512-7D0jLS/qooH782rgE5SbWJUpSsqR9/qlbhYvcyLosr1YjH3dsaZV8j4h2r+qJ+qwjKLWxRr2XLtVzVxPyeyKIQ==
   dependencies:
     "@babel/core" "7.26.0"
     "@jridgewell/sourcemap-codec" "^1.4.14"
@@ -308,10 +308,10 @@
     tslib "^2.3.0"
     yargs "^17.2.1"
 
-"@angular/compiler@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-19.1.0-next.3.tgz#4bfb8db5c6021d36a1c85dbcef3f5ff849b835a5"
-  integrity sha512-mzz5M+f6XXbdYNxpyp1LRtn670tE+vFsZ9JuvsNpN8+dnJFc4Y/eaMwk1+vsJkUb6EZybc5Q2soma2x1ofJMSg==
+"@angular/compiler@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-19.1.0-rc.0.tgz#38c489e0430527b176f088062922ad6108032ffd"
+  integrity sha512-bQb8+l+7IntSLoEkrdA8xghgOMPth0Kuv5ywSw0uh/TmbF82K/g6IiRdRwqTordeSWy0G8RZlh3fKrSm8vRvNw==
   dependencies:
     tslib "^2.3.0"
 
@@ -322,28 +322,28 @@
   dependencies:
     tslib "^2.3.0"
 
-"@angular/core@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/core/-/core-19.1.0-next.3.tgz#5c194132bd0530a3367f21bffd68337f837d89d6"
-  integrity sha512-WyVj9AVkEtKIGvWx1XvmZm6KFpIE8gQYuPLVAUMoX9mmxnA69LmMeYmCZEJGpH2uJDDv3kLxrgvom8sAPH3/Ng==
+"@angular/core@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/core/-/core-19.1.0-rc.0.tgz#303dcf8ee8ed8aa196eb71de43eecb291e8d82d9"
+  integrity sha512-t4zWPx+EyKi7qIjBo+dBhmkk8nZVB88YBj+et5oklG1CNL8//w7q/b8bmmirT+/JGHsB9E044skeMohhayCJ3A==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/forms@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-19.1.0-next.3.tgz#b3cc6326aef3e0f97569a2ec0507d455e8b76ba7"
-  integrity sha512-4BaVb64jQ1IK0TNApcjsbni9Pm0NTuSrwy/snex6ISQlYgZxy12evb6B3TlvIsuN1MhSyDiZrAcrhGCYTRT6lA==
+"@angular/forms@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-19.1.0-rc.0.tgz#30642ce2b5191ef7a3ae81adc1ce89425f72df09"
+  integrity sha512-XrBUbZiQBzsD6li0RO5i1xcPTFln1NTtOHKT1Qga35zmFg+jPgz1/asPghEQs7WMKrXVoZer2tKNiRRdhKv7/A==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/localize@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-19.1.0-next.3.tgz#b870e103df0a9510d7888d3c7e36c6c596fc0af9"
-  integrity sha512-7dyN9Ib+8bHN8K5lEIln+/+uM+Z0RjKFB9G9KqWzkOBwKpF41UNX2mHat1OoF9WMX4iuan+yTS+qBmLHhEtpnA==
+"@angular/localize@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-19.1.0-rc.0.tgz#7ed7fde890c7bb3a7c569e358fba74b3f25b55fd"
+  integrity sha512-2CYgwuv9rzwWuPFrg6+q8oQMdtR/NrXmSkulA39JyggkmArZzqCOKBMYM5CEkPDJyvBdX1iPP8LJtqKNe5sJEQ==
   dependencies:
     "@babel/core" "7.26.0"
     "@types/babel__core" "7.20.5"
-    fast-glob "3.3.2"
+    fast-glob "3.3.3"
     yargs "^17.2.1"
 
 "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#36946be4df61f6549ae3829c026022e47674eae2":
@@ -353,32 +353,32 @@
     "@yarnpkg/lockfile" "^1.1.0"
     typescript "~4.9.0"
 
-"@angular/platform-browser-dynamic@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.1.0-next.3.tgz#c88489021163de47028ba0505ae4d669b48eabc5"
-  integrity sha512-M9XCelWEu9sOT/TW15wK/FPWrhsfzyJq50ZSr6xGwkrIjfqTkmYcKA+9+B9DOSgnugNMjLUfJoRW0XHD7IyDCg==
+"@angular/platform-browser-dynamic@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.1.0-rc.0.tgz#5c038a7a624b9ad0fb6532a161a81876f387a104"
+  integrity sha512-sUDbSeHS5uVWNT5cFcDFCZVOAIBa9ZaRUN504FJ2psPv0vBtMBDdA67rSz9xa8e/GRm/EOX+a7izEVKeU48M5Q==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-browser@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-19.1.0-next.3.tgz#638d251d24075e40ae522d81b8d37524b741943f"
-  integrity sha512-bavvrFQmot1jXPShK5yIzJwtWzLnkQaPqIVkaF/GbzEDAHryzr17CyjecZ7HmGEebwGe8IVhYKohwF8fn9zRng==
+"@angular/platform-browser@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-19.1.0-rc.0.tgz#8c3c88027f9f15ff70dc374d7d79cb7a88e79a82"
+  integrity sha512-IwAO/oNUYe3zWunIyJsdzV/Nq4Yu6KxognJGCEUKkxj++Yu2pwaUnheNm/+L++yx5bYPMVcIURgseRqpwJt55g==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-server@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-19.1.0-next.3.tgz#d0f67565fbd39361ac0281e92ded5b73aa11fddf"
-  integrity sha512-7ceVWFYgBEFdm6vhda4StGJY2HYJkVMJv1fcX63L2NSswRtaNbFTULwGADCl+kqDFQucTdq203+l1FAMMF7W5g==
+"@angular/platform-server@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-19.1.0-rc.0.tgz#ee9a0337549d921c050851237a5292b2152e1ecf"
+  integrity sha512-kPdNLnBMxLc32Rq76qHdpMufZ7l6w7K2TOTlXGj5nWDymhLJhg19TvYHWH2PgbIY/11bAwejw9TI4756enIEAQ==
   dependencies:
     tslib "^2.3.0"
     xhr2 "^0.2.0"
 
-"@angular/router@^19.1.0-next.3":
-  version "19.1.0-next.3"
-  resolved "https://registry.yarnpkg.com/@angular/router/-/router-19.1.0-next.3.tgz#183da84ac3e9795bad9b1c39b02a88c826928cda"
-  integrity sha512-jOY+qLvkLeg2ArPCJWjvAPYSA7dpimF+ybhjpyJ4SzB4co3y238J9MmVJE7MDid5QUfD6UOF6lvAOgx91J9R2w==
+"@angular/router@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/router/-/router-19.1.0-rc.0.tgz#ae6dd541441feebbe9169817c6e6452c6fd7eb6a"
+  integrity sha512-GYrTk2Me7nVfSGMlAh/IcKX2Fxan+ZXSCIx9y/BHGhG4SxUtTitqnj0oXsJy6DXibn6G2FkJqByC7ceZOD0OoA==
   dependencies:
     tslib "^2.3.0"
 
@@ -1647,10 +1647,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.4.tgz#f83eb142df3ca7b49531c1ed680b81e484316508"
   integrity sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==
 
-"@esbuild/aix-ppc64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c"
-  integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==
+"@esbuild/aix-ppc64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461"
+  integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==
 
 "@esbuild/android-arm64@0.17.19":
   version "0.17.19"
@@ -1667,10 +1667,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.4.tgz#dd328039daccd6033b2d1e536c054914bfc92287"
   integrity sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==
 
-"@esbuild/android-arm64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0"
-  integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==
+"@esbuild/android-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894"
+  integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==
 
 "@esbuild/android-arm@0.17.19":
   version "0.17.19"
@@ -1687,10 +1687,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.4.tgz#76767a989720a97b206ea14c52af6e4589e48b0d"
   integrity sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==
 
-"@esbuild/android-arm@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810"
-  integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==
+"@esbuild/android-arm@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3"
+  integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==
 
 "@esbuild/android-x64@0.17.19":
   version "0.17.19"
@@ -1707,10 +1707,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.4.tgz#14a8ae3c35702d882086efb5a8f8d7b0038d8d35"
   integrity sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==
 
-"@esbuild/android-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705"
-  integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==
+"@esbuild/android-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb"
+  integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==
 
 "@esbuild/darwin-arm64@0.17.19":
   version "0.17.19"
@@ -1727,10 +1727,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.4.tgz#7e735046005e4c12e9139e0bdd1fa6a754430d57"
   integrity sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==
 
-"@esbuild/darwin-arm64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd"
-  integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==
+"@esbuild/darwin-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936"
+  integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==
 
 "@esbuild/darwin-x64@0.17.19":
   version "0.17.19"
@@ -1747,10 +1747,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.4.tgz#db623553547a5fe3502a63aa88306e9023178482"
   integrity sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==
 
-"@esbuild/darwin-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107"
-  integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==
+"@esbuild/darwin-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9"
+  integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==
 
 "@esbuild/freebsd-arm64@0.17.19":
   version "0.17.19"
@@ -1767,10 +1767,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.4.tgz#91cbad647c079bf932086fbd4749d7f563df67b8"
   integrity sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==
 
-"@esbuild/freebsd-arm64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7"
-  integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==
+"@esbuild/freebsd-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00"
+  integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==
 
 "@esbuild/freebsd-x64@0.17.19":
   version "0.17.19"
@@ -1787,10 +1787,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.4.tgz#723299b9859ccbe5532fecbadba3ac33019ba8e8"
   integrity sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==
 
-"@esbuild/freebsd-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93"
-  integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==
+"@esbuild/freebsd-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f"
+  integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==
 
 "@esbuild/linux-arm64@0.17.19":
   version "0.17.19"
@@ -1807,10 +1807,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.4.tgz#531743f861e1ef6e50b874d6c784cda37aa5e685"
   integrity sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==
 
-"@esbuild/linux-arm64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75"
-  integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==
+"@esbuild/linux-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43"
+  integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==
 
 "@esbuild/linux-arm@0.17.19":
   version "0.17.19"
@@ -1827,10 +1827,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.4.tgz#1144b5654764960dd97d90ddf0893a9afc63ad91"
   integrity sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==
 
-"@esbuild/linux-arm@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d"
-  integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==
+"@esbuild/linux-arm@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736"
+  integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==
 
 "@esbuild/linux-ia32@0.17.19":
   version "0.17.19"
@@ -1847,10 +1847,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.4.tgz#c81b6f2ed3308d3b75ccefb5ac63bc4cf3a9d2e9"
   integrity sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==
 
-"@esbuild/linux-ia32@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb"
-  integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==
+"@esbuild/linux-ia32@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5"
+  integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==
 
 "@esbuild/linux-loong64@0.17.19":
   version "0.17.19"
@@ -1867,10 +1867,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.4.tgz#87b6af7cd0f2551653955fc2dc465b7f4464af0a"
   integrity sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==
 
-"@esbuild/linux-loong64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c"
-  integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==
+"@esbuild/linux-loong64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc"
+  integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==
 
 "@esbuild/linux-mips64el@0.17.19":
   version "0.17.19"
@@ -1887,10 +1887,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.4.tgz#fec73cd39490a0c45d052bef03e011a0ad366c06"
   integrity sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==
 
-"@esbuild/linux-mips64el@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3"
-  integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==
+"@esbuild/linux-mips64el@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb"
+  integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==
 
 "@esbuild/linux-ppc64@0.17.19":
   version "0.17.19"
@@ -1907,10 +1907,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.4.tgz#ea3b5e13b0fc8666bd4c6f7ea58bd1830f3e6e78"
   integrity sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==
 
-"@esbuild/linux-ppc64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e"
-  integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==
+"@esbuild/linux-ppc64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412"
+  integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==
 
 "@esbuild/linux-riscv64@0.17.19":
   version "0.17.19"
@@ -1927,10 +1927,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.4.tgz#80d406f653fc6b193edaeb55ac88d4ac22c8f155"
   integrity sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==
 
-"@esbuild/linux-riscv64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25"
-  integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==
+"@esbuild/linux-riscv64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694"
+  integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==
 
 "@esbuild/linux-s390x@0.17.19":
   version "0.17.19"
@@ -1947,10 +1947,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.4.tgz#9cbd26854b5b12cf22fb54c96cd1adffaf6ace6f"
   integrity sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==
 
-"@esbuild/linux-s390x@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319"
-  integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==
+"@esbuild/linux-s390x@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577"
+  integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==
 
 "@esbuild/linux-x64@0.17.19":
   version "0.17.19"
@@ -1967,10 +1967,15 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.4.tgz#44dfe1c5cad855362c830c604dba97fbb16fc114"
   integrity sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==
 
-"@esbuild/linux-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef"
-  integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==
+"@esbuild/linux-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f"
+  integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==
+
+"@esbuild/netbsd-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6"
+  integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==
 
 "@esbuild/netbsd-x64@0.17.19":
   version "0.17.19"
@@ -1987,15 +1992,15 @@
   resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.4.tgz#89b97d823e1cc4bf8c4e5dc8f76c8d6ceb1c87f3"
   integrity sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==
 
-"@esbuild/netbsd-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c"
-  integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==
+"@esbuild/netbsd-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40"
+  integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==
 
-"@esbuild/openbsd-arm64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2"
-  integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==
+"@esbuild/openbsd-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f"
+  integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==
 
 "@esbuild/openbsd-x64@0.17.19":
   version "0.17.19"
@@ -2012,10 +2017,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.4.tgz#080715bb4981c326364320d7b56835608e2bd98d"
   integrity sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==
 
-"@esbuild/openbsd-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf"
-  integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==
+"@esbuild/openbsd-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205"
+  integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==
 
 "@esbuild/sunos-x64@0.17.19":
   version "0.17.19"
@@ -2032,10 +2037,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.4.tgz#8d838a8ac80e211536490108b72fb0091a811626"
   integrity sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==
 
-"@esbuild/sunos-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4"
-  integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==
+"@esbuild/sunos-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6"
+  integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==
 
 "@esbuild/win32-arm64@0.17.19":
   version "0.17.19"
@@ -2052,10 +2057,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.4.tgz#94afb4c2ac89b0f09791606d6d93fdab322f81c8"
   integrity sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==
 
-"@esbuild/win32-arm64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b"
-  integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==
+"@esbuild/win32-arm64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85"
+  integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==
 
 "@esbuild/win32-ia32@0.17.19":
   version "0.17.19"
@@ -2072,10 +2077,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.4.tgz#822085cd52f2f1dd90eabb59346ffa779c0bab83"
   integrity sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==
 
-"@esbuild/win32-ia32@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103"
-  integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==
+"@esbuild/win32-ia32@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2"
+  integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==
 
 "@esbuild/win32-x64@0.17.19":
   version "0.17.19"
@@ -2092,10 +2097,10 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.4.tgz#11ef0398f9abee161193461910a507ef0d4c0c32"
   integrity sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==
 
-"@esbuild/win32-x64@0.24.0":
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244"
-  integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==
+"@esbuild/win32-x64@0.24.2":
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b"
+  integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==
 
 "@firebase/app-types@^0.7.0":
   version "0.7.0"
@@ -2175,32 +2180,32 @@
     protobufjs "^7.2.5"
     yargs "^17.7.2"
 
-"@inquirer/checkbox@^4.0.3":
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.0.3.tgz#cbd9694e925964f5b0432cc84ab107a8d7a8202d"
-  integrity sha512-CEt9B4e8zFOGtc/LYeQx5m8nfqQeG/4oNNv0PUvXGG0mys+wR/WbJ3B4KfSQ4Fcr3AQfpiuFOi3fVvmPfvNbxw==
+"@inquirer/checkbox@^4.0.4":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.0.4.tgz#e7335f9c23f4100f789a8fceb26417c9a74a6dee"
+  integrity sha512-fYAKCAcGNMdfjL6hZTRUwkIByQ8EIZCXKrIQZH7XjADnN/xvRUhj8UdBbpC4zoUzvChhkSC/zRKaP/tDs3dZpg==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/figures" "^1.0.8"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/figures" "^1.0.9"
+    "@inquirer/type" "^3.0.2"
     ansi-escapes "^4.3.2"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/confirm@5.1.0", "@inquirer/confirm@^5.1.0":
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.0.tgz#061cd0790c8debe092353589a501211b0d6c53ef"
-  integrity sha512-osaBbIMEqVFjTX5exoqPXs6PilWQdjaLhGtMDXMXg/yxkHXNq43GlxGyTA35lK2HpzUgDN+Cjh/2AmqCN0QJpw==
+"@inquirer/confirm@5.1.1", "@inquirer/confirm@^5.1.1":
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.1.tgz#18385064b8275eb79fdba505ce527801804eea04"
+  integrity sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
 
-"@inquirer/core@^10.1.1":
-  version "10.1.1"
-  resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.1.tgz#801e82649fb64bcb2b5e4667397ff8c25bccebab"
-  integrity sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==
+"@inquirer/core@^10.1.2":
+  version "10.1.2"
+  resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.2.tgz#a9c5b9ed814a636e99b5c0a8ca4f1626d99fd75d"
+  integrity sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==
   dependencies:
-    "@inquirer/figures" "^1.0.8"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/figures" "^1.0.9"
+    "@inquirer/type" "^3.0.2"
     ansi-escapes "^4.3.2"
     cli-width "^4.1.0"
     mute-stream "^2.0.0"
@@ -2209,22 +2214,22 @@
     wrap-ansi "^6.2.0"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/editor@^4.2.0":
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.0.tgz#469a00e876afebcfc574bf8114e40c40795688c1"
-  integrity sha512-Z3LeGsD3WlItDqLxTPciZDbGtm0wrz7iJGS/uUxSiQxef33ZrBq7LhsXg30P7xrWz1kZX4iGzxxj5SKZmJ8W+w==
+"@inquirer/editor@^4.2.1":
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.1.tgz#9887e95aa28a52eb20e9e08d85cb3698ef404601"
+  integrity sha512-xn9aDaiP6nFa432i68JCaL302FyL6y/6EG97nAtfIPnWZ+mWPgCMLGc4XZ2QQMsZtu9q3Jd5AzBPjXh10aX9kA==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
     external-editor "^3.1.0"
 
-"@inquirer/expand@^4.0.3":
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.3.tgz#7593b841d9355c4e7a047071b33e5a58f202ac96"
-  integrity sha512-MDszqW4HYBpVMmAoy/FA9laLrgo899UAga0itEjsYrBthKieDZNc0e16gdn7N3cQ0DSf/6zsTBZMuDYDQU4ktg==
+"@inquirer/expand@^4.0.4":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.4.tgz#e3b052835e48fd4ebcf71813b7eae8b03c729d1b"
+  integrity sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
     yoctocolors-cjs "^2.1.2"
 
 "@inquirer/figures@^1.0.2":
@@ -2232,79 +2237,79 @@
   resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.3.tgz#1227cc980f88e6d6ab85abadbf164f5038041edd"
   integrity sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==
 
-"@inquirer/figures@^1.0.8":
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.8.tgz#d9e414a1376a331a0e71b151fea27c48845788b0"
-  integrity sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==
+"@inquirer/figures@^1.0.9":
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.9.tgz#9d8128f8274cde4ca009ca8547337cab3f37a4a3"
+  integrity sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==
 
-"@inquirer/input@^4.1.0":
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.0.tgz#54b484550c3ecb2e7bf62149a14e9784f08efe6b"
-  integrity sha512-16B8A9hY741yGXzd8UJ9R8su/fuuyO2e+idd7oVLYjP23wKJ6ILRIIHcnXe8/6AoYgwRS2zp4PNsW/u/iZ24yg==
+"@inquirer/input@^4.1.1":
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.1.tgz#aea2e463087c6aae57b9801e1ae5648f50d0d22e"
+  integrity sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
 
-"@inquirer/number@^3.0.3":
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.3.tgz#e3dd7520e21e9708fea9465b73d20ac851f5f60d"
-  integrity sha512-HA/W4YV+5deKCehIutfGBzNxWH1nhvUC67O4fC9ufSijn72yrYnRmzvC61dwFvlXIG1fQaYWi+cqNE9PaB9n6Q==
+"@inquirer/number@^3.0.4":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.4.tgz#090dcac6886d0cddc255f6624b61fb4461747fee"
+  integrity sha512-DX7a6IXRPU0j8kr2ovf+QaaDiIf+zEKaZVzCWdLOTk7XigqSXvoh4cul7x68xp54WTQrgSnW7P1WBJDbyY3GhA==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
 
-"@inquirer/password@^4.0.3":
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.3.tgz#17af6d8983e2e5c0f231b382ef5c78a8b4b63e95"
-  integrity sha512-3qWjk6hS0iabG9xx0U1plwQLDBc/HA/hWzLFFatADpR6XfE62LqPr9GpFXBkLU0KQUaIXZ996bNG+2yUvocH8w==
+"@inquirer/password@^4.0.4":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.4.tgz#77891ae3ed5736607e6e942993ac40ca00411a2c"
+  integrity sha512-wiliQOWdjM8FnBmdIHtQV2Ca3S1+tMBUerhyjkRCv1g+4jSvEweGu9GCcvVEgKDhTBT15nrxvk5/bVrGUqSs1w==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
     ansi-escapes "^4.3.2"
 
-"@inquirer/prompts@7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.2.0.tgz#15010df2257a243866480513d36f3e19c98d7fb1"
-  integrity sha512-ZXYZ5oGVrb+hCzcglPeVerJ5SFwennmDOPfXq1WyeZIrPGySLbl4W6GaSsBFvu3WII36AOK5yB8RMIEEkBjf8w==
-  dependencies:
-    "@inquirer/checkbox" "^4.0.3"
-    "@inquirer/confirm" "^5.1.0"
-    "@inquirer/editor" "^4.2.0"
-    "@inquirer/expand" "^4.0.3"
-    "@inquirer/input" "^4.1.0"
-    "@inquirer/number" "^3.0.3"
-    "@inquirer/password" "^4.0.3"
-    "@inquirer/rawlist" "^4.0.3"
-    "@inquirer/search" "^3.0.3"
-    "@inquirer/select" "^4.0.3"
-
-"@inquirer/rawlist@^4.0.3":
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.3.tgz#9964521d3470e153e7e11f228a53cf0afefb217c"
-  integrity sha512-5MhinSzfmOiZlRoPezfbJdfVCZikZs38ja3IOoWe7H1dxL0l3Z2jAUgbBldeyhhOkELdGvPlBfQaNbeLslib1w==
+"@inquirer/prompts@7.2.1":
+  version "7.2.1"
+  resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.2.1.tgz#f00fbcf06998a07faebc10741efa289384529950"
+  integrity sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==
+  dependencies:
+    "@inquirer/checkbox" "^4.0.4"
+    "@inquirer/confirm" "^5.1.1"
+    "@inquirer/editor" "^4.2.1"
+    "@inquirer/expand" "^4.0.4"
+    "@inquirer/input" "^4.1.1"
+    "@inquirer/number" "^3.0.4"
+    "@inquirer/password" "^4.0.4"
+    "@inquirer/rawlist" "^4.0.4"
+    "@inquirer/search" "^3.0.4"
+    "@inquirer/select" "^4.0.4"
+
+"@inquirer/rawlist@^4.0.4":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.4.tgz#d10bbd6c529cd468d3d764c19de21334a01fa6d9"
+  integrity sha512-IsVN2EZdNHsmFdKWx9HaXb8T/s3FlR/U1QPt9dwbSyPtjFbMTlW9CRFvnn0bm/QIsrMRD2oMZqrQpSWPQVbXXg==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/type" "^3.0.2"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/search@^3.0.3":
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.3.tgz#791f19a4ee87d65816fd3bb17bd8d76bc11bff07"
-  integrity sha512-mQTCbdNolTGvGGVCJSI6afDwiSGTV+fMLPEIMDJgIV6L/s3+RYRpxt6t0DYnqMQmemnZ/Zq0vTIRwoHT1RgcTg==
+"@inquirer/search@^3.0.4":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.4.tgz#fcf51a853536add37491920634a182ecc9f5524b"
+  integrity sha512-tSkJk2SDmC2MEdTIjknXWmCnmPr5owTs9/xjfa14ol1Oh95n6xW7SYn5fiPk4/vrJPys0ggSWiISdPze4LTa7A==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/figures" "^1.0.8"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/figures" "^1.0.9"
+    "@inquirer/type" "^3.0.2"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/select@^4.0.3":
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.3.tgz#24a9d744685608ff26262fccb41fa93b4dac615f"
-  integrity sha512-OZfKDtDE8+J54JYAFTUGZwvKNfC7W/gFCjDkcsO7HnTH/wljsZo9y/FJquOxMy++DY0+9l9o/MOZ8s5s1j5wmw==
+"@inquirer/select@^4.0.4":
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.4.tgz#026ada15754def1cd3fbc01efc56eae45ccc7de4"
+  integrity sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w==
   dependencies:
-    "@inquirer/core" "^10.1.1"
-    "@inquirer/figures" "^1.0.8"
-    "@inquirer/type" "^3.0.1"
+    "@inquirer/core" "^10.1.2"
+    "@inquirer/figures" "^1.0.9"
+    "@inquirer/type" "^3.0.2"
     ansi-escapes "^4.3.2"
     yoctocolors-cjs "^2.1.2"
 
@@ -2315,10 +2320,10 @@
   dependencies:
     mute-stream "^1.0.0"
 
-"@inquirer/type@^3.0.1":
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.1.tgz#619ce9f65c3e114d8e39c41822bed3440d20b478"
-  integrity sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==
+"@inquirer/type@^3.0.2":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.2.tgz#baff9f8d70947181deb36772cd9a5b6876d3e60c"
+  integrity sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==
 
 "@isaacs/cliui@^8.0.2":
   version "8.0.2"
@@ -2446,60 +2451,60 @@
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.11.tgz#8b0034d9f9a5c859f629a5c1e760bf43258e9e6c"
   integrity sha512-7rO1BiJDWy0WEHDknVSuROMmBHD0Vh5KsgQojN8ulNbOJf0f3KsjoVB3HDPlVO3n75hTjxGn0rG19im28H3DVQ==
 
-"@lmdb/lmdb-darwin-arm64@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.0.tgz#fefac30026690e8e68a9b508b650ce0cbfe8a122"
-  integrity sha512-Ca5N6DGDlH/lIycMj2U3FtokNPdUmGyL+htto3G+gexoXYaDE9cbojVgwXd3/Zih9Friqh7l5qZk+LZEVDwJvQ==
+"@lmdb/lmdb-darwin-arm64@3.2.2":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.2.tgz#39e25e2a95d35a7350862af96d05e5396ea8a074"
+  integrity sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==
 
 "@lmdb/lmdb-darwin-x64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.11.tgz#e7290bec89c21d94ae501f014d12ac24ae8283a5"
   integrity sha512-rqkwNYEqQ6BR51ffHasIMh/8+slTPf1kfoAdreLDsUkpAJ/hntW0QP9eMC9eOwRjfuOURdlgGLeCaaCpDTxMCQ==
 
-"@lmdb/lmdb-darwin-x64@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.0.tgz#ae7134b12d8e479bcde5c5bcbdf1d17ba535f35b"
-  integrity sha512-s/MXLuRXxJjQpg0aM/yN3FJh34tqEPo6Zg+FJvc9+gUNpzXzZwBB9MOTYA05WVrvxwtIKxMg7ocLjAH1LQUT3A==
+"@lmdb/lmdb-darwin-x64@3.2.2":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.2.tgz#7b9eac5b7a89dbf3433648622fe52799dd4202e5"
+  integrity sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==
 
 "@lmdb/lmdb-linux-arm64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.11.tgz#399299cc2f4f97c78666f2c5273842c77847f2c2"
   integrity sha512-P5d7Uj297g2tlKsvDZDqZNEZ3mw0npTrQuizPS63tXV1VGz/bHMuqL1/NWmJqAtVSPZdhQe0DD/sbBai7Ra6UA==
 
-"@lmdb/lmdb-linux-arm64@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.0.tgz#7492adba1667789f4f129945c71d38b936517628"
-  integrity sha512-XRkaZok4AkzMXKLfsdJYVBXYJ/6idDpuLIPGiVjelxKLbZIKB7F+Xp2BDfeelAPdjRbW/qhzF7FNA0u1blz/Og==
+"@lmdb/lmdb-linux-arm64@3.2.2":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.2.tgz#f81b9233b2b78141af4cd22864f152cfeeed7b93"
+  integrity sha512-4hdgZtWI1idQlWRp+eleWXD9KLvObgboRaVoBj2POdPEYvsKANllvMW0El8tEQwtw74yB9NT6P8ENBB5UJf5+g==
 
 "@lmdb/lmdb-linux-arm@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.11.tgz#943db4a560115bbb96b77be564d128c41898e193"
   integrity sha512-uGR/sHB5p5d5dzP2+sbrf42++qw8PQbB6CqgHMBfZcXTUWz+A84XWWbl9UMg+6XY11mBHKUpzhswbHnpmE3iAg==
 
-"@lmdb/lmdb-linux-arm@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.0.tgz#cbea8970baaa7a802f0ff1b17d6873c50a6fb1b0"
-  integrity sha512-e9pljI8rZk1UAaDdi7sGiY0zkqsNAS3a4llOuk2UslAH4UP9vGZfjfCR5D+HKPUPbSEk28adOiNmIUT4N2lTBw==
+"@lmdb/lmdb-linux-arm@3.2.2":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.2.tgz#251fa02ed9d2d8b8a4827f5e53bf1e2d8aa745b8"
+  integrity sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==
 
 "@lmdb/lmdb-linux-x64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.11.tgz#ec5e071a157f185c2920ce99769dbf5a2fffe8f1"
   integrity sha512-xiO21qpfu/cu1Pcf/2+l2eG/96wFTzgPa25/qQ/VdvlrnKfYhtDzBo06lmfa6xrEzQZJ/kdFzwHZuafCDE58iA==
 
-"@lmdb/lmdb-linux-x64@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.0.tgz#0424671e51802f0864873501abe558c5e6f8461e"
-  integrity sha512-c8HMb044qzMT/wvk4HzBesRv3wQNeFkUFz6laH3FKVs0+ztM7snuT3izPWdeYhgCLkAiIqshqlcbvzQfPDeg2Q==
+"@lmdb/lmdb-linux-x64@3.2.2":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.2.tgz#f794a5b4c06019a82622565ba3d38e47aa113a2c"
+  integrity sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==
 
 "@lmdb/lmdb-win32-x64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.11.tgz#76fdd3338a5f55e778f3c9121cce2cacf87b48a6"
   integrity sha512-tjlzuLdmTlsWVdj7Wso/p3wJtLMqznkeGEELRMjRQCgas8mONBuwmk9jFO30Di86z4QxL1agZvugUrPMCm/iDw==
 
-"@lmdb/lmdb-win32-x64@3.2.0":
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.0.tgz#082b3996e46bc6b4333df08287813ecb53288ea3"
-  integrity sha512-xcrdSOPtpZ4ScWJM2x4g+eWCOctINOcaEWGSvZbmXPFD69SAFywyhqNsB3snAY3assYV0B52PWmiAwXWfijd+g==
+"@lmdb/lmdb-win32-x64@3.2.2":
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz#d160454f0e6c4f4af0a5a05d85141c3bd9523f9c"
+  integrity sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==
 
 "@material/material-color-utilities@^0.3.0":
   version "0.3.0"
@@ -2724,10 +2729,10 @@
     "@napi-rs/nice-win32-ia32-msvc" "1.0.1"
     "@napi-rs/nice-win32-x64-msvc" "1.0.1"
 
-"@ngtools/webpack@19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-19.1.0-next.1.tgz#94610cc813f094aceac2365390909bd7bc377f59"
-  integrity sha512-KXerPhuADoRppLOl7om8JHmOnnf0y9T05dKuXV3VcOupXVPsj1zbyZjO95kCJaUSYhD5Hvl7aDuBrAM4/pxFHQ==
+"@ngtools/webpack@19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-19.1.0-rc.0.tgz#139fd4576f09be91afbcfc3a8c589af3d1639120"
+  integrity sha512-alRs/9Lk0x4LBWw6e3MaSS7ISDFoorM4DBwA2qPrIfytYkJR1tbKKCn5m+TwgeNPPp43+QpBzIfftzHhnyiRuw==
 
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
@@ -3154,10 +3159,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz#462e7ecdd60968bc9eb95a20d185e74f8243ec1b"
   integrity sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==
 
-"@rollup/rollup-android-arm-eabi@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e"
-  integrity sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==
+"@rollup/rollup-android-arm-eabi@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809"
+  integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==
 
 "@rollup/rollup-android-arm64@4.18.0":
   version "4.18.0"
@@ -3169,10 +3174,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz#78a2b8a8a55f71a295eb860a654ae90a2b168f40"
   integrity sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==
 
-"@rollup/rollup-android-arm64@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz#17ea71695fb1518c2c324badbe431a0bd1879f2d"
-  integrity sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==
+"@rollup/rollup-android-arm64@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad"
+  integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==
 
 "@rollup/rollup-darwin-arm64@4.18.0":
   version "4.18.0"
@@ -3184,10 +3189,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz#5b783af714f434f1e66e3cdfa3817e0b99216d84"
   integrity sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==
 
-"@rollup/rollup-darwin-arm64@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz#dac0f0d0cfa73e7d5225ae6d303c13c8979e7999"
-  integrity sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==
+"@rollup/rollup-darwin-arm64@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23"
+  integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==
 
 "@rollup/rollup-darwin-x64@4.18.0":
   version "4.18.0"
@@ -3199,30 +3204,30 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz#f72484e842521a5261978034e18e20f778a2850d"
   integrity sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==
 
-"@rollup/rollup-darwin-x64@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz#8f63baa1d31784904a380d2e293fa1ddf53dd4a2"
-  integrity sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==
+"@rollup/rollup-darwin-x64@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d"
+  integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==
 
 "@rollup/rollup-freebsd-arm64@4.28.0":
   version "4.28.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz#3c919dff72b2fe344811a609c674a8347b033f62"
   integrity sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==
 
-"@rollup/rollup-freebsd-arm64@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz#30ed247e0df6e8858cdc6ae4090e12dbeb8ce946"
-  integrity sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==
+"@rollup/rollup-freebsd-arm64@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003"
+  integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==
 
 "@rollup/rollup-freebsd-x64@4.28.0":
   version "4.28.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz#b62a3a8365b363b3fdfa6da11a9188b6ab4dca7c"
   integrity sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==
 
-"@rollup/rollup-freebsd-x64@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz#57846f382fddbb508412ae07855b8a04c8f56282"
-  integrity sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==
+"@rollup/rollup-freebsd-x64@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360"
+  integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==
 
 "@rollup/rollup-linux-arm-gnueabihf@4.18.0":
   version "4.18.0"
@@ -3234,10 +3239,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz#0d02cc55bd229bd8ca5c54f65f916ba5e0591c94"
   integrity sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==
 
-"@rollup/rollup-linux-arm-gnueabihf@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz#378ca666c9dae5e6f94d1d351e7497c176e9b6df"
-  integrity sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==
+"@rollup/rollup-linux-arm-gnueabihf@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9"
+  integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==
 
 "@rollup/rollup-linux-arm-musleabihf@4.18.0":
   version "4.18.0"
@@ -3249,10 +3254,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz#c51d379263201e88a60e92bd8e90878f0c044425"
   integrity sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==
 
-"@rollup/rollup-linux-arm-musleabihf@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz#a692eff3bab330d5c33a5d5813a090c15374cddb"
-  integrity sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==
+"@rollup/rollup-linux-arm-musleabihf@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b"
+  integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==
 
 "@rollup/rollup-linux-arm64-gnu@4.18.0":
   version "4.18.0"
@@ -3264,10 +3269,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz#93ce2addc337b5cfa52b84f8e730d2e36eb4339b"
   integrity sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==
 
-"@rollup/rollup-linux-arm64-gnu@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz#6b1719b76088da5ac1ae1feccf48c5926b9e3db9"
-  integrity sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==
+"@rollup/rollup-linux-arm64-gnu@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528"
+  integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==
 
 "@rollup/rollup-linux-arm64-musl@4.18.0":
   version "4.18.0"
@@ -3279,15 +3284,15 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz#730af6ddc091a5ba5baac28a3510691725dc808b"
   integrity sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==
 
-"@rollup/rollup-linux-arm64-musl@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz#865baf5b6f5ff67acb32e5a359508828e8dc5788"
-  integrity sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==
+"@rollup/rollup-linux-arm64-musl@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80"
+  integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==
 
-"@rollup/rollup-linux-loongarch64-gnu@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz#23c6609ba0f7fa7a7f2038b6b6a08555a5055a87"
-  integrity sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==
+"@rollup/rollup-linux-loongarch64-gnu@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e"
+  integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==
 
 "@rollup/rollup-linux-powerpc64le-gnu@4.18.0":
   version "4.18.0"
@@ -3299,10 +3304,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz#b5565aac20b4de60ca1e557f525e76478b5436af"
   integrity sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==
 
-"@rollup/rollup-linux-powerpc64le-gnu@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz#652ef0d9334a9f25b9daf85731242801cb0fc41c"
-  integrity sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==
+"@rollup/rollup-linux-powerpc64le-gnu@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc"
+  integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==
 
 "@rollup/rollup-linux-riscv64-gnu@4.18.0":
   version "4.18.0"
@@ -3314,10 +3319,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz#d488290bf9338bad4ae9409c4aa8a1728835a20b"
   integrity sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==
 
-"@rollup/rollup-linux-riscv64-gnu@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz#1eb6651839ee6ebca64d6cc64febbd299e95e6bd"
-  integrity sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==
+"@rollup/rollup-linux-riscv64-gnu@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e"
+  integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==
 
 "@rollup/rollup-linux-s390x-gnu@4.18.0":
   version "4.18.0"
@@ -3329,10 +3334,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz#eb2e3f3a06acf448115045c11a5a96868c95a556"
   integrity sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==
 
-"@rollup/rollup-linux-s390x-gnu@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz#015c52293afb3ff2a293cf0936b1d43975c1e9cd"
-  integrity sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==
+"@rollup/rollup-linux-s390x-gnu@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea"
+  integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==
 
 "@rollup/rollup-linux-x64-gnu@4.18.0":
   version "4.18.0"
@@ -3344,10 +3349,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz#065952ef2aea7e837dc7e02aa500feeaff4fc507"
   integrity sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==
 
-"@rollup/rollup-linux-x64-gnu@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz#b83001b5abed2bcb5e2dbeec6a7e69b194235c1e"
-  integrity sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==
+"@rollup/rollup-linux-x64-gnu@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588"
+  integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==
 
 "@rollup/rollup-linux-x64-musl@4.18.0":
   version "4.18.0"
@@ -3359,10 +3364,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz#3435d484d05f5c4d1ffd54541b4facce2887103a"
   integrity sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==
 
-"@rollup/rollup-linux-x64-musl@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz#6cc7c84cd4563737f8593e66f33b57d8e228805b"
-  integrity sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==
+"@rollup/rollup-linux-x64-musl@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01"
+  integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==
 
 "@rollup/rollup-win32-arm64-msvc@4.18.0":
   version "4.18.0"
@@ -3374,10 +3379,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz#69682a2a10d9fedc334f87583cfca83c39c08077"
   integrity sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==
 
-"@rollup/rollup-win32-arm64-msvc@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz#631ffeee094d71279fcd1fe8072bdcf25311bc11"
-  integrity sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==
+"@rollup/rollup-win32-arm64-msvc@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52"
+  integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==
 
 "@rollup/rollup-win32-ia32-msvc@4.18.0":
   version "4.18.0"
@@ -3389,10 +3394,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz#b64470f9ac79abb386829c56750b9a4711be3332"
   integrity sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==
 
-"@rollup/rollup-win32-ia32-msvc@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz#06d1d60d5b9f718e8a6c4a43f82e3f9e3254587f"
-  integrity sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==
+"@rollup/rollup-win32-ia32-msvc@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e"
+  integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==
 
 "@rollup/rollup-win32-x64-msvc@4.18.0":
   version "4.18.0"
@@ -3404,10 +3409,10 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz#cb313feef9ac6e3737067fdf34f42804ac65a6f2"
   integrity sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==
 
-"@rollup/rollup-win32-x64-msvc@4.28.1":
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz#4dff5c4259ebe6c5b4a8f2c5bc3829b7a8447ff0"
-  integrity sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==
+"@rollup/rollup-win32-x64-msvc@4.30.1":
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c"
+  integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==
 
 "@rushstack/node-core-library@4.3.0":
   version "4.3.0"
@@ -3479,13 +3484,13 @@
     argparse "~1.0.9"
     string-argv "~0.3.1"
 
-"@schematics/angular@19.1.0-next.1", "@schematics/angular@^19.1.0-next.1":
-  version "19.1.0-next.1"
-  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-19.1.0-next.1.tgz#dab7faa046b9fbd6f1248c6e54cae5a5041a8b73"
-  integrity sha512-ly+DNSV5eKJCTL7U7wP+kBUyMxBShGmo7NS4T3o5N6a9F+vTcgGSboS0yLr2BsEbPZJSlMpsnD/7LUti8Tc2dw==
+"@schematics/angular@19.1.0-rc.0", "@schematics/angular@^19.1.0-rc.0":
+  version "19.1.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-19.1.0-rc.0.tgz#9192d8f26d0c26b0ffc895d9392a7d7746ec1408"
+  integrity sha512-YJi2fO9sUMnUG2fhEDWlb7Ad3Xx6sr1OJHLN4snFq3smZEzgrYKqiOp97/ZMcEsVOtgTpYAQ1l0nci2MJa6YtQ==
   dependencies:
-    "@angular-devkit/core" "19.1.0-next.1"
-    "@angular-devkit/schematics" "19.1.0-next.1"
+    "@angular-devkit/core" "19.1.0-rc.0"
+    "@angular-devkit/schematics" "19.1.0-rc.0"
     jsonc-parser "3.3.1"
 
 "@sigstore/bundle@^3.0.0":
@@ -7045,10 +7050,10 @@ es6-weak-map@^2.0.3:
     es6-iterator "^2.0.3"
     es6-symbol "^3.1.1"
 
-esbuild-wasm@0.24.0:
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.24.0.tgz#99f44feb1dfccd25dbe7de1a26326ea1c7aca0d8"
-  integrity sha512-xhNn5tL1AhkPg4ft59yXT6FkwKXiPSYyz1IeinJHUJpjvOHOIPvdmFQc0pGdjxlKSbzZc2mNmtVOWAR1EF/JAg==
+esbuild-wasm@0.24.2:
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.24.2.tgz#1ab3b4b858ecf226a3c1a63455358ecea704c500"
+  integrity sha512-03/7Z1gD+ohDnScFztvI4XddTAbKVmMEzCvvkBpQdWKEXJ+73dTyeNrmdxP1Q0zpDMFjzUJwtK4rLjqwiHbzkw==
 
 esbuild@0.21.4:
   version "0.21.4"
@@ -7079,35 +7084,36 @@ esbuild@0.21.4:
     "@esbuild/win32-ia32" "0.21.4"
     "@esbuild/win32-x64" "0.21.4"
 
-esbuild@0.24.0, esbuild@^0.24.0:
-  version "0.24.0"
-  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7"
-  integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==
+esbuild@0.24.2, esbuild@^0.24.2:
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
+  integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
   optionalDependencies:
-    "@esbuild/aix-ppc64" "0.24.0"
-    "@esbuild/android-arm" "0.24.0"
-    "@esbuild/android-arm64" "0.24.0"
-    "@esbuild/android-x64" "0.24.0"
-    "@esbuild/darwin-arm64" "0.24.0"
-    "@esbuild/darwin-x64" "0.24.0"
-    "@esbuild/freebsd-arm64" "0.24.0"
-    "@esbuild/freebsd-x64" "0.24.0"
-    "@esbuild/linux-arm" "0.24.0"
-    "@esbuild/linux-arm64" "0.24.0"
-    "@esbuild/linux-ia32" "0.24.0"
-    "@esbuild/linux-loong64" "0.24.0"
-    "@esbuild/linux-mips64el" "0.24.0"
-    "@esbuild/linux-ppc64" "0.24.0"
-    "@esbuild/linux-riscv64" "0.24.0"
-    "@esbuild/linux-s390x" "0.24.0"
-    "@esbuild/linux-x64" "0.24.0"
-    "@esbuild/netbsd-x64" "0.24.0"
-    "@esbuild/openbsd-arm64" "0.24.0"
-    "@esbuild/openbsd-x64" "0.24.0"
-    "@esbuild/sunos-x64" "0.24.0"
-    "@esbuild/win32-arm64" "0.24.0"
-    "@esbuild/win32-ia32" "0.24.0"
-    "@esbuild/win32-x64" "0.24.0"
+    "@esbuild/aix-ppc64" "0.24.2"
+    "@esbuild/android-arm" "0.24.2"
+    "@esbuild/android-arm64" "0.24.2"
+    "@esbuild/android-x64" "0.24.2"
+    "@esbuild/darwin-arm64" "0.24.2"
+    "@esbuild/darwin-x64" "0.24.2"
+    "@esbuild/freebsd-arm64" "0.24.2"
+    "@esbuild/freebsd-x64" "0.24.2"
+    "@esbuild/linux-arm" "0.24.2"
+    "@esbuild/linux-arm64" "0.24.2"
+    "@esbuild/linux-ia32" "0.24.2"
+    "@esbuild/linux-loong64" "0.24.2"
+    "@esbuild/linux-mips64el" "0.24.2"
+    "@esbuild/linux-ppc64" "0.24.2"
+    "@esbuild/linux-riscv64" "0.24.2"
+    "@esbuild/linux-s390x" "0.24.2"
+    "@esbuild/linux-x64" "0.24.2"
+    "@esbuild/netbsd-arm64" "0.24.2"
+    "@esbuild/netbsd-x64" "0.24.2"
+    "@esbuild/openbsd-arm64" "0.24.2"
+    "@esbuild/openbsd-x64" "0.24.2"
+    "@esbuild/sunos-x64" "0.24.2"
+    "@esbuild/win32-arm64" "0.24.2"
+    "@esbuild/win32-ia32" "0.24.2"
+    "@esbuild/win32-x64" "0.24.2"
 
 esbuild@^0.17.5:
   version "0.17.19"
@@ -7533,6 +7539,17 @@ fast-glob@3.3.2, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glo
     merge2 "^1.3.0"
     micromatch "^4.0.4"
 
+fast-glob@3.3.3:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+  integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+  dependencies:
+    "@nodelib/fs.stat" "^2.0.2"
+    "@nodelib/fs.walk" "^1.2.3"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.8"
+
 fast-json-stable-stringify@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -9086,6 +9103,13 @@ is-core-module@^2.1.0, is-core-module@^2.13.0, is-core-module@^2.5.0:
   dependencies:
     hasown "^2.0.2"
 
+is-core-module@^2.16.0:
+  version "2.16.1"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+  integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+  dependencies:
+    hasown "^2.0.2"
+
 is-decimal@^1.0.0, is-decimal@^1.0.2:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
@@ -10016,10 +10040,10 @@ lmdb@3.0.11:
     "@lmdb/lmdb-linux-x64" "3.0.11"
     "@lmdb/lmdb-win32-x64" "3.0.11"
 
-lmdb@3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.2.0.tgz#b951233e9e8fcf8d1671bec5103250887f3abd87"
-  integrity sha512-cDeZAM4mXOwN1IdH93a91qXppn4jXV4NHphg53bqQDRFjJnpYZTgGcjrqpsmm209DtXTvmKMcYJd+XrHybwFZg==
+lmdb@3.2.2:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.2.2.tgz#1b3c50a0184847c88e02f038a598d6a229a8765e"
+  integrity sha512-LriG93la4PbmPMwI7Hbv8W+0ncLK7549w4sbZSi4QGDjnnxnmNMgxUkaQTEMzH8TpwsfFvgEjpLX7V8B/I9e3g==
   dependencies:
     msgpackr "^1.11.2"
     node-addon-api "^6.1.0"
@@ -10027,12 +10051,12 @@ lmdb@3.2.0:
     ordered-binary "^1.5.3"
     weak-lru-cache "^1.2.2"
   optionalDependencies:
-    "@lmdb/lmdb-darwin-arm64" "3.2.0"
-    "@lmdb/lmdb-darwin-x64" "3.2.0"
-    "@lmdb/lmdb-linux-arm" "3.2.0"
-    "@lmdb/lmdb-linux-arm64" "3.2.0"
-    "@lmdb/lmdb-linux-x64" "3.2.0"
-    "@lmdb/lmdb-win32-x64" "3.2.0"
+    "@lmdb/lmdb-darwin-arm64" "3.2.2"
+    "@lmdb/lmdb-darwin-x64" "3.2.2"
+    "@lmdb/lmdb-linux-arm" "3.2.2"
+    "@lmdb/lmdb-linux-arm64" "3.2.2"
+    "@lmdb/lmdb-linux-x64" "3.2.2"
+    "@lmdb/lmdb-win32-x64" "3.2.2"
 
 loader-runner@^4.2.0:
   version "4.3.0"
@@ -10401,10 +10425,10 @@ magic-string@0.30.10, magic-string@^0.30.0:
   dependencies:
     "@jridgewell/sourcemap-codec" "^1.4.15"
 
-magic-string@0.30.15:
-  version "0.30.15"
-  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.15.tgz#d5474a2c4c5f35f041349edaba8a5cb02733ed3c"
-  integrity sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==
+magic-string@0.30.17:
+  version "0.30.17"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
+  integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
   dependencies:
     "@jridgewell/sourcemap-codec" "^1.5.0"
 
@@ -12741,7 +12765,16 @@ resolve@1.1.x:
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
   integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==
 
-resolve@1.22.8, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.21.0, resolve@^1.3.2, resolve@^1.4.0, resolve@~1.22.1, resolve@~1.22.2:
+resolve@1.22.10:
+  version "1.22.10"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
+  integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+  dependencies:
+    is-core-module "^2.16.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.21.0, resolve@^1.3.2, resolve@^1.4.0, resolve@~1.22.1, resolve@~1.22.2:
   version "1.22.8"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
   integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -12861,32 +12894,32 @@ rollup-plugin-sourcemaps@^0.6.3:
     "@rollup/pluginutils" "^3.0.9"
     source-map-resolve "^0.6.0"
 
-rollup@4.28.1:
-  version "4.28.1"
-  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.1.tgz#7718ba34d62b449dfc49adbfd2f312b4fe0df4de"
-  integrity sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==
+rollup@4.30.1:
+  version "4.30.1"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.30.1.tgz#d5c3d066055259366cdc3eb6f1d051c5d6afaf74"
+  integrity sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==
   dependencies:
     "@types/estree" "1.0.6"
   optionalDependencies:
-    "@rollup/rollup-android-arm-eabi" "4.28.1"
-    "@rollup/rollup-android-arm64" "4.28.1"
-    "@rollup/rollup-darwin-arm64" "4.28.1"
-    "@rollup/rollup-darwin-x64" "4.28.1"
-    "@rollup/rollup-freebsd-arm64" "4.28.1"
-    "@rollup/rollup-freebsd-x64" "4.28.1"
-    "@rollup/rollup-linux-arm-gnueabihf" "4.28.1"
-    "@rollup/rollup-linux-arm-musleabihf" "4.28.1"
-    "@rollup/rollup-linux-arm64-gnu" "4.28.1"
-    "@rollup/rollup-linux-arm64-musl" "4.28.1"
-    "@rollup/rollup-linux-loongarch64-gnu" "4.28.1"
-    "@rollup/rollup-linux-powerpc64le-gnu" "4.28.1"
-    "@rollup/rollup-linux-riscv64-gnu" "4.28.1"
-    "@rollup/rollup-linux-s390x-gnu" "4.28.1"
-    "@rollup/rollup-linux-x64-gnu" "4.28.1"
-    "@rollup/rollup-linux-x64-musl" "4.28.1"
-    "@rollup/rollup-win32-arm64-msvc" "4.28.1"
-    "@rollup/rollup-win32-ia32-msvc" "4.28.1"
-    "@rollup/rollup-win32-x64-msvc" "4.28.1"
+    "@rollup/rollup-android-arm-eabi" "4.30.1"
+    "@rollup/rollup-android-arm64" "4.30.1"
+    "@rollup/rollup-darwin-arm64" "4.30.1"
+    "@rollup/rollup-darwin-x64" "4.30.1"
+    "@rollup/rollup-freebsd-arm64" "4.30.1"
+    "@rollup/rollup-freebsd-x64" "4.30.1"
+    "@rollup/rollup-linux-arm-gnueabihf" "4.30.1"
+    "@rollup/rollup-linux-arm-musleabihf" "4.30.1"
+    "@rollup/rollup-linux-arm64-gnu" "4.30.1"
+    "@rollup/rollup-linux-arm64-musl" "4.30.1"
+    "@rollup/rollup-linux-loongarch64-gnu" "4.30.1"
+    "@rollup/rollup-linux-powerpc64le-gnu" "4.30.1"
+    "@rollup/rollup-linux-riscv64-gnu" "4.30.1"
+    "@rollup/rollup-linux-s390x-gnu" "4.30.1"
+    "@rollup/rollup-linux-x64-gnu" "4.30.1"
+    "@rollup/rollup-linux-x64-musl" "4.30.1"
+    "@rollup/rollup-win32-arm64-msvc" "4.30.1"
+    "@rollup/rollup-win32-ia32-msvc" "4.30.1"
+    "@rollup/rollup-win32-x64-msvc" "4.30.1"
     fsevents "~2.3.2"
 
 rollup@^2.66.1:
@@ -13084,10 +13117,10 @@ sass@1.77.2:
     immutable "^4.0.0"
     source-map-js ">=0.6.2 <2.0.0"
 
-sass@1.82.0:
-  version "1.82.0"
-  resolved "https://registry.yarnpkg.com/sass/-/sass-1.82.0.tgz#30da277af3d0fa6042e9ceabd0d984ed6d07df70"
-  integrity sha512-j4GMCTa8elGyN9A7x7bEglx0VgSpNUG4W4wNedQ33wSMdnkqQCT8HTwOaVSV4e6yQovcu/3Oc4coJP/l0xhL2Q==
+sass@1.83.1:
+  version "1.83.1"
+  resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.1.tgz#dee1ab94b47a6f9993d3195d36f556bcbda64846"
+  integrity sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==
   dependencies:
     chokidar "^4.0.0"
     immutable "^5.0.2"
@@ -15031,12 +15064,12 @@ vite@5.2.12:
   optionalDependencies:
     fsevents "~2.3.3"
 
-vite@6.0.3:
-  version "6.0.3"
-  resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.3.tgz#cc01f403e326a9fc1e064235df8a6de084c8a491"
-  integrity sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==
+vite@6.0.7:
+  version "6.0.7"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.7.tgz#f0f8c120733b04af52b4a1e3e7cb54eb851a799b"
+  integrity sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==
   dependencies:
-    esbuild "^0.24.0"
+    esbuild "^0.24.2"
     postcss "^8.4.49"
     rollup "^4.23.0"
   optionalDependencies:

From 781e91e798f8b9bbb92acfa4de4ef05309203539 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 10 Jan 2025 22:46:04 +0100
Subject: [PATCH 04/91] fix(material/menu): lazy content not detached after
 animation (#30301)

Fixes a regression after #30148 where we no longer detached the lazy content panel, causing its items to be retained until the next open when they get destroyed and re-created.

(cherry picked from commit 86a96c9290e3896485c6b6c0d039873652f543df)
---
 src/material/menu/menu-trigger.ts |  6 +++++-
 src/material/menu/menu.spec.ts    | 36 +++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/src/material/menu/menu-trigger.ts b/src/material/menu/menu-trigger.ts
index e9fa1aa6cf17..338253c89667 100644
--- a/src/material/menu/menu-trigger.ts
+++ b/src/material/menu/menu-trigger.ts
@@ -368,10 +368,14 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
     // Note that we don't wait for the animation to finish if another trigger took
     // over the menu, because the panel will end up empty which looks glitchy.
     if (menu instanceof MatMenu && this._ownsMenu(menu)) {
-      this._pendingRemoval = menu._animationDone.pipe(take(1)).subscribe(() => overlayRef.detach());
+      this._pendingRemoval = menu._animationDone.pipe(take(1)).subscribe(() => {
+        overlayRef.detach();
+        menu.lazyContent?.detach();
+      });
       menu._setIsOpen(false);
     } else {
       overlayRef.detach();
+      menu?.lazyContent?.detach();
     }
 
     if (menu && this._ownsMenu(menu)) {
diff --git a/src/material/menu/menu.spec.ts b/src/material/menu/menu.spec.ts
index d25a6c9713b1..a065f4404038 100644
--- a/src/material/menu/menu.spec.ts
+++ b/src/material/menu/menu.spec.ts
@@ -15,9 +15,11 @@ import {ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';
 import {
   ChangeDetectionStrategy,
   Component,
+  Directive,
   ElementRef,
   EventEmitter,
   Input,
+  OnDestroy,
   Output,
   Provider,
   QueryList,
@@ -1219,6 +1221,40 @@ describe('MatMenu', () => {
         .toBe(true);
     }));
 
+    it('should detach the lazy content when the menu is closed', fakeAsync(() => {
+      let destroyCount = 0;
+
+      // Note: for some reason doing `spyOn(item, 'ngOnDestroy')` doesn't work, even though a
+      // `console.log` shows that the `ngOnDestroy` gets called. We work around it with a custom
+      // directive that increments a counter.
+      @Directive({selector: '[mat-menu-item]', standalone: false})
+      class DestroyChecker implements OnDestroy {
+        ngOnDestroy(): void {
+          destroyCount++;
+        }
+      }
+
+      const fixture = createComponent(SimpleLazyMenu, undefined, [DestroyChecker]);
+      fixture.detectChanges();
+      fixture.componentInstance.trigger.openMenu();
+      fixture.detectChanges();
+      tick(500);
+      fixture.detectChanges();
+
+      expect(fixture.componentInstance.items.length).toBe(2);
+      expect(destroyCount).toBe(0);
+
+      fixture.componentInstance.trigger.closeMenu();
+      fixture.detectChanges();
+      tick(500);
+      fixture.detectChanges();
+
+      expect(fixture.componentInstance.items.length)
+        .withContext('Expected items to be removed from query list')
+        .toBe(0);
+      expect(destroyCount).withContext('Expected ngOnDestroy to have been called').toBe(2);
+    }));
+
     it('should focus the first menu item when opening a lazy menu via keyboard', async () => {
       const fixture = createComponent(SimpleLazyMenu);
       fixture.autoDetectChanges();

From 027c3ad26751d3e0546c943fefcb957fe3bc8d34 Mon Sep 17 00:00:00 2001
From: Wagner Maciel <wagnermaciel@google.com>
Date: Sat, 11 Jan 2025 13:05:47 -0500
Subject: [PATCH 05/91] fix(material/select): remove color transition w/ no
 animations module (#30304)

* Related to PR #29870

(cherry picked from commit d8d3987e015120f5572f09a6643222eb3ebdeb34)
---
 src/material/select/select.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/material/select/select.scss b/src/material/select/select.scss
index 9f8e740fd283..787b0ca12234 100644
--- a/src/material/select/select.scss
+++ b/src/material/select/select.scss
@@ -178,6 +178,7 @@ div.mat-mdc-select-panel {
     @include token-utils.create-token-slot(color, placeholder-text-color);
   }
 
+  .mat-form-field-no-animations &,
   ._mat-animation-noopable & {
     transition: none;
   }

From 884740d605893b537ed23ad5e632ae8dac97514f Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 13 Jan 2025 07:06:57 +0100
Subject: [PATCH 06/91] fix(material/tooltip): deprecate matTooltipAnimations
 (#30310)

The `matTooltipAnimations` haven't been used for a while. These changes deprecate it so we can remove it completely later.

(cherry picked from commit 3bb933805cf7c9843d1d4a1a5ce3cc13080df3e2)
---
 src/material/tooltip/tooltip-animations.ts | 2 ++
 tools/public_api_guard/material/tooltip.md | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/material/tooltip/tooltip-animations.ts b/src/material/tooltip/tooltip-animations.ts
index e4eb1419da63..652e7f4806f1 100644
--- a/src/material/tooltip/tooltip-animations.ts
+++ b/src/material/tooltip/tooltip-animations.ts
@@ -17,6 +17,8 @@ import {
 /**
  * Animations used by MatTooltip.
  * @docs-private
+ * @deprecated No longer being used, to be removed.
+ * @breaking-change 21.0.0
  */
 export const matTooltipAnimations: {
   readonly tooltipState: AnimationTriggerMetadata;
diff --git a/tools/public_api_guard/material/tooltip.md b/tools/public_api_guard/material/tooltip.md
index 86e845b5e301..5ab73d9cf192 100644
--- a/tools/public_api_guard/material/tooltip.md
+++ b/tools/public_api_guard/material/tooltip.md
@@ -103,7 +103,7 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
     static ɵfac: i0.ɵɵFactoryDeclaration<MatTooltip, never>;
 }
 
-// @public
+// @public @deprecated
 export const matTooltipAnimations: {
     readonly tooltipState: AnimationTriggerMetadata;
 };

From 6ca21fd74080c460b58b6915d2e5b771d0db7848 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 13 Jan 2025 16:13:16 +0100
Subject: [PATCH 07/91] fix(material/tabs): tab nav bar animation not working
 when navigating forwards (#30313)

Fixes a regression introduced in #30121. It looks like we were depending on the incorrect internal state to animate correctly.

These changes fix the issue by removing a call that was redundant in the first place.

Fixes #30303.

(cherry picked from commit 59a79852a3e655a48d3ccc5d1e7e3c637f60517f)
---
 src/material/tabs/tab-nav-bar/tab-nav-bar.ts | 14 ++++----------
 tools/public_api_guard/material/tabs.md      |  2 +-
 2 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/material/tabs/tab-nav-bar/tab-nav-bar.ts b/src/material/tabs/tab-nav-bar/tab-nav-bar.ts
index d03f4009af62..3428d3721737 100644
--- a/src/material/tabs/tab-nav-bar/tab-nav-bar.ts
+++ b/src/material/tabs/tab-nav-bar/tab-nav-bar.ts
@@ -6,7 +6,6 @@
  * found in the LICENSE file at https://angular.dev/license
  */
 import {
-  AfterContentChecked,
   AfterContentInit,
   AfterViewInit,
   booleanAttribute,
@@ -75,10 +74,7 @@ import {_CdkPrivateStyleLoader} from '@angular/cdk/private';
   changeDetection: ChangeDetectionStrategy.Default,
   imports: [MatRipple, CdkObserveContent],
 })
-export class MatTabNav
-  extends MatPaginatedTabHeader
-  implements AfterContentChecked, AfterContentInit, OnDestroy, AfterViewInit
-{
+export class MatTabNav extends MatPaginatedTabHeader implements AfterContentInit, AfterViewInit {
   /** Whether the ink bar should fit its width to the size of the tab label content. */
   @Input({transform: booleanAttribute})
   get fitInkBarToContent(): boolean {
@@ -194,9 +190,9 @@ export class MatTabNav
     this._inkBar = new MatInkBar(this._items);
     // We need this to run before the `changes` subscription in parent to ensure that the
     // selectedIndex is up-to-date by the time the super class starts looking for it.
-    this._items.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {
-      this.updateActiveLink();
-    });
+    this._items.changes
+      .pipe(startWith(null), takeUntil(this._destroyed))
+      .subscribe(() => this.updateActiveLink());
 
     super.ngAfterContentInit();
   }
@@ -229,9 +225,7 @@ export class MatTabNav
       }
     }
 
-    // The ink bar should hide itself if no items are active.
     this.selectedIndex = -1;
-    this._inkBar.hide();
   }
 
   _getRole(): string | null {
diff --git a/tools/public_api_guard/material/tabs.md b/tools/public_api_guard/material/tabs.md
index 258c23ead76f..65e4cab22af7 100644
--- a/tools/public_api_guard/material/tabs.md
+++ b/tools/public_api_guard/material/tabs.md
@@ -442,7 +442,7 @@ export class MatTabLink extends InkBarItem implements AfterViewInit, OnDestroy,
 }
 
 // @public
-export class MatTabNav extends MatPaginatedTabHeader implements AfterContentChecked, AfterContentInit, OnDestroy, AfterViewInit {
+export class MatTabNav extends MatPaginatedTabHeader implements AfterContentInit, AfterViewInit {
     constructor(...args: unknown[]);
     // (undocumented)
     get animationDuration(): string;

From a3d9e4b45dedbcb3e13dd087a519a4098f02ee48 Mon Sep 17 00:00:00 2001
From: Naji <54370141+naaajii@users.noreply.github.com>
Date: Mon, 13 Jan 2025 22:31:45 +0500
Subject: [PATCH 08/91] fix(material/select): match disabled placeholder color
 with label (#29870)

this commit ensures select with disabled placeholder matches the color with label

fixes #29807

(cherry picked from commit 306e437d213f3ace7b3ee294ef1dd82f5e8e2fab)
---
 src/material/select/select.scss | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/material/select/select.scss b/src/material/select/select.scss
index 787b0ca12234..2586a9f7b4a0 100644
--- a/src/material/select/select.scss
+++ b/src/material/select/select.scss
@@ -41,6 +41,13 @@ $scale: 0.75 !default;
     tokens-mat-select.$prefix, tokens-mat-select.get-token-slots()) {
     @include token-utils.create-token-slot(color, disabled-trigger-text-color);
   }
+
+  .mat-mdc-select-placeholder {
+    @include token-utils.use-tokens(
+      tokens-mat-select.$prefix, tokens-mat-select.get-token-slots()) {
+      @include token-utils.create-token-slot(color, disabled-trigger-text-color);
+    }
+  }
 }
 
 .mat-mdc-select-trigger {

From 6c8c976d43b9f39b1edc9fd7786de7b549f7918e Mon Sep 17 00:00:00 2001
From: Wagner Maciel <wagnermaciel@google.com>
Date: Mon, 13 Jan 2025 12:40:30 -0500
Subject: [PATCH 09/91] test(material/slider): Ensure tick marks are rendered
 correctly (#30317)

* test(material/slider): Ensure tick marks are rendered correctly

* This is just some prep work for a set of incoming
  changes to the slider tick marks

* fixup! test(material/slider): Ensure tick marks are rendered correctly

* fixup! test(material/slider): Ensure tick marks are rendered correctly

(cherry picked from commit da8b1f9aacd826060372d46e528658cc789122c6)
---
 src/material/slider/slider.spec.ts | 82 ++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)

diff --git a/src/material/slider/slider.spec.ts b/src/material/slider/slider.spec.ts
index 83ca57e1e00e..fcaf3ff235bb 100644
--- a/src/material/slider/slider.spec.ts
+++ b/src/material/slider/slider.spec.ts
@@ -1544,6 +1544,75 @@ describe('MatSlider', () => {
       expect(endInput.value).toBe(80);
     }));
   });
+
+  describe('slider with tick marks', () => {
+    let fixture: ComponentFixture<SliderWithTickMarks>;
+    let slider: MatSlider;
+    let sliderEl: HTMLElement;
+
+    function getTickMarkEls() {
+      const activeClass = '.mdc-slider__tick-mark--active';
+      const inactiveClass = '.mdc-slider__tick-mark--inactive';
+      const active = sliderEl.querySelectorAll(activeClass);
+      const inactive = sliderEl.querySelectorAll(inactiveClass);
+      const ticks = sliderEl.querySelectorAll(`${activeClass},${inactiveClass}`);
+      return {ticks, active, inactive};
+    }
+
+    beforeEach(waitForAsync(() => {
+      fixture = createComponent(SliderWithTickMarks);
+      fixture.detectChanges();
+      const sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
+      slider = sliderDebugElement.componentInstance;
+      sliderEl = sliderDebugElement.nativeElement;
+    }));
+
+    it('should have tick marks', () => {
+      expect(slider._tickMarks.length).toBeTruthy();
+    });
+
+    it('should have the correct number of ticks', () => {
+      expect(slider._tickMarks.length).toBe(101);
+
+      slider.max = 10;
+      expect(slider._tickMarks.length).toBe(11);
+
+      slider.step = 2;
+      expect(slider._tickMarks.length).toBe(6);
+
+      slider.min = 8;
+      expect(slider._tickMarks.length).toBe(2);
+    });
+
+    it('should position the tick marks correctly', () => {
+      const {ticks} = getTickMarkEls();
+
+      // 2.94 because the slider is 300px, there is 3px padding
+      // on each side of the tick mark track, and there are 100
+      // spaces between the 101 ticks. So the math is:
+      // (300 - 6) / 100 = 2.94
+      const spacing = 2.94;
+      const delta = 0.1; // Floating point imprecision
+
+      let x = 18; // Where the first tick happens to start at.
+
+      for (let i = 0; i < ticks.length; i++) {
+        const tickX = ticks[i].getBoundingClientRect().x;
+        expect(tickX).toBeGreaterThan(x - delta);
+        expect(tickX).toBeLessThan(x + delta);
+        x = tickX + spacing;
+      }
+    });
+
+    // TODO(wagnermaciel): Add this test once this is fixed.
+    // it('should render the correct number of active & inactive ticks', () => {});
+
+    // TODO(wagnermaciel): Add this test once this is fixed.
+    // it('should position the tick marks correctly with a misaligned step', () => {});
+
+    // TODO(wagnermaciel): Add this test once this is fixed.
+    // it('should position the tick marks correctly with a misaligned step (rtl)', () => {});
+  });
 });
 
 const SLIDER_STYLES = ['.mat-mdc-slider { width: 300px; }'];
@@ -1835,6 +1904,19 @@ class RangeSliderWithTwoWayBinding {
   endValue = 100;
 }
 
+@Component({
+  template: `
+  <mat-slider [showTickMarks]="true">
+    <input matSliderThumb>
+  </mat-slider>
+  `,
+  styles: SLIDER_STYLES,
+  standalone: false,
+})
+class SliderWithTickMarks {
+  @ViewChild(MatSlider) slider: MatSlider;
+}
+
 /** Clicks on the MatSlider at the coordinates corresponding to the given value. */
 function setValueByClick(
   slider: MatSlider,

From ab44d45c56a6643d2ee0b2e442c9199f6e955638 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Mon, 13 Jan 2025 13:24:47 -0500
Subject: [PATCH 10/91] perf(material/table): Optimize expensive css selector
 (#30305)

(cherry picked from commit 5142268c7d2ef3d09f2cf9349a0b8ad25bf466d9)
---
 src/material/table/table.scss | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/material/table/table.scss b/src/material/table/table.scss
index 34cd8588a662..1d36a2e3d830 100644
--- a/src/material/table/table.scss
+++ b/src/material/table/table.scss
@@ -113,7 +113,7 @@
     @include token-utils.create-token-slot(letter-spacing, row-item-label-text-tracking);
     line-height: inherit;
 
-    .mdc-data-table__row:last-child & {
+    .mdc-data-table__row:last-child > & {
       border-bottom: none;
     }
   }

From 9490f1aa5472252bc97b1992614ac3a779685c35 Mon Sep 17 00:00:00 2001
From: Alex Eagle <alex@aspect.dev>
Date: Mon, 13 Jan 2025 23:50:25 -0800
Subject: [PATCH 11/91] refactor: move material.aio GHA to the root (#30288)

* refactor: move material.aio GHA to the root

This makes them functional again. To keep this change simple, we just update the working directory but run the same things

* refactor: upload testlogs when test step fails

* refactor: pin chromium test to same Ubuntu as before

See last passing job in old repo: https://github.com/angular/material.angular.io/actions/runs/12390917032/job/34586949768

* refactor: only trigger material.aio workflows when files touched in that folder

(cherry picked from commit f9a9db6345dbb3c8fab5b112d16d6c9bb873e09c)
---
 .../workflows/ci.material-aio.yml               | 13 +++++++++----
 .../workflows/pr.material-aio.yml               | 13 +++++++++----
 .../.github/ISSUE_TEMPLATE/docs-infra.md        | 17 -----------------
 3 files changed, 18 insertions(+), 25 deletions(-)
 rename material.angular.io/.github/workflows/ci.yml => .github/workflows/ci.material-aio.yml (85%)
 rename material.angular.io/.github/workflows/pr.yml => .github/workflows/pr.material-aio.yml (85%)
 delete mode 100644 material.angular.io/.github/ISSUE_TEMPLATE/docs-infra.md

diff --git a/material.angular.io/.github/workflows/ci.yml b/.github/workflows/ci.material-aio.yml
similarity index 85%
rename from material.angular.io/.github/workflows/ci.yml
rename to .github/workflows/ci.material-aio.yml
index ed784b25c86e..744cbdd5e87f 100644
--- a/material.angular.io/.github/workflows/ci.yml
+++ b/.github/workflows/ci.material-aio.yml
@@ -1,10 +1,12 @@
-name: CI
+name: 'CI (material.angular.io)'
 
 on:
   push:
     branches:
       - main
       - '[0-9]+.[0-9]+.x'
+    paths:
+      - 'material.angular.io/**'
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
@@ -15,6 +17,7 @@ permissions: {}
 defaults:
   run:
     shell: bash
+    working-directory: material.angular.io
 
 env:
   # TODO: Remove when pnpm is exclusively used.
@@ -54,13 +57,14 @@ jobs:
         run: yarn bazel test --test_tag_filters=-lint,-e2e,-audit //...
       - name: Store Test Logs
         uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
+        if: always()
         with:
           name: test-logs
-          path: bazel-testlogs/
+          path: material.angular.io/bazel-testlogs/
           retention-days: 14
 
   lighthouse:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-22.04 # Note, fails on Ubuntu 24.04. see https://github.com/actions/runner-images/issues/10636
     steps:
       - name: Initialize environment
         uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
@@ -70,7 +74,8 @@ jobs:
         run: yarn bazel test --test_tag_filters=audit //...
       - name: Store Audit Logs
         uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
+        if: always()
         with:
           name: lighthouse-logs
-          path: bazel-testlogs/
+          path: material.angular.io/bazel-testlogs/
           retention-days: 14
diff --git a/material.angular.io/.github/workflows/pr.yml b/.github/workflows/pr.material-aio.yml
similarity index 85%
rename from material.angular.io/.github/workflows/pr.yml
rename to .github/workflows/pr.material-aio.yml
index 27110a555aee..79e87d497071 100644
--- a/material.angular.io/.github/workflows/pr.yml
+++ b/.github/workflows/pr.material-aio.yml
@@ -1,8 +1,10 @@
-name: Pull Request
+name: 'CI (material.angular.io)'
 
 on:
   pull_request:
     types: [opened, synchronize, reopened]
+    paths:
+      - 'material.angular.io/**'
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
@@ -13,6 +15,7 @@ permissions: {}
 defaults:
   run:
     shell: bash
+    working-directory: material.angular.io
 
 env:
   # TODO: Remove when pnpm is exclusively used.
@@ -52,13 +55,14 @@ jobs:
         run: yarn bazel test --test_tag_filters=-lint,-e2e,-audit //...
       - name: Store Test Logs
         uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
+        if: always()
         with:
           name: test-logs
-          path: bazel-testlogs/
+          path: material.angular.io/bazel-testlogs/
           retention-days: 14
 
   lighthouse:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-22.04 # Note, fails on Ubuntu 24.04. see https://github.com/actions/runner-images/issues/10636
     steps:
       - name: Initialize environment
         uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
@@ -68,7 +72,8 @@ jobs:
         run: yarn bazel test --test_tag_filters=audit //...
       - name: Store Audit Logs
         uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
+        if: always()
         with:
           name: lighthouse-logs
-          path: bazel-testlogs/
+          path: material.angular.io/bazel-testlogs/
           retention-days: 14
diff --git a/material.angular.io/.github/ISSUE_TEMPLATE/docs-infra.md b/material.angular.io/.github/ISSUE_TEMPLATE/docs-infra.md
deleted file mode 100644
index 2318b6b5f8db..000000000000
--- a/material.angular.io/.github/ISSUE_TEMPLATE/docs-infra.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Docs Infrastructure
-about: Suggest an improvement to the infrastructure used to build material.angular.io
----
-
-<!--------
-🛑
-Use the Angular Components repository (https://github.com/angular/components/issues/new/choose)
-to report issues.
-
-The Angular team can't provide general troubleshooting help. This is especially true when the
-problem is specific to your app and cannot be reproduced in a StackBlitz demo. 
-However, the extended community of users may be able to provide help via the following channels: 
-- StackOverflow: https://stackoverflow.com/questions/tagged/angular-material2
-- Gitter: https://gitter.im/angular/material2
-- Google Groups: https://groups.google.com/forum/#!forum/angular-material2
--------->

From 4f676d4030689463ba05959dfd3fac2cecb5a20e Mon Sep 17 00:00:00 2001
From: Wagner Maciel <wagnermaciel@google.com>
Date: Tue, 14 Jan 2025 10:53:07 -0500
Subject: [PATCH 12/91] fix(material/slider): active vs inactive tick mark
 count (#30319)

(cherry picked from commit 5f238ab1a9b81a615671b319ef2361d7c4fc5ae2)
---
 src/material/slider/slider.spec.ts | 85 +++++++++++++++++++++++++++++-
 src/material/slider/slider.ts      |  4 +-
 2 files changed, 85 insertions(+), 4 deletions(-)

diff --git a/src/material/slider/slider.spec.ts b/src/material/slider/slider.spec.ts
index fcaf3ff235bb..a9211f42f48a 100644
--- a/src/material/slider/slider.spec.ts
+++ b/src/material/slider/slider.spec.ts
@@ -1549,6 +1549,7 @@ describe('MatSlider', () => {
     let fixture: ComponentFixture<SliderWithTickMarks>;
     let slider: MatSlider;
     let sliderEl: HTMLElement;
+    let input: MatSliderThumb;
 
     function getTickMarkEls() {
       const activeClass = '.mdc-slider__tick-mark--active';
@@ -1565,6 +1566,7 @@ describe('MatSlider', () => {
       const sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
       slider = sliderDebugElement.componentInstance;
       sliderEl = sliderDebugElement.nativeElement;
+      input = slider._getInput(_MatThumb.END) as MatSliderThumb;
     }));
 
     it('should have tick marks', () => {
@@ -1604,8 +1606,21 @@ describe('MatSlider', () => {
       }
     });
 
-    // TODO(wagnermaciel): Add this test once this is fixed.
-    // it('should render the correct number of active & inactive ticks', () => {});
+    it('should render the correct number of active & inactive ticks', () => {
+      let tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(1);
+      expect(tickEls.inactive.length).toBe(100);
+
+      input.value = 50;
+      tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(51);
+      expect(tickEls.inactive.length).toBe(50);
+
+      input.value = 100;
+      tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(101);
+      expect(tickEls.inactive.length).toBe(0);
+    });
 
     // TODO(wagnermaciel): Add this test once this is fixed.
     // it('should position the tick marks correctly with a misaligned step', () => {});
@@ -1613,6 +1628,58 @@ describe('MatSlider', () => {
     // TODO(wagnermaciel): Add this test once this is fixed.
     // it('should position the tick marks correctly with a misaligned step (rtl)', () => {});
   });
+
+  describe('range slider with tick marks', () => {
+    let fixture: ComponentFixture<RangeSliderWithTickMarks>;
+    let slider: MatSlider;
+    let sliderEl: HTMLElement;
+    let endInput: MatSliderRangeThumb;
+    let startInput: MatSliderRangeThumb;
+
+    function getTickMarkEls() {
+      const activeClass = '.mdc-slider__tick-mark--active';
+      const inactiveClass = '.mdc-slider__tick-mark--inactive';
+      const active = sliderEl.querySelectorAll(activeClass);
+      const inactive = sliderEl.querySelectorAll(inactiveClass);
+      const ticks = sliderEl.querySelectorAll(`${activeClass},${inactiveClass}`);
+      return {ticks, active, inactive};
+    }
+
+    beforeEach(waitForAsync(() => {
+      fixture = createComponent(RangeSliderWithTickMarks);
+      fixture.detectChanges();
+      const sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
+      slider = sliderDebugElement.componentInstance;
+      sliderEl = sliderDebugElement.nativeElement;
+      endInput = slider._getInput(_MatThumb.END) as MatSliderRangeThumb;
+      startInput = slider._getInput(_MatThumb.START) as MatSliderRangeThumb;
+    }));
+
+    it('should render the correct number of active & inactive ticks', () => {
+      startInput.value = 0;
+      endInput.value = 100;
+
+      let tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(101);
+      expect(tickEls.inactive.length).toBe(0);
+
+      startInput.value = 25;
+      tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(76);
+      expect(tickEls.inactive.length).toBe(25);
+
+      endInput.value = 75;
+      tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(51);
+      expect(tickEls.inactive.length).toBe(50);
+
+      startInput.value = 50;
+      endInput.value = 50;
+      tickEls = getTickMarkEls();
+      expect(tickEls.active.length).toBe(1);
+      expect(tickEls.inactive.length).toBe(100);
+    });
+  });
 });
 
 const SLIDER_STYLES = ['.mat-mdc-slider { width: 300px; }'];
@@ -1917,6 +1984,20 @@ class SliderWithTickMarks {
   @ViewChild(MatSlider) slider: MatSlider;
 }
 
+@Component({
+  template: `
+  <mat-slider [showTickMarks]="true">
+    <input matSliderStartThumb>
+    <input matSliderEndThumb>
+  </mat-slider>
+  `,
+  styles: SLIDER_STYLES,
+  standalone: false,
+})
+class RangeSliderWithTickMarks {
+  @ViewChild(MatSlider) slider: MatSlider;
+}
+
 /** Clicks on the MatSlider at the coordinates corresponding to the given value. */
 function setValueByClick(
   slider: MatSlider,
diff --git a/src/material/slider/slider.ts b/src/material/slider/slider.ts
index 692cb86a29cd..66cb49972ba0 100644
--- a/src/material/slider/slider.ts
+++ b/src/material/slider/slider.ts
@@ -885,8 +885,8 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {
 
   private _updateTickMarkUINonRange(step: number): void {
     const value = this._getValue();
-    let numActive = Math.max(Math.round((value - this.min) / step), 0);
-    let numInactive = Math.max(Math.round((this.max - value) / step), 0);
+    let numActive = Math.max(Math.round((value - this.min) / step), 0) + 1;
+    let numInactive = Math.max(Math.round((this.max - value) / step), 0) - 1;
     this._isRtl ? numActive++ : numInactive++;
 
     this._tickMarks = Array(numActive)

From ab497c44e781ae516420045becd1516550afb924 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Tue, 14 Jan 2025 20:31:47 -0500
Subject: [PATCH 13/91] perf(material/button): Remove unused inject. (#30320)

(cherry picked from commit ff8cffceafe0c41bb3b6485eb38fc520e2b0ef35)
---
 src/material/button/BUILD.bazel           | 1 -
 src/material/button/button-base.ts        | 2 --
 tools/public_api_guard/material/button.md | 1 -
 3 files changed, 4 deletions(-)

diff --git a/src/material/button/BUILD.bazel b/src/material/button/BUILD.bazel
index af7369501faa..2f71c888a923 100644
--- a/src/material/button/BUILD.bazel
+++ b/src/material/button/BUILD.bazel
@@ -26,7 +26,6 @@ ng_module(
         ":icon-button_scss",
     ] + glob(["**/*.html"]),
     deps = [
-        "//src/cdk/platform",
         "//src/material/core",
     ],
 )
diff --git a/src/material/button/button-base.ts b/src/material/button/button-base.ts
index e1a73952bd0a..6c66a2304273 100644
--- a/src/material/button/button-base.ts
+++ b/src/material/button/button-base.ts
@@ -7,7 +7,6 @@
  */
 
 import {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';
-import {Platform} from '@angular/cdk/platform';
 import {
   AfterViewInit,
   ANIMATION_MODULE_TYPE,
@@ -91,7 +90,6 @@ const HOST_SELECTOR_MDC_CLASS_PAIR: {attribute: string; mdcClasses: string[]}[]
 @Directive()
 export class MatButtonBase implements AfterViewInit, OnDestroy {
   _elementRef = inject(ElementRef);
-  _platform = inject(Platform);
   _ngZone = inject(NgZone);
   _animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});
 
diff --git a/tools/public_api_guard/material/button.md b/tools/public_api_guard/material/button.md
index 3c9326f8311c..1bd43539fc33 100644
--- a/tools/public_api_guard/material/button.md
+++ b/tools/public_api_guard/material/button.md
@@ -14,7 +14,6 @@ import { MatRippleLoader } from '@angular/material/core';
 import { NgZone } from '@angular/core';
 import { OnDestroy } from '@angular/core';
 import { OnInit } from '@angular/core';
-import { Platform } from '@angular/cdk/platform';
 import { ThemePalette } from '@angular/material/core';
 
 // @public

From 0df6e0347206c2496922441812330ca0b0a15f04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joy=20Serqui=C3=B1a?=
 <44146839+essjay05@users.noreply.github.com>
Date: Wed, 15 Jan 2025 14:04:20 -0800
Subject: [PATCH 14/91] test(material/timepicker): updates timepicker.spec.ts
 (#30335)

Updates timepicker test to account for recent changes to adding
a default aria-label to the timepicker toggle.

(cherry picked from commit b5f3d42fd67f2a06cfd0141457e00b760748e5e3)
---
 src/material/timepicker/timepicker.spec.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/material/timepicker/timepicker.spec.ts b/src/material/timepicker/timepicker.spec.ts
index 7b66711ac900..da1bd81e5365 100644
--- a/src/material/timepicker/timepicker.spec.ts
+++ b/src/material/timepicker/timepicker.spec.ts
@@ -1133,11 +1133,11 @@ describe('MatTimepicker', () => {
       expect(toggle.getAttribute('aria-expanded')).toBe('true');
     });
 
-    it('should be able to set aria-label on the button', () => {
+    it('should be able to set custom aria-label on the button', () => {
       const fixture = TestBed.createComponent(StandaloneTimepicker);
       const toggle = getToggle(fixture);
       fixture.detectChanges();
-      expect(toggle.hasAttribute('aria-label')).toBe(false);
+      expect(toggle.hasAttribute('aria-label')).toBe(true);
 
       fixture.componentInstance.toggleAriaLabel.set('Toggle the timepicker');
       fixture.detectChanges();

From eae073032ca2309d2c024efc6c41dd5fad925477 Mon Sep 17 00:00:00 2001
From: Wagner Maciel <wagnermaciel@google.com>
Date: Wed, 15 Jan 2025 20:44:11 -0500
Subject: [PATCH 15/91] fix(material/slider): tick mark positioning (#30329)

(cherry picked from commit b5076f77f2a50a17a8dd6d02f163d9030eb66e69)
---
 src/material/slider/slider.spec.ts | 36 +++++++++++++++++++++++++-----
 src/material/slider/slider.ts      |  9 +++-----
 2 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/src/material/slider/slider.spec.ts b/src/material/slider/slider.spec.ts
index a9211f42f48a..6917b2df471e 100644
--- a/src/material/slider/slider.spec.ts
+++ b/src/material/slider/slider.spec.ts
@@ -1119,9 +1119,11 @@ describe('MatSlider', () => {
   describe('slider with direction', () => {
     let slider: MatSlider;
     let input: MatSliderThumb;
+    let sliderEl: HTMLElement;
+    let fixture: ComponentFixture<StandardRangeSlider>;
 
     beforeEach(waitForAsync(() => {
-      const fixture = createComponent(StandardSlider, [
+      fixture = createComponent(StandardSlider, [
         {
           provide: Directionality,
           useValue: {value: 'rtl', change: of()},
@@ -1130,6 +1132,7 @@ describe('MatSlider', () => {
       fixture.detectChanges();
       const sliderDebugElement = fixture.debugElement.query(By.directive(MatSlider));
       slider = sliderDebugElement.componentInstance;
+      sliderEl = sliderDebugElement.nativeElement;
       input = slider._getInput(_MatThumb.END) as MatSliderThumb;
     }));
 
@@ -1137,6 +1140,23 @@ describe('MatSlider', () => {
       setValueByClick(slider, input, 25, true);
       checkInput(input, {min: 0, max: 100, value: 75, translateX: 75});
     }));
+
+    it('should position the tick marks correctly with a misaligned step (rtl)', () => {
+      slider.showTickMarks = true;
+      slider.min = 0;
+      slider.max = 10;
+      slider.step = 9;
+
+      fixture.detectChanges();
+
+      const activeClass = '.mdc-slider__tick-mark--active';
+      const inactiveClass = '.mdc-slider__tick-mark--inactive';
+      const ticks = sliderEl.querySelectorAll(`${activeClass},${inactiveClass}`);
+
+      expect(ticks.length).toBe(2);
+      expect(ticks[0].getBoundingClientRect().x).toBe(312);
+      expect(ticks[1].getBoundingClientRect().x).toBeCloseTo(47.4, 2);
+    });
   });
 
   describe('range slider with direction', () => {
@@ -1622,11 +1642,17 @@ describe('MatSlider', () => {
       expect(tickEls.inactive.length).toBe(0);
     });
 
-    // TODO(wagnermaciel): Add this test once this is fixed.
-    // it('should position the tick marks correctly with a misaligned step', () => {});
+    it('should position the tick marks correctly with a misaligned step', () => {
+      slider.max = 10;
+      slider.step = 9;
+      fixture.detectChanges();
+
+      const {ticks} = getTickMarkEls();
+      expect(ticks.length).toBe(2);
 
-    // TODO(wagnermaciel): Add this test once this is fixed.
-    // it('should position the tick marks correctly with a misaligned step (rtl)', () => {});
+      expect(ticks[0].getBoundingClientRect().x).toBe(18);
+      expect(ticks[1].getBoundingClientRect().x).toBeCloseTo(282.6, 2);
+    });
   });
 
   describe('range slider with tick marks', () => {
diff --git a/src/material/slider/slider.ts b/src/material/slider/slider.ts
index 66cb49972ba0..5b23f8112494 100644
--- a/src/material/slider/slider.ts
+++ b/src/material/slider/slider.ts
@@ -590,7 +590,8 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {
   /** Returns the translateX positioning for a tick mark based on it's index. */
   _calcTickMarkTransform(index: number): string {
     // TODO(wagnermaciel): See if we can avoid doing this and just using flex to position these.
-    const translateX = index * (this._tickMarkTrackWidth / (this._tickMarks.length - 1));
+    const offset = index * (this._tickMarkTrackWidth / (this._tickMarks.length - 1));
+    const translateX = this._isRtl ? this._cachedWidth - 6 - offset : offset;
     return `translateX(${translateX}px`;
   }
 
@@ -788,7 +789,7 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {
     const step = this._step && this._step > 0 ? this._step : 1;
     const maxValue = Math.floor(this.max / step) * step;
     const percentage = (maxValue - this.min) / (this.max - this.min);
-    this._tickMarkTrackWidth = this._cachedWidth * percentage - 6;
+    this._tickMarkTrackWidth = (this._cachedWidth - 6) * percentage;
   }
 
   // Track active update conditions
@@ -877,10 +878,6 @@ export class MatSlider implements AfterViewInit, OnDestroy, _MatSlider {
     }
     const step = this.step > 0 ? this.step : 1;
     this._isRange ? this._updateTickMarkUIRange(step) : this._updateTickMarkUINonRange(step);
-
-    if (this._isRtl) {
-      this._tickMarks.reverse();
-    }
   }
 
   private _updateTickMarkUINonRange(step: number): void {

From 5138fe7b385b9e7314d2b0935a82e3a635d78542 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Thu, 16 Jan 2025 13:25:50 +0100
Subject: [PATCH 16/91] fix(material/checkbox): ensure focus indicator has the
 correct shape (#30332)

The specificity for the checkbox's focus indicator was very low which means that if the ripple styles are loaded later, it can be overwritten.

Fixes #30326.

(cherry picked from commit 28aa37ae5e1945be87ddde473cbe107f16f63b61)
---
 src/material/checkbox/checkbox.scss | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/material/checkbox/checkbox.scss b/src/material/checkbox/checkbox.scss
index 1bc17261034b..0ab15a3d7d7a 100644
--- a/src/material/checkbox/checkbox.scss
+++ b/src/material/checkbox/checkbox.scss
@@ -107,8 +107,9 @@
 }
 
 // Checkbox components have to set `border-radius: 50%` in order to support density scaling
-// which will clip a square focus indicator so we have to turn it into a circle.
-.mat-mdc-checkbox-ripple::before {
+// which will clip a square focus indicator so we have to turn it into a circle. Needs extra
+// specificity in case the ripple styles are loaded later which can override the shape.
+.mat-mdc-checkbox .mat-mdc-checkbox-ripple::before {
   border-radius: 50%;
 }
 

From 0f12ed281b181115d5f2a29f306e5c501a47eb42 Mon Sep 17 00:00:00 2001
From: Miles Malerba <mmalerba@google.com>
Date: Thu, 16 Jan 2025 09:43:51 -0500
Subject: [PATCH 17/91] Revert "test(material/timepicker): updates
 timepicker.spec.ts (#30335)" (#30342)

This reverts commit 0df6e0347206c2496922441812330ca0b0a15f04.
---
 src/material/timepicker/timepicker.spec.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/material/timepicker/timepicker.spec.ts b/src/material/timepicker/timepicker.spec.ts
index da1bd81e5365..7b66711ac900 100644
--- a/src/material/timepicker/timepicker.spec.ts
+++ b/src/material/timepicker/timepicker.spec.ts
@@ -1133,11 +1133,11 @@ describe('MatTimepicker', () => {
       expect(toggle.getAttribute('aria-expanded')).toBe('true');
     });
 
-    it('should be able to set custom aria-label on the button', () => {
+    it('should be able to set aria-label on the button', () => {
       const fixture = TestBed.createComponent(StandaloneTimepicker);
       const toggle = getToggle(fixture);
       fixture.detectChanges();
-      expect(toggle.hasAttribute('aria-label')).toBe(true);
+      expect(toggle.hasAttribute('aria-label')).toBe(false);
 
       fixture.componentInstance.toggleAriaLabel.set('Toggle the timepicker');
       fixture.detectChanges();

From 7a3eb6c820ed01a845c36ed66200901af66da1ac Mon Sep 17 00:00:00 2001
From: Miles Malerba <mmalerba@google.com>
Date: Thu, 16 Jan 2025 14:49:21 +0000
Subject: [PATCH 18/91] release: cut the v19.1.0 release

---
 CHANGELOG.md | 485 ++++++++++++++++++++++++++++++++++++++++-----------
 package.json |   2 +-
 2 files changed, 384 insertions(+), 103 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index eddd3a1cbce9..4653e2cb0733 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,29 +1,401 @@
-<a name="19.1.0-rc.0"></a>
-# 19.1.0-rc.0 "paper-plane" (2025-01-08)
+<a name="19.1.0"></a>
+# 19.1.0 "denim-firefly" (2025-01-16)
 ### cdk
 | Commit | Type | Description |
 | -- | -- | -- |
-| [52758beab0](https://github.com/angular/components/commit/52758beab0997341afd651b339e2f4825e99409d) | fix | **menu:** avoid re-opening the menu on enter ([#30263](https://github.com/angular/components/pull/30263)) |
+| [62a672af0d](https://github.com/angular/components/commit/62a672af0d6cb2195633a1cbf6c39472104767f9) | feat | **dialog:** expose cdk dialog docs ([#1144](https://github.com/angular/components/pull/1144)) |
+| [a0a16fc70e](https://github.com/angular/components/commit/a0a16fc70e1fed7fbb9177c83cf3f670022a321a) | feat | **menu:** expose cdk menu docs ([#1142](https://github.com/angular/components/pull/1142)) |
 | [2be0afcfb5](https://github.com/angular/components/commit/2be0afcfb54b16dd426e5ad65f6aa52301dc2d45) | fix | **menu:** avoid resetting the scroll position when using the mouse ([#30249](https://github.com/angular/components/pull/30249)) |
 | [e421765d8d](https://github.com/angular/components/commit/e421765d8d05806be46ff53ce92ed43e4a82dbf9) | fix | **menu:** not responding to position changes ([#30234](https://github.com/angular/components/pull/30234)) |
 | [5c75bbecb2](https://github.com/angular/components/commit/5c75bbecb24f49779baf86203a7e626d34e39f8c) | fix | **scrolling:** avoid SSR error in CdkVirtualScrollableWindow ([#30259](https://github.com/angular/components/pull/30259)) |
-| [0f053ff685](https://github.com/angular/components/commit/0f053ff6858b57aa4d1816cfa927f7e7284813af) | fix | **tree:** expandAll not expanding all nodes ([#30226](https://github.com/angular/components/pull/30226)) |
 | [d721f0c2bc](https://github.com/angular/components/commit/d721f0c2bcfb4bdfe4cc0655d61ca0537a6e4bf5) | perf | **table:** Use afterNextRender for sticky styling. Fixes a performance regression dating back to [#28393](https://github.com/angular/components/pull/28393) and removes need for coalesced sticky styler. ([#30242](https://github.com/angular/components/pull/30242)) |
 ### material
 | Commit | Type | Description |
 | -- | -- | -- |
-| [4e04540792](https://github.com/angular/components/commit/4e04540792b7742e6ef63dc7b16b6a3a8b909c54) | fix | **datepicker:** simplify DI setup ([#30247](https://github.com/angular/components/pull/30247)) |
-| [66741b8132](https://github.com/angular/components/commit/66741b81321e6a70a16af2622fa6daf13732af80) | fix | **sidenav:** remove deprecated API usage ([#30268](https://github.com/angular/components/pull/30268)) |
-| [31896c8a35](https://github.com/angular/components/commit/31896c8a357ab06708f3224b4ce537f996cd3000) | fix | **sidenav:** switch away from animations module ([#30235](https://github.com/angular/components/pull/30235)) |
+| [f47f5f9a1e](https://github.com/angular/components/commit/f47f5f9a1ed294ecd8d1dac5dee3019a80a932d6) | feat | **schematics:** Add CSS output to custom theme schematic ([#30004](https://github.com/angular/components/pull/30004)) |
+| [057ed370aa](https://github.com/angular/components/commit/057ed370aa1e5ec5c5ffde535d536a19c327e8ef) | fix | **api-theme:** fix nav items hover/focus contrast ([#1004](https://github.com/angular/components/pull/1004)) |
+| [5138fe7b38](https://github.com/angular/components/commit/5138fe7b385b9e7314d2b0935a82e3a635d78542) | fix | **checkbox:** ensure focus indicator has the correct shape ([#30332](https://github.com/angular/components/pull/30332)) |
+| [3163040850](https://github.com/angular/components/commit/3163040850fbb23959dd3ef97de2242e779d5de3) | fix | **docs:** change twitter logo ([#1245](https://github.com/angular/components/pull/1245)) |
+| [781e91e798](https://github.com/angular/components/commit/781e91e798f8b9bbb92acfa4de4ef05309203539) | fix | **menu:** lazy content not detached after animation ([#30301](https://github.com/angular/components/pull/30301)) |
+| [a3d9e4b45d](https://github.com/angular/components/commit/a3d9e4b45dedbcb3e13dd087a519a4098f02ee48) | fix | **select:** match disabled placeholder color with label ([#29870](https://github.com/angular/components/pull/29870)) |
+| [027c3ad267](https://github.com/angular/components/commit/027c3ad26751d3e0546c943fefcb957fe3bc8d34) | fix | **select:** remove color transition w/ no animations module ([#30304](https://github.com/angular/components/pull/30304)) |
+| [4f676d4030](https://github.com/angular/components/commit/4f676d4030689463ba05959dfd3fac2cecb5a20e) | fix | **slider:** active vs inactive tick mark count ([#30319](https://github.com/angular/components/pull/30319)) |
+| [eae073032c](https://github.com/angular/components/commit/eae073032ca2309d2c024efc6c41dd5fad925477) | fix | **slider:** tick mark positioning ([#30329](https://github.com/angular/components/pull/30329)) |
 | [0c099ff024](https://github.com/angular/components/commit/0c099ff02436b9c3d6fd2440df4cc1c4e70278ca) | fix | **sort:** avoid center align for sort header |
-| [1c1ebfd87b](https://github.com/angular/components/commit/1c1ebfd87be2cbbc56970b782c5d2b528002be02) | fix | **sort:** show arrow on focus ([#30217](https://github.com/angular/components/pull/30217)) |
-| [2219b1198f](https://github.com/angular/components/commit/2219b1198fa763ffd4ff7cb0656356745369d4f2) | fix | **timepicker:** don't mark as touched when blurred while dropdown is open ([#30228](https://github.com/angular/components/pull/30228)) |
-| [af29a92c01](https://github.com/angular/components/commit/af29a92c01fd425537a8f28fc71b24aeb027b0ab) | perf | **tooltip:** Tiny but measurable optimization to MatTooltip construction. Defer hooking up to directionality changes until overlay is created. ([#30214](https://github.com/angular/components/pull/30214)) |
+| [6ca21fd740](https://github.com/angular/components/commit/6ca21fd74080c460b58b6915d2e5b771d0db7848) | fix | **tabs:** tab nav bar animation not working when navigating forwards ([#30313](https://github.com/angular/components/pull/30313)) |
+| [a0b5546111](https://github.com/angular/components/commit/a0b5546111a2d28e45e1bc031c0a1b1edc109c23) | fix | **theme:** unselected theme picker |
+| [884740d605](https://github.com/angular/components/commit/884740d605893b537ed23ad5e632ae8dac97514f) | fix | **tooltip:** deprecate matTooltipAnimations ([#30310](https://github.com/angular/components/pull/30310)) |
+| [ab497c44e7](https://github.com/angular/components/commit/ab497c44e781ae516420045becd1516550afb924) | perf | **button:** Remove unused inject. ([#30320](https://github.com/angular/components/pull/30320)) |
+| [ab44d45c56](https://github.com/angular/components/commit/ab44d45c56a6643d2ee0b2e442c9199f6e955638) | perf | **table:** Optimize expensive css selector ([#30305](https://github.com/angular/components/pull/30305)) |
 | [980f9ba7bb](https://github.com/angular/components/commit/980f9ba7bb4fab8dfe4f3a4f30bb224ec635a626) | perf | **tooltip:** Use afterNextRender to invoke aria describer to align layout updates with other components using afterNextRender. ([#30265](https://github.com/angular/components/pull/30265)) |
 ### cdk-experimental
 | Commit | Type | Description |
 | -- | -- | -- |
-| [9f73fed470](https://github.com/angular/components/commit/9f73fed4702f79a6461fd2cf86ecb311c9530a78) | perf | **column-resize:** Use ResizeObserver to avoid layout thrashing ([#30215](https://github.com/angular/components/pull/30215)) |
+| [75c8aa8767](https://github.com/angular/components/commit/75c8aa8767d1bb5e2e5f29ea0434a5876a2c5a21) | feat | **column-resize:** Support column size persistance hooks ([#30136](https://github.com/angular/components/pull/30136)) |
+| [50d906b3e3](https://github.com/angular/components/commit/50d906b3e3bb841917bafc05bc65ae7c01a57705) | fix | **column-resize:** Previous size was being sent for persistance rather than newly updated size in non-live resize mode. ([#30161](https://github.com/angular/components/pull/30161)) |
+### material-experimental
+| Commit | Type | Description |
+| -- | -- | -- |
+| [8685c01a92](https://github.com/angular/components/commit/8685c01a92e057b20d502e5163561391dcc7fb21) | feat | **column-resize:** Add support for "lazy" rather than live updating during resizing. ([#30120](https://github.com/angular/components/pull/30120)) |
+### material-luxon-adapter
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e52a369a1b](https://github.com/angular/components/commit/e52a369a1bef46cacfb7055f9c21585790228a30) | fix | infer first day of week from locale ([#30285](https://github.com/angular/components/pull/30285)) |
+### 
+| Commit | Type | Description |
+| -- | -- | -- |
+| [f5abaa31a1](https://github.com/angular/components/commit/f5abaa31a173d075fe116fe6800c51958329e42f) | feat | add 404 page ([#902](https://github.com/angular/components/pull/902)) |
+| [5c5903e82c](https://github.com/angular/components/commit/5c5903e82c5464964264e616f5c052f3822e7ece) | feat | add button to copy link to example ([#922](https://github.com/angular/components/pull/922)) |
+| [76f9d98d22](https://github.com/angular/components/commit/76f9d98d2225ec840a619fa54928fa299e0186b2) | feat | add cdk/testing docs ([#678](https://github.com/angular/components/pull/678)) |
+| [39ab48f4be](https://github.com/angular/components/commit/39ab48f4bed86af1622546864b63920355ef9a65) | feat | add cookie popup ([#988](https://github.com/angular/components/pull/988)) |
+| [cfdc032c09](https://github.com/angular/components/commit/cfdc032c09d4394b3bc8e7f4ce9fe1089c420a5f) | feat | add CSP and recommended security headers to site |
+| [663d7948fe](https://github.com/angular/components/commit/663d7948fe32b13f1d50459256babae2fd63f72f) | feat | add help/support section ([#915](https://github.com/angular/components/pull/915)) |
+| [38b0fbf469](https://github.com/angular/components/commit/38b0fbf469e04a04c8734f3ce8a041fff836399e) | feat | Add material 3 guide ([#1236](https://github.com/angular/components/pull/1236)) |
+| [c1f9e98b91](https://github.com/angular/components/commit/c1f9e98b91ec9c59be47e7bcdb62f5fe39d6d2f9) | feat | add ripples to documentation items ([#489](https://github.com/angular/components/pull/489)) |
+| [d2b05aec10](https://github.com/angular/components/commit/d2b05aec1017c75aa93afeb70840abedacc05c33) | feat | add ripples to documentation items ([#494](https://github.com/angular/components/pull/494)) |
+| [a429d1bc6a](https://github.com/angular/components/commit/a429d1bc6ae9b7e421426ecf6e6556885fcc6b83) | feat | Add separate guide for M2 specific theming |
+| [cd8b7ab2cf](https://github.com/angular/components/commit/cd8b7ab2cf55ae1a44c7500b80e7b6a07fed735e) | feat | add summaries to all menu items and category pages ([#512](https://github.com/angular/components/pull/512)) |
+| [856a03ff4f](https://github.com/angular/components/commit/856a03ff4f7cd8985f9bb7f14c785e8bad859c95) | feat | add support for reduced motion ([#1095](https://github.com/angular/components/pull/1095)) |
+| [52388a8271](https://github.com/angular/components/commit/52388a82711471f4f281193a5aed163f2e66de2b) | feat | add the ability to link to the site with a particular theme ([#549](https://github.com/angular/components/pull/549)) |
+| [390961e3e9](https://github.com/angular/components/commit/390961e3e9b075916e3f310eed6d89cc5adb0d2f) | feat | add version and version picker ([#406](https://github.com/angular/components/pull/406)) |
+| [a041c423c1](https://github.com/angular/components/commit/a041c423c1bdc7685f55649adc00b94715a0f8c6) | feat | added ability to keep pathname and hash on version change |
+| [06386a7870](https://github.com/angular/components/commit/06386a787076fe282deb5d79b1908b08d862e3a2) | feat | angular 4 compatibility ([#135](https://github.com/angular/components/pull/135)) |
+| [d0a84cf2d3](https://github.com/angular/components/commit/d0a84cf2d39399d81583cc8c4bfaccff9183ddbe) | feat | change navbar, toolbar and landing page coloring to denote when looking at docs on next ([#540](https://github.com/angular/components/pull/540)) |
+| [cffcadce16](https://github.com/angular/components/commit/cffcadce162ffd12852736a79e8cc43b0c0792f3) | feat | compact view for example components to replace static code snippets ([#756](https://github.com/angular/components/pull/756)) |
+| [95753b77e1](https://github.com/angular/components/commit/95753b77e10c504f435061906587904333ca96c7) | feat | convert to standalone ([#1200](https://github.com/angular/components/pull/1200)) |
+| [e592ba19e0](https://github.com/angular/components/commit/e592ba19e066d16be5f5df2ba6a4a79dfd94f3cd) | feat | create a version.json file for all version of the docs sites to load version info from ([#539](https://github.com/angular/components/pull/539)) |
+| [60eb965856](https://github.com/angular/components/commit/60eb9658569a7a10fbc60e4c9b7ffeda20c18431) | feat | expose CDK accordion docs ([#1005](https://github.com/angular/components/pull/1005)) |
+| [8f2fa288b5](https://github.com/angular/components/commit/8f2fa288b52adee11f22534f088aaa0c245005a7) | feat | expose coercion and collections docs ([#994](https://github.com/angular/components/pull/994)) |
+| [84b31396ec](https://github.com/angular/components/commit/84b31396ec34b54e3fde7f48df05082fb301c07b) | feat | more flexible carousels and fix homepage alignment |
+| [98049435a7](https://github.com/angular/components/commit/98049435a7838472ade0c971cd6617f95c443ba6) | feat | show deprecated related information in `material/tooltip` |
+| [f9c59da021](https://github.com/angular/components/commit/f9c59da0213eabb920de6ab83bd705869bf41a88) | feat | simplify stackblitz examples using standalone ([#1211](https://github.com/angular/components/pull/1211)) |
+| [bcfb36864a](https://github.com/angular/components/commit/bcfb36864a29766b2f23ec8c1652daf6926dd8b3) | feat | switch to MDC components ([#1174](https://github.com/angular/components/pull/1174)) |
+| [eac6e2ab03](https://github.com/angular/components/commit/eac6e2ab039bacdf297378f58e899666a6550a00) | feat | switch to sass modules ([#952](https://github.com/angular/components/pull/952)) |
+| [3ffb237849](https://github.com/angular/components/commit/3ffb2378494d16c0e79f554fbeed2821d3a5cccf) | feat | update to 9.0.0-next.x and enable Ivy rendering engine ([#645](https://github.com/angular/components/pull/645)) |
+| [3e758dd254](https://github.com/angular/components/commit/3e758dd25479065b8b60621cbbf49317ed4a9bcf) | fix | accessibility, SEO, typos, styling ([#649](https://github.com/angular/components/pull/649)) |
+| [8866616f2d](https://github.com/angular/components/commit/8866616f2dbb5768f99e53636e3d3cc1cccb59f2) | fix | account for new token data format |
+| [ebaa6e3ea4](https://github.com/angular/components/commit/ebaa6e3ea445251ebdd021740a164b93f18271a9) | fix | add back accidentally deleted deployment check |
+| [8e86c817d8](https://github.com/angular/components/commit/8e86c817d8823a92bf013ec9615ec762893c96f8) | fix | add box shadow to cookie popup |
+| [d3a56e5d06](https://github.com/angular/components/commit/d3a56e5d06851145ebff4e76de2fbcec74a5621a) | fix | add dynamic copyright ([#1169](https://github.com/angular/components/pull/1169)) |
+| [ff0b4d99ab](https://github.com/angular/components/commit/ff0b4d99ab03d6c05364529acc45a0c28047d7d1) | fix | add header background if links wrap |
+| [baef33766c](https://github.com/angular/components/commit/baef33766c58361ba8c62c656b438f00be869bae) | fix | add material-moment-adapter to stackblitz dependencies ([#1156](https://github.com/angular/components/pull/1156)) |
+| [615dfe185c](https://github.com/angular/components/commit/615dfe185c7f9a107fed7f402a1afaf1bee5ea31) | fix | add missing drag-drop examples ([#616](https://github.com/angular/components/pull/616)) |
+| [d350fc1b0a](https://github.com/angular/components/commit/d350fc1b0a6651c7557cd3d584d4d482ab6bbb83) | fix | add missing test harnesses ([#860](https://github.com/angular/components/pull/860)) |
+| [2996086742](https://github.com/angular/components/commit/299608674231b98f5b3875800f1386cd57c2c1c5) | fix | add postinstall script back to make component examples work |
+| [dcf45d3d3d](https://github.com/angular/components/commit/dcf45d3d3db7fe5880548557777b1708814da9dc) | fix | add ripples to clickable cards |
+| [2272750245](https://github.com/angular/components/commit/2272750245083ec869af32e0dec5a9a960555a07) | fix | add styling for markdown tables ([#921](https://github.com/angular/components/pull/921)) |
+| [51ce514bf8](https://github.com/angular/components/commit/51ce514bf895f990b46f8e33a4aab93fd8af2798) | fix | align and clean up table design ([#1003](https://github.com/angular/components/pull/1003)) |
+| [b584257e6e](https://github.com/angular/components/commit/b584257e6e9c0673a6b4bca1278eb8e0ea3eb32b) | fix | allow table of contents to scroll |
+| [98aaf74dd0](https://github.com/angular/components/commit/98aaf74dd0ec980bbffbed8c7340af2e7faeae0c) | fix | anchor links not scrolling into view ([#519](https://github.com/angular/components/pull/519)) |
+| [c88475f8a5](https://github.com/angular/components/commit/c88475f8a53e19bc4cf808e427542bc74fa08aa2) | fix | angular material footer logo |
+| [8635a57bcf](https://github.com/angular/components/commit/8635a57bcf40087fa84e34e48ec3551da8c892e3) | fix | avoid breaking page if there's a broken example ([#855](https://github.com/angular/components/pull/855)) |
+| [bc2343484c](https://github.com/angular/components/commit/bc2343484c8e00e5d08d914c1dd4155e44765d20) | fix | bump angular version to resolve query issue ([#1105](https://github.com/angular/components/pull/1105)) |
+| [90cf5f3aeb](https://github.com/angular/components/commit/90cf5f3aeb0c0e16ada86f19ad2c7cc02b6712f7) | fix | cache fetched docs ([#1001](https://github.com/angular/components/pull/1001)) |
+| [733b8eb527](https://github.com/angular/components/commit/733b8eb527d16b489b1bfb91650d419bfe661904) | fix | capitalization on component list ([#114](https://github.com/angular/components/pull/114)) |
+| [de7d03291e](https://github.com/angular/components/commit/de7d03291e200faf1ee38a3ff9f6f0592dfc8ff5) | fix | cdk test harness API document not found ([#716](https://github.com/angular/components/pull/716)) |
+| [e13014e33e](https://github.com/angular/components/commit/e13014e33e9dd857b23a445415eebf3931d51de9) | fix | center guide viewer ([#274](https://github.com/angular/components/pull/274)) |
+| [8a85bb88bf](https://github.com/angular/components/commit/8a85bb88bf9a165a243123bcf1eb00b94366ef90) | fix | clean up tilde imports ([#1082](https://github.com/angular/components/pull/1082)) |
+| [ad940e6248](https://github.com/angular/components/commit/ad940e62480cbec30daf84cc6b09ba17de5b6609) | fix | components with multiple API docs do not display correctly ([#717](https://github.com/angular/components/pull/717)) |
+| [e3d6968e3c](https://github.com/angular/components/commit/e3d6968e3c5c6bc2ef1b961adb4aa004a30e35a0) | fix | consistent toc positioning ([#316](https://github.com/angular/components/pull/316)) |
+| [71133d7982](https://github.com/angular/components/commit/71133d7982ffd144bb7328f335669546e0b71505) | fix | cookies dialog button contrast ([#1010](https://github.com/angular/components/pull/1010)) |
+| [d870c0b049](https://github.com/angular/components/commit/d870c0b04970e7ebc8e24dde8349fe0c0220879d) | fix | copy to clipboard button always copying content of first tab ([#821](https://github.com/angular/components/pull/821)) |
+| [476622a81a](https://github.com/angular/components/commit/476622a81ab3b2fee596bb72ee026b837b738b02) | fix | correct links in doc-viewer markdown files to have the proper base value ([#554](https://github.com/angular/components/pull/554)) |
+| [ac205ece69](https://github.com/angular/components/commit/ac205ece691c29a623c06d9feec75f0f79bb58a7) | fix | create proper fragment urls ([#329](https://github.com/angular/components/pull/329)) |
+| [4e67c59318](https://github.com/angular/components/commit/4e67c59318eeb36d9471ae9c924502045f79dc39) | fix | declare duplicate theming guide ([#923](https://github.com/angular/components/pull/923)) |
+| [d04156ab0d](https://github.com/angular/components/commit/d04156ab0d2de872cd2d3a04daf12dc7208858ec) | fix | directly check if the hostname is the expected hostname instead of just starting with the hostname ([#1223](https://github.com/angular/components/pull/1223)) |
+| [aa2dd2552b](https://github.com/angular/components/commit/aa2dd2552b805eb063f2fca5f4492a8cbbc93e2f) | fix | doc titles anchor links accessible ([#891](https://github.com/angular/components/pull/891)) |
+| [103fc7963c](https://github.com/angular/components/commit/103fc7963cedc7eb23e930ca91d1df9ec843b4c7) | fix | double scroll bars on guides page |
+| [defdbe6310](https://github.com/angular/components/commit/defdbe6310df86578b774b423ec515e38a2b2aa1) | fix | ensure that menu items are always sorted ([#1058](https://github.com/angular/components/pull/1058)) |
+| [b54869ef0b](https://github.com/angular/components/commit/b54869ef0b372b61874018f6c9411d8a4b5994c8) | fix | errors in plunkr template ([#54](https://github.com/angular/components/pull/54)) |
+| [b124bb49aa](https://github.com/angular/components/commit/b124bb49aa06efa4c4ce5528d195087d4f9baa4e) | fix | errors when reading optional queries |
+| [c2b92c3f32](https://github.com/angular/components/commit/c2b92c3f32999036875e1b86f4381eba8641fc71) | fix | example-viewer icons and animation ([#52](https://github.com/angular/components/pull/52)) |
+| [677d07cec9](https://github.com/angular/components/commit/677d07cec9f4978c502af4db0b3233efec260a83) | fix | explicitly set an index for each API docs section ([#732](https://github.com/angular/components/pull/732)) |
+| [0e72906469](https://github.com/angular/components/commit/0e72906469715bfb74895c402f2a09c8bf3738e4) | fix | expose component testing modules ([#757](https://github.com/angular/components/pull/757)) |
+| [776973db64](https://github.com/angular/components/commit/776973db640fe0674018abaea43788c6425c2f1c) | fix | expose timepicker |
+| [29715e6ec1](https://github.com/angular/components/commit/29715e6ec183ce3e139a2c6e2011bfed495f1c00) | fix | external links with hash are updated incorrectly ([#355](https://github.com/angular/components/pull/355)) |
+| [3c93065881](https://github.com/angular/components/commit/3c93065881a0a0b479f9ee3d02a16d70c86b0ca3) | fix | failing test ([#1281](https://github.com/angular/components/pull/1281)) |
+| [937c222807](https://github.com/angular/components/commit/937c2228079f2a83713cd7216ce03d9b3118ea7f) | fix | fix 'reporters' key name in karma.conf ([#433](https://github.com/angular/components/pull/433)) |
+| [6601ada892](https://github.com/angular/components/commit/6601ada892fde46f5e74ec0d722bd59d86bef056) | fix | fix ts compiler error |
+| [cab14c68c9](https://github.com/angular/components/commit/cab14c68c9b7b2e3eb1ddb106248983159f87cf4) | fix | footer jumping up while guide is loading ([#834](https://github.com/angular/components/pull/834)) |
+| [93d74135fd](https://github.com/angular/components/commit/93d74135fd1ab1a852423a78ca917c0613762f6c) | fix | footer not being pushed to the bottom of the page in guides ([#839](https://github.com/angular/components/pull/839)) |
+| [e6179b6f92](https://github.com/angular/components/commit/e6179b6f92b04b368622406deb11833cd3953fd3) | fix | footer not sticking to bottom of the page on IE ([#451](https://github.com/angular/components/pull/451)) |
+| [9cf54bcd30](https://github.com/angular/components/commit/9cf54bcd3046e868fa318a22fadcf1fb61053fe7) | fix | generated Stackblitz examples not working when forked to a repo ([#901](https://github.com/angular/components/pull/901)) |
+| [195f99205c](https://github.com/angular/components/commit/195f99205cb62d30a60a854bcac10ca3d4f30096) | fix | github icon was not centered on mobile ([#1067](https://github.com/angular/components/pull/1067)) |
+| [fa88118c4d](https://github.com/angular/components/commit/fa88118c4d9f09605fe3e598b8326118b4786975) | fix | guides overlapping footer on narrow screens ([#1007](https://github.com/angular/components/pull/1007)) |
+| [1f695d197a](https://github.com/angular/components/commit/1f695d197a4f6bb5df9363fca204801eea6cf926) | fix | harnesses not working on Stackblitz ([#1193](https://github.com/angular/components/pull/1193)) |
+| [65f1ec699a](https://github.com/angular/components/commit/65f1ec699aa2fd9cc6366445996c22a493d6ccae) | fix | hide ripple styling page |
+| [9ad15a52fb](https://github.com/angular/components/commit/9ad15a52fbe5128afe2cd8a31d44a639472e0cc8) | fix | home page in mobile view ([#832](https://github.com/angular/components/pull/832)) |
+| [e604f5bb07](https://github.com/angular/components/commit/e604f5bb07a3526ea43b1c8d5a303b41d0f04688) | fix | homepage not using native accelerated scrolling on touch devices ([#827](https://github.com/angular/components/pull/827)) |
+| [7c9e931a09](https://github.com/angular/components/commit/7c9e931a09be48d5d17ee2006c0574acb1cc5b29) | fix | horizontal scrollbar always visible on Windows in code samples ([#500](https://github.com/angular/components/pull/500)) |
+| [fe06a376bb](https://github.com/angular/components/commit/fe06a376bb009daee72589ffd24a41e4d3bed4de) | fix | improve the docs typography |
+| [61161c522e](https://github.com/angular/components/commit/61161c522e59195d08ccf9eebd0a42096bb54cca) | fix | include all menu examples under examples tab ([#428](https://github.com/angular/components/pull/428)) |
+| [2ec3c381b4](https://github.com/angular/components/commit/2ec3c381b4cfdd7067a5b55bd6956e99f59eb19c) | fix | include cdkAccordionModule in material-module for accordion stackblitz demo ([#1060](https://github.com/angular/components/pull/1060)) |
+| [c3a2e49f43](https://github.com/angular/components/commit/c3a2e49f43f843235bc691d54806b7b6de56098e) | fix | include date range picker examples ([#899](https://github.com/angular/components/pull/899)) |
+| [4f635ed2fa](https://github.com/angular/components/commit/4f635ed2faab5f2f7b3e857e66a3876d634697b6) | fix | include proper font and web animations polyfill ([#209](https://github.com/angular/components/pull/209)) |
+| [a9c2135fc8](https://github.com/angular/components/commit/a9c2135fc8526380eccad04327ea09ec84449dab) | fix | incorrect link to Material source code |
+| [d398abfe4b](https://github.com/angular/components/commit/d398abfe4b1758f76eb6ed3ecaf14c96f1e45d0e) | fix | incorrect scenes |
+| [e76343b9c8](https://github.com/angular/components/commit/e76343b9c876602007e3026986a1928bed5f08a0) | fix | lighthouse check failing in v15 ([#1164](https://github.com/angular/components/pull/1164)) |
+| [23239561fd](https://github.com/angular/components/commit/23239561fda56034f4d6b3c2e450a46da915398f) | fix | menu icons example not rendering ([#449](https://github.com/angular/components/pull/449)) |
+| [51c3777cb8](https://github.com/angular/components/commit/51c3777cb8843741732de8e65f95746b992debb4) | fix | missing import for `PortalModule` ([#582](https://github.com/angular/components/pull/582)) |
+| [06798e2c71](https://github.com/angular/components/commit/06798e2c713c8bd25101a48dae1652b82b4a8c93) | fix | missing import for a11y module ([#571](https://github.com/angular/components/pull/571)) |
+| [48da87118d](https://github.com/angular/components/commit/48da87118d7a40112fbd1b53397b911f428f3bf5) | fix | missing roboto font weights ([#349](https://github.com/angular/components/pull/349)) |
+| [d5daeab711](https://github.com/angular/components/commit/d5daeab7112ea038a56535a12db5ed1470afad29) | fix | normalize card height ([#115](https://github.com/angular/components/pull/115)) |
+| [29879c0002](https://github.com/angular/components/commit/29879c0002578e1485d27da89dbb28a6c1b6d8c9) | fix | numerous responsive issues on screens from 360px to 960px ([#705](https://github.com/angular/components/pull/705)) |
+| [8b4515d8b0](https://github.com/angular/components/commit/8b4515d8b0834acef53f9093238f04fff3745bce) | fix | overflow on devices ([#471](https://github.com/angular/components/pull/471)) |
+| [1abc4afba2](https://github.com/angular/components/commit/1abc4afba28526be89900abb9e77b7626389c310) | fix | plunkers not including source files ([#199](https://github.com/angular/components/pull/199)) |
+| [b14539b4c3](https://github.com/angular/components/commit/b14539b4c3723284b6188af2c81299729caf2f75) | fix | prepare for enabling Ivy ([#642](https://github.com/angular/components/pull/642)) |
+| [cd7117fdf4](https://github.com/angular/components/commit/cd7117fdf490abbb7d40dd16c58338ea6d0a06b9) | fix | prevent user-select on method modifier marker ([#1182](https://github.com/angular/components/pull/1182)) |
+| [45e159bffb](https://github.com/angular/components/commit/45e159bffb13b5abbfbd3a62ef9a73bd14debe90) | fix | prevent users from selecting link icon text ([#1034](https://github.com/angular/components/pull/1034)) |
+| [0531cc66e2](https://github.com/angular/components/commit/0531cc66e26be8e1e670ddafb6c2dc2ba7e446d7) | fix | remove `-example` suffix from tree examples in documentation items ([#444](https://github.com/angular/components/pull/444)) |
+| [ee4e3a346a](https://github.com/angular/components/commit/ee4e3a346a8bcfd2a423d90a426be96ad33de79b) | fix | remove ComponentFactoryResolver usage from scenes |
+| [603e5a7253](https://github.com/angular/components/commit/603e5a72534604801a3d3e39bed2eb38971e2ca9) | fix | remove elevation from nav bar |
+| [dafdc6a028](https://github.com/angular/components/commit/dafdc6a028a5805f49f1fe4fe646cf7c7a4d3bb8) | fix | remove extension from Stackblitz examples ([#841](https://github.com/angular/components/pull/841)) |
+| [bcc6a0db14](https://github.com/angular/components/commit/bcc6a0db146e2f0a56da65fece5a4374292680d9) | fix | remove google groups link |
+| [ab385ed7fc](https://github.com/angular/components/commit/ab385ed7fc6db2e3ad4155eda4950c7711b915d6) | fix | remove imports from top-level package ([#604](https://github.com/angular/components/pull/604)) |
+| [07518e135c](https://github.com/angular/components/commit/07518e135c8be22dece422dd396dfc149f6f8dcd) | fix | remove MDC migration guide |
+| [daa09dec81](https://github.com/angular/components/commit/daa09dec81b544352f64ada8bb1cf08a3a761dbb) | fix | remove service worker ([#503](https://github.com/angular/components/pull/503)) |
+| [c94ea2f845](https://github.com/angular/components/commit/c94ea2f845f8d5c6bac6d5d89d3ffd81c44cfdc3) | fix | remove unnecessary components bundle ([#74](https://github.com/angular/components/pull/74)) |
+| [2509a91f26](https://github.com/angular/components/commit/2509a91f261c28041df1caa87bbb967ad3cdae5b) | fix | remove workarounds for async pipe type narrowing bug |
+| [86cfbd6c0a](https://github.com/angular/components/commit/86cfbd6c0a91460b16873433ea8cb409237f4c5d) | fix | replace use of turbo with yarn ([#1213](https://github.com/angular/components/pull/1213)) |
+| [f5c4f7a154](https://github.com/angular/components/commit/f5c4f7a15468f0f9987b9ab3568228e11ac527fc) | fix | resolve breaking changes from upgrading to beta.2 ([#102](https://github.com/angular/components/pull/102)) |
+| [d0d71a6166](https://github.com/angular/components/commit/d0d71a6166dea433e9d03de92725284fd34b3ae6) | fix | ripple overview not loading ([#734](https://github.com/angular/components/pull/734)) |
+| [1f5004d9aa](https://github.com/angular/components/commit/1f5004d9aabce9e74fe3eb9dfa2c6d37a4a2c2df) | fix | router outlet should not allow overflow ([#856](https://github.com/angular/components/pull/856)) |
+| [085c794319](https://github.com/angular/components/commit/085c7943194140ef702b3c68b0076f47f149d918) | fix | routing path for `cdk/testing` |
+| [be830baaa3](https://github.com/angular/components/commit/be830baaa333a09c14c16620378e4e822fac21c4) | fix | scss deprecation warnings and wrong example name ([#462](https://github.com/angular/components/pull/462)) |
+| [05c716418a](https://github.com/angular/components/commit/05c716418a06290f6affc9366cb2c1b01d653b81) | fix | set rootUrl during construction of table of contents ([#445](https://github.com/angular/components/pull/445)) |
+| [8fce89ac4e](https://github.com/angular/components/commit/8fce89ac4e2936fc0b26d2d88346b24f3f2b365f) | fix | set up scene for timepicker |
+| [b14a475f15](https://github.com/angular/components/commit/b14a475f15c8b98cdcde41a9eb1e70bf8a6665fb) | fix | sidenav spacing |
+| [08782a1e86](https://github.com/angular/components/commit/08782a1e866cd06af82f2ed01744f290e12bb863) | fix | site crashing on browsers with limited localStorage access ([#203](https://github.com/angular/components/pull/203)) |
+| [7cb133b744](https://github.com/angular/components/commit/7cb133b7449862968c3a37765970b3681506830c) | fix | some testing entry points referring to wrong module ([#854](https://github.com/angular/components/pull/854)) |
+| [6d28826406](https://github.com/angular/components/commit/6d28826406c03d931d25b88935933c53e97dac33) | fix | sort links alphabetically ([#996](https://github.com/angular/components/pull/996)) |
+| [3ff854d47b](https://github.com/angular/components/commit/3ff854d47b34822824e66794708361bfb0122b17) | fix | sticky table example not loading ([#553](https://github.com/angular/components/pull/553)) |
+| [0e675d410e](https://github.com/angular/components/commit/0e675d410e859422265f59913bb21fdb124d2bd2) | fix | switch Stackblitz back to npm |
+| [0e2c7f9f37](https://github.com/angular/components/commit/0e2c7f9f374141409b6b1df003cbbc8bdfed6c3f) | fix | table of contents not working within cdk ([#545](https://github.com/angular/components/pull/545)) |
+| [be7b959eca](https://github.com/angular/components/commit/be7b959ecabd08c78f6fe29fbaac38aff81e70d9) | fix | temporarily disable Ivy on Stackblitz ([#1050](https://github.com/angular/components/pull/1050)) |
+| [502b1a9aeb](https://github.com/angular/components/commit/502b1a9aeb5e84c6f96c9f300731b2bef422cd25) | fix | update angular & angular material to `next` version ([#1171](https://github.com/angular/components/pull/1171)) |
+| [053b27ca22](https://github.com/angular/components/commit/053b27ca2202b856ad701cf6210ceaa2d6154b37) | fix | update component categories screenshots to M3 |
+| [e621cbc132](https://github.com/angular/components/commit/e621cbc1325e499e791422b0dde097e21d75cd28) | fix | update stackblitz to correct angular framework version ([#1178](https://github.com/angular/components/pull/1178)) |
+| [72ef9806c0](https://github.com/angular/components/commit/72ef9806c09eee56e5641cfe83250dec6ae744c9) | fix | update title background [#398](https://github.com/angular/components/pull/398) ([#399](https://github.com/angular/components/pull/399)) |
+| [82ee7fe3e8](https://github.com/angular/components/commit/82ee7fe3e85c0dad725904a44aa1357903d20e29) | fix | update to rxjs 7 ([#1280](https://github.com/angular/components/pull/1280)) |
+| [b0984ec2f2](https://github.com/angular/components/commit/b0984ec2f200cca45e52281acade15bd2ed5b5b4) | fix | update yarn.lock and fix package.json ([#1074](https://github.com/angular/components/pull/1074)) |
+| [1ee6973083](https://github.com/angular/components/commit/1ee6973083a7aedafd953caa039c41259ce70f22) | fix | use more lenient version when generating stackblitz ([#1075](https://github.com/angular/components/pull/1075)) |
+| [06eb0abf0a](https://github.com/angular/components/commit/06eb0abf0a26fda057351b40760d19c205ae27cc) | fix | use new control flow syntax |
+| [24aab79aa7](https://github.com/angular/components/commit/24aab79aa7329b9d7907cead149907753c996aec) | fix | use new Google Fonts snippet ([#900](https://github.com/angular/components/pull/900)) |
+| [7d090a610f](https://github.com/angular/components/commit/7d090a610f3a86feaa45cd486bcc126842ff0d4f) | fix | use theme color for link inside the API reference ([#990](https://github.com/angular/components/pull/990)) |
+| [be57a6ba61](https://github.com/angular/components/commit/be57a6ba61906e6e3c45a5e3c7df0d8c54dbd165) | fix | use yarn when forking to stackblitz ([#1194](https://github.com/angular/components/pull/1194)) |
+| [d12a8bb6ec](https://github.com/angular/components/commit/d12a8bb6ecf62156c8f7cdf6ef9763e535e49a22) | fix | window.location.href changed to its origin ([#1234](https://github.com/angular/components/pull/1234)) |
+| [7b7901c3da](https://github.com/angular/components/commit/7b7901c3da0fb6bb9caa8ac9e4e90d0c0a73db53) | fix | workaround issues with ngIf template vars in Angular 9.0.0-rc.5 |
+| [4eeb2bdd31](https://github.com/angular/components/commit/4eeb2bdd31747ac042d8787c6a7b3fb23315c624) | fix | wrong import path ([#1140](https://github.com/angular/components/pull/1140)) |
+| [355eb6477d](https://github.com/angular/components/commit/355eb6477d0280786e8ac9c8192b2ffa3b4d1e58) | perf | avoid triggering change detection on scroll ([#1033](https://github.com/angular/components/pull/1033)) |
+| [46bcb208e6](https://github.com/angular/components/commit/46bcb208e69a78ace480036f19766dbc7f128c4c) | perf | example rendering performance improvements ([#961](https://github.com/angular/components/pull/961)) |
+### a11y
+| Commit | Type | Description |
+| -- | -- | -- |
+| [6a91be8a5e](https://github.com/angular/components/commit/6a91be8a5e6c8c4e294537de1f67c1e4f42049d3) | fix | fix example to use standard filter ([#123](https://github.com/angular/components/pull/123)) |
+| [14a7612502](https://github.com/angular/components/commit/14a761250235523fc305793d43e6792bd6938588) | fix | improve contrast of accent in pink-bluegrey theme ([#637](https://github.com/angular/components/pull/637)) |
+| [1e13ab004b](https://github.com/angular/components/commit/1e13ab004b6333c32bc7deeb5cc7484ad541aba2) | fix | various issues with contrast ratios ([#635](https://github.com/angular/components/pull/635)) |
+### api
+| Commit | Type | Description |
+| -- | -- | -- |
+| [dc2358191f](https://github.com/angular/components/commit/dc2358191f9bb57bc9c55e011a6461954af6e217) | feat | add table-of-contents to api page ([#291](https://github.com/angular/components/pull/291)) |
+### button
+| Commit | Type | Description |
+| -- | -- | -- |
+| [421dd12859](https://github.com/angular/components/commit/421dd1285980633d79e3dcea249cad7344be14fb) | fix | fix color of mat-button links ([#876](https://github.com/angular/components/pull/876)) |
+### categories
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e9a709739f](https://github.com/angular/components/commit/e9a709739f1d07ec75e52d013d260a44240804c5) | fix | make list items anchors like component list items ([#224](https://github.com/angular/components/pull/224)) |
+### category-list
+| Commit | Type | Description |
+| -- | -- | -- |
+| [c29ae29d2c](https://github.com/angular/components/commit/c29ae29d2cb12765a0c048117bfe232a10d501dc) | fix | bad routerLink path with relativeLinkResolution ([#663](https://github.com/angular/components/pull/663)) |
+### ci
+| Commit | Type | Description |
+| -- | -- | -- |
+| [8ec736f810](https://github.com/angular/components/commit/8ec736f810a102483b2892d2308d07d74c94f0dd) | fix | hammerjs not loaded causes warnings and flaky failures ([#548](https://github.com/angular/components/pull/548)) |
+### compatibility
+| Commit | Type | Description |
+| -- | -- | -- |
+| [d13f8f1782](https://github.com/angular/components/commit/d13f8f1782afb5bba6b99745f1e4ce7a6785f1a6) | fix | remove reference to md- in styles ([#113](https://github.com/angular/components/pull/113)) |
+### component-category-list
+| Commit | Type | Description |
+| -- | -- | -- |
+| [6415b7fc0b](https://github.com/angular/components/commit/6415b7fc0b90e1e23bafef5358601419789aad2e) | fix | links fail a11y contrast checks in dark mode |
+### component-sidenav,component-viewer
+| Commit | Type | Description |
+| -- | -- | -- |
+| [96e2848fbb](https://github.com/angular/components/commit/96e2848fbb0475e908b25c44b7a010ff2f215a75) | fix | fix sticky TOC ([#917](https://github.com/angular/components/pull/917)) |
+### component-viewer
+| Commit | Type | Description |
+| -- | -- | -- |
+| [a215e7b675](https://github.com/angular/components/commit/a215e7b6755d9cea70fe0c5a35632a7e22768a78) | fix | can't navigate to CDK after visiting component ([#410](https://github.com/angular/components/pull/410)) |
+| [ebdb66d967](https://github.com/angular/components/commit/ebdb66d9677d9a20588da23bce04e15d4451632e) | fix | Loading document... getting wrapped ([#912](https://github.com/angular/components/pull/912)) |
+### csp
+| Commit | Type | Description |
+| -- | -- | -- |
+| [5513093def](https://github.com/angular/components/commit/5513093def27352e06b505c8275e63717783dd8e) | fix | allow img-src of 'self' |
+### doc-viewer
+| Commit | Type | Description |
+| -- | -- | -- |
+| [4004a1c959](https://github.com/angular/components/commit/4004a1c9596c2a9561fb07e36ee6a6914d7fdf1f) | feat | add doc-viewer component ([#17](https://github.com/angular/components/pull/17)) |
+| [8cd4c25dba](https://github.com/angular/components/commit/8cd4c25dba122a336db8663b72c4619ba3371898) | fix | cancel previous pending requests when changing url ([#235](https://github.com/angular/components/pull/235)) |
+### docs
+| Commit | Type | Description |
+| -- | -- | -- |
+| [f6c3702d3b](https://github.com/angular/components/commit/f6c3702d3b13ccecfade0d46ebfd812ec8fd2618) | feat | add page titles to doc pages [#189](https://github.com/angular/components/pull/189) ([#220](https://github.com/angular/components/pull/220)) |
+| [d7fc560140](https://github.com/angular/components/commit/d7fc5601405f83e5418121382b7647d4dcc7793c) | fix | add example for adding icon in meta section using matListI… ([#30068](https://github.com/angular/components/pull/30068)) |
+| [802148e5f3](https://github.com/angular/components/commit/802148e5f34dff6e263ba316ba4ad9f577270695) | fix | correct overflow cdk pages |
+### example-viewer
+| Commit | Type | Description |
+| -- | -- | -- |
+| [d888d64272](https://github.com/angular/components/commit/d888d6427209abcc4865b956c7d19125f338cf8a) | feat | add copy source button ([#262](https://github.com/angular/components/pull/262)) |
+| [dcdf7fa23f](https://github.com/angular/components/commit/dcdf7fa23ff40ac23da3e0e4525c91a51159cfc0) | feat | support rendering additional files ([#516](https://github.com/angular/components/pull/516)) |
+| [e26a9fc135](https://github.com/angular/components/commit/e26a9fc13532f30f567196584c91f6d350fe0ea1) | fix | don't wrap code samples ([#289](https://github.com/angular/components/pull/289)) |
+### examples
+| Commit | Type | Description |
+| -- | -- | -- |
+| [03e8704ffc](https://github.com/angular/components/commit/03e8704ffc53da1dd0dfc4ad895c91a79336ddd5) | fix | add correct relative path to background-url ([#112](https://github.com/angular/components/pull/112)) |
+### footer
+| Commit | Type | Description |
+| -- | -- | -- |
+| [f1d0fad7fa](https://github.com/angular/components/commit/f1d0fad7fa65504eacfb84a82ddc0adccce64ddb) | fix | extra w in www.angular.io ([#217](https://github.com/angular/components/pull/217)) |
+### ga
+| Commit | Type | Description |
+| -- | -- | -- |
+| [eb320996a0](https://github.com/angular/components/commit/eb320996a031b34d9da708c1e83d3fa3a37e2d49) | fix | remove extra '/' ([#418](https://github.com/angular/components/pull/418)) |
+| [3f508c748f](https://github.com/angular/components/commit/3f508c748f457141e4ec5dc94c855d1b2508ee67) | fix | set analytics for mat and ng separately. ([#417](https://github.com/angular/components/pull/417)) |
+### guide
+| Commit | Type | Description |
+| -- | -- | -- |
+| [ddcaf81ab4](https://github.com/angular/components/commit/ddcaf81ab40d2ce3f735cf8059c285e591705e4b) | fix | add ReactiveFormsModule to GuideViewerModule ([#719](https://github.com/angular/components/pull/719)) |
+### guides
+| Commit | Type | Description |
+| -- | -- | -- |
+| [c7839ebff0](https://github.com/angular/components/commit/c7839ebff0c6ff6eba84b8feb47f3fb8cbd6a7b7) | fix | fix the positioning of the footer on the guides page ([#803](https://github.com/angular/components/pull/803)) |
+### homepage
+| Commit | Type | Description |
+| -- | -- | -- |
+| [b9856a1dd3](https://github.com/angular/components/commit/b9856a1dd38a6c1d0c9085b1ca9f9986651d8a51) | feat | Use static content in homepage ([#16](https://github.com/angular/components/pull/16)) |
+| [bc652363ff](https://github.com/angular/components/commit/bc652363ff18df867efde11d96bf93d36d356705) | fix | fix splash svg on homepage ([#179](https://github.com/angular/components/pull/179)) |
+### icons
+| Commit | Type | Description |
+| -- | -- | -- |
+| [16907d6339](https://github.com/angular/components/commit/16907d6339dabcd72f5517a3f3b3cc19a0aaac91) | fix | fix snackbar icon name ([#183](https://github.com/angular/components/pull/183)) |
+| [cee28b6d9a](https://github.com/angular/components/commit/cee28b6d9a18beb7e3b1348f461d5a0d0bb4618a) | fix | set width and height of icons ([#187](https://github.com/angular/components/pull/187)) |
+### index.html
+| Commit | Type | Description |
+| -- | -- | -- |
+| [ce5a4ef5a6](https://github.com/angular/components/commit/ce5a4ef5a67e98f44c34db04b26bba3d7b729864) | fix | remove duplicated meta tag ([#1065](https://github.com/angular/components/pull/1065)) |
+### main
+| Commit | Type | Description |
+| -- | -- | -- |
+| [107d4b9dea](https://github.com/angular/components/commit/107d4b9dea48c9abab95f2aff8ce9f84860f9610) | fix | don't load hammerjs twice ([#555](https://github.com/angular/components/pull/555)) |
+### manifest.json
+| Commit | Type | Description |
+| -- | -- | -- |
+| [bcf32e9a0c](https://github.com/angular/components/commit/bcf32e9a0c7f2e0c80a9eca1be67e1e880c24829) | fix | use rel paths, remove density |
+### material-docs-app
+| Commit | Type | Description |
+| -- | -- | -- |
+| [6bbc07c44e](https://github.com/angular/components/commit/6bbc07c44ee7e30d69bafa8d45e2c304d8448a98) | fix | remove absolute positioning of all content ([#840](https://github.com/angular/components/pull/840)) |
+### module
+| Commit | Type | Description |
+| -- | -- | -- |
+| [2ca566ad3e](https://github.com/angular/components/commit/2ca566ad3e5b5006ac9dc19d9e1d338618751453) | fix | remove deprecated forRoot and update ts ([#151](https://github.com/angular/components/pull/151)) |
+### multiple
+| Commit | Type | Description |
+| -- | -- | -- |
+| [3a7724e958](https://github.com/angular/components/commit/3a7724e9580c64dd4a9f4d3eb7b3cad2182cea2f) | fix | remove webkit-overflow-scrolling ([#30003](https://github.com/angular/components/pull/30003)) |
+### nav
+| Commit | Type | Description |
+| -- | -- | -- |
+| [094c5f29cf](https://github.com/angular/components/commit/094c5f29cf0d92f45c6befc10ae68704119612a3) | feat | new sidenav UX ([#300](https://github.com/angular/components/pull/300)) |
+### navbar
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e7c3016108](https://github.com/angular/components/commit/e7c3016108e36f9f9bd645e90547a38b399ff483) | feat | Add themepicker component with lazy loaded themes ([#136](https://github.com/angular/components/pull/136)) |
+### plunker
+| Commit | Type | Description |
+| -- | -- | -- |
+| [5d39a2be73](https://github.com/angular/components/commit/5d39a2be73ac4f2ec64139cc1a345ff43d3e26f2) | fix | attach form to document before submitting ([#93](https://github.com/angular/components/pull/93)) |
+| [0e1818fae4](https://github.com/angular/components/commit/0e1818fae415df50c932c030fdadea854298f736) | fix | make calls to plunker synchronous to avoid popup block ([#83](https://github.com/angular/components/pull/83)) |
+### PWA
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e25ed73e69](https://github.com/angular/components/commit/e25ed73e694870e9954f38f5ef3b595104ad280a) | feat | add service worker [#175](https://github.com/angular/components/pull/175) ([#223](https://github.com/angular/components/pull/223)) |
+### readability
+| Commit | Type | Description |
+| -- | -- | -- |
+| [3e21e46b60](https://github.com/angular/components/commit/3e21e46b6080b8ab5d27dade333d88954431d477) | fix | changed text opacity from .54 to .87 according the spec ([#91](https://github.com/angular/components/pull/91)) |
+### scrolling
+| Commit | Type | Description |
+| -- | -- | -- |
+| [27d0d781a0](https://github.com/angular/components/commit/27d0d781a0d27972c73d33e01f55dbbca8320249) | fix | add ScrollingModule ([#547](https://github.com/angular/components/pull/547)) |
+| [db78ef8bb1](https://github.com/angular/components/commit/db78ef8bb12660f317c34aa90bbe0fff791bdb4c) | fix | enable scrolling on safari ([#82](https://github.com/angular/components/pull/82)) |
+### sidenav
+| Commit | Type | Description |
+| -- | -- | -- |
+| [05f72f8d6d](https://github.com/angular/components/commit/05f72f8d6d9d1869745fd45dcfb781ae1507c978) | fix | unable to scroll sidenav as expected ([#978](https://github.com/angular/components/pull/978)) |
+### spinner
+| Commit | Type | Description |
+| -- | -- | -- |
+| [a7edc2f7e2](https://github.com/angular/components/commit/a7edc2f7e2a0d3238423149c0620838219d4c4b3) | fix | fixed binding the the radio buttons model ([#99](https://github.com/angular/components/pull/99)) |
+### stack-blitz
+| Commit | Type | Description |
+| -- | -- | -- |
+| [485a463718](https://github.com/angular/components/commit/485a463718b4dd2015a3fdde1165eaeea462ec31) | fix | default to form-field fill appearance ([#712](https://github.com/angular/components/pull/712)) |
+### stack-blitz-button
+| Commit | Type | Description |
+| -- | -- | -- |
+| [8d0bcc1a53](https://github.com/angular/components/commit/8d0bcc1a53c855532f6047b2064e33e2570d3c21) | fix | use open_in_new icon ([#667](https://github.com/angular/components/pull/667)) |
+### stack-blitz-tests
+| Commit | Type | Description |
+| -- | -- | -- |
+| [fb725829ed](https://github.com/angular/components/commit/fb725829ed6bd104af839f0d37139be480d5f349) | fix | revert enabling Ivy as it broke harness examples ([#1009](https://github.com/angular/components/pull/1009)) |
+### stackblitz
+| Commit | Type | Description |
+| -- | -- | -- |
+| [b36e2d1a9d](https://github.com/angular/components/commit/b36e2d1a9d0e30b6c38ea477076165a332e7edee) | feat | add new stackblitz template to run harness test examples ([#872](https://github.com/angular/components/pull/872)) |
+| [eef58652e3](https://github.com/angular/components/commit/eef58652e32b3b1561b08cbdd261f29720495da4) | feat | start sb on index [#373](https://github.com/angular/components/pull/373) ([#390](https://github.com/angular/components/pull/390)) |
+| [8aa0c470ec](https://github.com/angular/components/commit/8aa0c470ecfd4487f55ce862ef1578ab691d7a7e) | fix | drag and drop examples not working ([#522](https://github.com/angular/components/pull/522)) |
+| [dd9bae60c7](https://github.com/angular/components/commit/dd9bae60c7ffcdf102841f33b09e524458948bba) | fix | fix dialogs not working [#5899](https://github.com/angular/components/pull/5899) [#228](https://github.com/angular/components/pull/228) [#8750](https://github.com/angular/components/pull/8750) ([#356](https://github.com/angular/components/pull/356)) |
+| [b429de4469](https://github.com/angular/components/commit/b429de4469f327194c82455b0e562ed89babbf0a) | fix | fix svg path getting extra /app ([#400](https://github.com/angular/components/pull/400)) |
+| [39284a20e7](https://github.com/angular/components/commit/39284a20e72ba7e5576a19ddd5a6f777944c816c) | fix | update angular dependencies for stackblitz to latest ([#386](https://github.com/angular/components/pull/386)) |
+### styling
+| Commit | Type | Description |
+| -- | -- | -- |
+| [08082232dd](https://github.com/angular/components/commit/08082232ddea9c0abfc5c6c354621cfe32a6a187) | fix | example tabs should not be styled ([#126](https://github.com/angular/components/pull/126)) |
+### svg
+| Commit | Type | Description |
+| -- | -- | -- |
+| [55e601763a](https://github.com/angular/components/commit/55e601763aa9afd26b9b0c6500ad01be1021b7c3) | fix | add missed spaces |
+| [d624c2043c](https://github.com/angular/components/commit/d624c2043c8a1e38c10aca0010cee902ea1485bb) | fix | add stroke class |
+| [ae0ce75975](https://github.com/angular/components/commit/ae0ce7597535526bdef4900d014683c0249e6cd9) | fix | combine multiple classes in one node |
+### sw
+| Commit | Type | Description |
+| -- | -- | -- |
+| [824919f0d7](https://github.com/angular/components/commit/824919f0d7957b8a561bb6a08a5812da93dbdaa5) | feat | adds ngsw config ([#350](https://github.com/angular/components/pull/350)) |
+### table
+| Commit | Type | Description |
+| -- | -- | -- |
+| [0a75308bcf](https://github.com/angular/components/commit/0a75308bcf3fc3aafa4ca4c592faf2345650ad34) | fix | http example needs httpclientmodule ([#352](https://github.com/angular/components/pull/352)) |
+### tests
+| Commit | Type | Description |
+| -- | -- | -- |
+| [c9d7e6f7ea](https://github.com/angular/components/commit/c9d7e6f7ea323f57a42741cf8a29d6d36a97244f) | fix | fix units tests throughout app ([#411](https://github.com/angular/components/pull/411)) |
+| [5a1750fee4](https://github.com/angular/components/commit/5a1750fee4c1447d1f15acbb89ce4098dd583847) | fix | remove hammerjs from tests |
+### toc
+| Commit | Type | Description |
+| -- | -- | -- |
+| [69c5224a4f](https://github.com/angular/components/commit/69c5224a4fb73579103294f6fe5d739f8bd104be) | feat | add table of contents to overview and guides ([#230](https://github.com/angular/components/pull/230)) |
+| [250fcc47b1](https://github.com/angular/components/commit/250fcc47b163f4fef8dd66b41f987ba809bcf184) | fix | highlight wrong item on jump [#256](https://github.com/angular/components/pull/256) ([#258](https://github.com/angular/components/pull/258)) |
+| [27c26d7d06](https://github.com/angular/components/commit/27c26d7d0692736fa3ec701001864a8df4824e40) | fix | quickly switching to API tab can throw exceptions ([#913](https://github.com/angular/components/pull/913)) |
+| [d2db6d7eb6](https://github.com/angular/components/commit/d2db6d7eb63c22c68069b63b367ad6da55a363f8) | fix | visibility on resizing |
+### tree
+| Commit | Type | Description |
+| -- | -- | -- |
+| [a1844e2c6f](https://github.com/angular/components/commit/a1844e2c6f59429e5798be1fa7931211aa8079e1) | fix | add CdkTreeModule to demo module ([#466](https://github.com/angular/components/pull/466)) |
 
 <!-- CHANGELOG SPLIT MARKER -->
 
@@ -50,57 +422,6 @@
 
 <!-- CHANGELOG SPLIT MARKER -->
 
-<a name="19.1.0-next.3"></a>
-# 19.1.0-next.3 "cotton-curtains" (2024-12-18)
-### cdk
-| Commit | Type | Description |
-| -- | -- | -- |
-| [62a672af0d](https://github.com/angular/components/commit/62a672af0d6cb2195633a1cbf6c39472104767f9) | feat | **dialog:** expose cdk dialog docs ([#1144](https://github.com/angular/components/pull/1144)) |
-| [a0a16fc70e](https://github.com/angular/components/commit/a0a16fc70e1fed7fbb9177c83cf3f670022a321a) | feat | **menu:** expose cdk menu docs ([#1142](https://github.com/angular/components/pull/1142)) |
-| [a141c22e99](https://github.com/angular/components/commit/a141c22e99467174225f74b6ccac730df92c46c8) | fix | **drag-drop:** resolve projected handles |
-| [454d9f9c09](https://github.com/angular/components/commit/454d9f9c0937e9e70d018be13a7f452bec776620) | fix | **drag-drop:** stop dragging on touchcancel ([#30184](https://github.com/angular/components/pull/30184)) |
-| [d34d2a2ca3](https://github.com/angular/components/commit/d34d2a2ca33834a18ca169040f2d81e353c355c5) | fix | **testing:** add code to keyboard events ([#30188](https://github.com/angular/components/pull/30188)) |
-### material
-| Commit | Type | Description |
-| -- | -- | -- |
-| [057ed370aa](https://github.com/angular/components/commit/057ed370aa1e5ec5c5ffde535d536a19c327e8ef) | fix | **api-theme:** fix nav items hover/focus contrast ([#1004](https://github.com/angular/components/pull/1004)) |
-| [3163040850](https://github.com/angular/components/commit/3163040850fbb23959dd3ef97de2242e779d5de3) | fix | **docs:** change twitter logo ([#1245](https://github.com/angular/components/pull/1245)) |
-| [4697d8e180](https://github.com/angular/components/commit/4697d8e18046540ed7b632bc8c94c74d980d7e02) | fix | **list:** enable MacOS select all with command+a ([#30183](https://github.com/angular/components/pull/30183)) |
-| [4620df14f7](https://github.com/angular/components/commit/4620df14f77d807fe444a11045e61e8de28b4c9b) | fix | **menu:** remove dependency on animations module ([#30163](https://github.com/angular/components/pull/30163)) |
-| [c12b73ee66](https://github.com/angular/components/commit/c12b73ee6648723fb900607ff8c8095163957e92) | fix | **table:** improve filter predicate efficiency ([#30172](https://github.com/angular/components/pull/30172)) |
-| [04a7652dca](https://github.com/angular/components/commit/04a7652dcaeffa36d27cb9f61d04bd9772fcab09) | fix | **table:** set border none for header cells on last row ([#30193](https://github.com/angular/components/pull/30193)) |
-| [a0b5546111](https://github.com/angular/components/commit/a0b5546111a2d28e45e1bc031c0a1b1edc109c23) | fix | **theme:** unselected theme picker |
-| [b924e869c5](https://github.com/angular/components/commit/b924e869c548850caf9d511a5fa56ab402d435bb) | fix | **theming:** fix not found error in the guide duplicate theming styles document ([#30108](https://github.com/angular/components/pull/30108)) |
-| [c04f84fd3b](https://github.com/angular/components/commit/c04f84fd3b81dbf5e1e76304845f51d16f365ab3) | fix | **tooltip:** body line height affecting gap ([#30164](https://github.com/angular/components/pull/30164)) |
-### cdk-experimental
-| Commit | Type | Description |
-| -- | -- | -- |
-| [50d906b3e3](https://github.com/angular/components/commit/50d906b3e3bb841917bafc05bc65ae7c01a57705) | fix | **column-resize:** Previous size was being sent for persistance rather than newly updated size in non-live resize mode. ([#30161](https://github.com/angular/components/pull/30161)) |
-
-<!-- CHANGELOG SPLIT MARKER -->
-
-<a name="19.1.0-next.2"></a>
-# 19.1.0-next.2 "rhodium-rhubarb" (2024-12-11)
-### material
-| Commit | Type | Description |
-| -- | -- | -- |
-| [aafa151e78](https://github.com/angular/components/commit/aafa151e78994a70d7e4509e49e040412fd5adf3) | fix | **expansion:** switch away from animations module ([#30119](https://github.com/angular/components/pull/30119)) |
-| [77393153fd](https://github.com/angular/components/commit/77393153fd4f6acad65fad6b8f0eefeb8dcd4b06) | fix | **menu:** decouple menu lifecycle from animations ([#30148](https://github.com/angular/components/pull/30148)) |
-| [8d3bca5eb0](https://github.com/angular/components/commit/8d3bca5eb0cc304075c85aa56ecdd6785e7e2a2d) | fix | **paginator:** ignore clicks on disabled buttons ([#30138](https://github.com/angular/components/pull/30138)) |
-| [02967137f3](https://github.com/angular/components/commit/02967137f3aba759811e81bc7be5acc6cc6ebc6d) | fix | **select:** add opt-in input that allows selection of nullable options ([#30142](https://github.com/angular/components/pull/30142)) |
-| [f7d787b1e8](https://github.com/angular/components/commit/f7d787b1e8b770f571621d35d31889d1bc7892d3) | fix | **timepicker:** deserialize ControlValueAccessor values correctly ([#30149](https://github.com/angular/components/pull/30149)) |
-| [db8f6c0a9f](https://github.com/angular/components/commit/db8f6c0a9f3102056eead1197a6926a34cb89cbd) | fix | **timepicker:** disable toggle if timepicker is disabled ([#30137](https://github.com/angular/components/pull/30137)) |
-### cdk-experimental
-| Commit | Type | Description |
-| -- | -- | -- |
-| [75c8aa8767](https://github.com/angular/components/commit/75c8aa8767d1bb5e2e5f29ea0434a5876a2c5a21) | feat | **column-resize:** Support column size persistance hooks ([#30136](https://github.com/angular/components/pull/30136)) |
-### material-experimental
-| Commit | Type | Description |
-| -- | -- | -- |
-| [8685c01a92](https://github.com/angular/components/commit/8685c01a92e057b20d502e5163561391dcc7fb21) | feat | **column-resize:** Add support for "lazy" rather than live updating during resizing. ([#30120](https://github.com/angular/components/pull/30120)) |
-
-<!-- CHANGELOG SPLIT MARKER -->
-
 <a name="19.0.3"></a>
 # 19.0.3 "polonium-popsicle" (2024-12-11)
 ### material
@@ -115,33 +436,6 @@
 
 <!-- CHANGELOG SPLIT MARKER -->
 
-<a name="19.1.0-next.1"></a>
-# 19.1.0-next.1 "plastic-monkey" (2024-12-04)
-### cdk
-| Commit | Type | Description |
-| -- | -- | -- |
-| [de6c491892](https://github.com/angular/components/commit/de6c49189254289ebe5a1a51c7cb1f432c2e77c5) | fix | **accordion:** improve accessibility in example code ([#30087](https://github.com/angular/components/pull/30087)) |
-| [85d26391e4](https://github.com/angular/components/commit/85d26391e4a3ea7228b7d5104c697ac9ab4d40d8) | fix | **menu:** disable flexible dimensions ([#30086](https://github.com/angular/components/pull/30086)) |
-### material
-| Commit | Type | Description |
-| -- | -- | -- |
-| [f0a767ca0f](https://github.com/angular/components/commit/f0a767ca0f5497670d61f5f0bd28159333840a1e) | fix | **button-toggle:** unable to tab into ngModel-based group on first render ([#30103](https://github.com/angular/components/pull/30103)) |
-| [6962c85837](https://github.com/angular/components/commit/6962c858378b52e0a90f7e2cada0f71c297840ed) | fix | **core:** optgroup label color not inferred correctly ([#30085](https://github.com/angular/components/pull/30085)) |
-| [4ef3baaf08](https://github.com/angular/components/commit/4ef3baaf088420f5eef9961c9df75bd4f24c04d4) | fix | **schematics:** avoid parsing stylesheets that don't include Material |
-| [c89192639c](https://github.com/angular/components/commit/c89192639c7917f560d06024c702debc4af1d2cf) | fix | **schematics:** error if stylesheet contains syntax errors |
-| [a08eeebf6b](https://github.com/angular/components/commit/a08eeebf6b334e00a491496829e3838d0616258a) | fix | **sort:** simplify animations ([#30057](https://github.com/angular/components/pull/30057)) |
-| [a028b5d842](https://github.com/angular/components/commit/a028b5d8421f1e0094381f30c37f8ec3c02e2c46) | fix | **tabs:** ink bar not showing when same tab is re-selected ([#30121](https://github.com/angular/components/pull/30121)) |
-### youtube-player
-| Commit | Type | Description |
-| -- | -- | -- |
-| [8a55d9a09e](https://github.com/angular/components/commit/8a55d9a09e35130f07bf63f9dbdff440434a1f33) | fix | update to latest typings ([#30126](https://github.com/angular/components/pull/30126)) |
-### docs
-| Commit | Type | Description |
-| -- | -- | -- |
-| [d7fc560140](https://github.com/angular/components/commit/d7fc5601405f83e5418121382b7647d4dcc7793c) | fix | add example for adding icon in meta section using matListI… ([#30068](https://github.com/angular/components/pull/30068)) |
-
-<!-- CHANGELOG SPLIT MARKER -->
-
 <a name="19.0.2"></a>
 # 19.0.2 "plastic-rhino" (2024-12-04)
 ### cdk
@@ -165,19 +459,6 @@
 
 <!-- CHANGELOG SPLIT MARKER -->
 
-<a name="19.1.0-next.0"></a>
-# 19.1.0-next.0 "hassium-ham" (2024-11-27)
-### material
-| Commit | Type | Description |
-| -- | -- | -- |
-| [f47f5f9a1](https://github.com/angular/components/commit/f47f5f9a1ed294ecd8d1dac5dee3019a80a932d6) | feat | **schematics:** Add CSS output to custom theme schematic ([#30004](https://github.com/angular/components/pull/30004)) |
-### multiple
-| Commit | Type | Description |
-| -- | -- | -- |
-| [3a7724e95](https://github.com/angular/components/commit/3a7724e9580c64dd4a9f4d3eb7b3cad2182cea2f) | fix | remove webkit-overflow-scrolling ([#30003](https://github.com/angular/components/pull/30003)) |
-
-<!-- CHANGELOG SPLIT MARKER -->
-
 <a name="19.0.1"></a>
 # 19.0.1 "mercury-mailbox" (2024-11-27)
 ### material
diff --git a/package.json b/package.json
index 1a5fad3d3804..0d49aaf81b03 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.0-rc.0",
+  "version": "19.1.0",
   "dependencies": {
     "@angular/animations": "^19.1.0-rc.0",
     "@angular/common": "^19.1.0-rc.0",

From db3895cf15dde15e613010aafc9d68f51c7cefe6 Mon Sep 17 00:00:00 2001
From: Miles Malerba <mmalerba@google.com>
Date: Fri, 17 Jan 2025 15:47:46 -0500
Subject: [PATCH 19/91] fix(material/chips): fix chip blur timing (#30347)

(cherry picked from commit 7c9c898faac8daac1bbb20a0807168a74360760d)
---
 src/material/chips/chip.ts | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/material/chips/chip.ts b/src/material/chips/chip.ts
index e1eecfaef157..779c1c55916f 100644
--- a/src/material/chips/chip.ts
+++ b/src/material/chips/chip.ts
@@ -6,8 +6,9 @@
  * found in the LICENSE file at https://angular.dev/license
  */
 
-import {_IdGenerator, FocusMonitor} from '@angular/cdk/a11y';
+import {FocusMonitor, _IdGenerator} from '@angular/cdk/a11y';
 import {BACKSPACE, DELETE} from '@angular/cdk/keycodes';
+import {_CdkPrivateStyleLoader, _VisuallyHiddenLoader} from '@angular/cdk/private';
 import {DOCUMENT} from '@angular/common';
 import {
   ANIMATION_MODULE_TYPE,
@@ -30,21 +31,19 @@ import {
   QueryList,
   ViewChild,
   ViewEncapsulation,
-  afterNextRender,
   booleanAttribute,
   inject,
 } from '@angular/core';
 import {
-  _StructuralStylesLoader,
   MAT_RIPPLE_GLOBAL_OPTIONS,
   MatRippleLoader,
   RippleGlobalOptions,
+  _StructuralStylesLoader,
 } from '@angular/material/core';
 import {Subject, Subscription, merge} from 'rxjs';
 import {MatChipAction} from './chip-action';
 import {MatChipAvatar, MatChipRemove, MatChipTrailingIcon} from './chip-icons';
 import {MAT_CHIP, MAT_CHIP_AVATAR, MAT_CHIP_REMOVE, MAT_CHIP_TRAILING_ICON} from './tokens';
-import {_CdkPrivateStyleLoader, _VisuallyHiddenLoader} from '@angular/cdk/private';
 
 /** Represents an event fired on an individual `mat-chip`. */
 export interface MatChipEvent {
@@ -391,11 +390,10 @@ export class MatChip implements OnInit, AfterViewInit, AfterContentInit, DoCheck
         } else {
           // When animations are enabled, Angular may end up removing the chip from the DOM a little
           // earlier than usual, causing it to be blurred and throwing off the logic in the chip list
-          // that moves focus not the next item. To work around the issue, we defer marking the chip
+          // that moves focus to the next item. To work around the issue, we defer marking the chip
           // as not focused until after the next render.
-          afterNextRender(() => this._ngZone.run(() => this._onBlur.next({chip: this})), {
-            injector: this._injector,
-          });
+          this._changeDetectorRef.markForCheck();
+          setTimeout(() => this._ngZone.run(() => this._onBlur.next({chip: this})));
         }
       }
     });

From 5c44216415186ddfd55cd1cb93951ccd9f70b537 Mon Sep 17 00:00:00 2001
From: Miles Malerba <mmalerba@google.com>
Date: Fri, 17 Jan 2025 16:01:31 -0500
Subject: [PATCH 20/91] fix(material/autocomplete): fix initial render logic
 (#30348)

(cherry picked from commit 12b767111e1fc3c01867cacc02ad73e0aec81fed)
---
 src/material/autocomplete/autocomplete-trigger.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/material/autocomplete/autocomplete-trigger.ts b/src/material/autocomplete/autocomplete-trigger.ts
index 03c43eed53c2..287bd8c4e835 100644
--- a/src/material/autocomplete/autocomplete-trigger.ts
+++ b/src/material/autocomplete/autocomplete-trigger.ts
@@ -28,8 +28,8 @@ import {
   ChangeDetectorRef,
   Directive,
   ElementRef,
+  EnvironmentInjector,
   InjectionToken,
-  Injector,
   Input,
   NgZone,
   OnChanges,
@@ -131,7 +131,7 @@ export const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {
 export class MatAutocompleteTrigger
   implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy
 {
-  private _injector = inject(Injector);
+  private _environmentInjector = inject(EnvironmentInjector);
   private _element = inject<ElementRef<HTMLInputElement>>(ElementRef);
   private _overlay = inject(Overlay);
   private _viewContainerRef = inject(ViewContainerRef);
@@ -609,7 +609,7 @@ export class MatAutocompleteTrigger
         () => {
           subscriber.next();
         },
-        {injector: this._injector},
+        {injector: this._environmentInjector},
       );
     });
     const optionChanges = this.autocomplete.options.changes.pipe(

From 09d7476d9a1ee10a4a6e453507eb0c0bc776f3c5 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 20 Jan 2025 06:57:58 +0100
Subject: [PATCH 21/91] fix(material/expansion): inherit shape for focus
 indicator (#30352)

Fixes that the focus indicator had a different shape from the header.

Fixes #30350.

(cherry picked from commit d52c329064b4f305688f9957c46223e3de5ed710)
---
 src/material/expansion/expansion-panel-header.scss | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/material/expansion/expansion-panel-header.scss b/src/material/expansion/expansion-panel-header.scss
index b7e13692092a..976fb620ff7f 100644
--- a/src/material/expansion/expansion-panel-header.scss
+++ b/src/material/expansion/expansion-panel-header.scss
@@ -14,6 +14,11 @@
     transition: height expansion-variables.$header-transition;
   }
 
+  // Ensures that the focus indicator has the same shape as the header.
+  &::before {
+    border-radius: inherit;
+  }
+
   @include token-utils.use-tokens(
     tokens-mat-expansion.$prefix, tokens-mat-expansion.get-token-slots()) {
     @include token-utils.create-token-slot(height, header-collapsed-state-height);

From 380fd1dfa03a05ab13d92e742eed563037d40e97 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 21 Jan 2025 13:53:12 +0100
Subject: [PATCH 22/91] fix(cdk/text-field): clear cached line height on resize
 (#30355)

Clears the cached heights in the autosize directive when the window is resized since they may change.

(cherry picked from commit 48117e7a8d61e631347fa1a90a3e57eb95dc24b2)
---
 src/cdk/text-field/autosize.ts | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/cdk/text-field/autosize.ts b/src/cdk/text-field/autosize.ts
index 4fa07298de84..029c54142323 100644
--- a/src/cdk/text-field/autosize.ts
+++ b/src/cdk/text-field/autosize.ts
@@ -114,7 +114,7 @@ export class CdkTextareaAutosize implements AfterViewInit, DoCheck, OnDestroy {
   }
 
   /** Cached height of a textarea with a single row. */
-  private _cachedLineHeight: number;
+  private _cachedLineHeight?: number;
   /** Cached height of a textarea with only the placeholder. */
   private _cachedPlaceholderHeight?: number;
 
@@ -165,7 +165,12 @@ export class CdkTextareaAutosize implements AfterViewInit, DoCheck, OnDestroy {
           this._renderer.listen(this._textareaElement, 'focus', this._handleFocusEvent),
           this._renderer.listen(this._textareaElement, 'blur', this._handleFocusEvent),
         ];
-        this._resizeEvents.pipe(auditTime(16)).subscribe(() => this.resizeToFitContent(true));
+        this._resizeEvents.pipe(auditTime(16)).subscribe(() => {
+          // Clear the cached heights since the styles can change
+          // when the window is resized (e.g. by media queries).
+          this._cachedLineHeight = this._cachedPlaceholderHeight = undefined;
+          this.resizeToFitContent(true);
+        });
       });
 
       this._isViewInited = true;

From 0b9c0404972ac45140f2e36be1f8c073420aee2f Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@abv.bg>
Date: Wed, 22 Jan 2025 16:57:04 +0100
Subject: [PATCH 23/91] release: cut the v19.1.1 release

---
 CHANGELOG.md | 15 +++++++++++++++
 package.json |  2 +-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4653e2cb0733..2e77a587316f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,18 @@
+<a name="19.1.1"></a>
+# 19.1.1 "lanthanum-labrador" (2025-01-22)
+### cdk
+| Commit | Type | Description |
+| -- | -- | -- |
+| [380fd1dfa](https://github.com/angular/components/commit/380fd1dfa03a05ab13d92e742eed563037d40e97) | fix | **text-field:** clear cached line height on resize ([#30355](https://github.com/angular/components/pull/30355)) |
+### material
+| Commit | Type | Description |
+| -- | -- | -- |
+| [5c4421641](https://github.com/angular/components/commit/5c44216415186ddfd55cd1cb93951ccd9f70b537) | fix | **autocomplete:** fix initial render logic ([#30348](https://github.com/angular/components/pull/30348)) |
+| [db3895cf1](https://github.com/angular/components/commit/db3895cf15dde15e613010aafc9d68f51c7cefe6) | fix | **chips:** fix chip blur timing ([#30347](https://github.com/angular/components/pull/30347)) |
+| [09d7476d9](https://github.com/angular/components/commit/09d7476d9a1ee10a4a6e453507eb0c0bc776f3c5) | fix | **expansion:** inherit shape for focus indicator ([#30352](https://github.com/angular/components/pull/30352)) |
+
+<!-- CHANGELOG SPLIT MARKER -->
+
 <a name="19.1.0"></a>
 # 19.1.0 "denim-firefly" (2025-01-16)
 ### cdk
diff --git a/package.json b/package.json
index 0d49aaf81b03..ddfc2fd3b4db 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.0",
+  "version": "19.1.1",
   "dependencies": {
     "@angular/animations": "^19.1.0-rc.0",
     "@angular/common": "^19.1.0-rc.0",

From d13f0de2af6051123fe6ec08709ff76719df6993 Mon Sep 17 00:00:00 2001
From: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date: Wed, 22 Jan 2025 18:02:17 +0100
Subject: [PATCH 24/91] build: initial attempt to fix docs site deployment
 (#30372)

This fixes a few issues:

- uses the monorepo checked-in docs sources for deployment of >=v19
- properly installs dependencies for that repository, avoiding
  mismatches with the checked-in yarn of the monorepo root.
- avoids sandbox when launching puppeteer for audits

(cherry picked from commit 7c57f82cd928a8f594c9471a0809257d921b9c04)
---
 .../tools/lighthouse-audit.mjs                |  14 +-
 package.json                                  |   2 +-
 scripts/docs-deploy/clone-docs-repo.mts       |   6 +
 scripts/docs-deploy/docs-deps-install.mts     |   8 +-
 yarn.lock                                     | 579 +++++++++++++++++-
 5 files changed, 570 insertions(+), 39 deletions(-)

diff --git a/material.angular.io/tools/lighthouse-audit.mjs b/material.angular.io/tools/lighthouse-audit.mjs
index 241619adca29..702ade5ef3f1 100644
--- a/material.angular.io/tools/lighthouse-audit.mjs
+++ b/material.angular.io/tools/lighthouse-audit.mjs
@@ -111,7 +111,9 @@ async function _main(args) {
       onError('Lighthouse failed to return any results.');
     }
     const success = await processResults(results, minScores, logFile);
-    console.log(`\nCompleted audit of ${url} in ${((Date.now() - startTime) / 1000).toFixed(1)}s\n`);
+    console.log(
+      `\nCompleted audit of ${url} in ${((Date.now() - startTime) / 1000).toFixed(1)}s\n`,
+    );
 
     if (!success) {
       onError('One or more scores are below the minimum required.');
@@ -191,12 +193,12 @@ function parseInput(args) {
   if (unknownCategories.length > 0) {
     onError(
       `Invalid arguments: <min-scores> contains unknown category(-ies): ${unknownCategories.join(
-        ', '
-      )}`
+        ', ',
+      )}`,
     );
   } else if (!allValuesValid) {
     onError(
-      `Invalid arguments: <min-scores> has non-numeric or out-of-range values: ${minScoresRaw}`
+      `Invalid arguments: <min-scores> has non-numeric or out-of-range values: ${minScoresRaw}`,
     );
   }
 
@@ -232,7 +234,7 @@ function parseMinScores(raw) {
 
   if (minScores.hasOwnProperty('all')) {
     AUDIT_CATEGORIES.forEach(
-      cat => minScores.hasOwnProperty(cat) || (minScores[cat] = minScores.all)
+      cat => minScores.hasOwnProperty(cat) || (minScores[cat] = minScores.all),
     );
     delete minScores.all;
   }
@@ -273,7 +275,7 @@ async function processResults(results, minScores, logFile) {
       console.log(
         `  - ${paddedTitle}  ${formatScore(score)}  (Required: ${formatScore(minScore)})  ${
           passed ? 'OK' : 'FAILED'
-        }`
+        }`,
       );
 
       return aggr && passed;
diff --git a/package.json b/package.json
index ddfc2fd3b4db..ad5bdeb69c1e 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
     "@angular/cli": "^19.1.0-rc.0",
     "@angular/compiler-cli": "^19.1.0-rc.0",
     "@angular/localize": "^19.1.0-rc.0",
-    "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#36946be4df61f6549ae3829c026022e47674eae2",
+    "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1fa3a08b6a111de820da092799319ed47c058849",
     "@angular/platform-browser-dynamic": "^19.1.0-rc.0",
     "@angular/platform-server": "^19.1.0-rc.0",
     "@angular/router": "^19.1.0-rc.0",
diff --git a/scripts/docs-deploy/clone-docs-repo.mts b/scripts/docs-deploy/clone-docs-repo.mts
index 89b46d63bfa9..ed0055c9acaf 100644
--- a/scripts/docs-deploy/clone-docs-repo.mts
+++ b/scripts/docs-deploy/clone-docs-repo.mts
@@ -13,7 +13,13 @@ export const docsRepoUrl = 'https://github.com/angular/material.angular.io.git';
  *
  * @returns An absolute path to the temporary directory.
  */
+// TODO: Remove this function as it shouldn't be needed long term.
 export async function cloneDocsRepositoryForMajor(major: number): Promise<string> {
+  // As for v19, we use the checked-in code inside the monorepo.
+  if (major >= 19) {
+    return path.join(projectDir, 'material.angular.io');
+  }
+
   const repoTmpDir = path.join(projectDir, 'tmp/docs-repo');
   const baseCloneArgs = [docsRepoUrl, repoTmpDir, '--single-branch', '--depth=1'];
   const majorDocsBranchName = getDocsBranchNameForMajor(major);
diff --git a/scripts/docs-deploy/docs-deps-install.mts b/scripts/docs-deploy/docs-deps-install.mts
index cbfc7d9fa838..1a710c713796 100644
--- a/scripts/docs-deploy/docs-deps-install.mts
+++ b/scripts/docs-deploy/docs-deps-install.mts
@@ -1,4 +1,5 @@
-import {$} from 'zx';
+import {$, cd} from 'zx';
+import {resolveYarnScriptForProject} from '@angular/ng-dev';
 
 export interface InstallOptions {
   /** Whether dependencies should be installed with the lockfile being frozen. */
@@ -10,11 +11,12 @@ export async function installDepsForDocsSite(
   repoDirPath: string,
   options: InstallOptions = {frozenLockfile: true},
 ) {
+  const yarnBin = await resolveYarnScriptForProject(repoDirPath);
   const additionalArgs = [];
 
   if (options.frozenLockfile) {
-    additionalArgs.push('--frozen-lockfile');
+    additionalArgs.push(yarnBin.legacy ? '--frozen-lock-file' : '--immutable');
   }
 
-  await $`yarn --cwd ${repoDirPath} install ${additionalArgs}`;
+  await $`${yarnBin.binary} ${yarnBin.args} --cwd ${repoDirPath} install ${additionalArgs}`;
 }
diff --git a/yarn.lock b/yarn.lock
index d5aa53699896..3e41dc482211 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -346,12 +346,21 @@
     fast-glob "3.3.3"
     yargs "^17.2.1"
 
-"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#36946be4df61f6549ae3829c026022e47674eae2":
-  version "0.0.0-804107deac3621184db54fab3e7cfe7f735a0d74"
-  resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#36946be4df61f6549ae3829c026022e47674eae2"
-  dependencies:
+"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#1fa3a08b6a111de820da092799319ed47c058849":
+  version "0.0.0-fa81be50e9a2ea7c9b68819ac5f69f4cc5ff7605"
+  resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1fa3a08b6a111de820da092799319ed47c058849"
+  dependencies:
+    "@google-cloud/spanner" "7.17.1"
+    "@octokit/rest" "21.1.0"
+    "@types/semver" "^7.3.6"
+    "@types/supports-color" "^8.1.1"
     "@yarnpkg/lockfile" "^1.1.0"
+    chalk "^5.0.1"
+    semver "^7.5.4"
+    supports-color "10.0.0"
+    typed-graphqlify "^3.1.1"
     typescript "~4.9.0"
+    yaml "2.7.0"
 
 "@angular/platform-browser-dynamic@^19.1.0-rc.0":
   version "19.1.0-rc.0"
@@ -2107,6 +2116,21 @@
   resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f"
   integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==
 
+"@google-cloud/common@^5.0.0":
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-5.0.2.tgz#423ad94b125d44263cbed2b5eb1ce1d4d53dc038"
+  integrity sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==
+  dependencies:
+    "@google-cloud/projectify" "^4.0.0"
+    "@google-cloud/promisify" "^4.0.0"
+    arrify "^2.0.1"
+    duplexify "^4.1.1"
+    extend "^3.0.2"
+    google-auth-library "^9.0.0"
+    html-entities "^2.5.2"
+    retry-request "^7.0.0"
+    teeny-request "^9.0.0"
+
 "@google-cloud/paginator@^3.0.6":
   version "3.0.7"
   resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.7.tgz#fb6f8e24ec841f99defaebf62c75c2e744dd419b"
@@ -2120,16 +2144,31 @@
   resolved "https://registry.yarnpkg.com/@google-cloud/precise-date/-/precise-date-2.0.4.tgz#930b0cbf557ef3a4bfeeb121cfc6da341212a2cb"
   integrity sha512-nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==
 
+"@google-cloud/precise-date@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@google-cloud/precise-date/-/precise-date-4.0.0.tgz#e179893a3ad628b17a6fabdfcc9d468753aac11a"
+  integrity sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==
+
 "@google-cloud/projectify@^2.0.0":
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.1.1.tgz#ae6af4fee02d78d044ae434699a630f8df0084ef"
   integrity sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==
 
+"@google-cloud/projectify@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be"
+  integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==
+
 "@google-cloud/promisify@^2.0.0":
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.4.tgz#9d8705ecb2baa41b6b2673f3a8e9b7b7e1abc52a"
   integrity sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==
 
+"@google-cloud/promisify@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1"
+  integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==
+
 "@google-cloud/pubsub@^2.7.0":
   version "2.19.4"
   resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-2.19.4.tgz#6a52f2fe7458dc13064863024a4f9941567c0536"
@@ -2151,6 +2190,51 @@
     lodash.snakecase "^4.1.1"
     p-defer "^3.0.0"
 
+"@google-cloud/spanner@7.17.1":
+  version "7.17.1"
+  resolved "https://registry.yarnpkg.com/@google-cloud/spanner/-/spanner-7.17.1.tgz#1f8229efe07d9b62829c93837976b7028eeca4f0"
+  integrity sha512-+dTR6wvb2jANVxNe2bF048QCOVRGbesHe8Tm0OFRhvCgv3ot31JFGPyRKukD7y3jAFSBqyX0bIUV9GVNk4oRPQ==
+  dependencies:
+    "@google-cloud/common" "^5.0.0"
+    "@google-cloud/precise-date" "^4.0.0"
+    "@google-cloud/projectify" "^4.0.0"
+    "@google-cloud/promisify" "^4.0.0"
+    "@grpc/proto-loader" "^0.7.0"
+    "@opentelemetry/api" "^1.9.0"
+    "@opentelemetry/context-async-hooks" "^1.26.0"
+    "@opentelemetry/core" "^1.27.0"
+    "@opentelemetry/semantic-conventions" "^1.25.1"
+    "@types/big.js" "^6.0.0"
+    "@types/stack-trace" "0.0.33"
+    arrify "^2.0.0"
+    big.js "^6.0.0"
+    checkpoint-stream "^0.1.1"
+    duplexify "^4.1.1"
+    events-intercept "^2.0.0"
+    extend "^3.0.2"
+    google-auth-library "^9.0.0"
+    google-gax "4.4.1"
+    grpc-gcp "^1.0.0"
+    is "^3.2.1"
+    lodash.snakecase "^4.1.1"
+    merge-stream "^2.0.0"
+    p-queue "^6.0.2"
+    protobufjs "^7.0.0"
+    retry-request "^7.0.0"
+    split-array-stream "^2.0.0"
+    stack-trace "0.0.10"
+    stream-events "^1.0.4"
+    teeny-request "^9.0.0"
+    through2 "^4.0.0"
+
+"@grpc/grpc-js@^1.10.9", "@grpc/grpc-js@^1.7.0":
+  version "1.12.5"
+  resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.5.tgz#0064a28fe9b1ec54ac27e1c9bf70720aa01285e8"
+  integrity sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==
+  dependencies:
+    "@grpc/proto-loader" "^0.7.13"
+    "@js-sdsl/ordered-map" "^4.4.2"
+
 "@grpc/grpc-js@~1.6.0":
   version "1.6.12"
   resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.6.12.tgz#20f710d8a8c5c396b2ae9530ba6c06b984614fdf"
@@ -2170,7 +2254,7 @@
     protobufjs "^6.10.0"
     yargs "^16.2.0"
 
-"@grpc/proto-loader@^0.7.0":
+"@grpc/proto-loader@^0.7.0", "@grpc/proto-loader@^0.7.13":
   version "0.7.13"
   resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf"
   integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==
@@ -2402,6 +2486,11 @@
     "@jridgewell/resolve-uri" "^3.1.0"
     "@jridgewell/sourcemap-codec" "^1.4.14"
 
+"@js-sdsl/ordered-map@^4.4.2":
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
+  integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
+
 "@jsdevtools/ono@^7.1.3":
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
@@ -2863,6 +2952,11 @@
   dependencies:
     "@octokit/types" "^6.0.3"
 
+"@octokit/auth-token@^5.0.0":
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07"
+  integrity sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==
+
 "@octokit/core@^3.2.3":
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085"
@@ -2876,6 +2970,27 @@
     before-after-hook "^2.2.0"
     universal-user-agent "^6.0.0"
 
+"@octokit/core@^6.1.3":
+  version "6.1.3"
+  resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.3.tgz#280d3bb66c702297baac0a202219dd66611286e4"
+  integrity sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==
+  dependencies:
+    "@octokit/auth-token" "^5.0.0"
+    "@octokit/graphql" "^8.1.2"
+    "@octokit/request" "^9.1.4"
+    "@octokit/request-error" "^6.1.6"
+    "@octokit/types" "^13.6.2"
+    before-after-hook "^3.0.2"
+    universal-user-agent "^7.0.0"
+
+"@octokit/endpoint@^10.0.0":
+  version "10.1.2"
+  resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.2.tgz#d38e727e2a64287114fdaa1eb9cd7c81c09460df"
+  integrity sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==
+  dependencies:
+    "@octokit/types" "^13.6.2"
+    universal-user-agent "^7.0.2"
+
 "@octokit/endpoint@^6.0.1":
   version "6.0.12"
   resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658"
@@ -2894,11 +3009,32 @@
     "@octokit/types" "^6.0.3"
     universal-user-agent "^6.0.0"
 
+"@octokit/graphql@^8.1.2":
+  version "8.1.2"
+  resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.1.2.tgz#98b9072b22e0471b782d52ed0da08e2b2de52b17"
+  integrity sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==
+  dependencies:
+    "@octokit/request" "^9.1.4"
+    "@octokit/types" "^13.6.2"
+    universal-user-agent "^7.0.0"
+
 "@octokit/openapi-types@^12.11.0":
   version "12.11.0"
   resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0"
   integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==
 
+"@octokit/openapi-types@^23.0.1":
+  version "23.0.1"
+  resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-23.0.1.tgz#3721646ecd36b596ddb12650e0e89d3ebb2dd50e"
+  integrity sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==
+
+"@octokit/plugin-paginate-rest@^11.4.0":
+  version "11.4.0"
+  resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.0.tgz#a9c3347113d793e48a014f0aa549eada00de7c9a"
+  integrity sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g==
+  dependencies:
+    "@octokit/types" "^13.7.0"
+
 "@octokit/plugin-paginate-rest@^2.6.2":
   version "2.21.3"
   resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e"
@@ -2911,6 +3047,11 @@
   resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"
   integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==
 
+"@octokit/plugin-request-log@^5.3.1":
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz#ccb75d9705de769b2aa82bcd105cc96eb0c00f69"
+  integrity sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==
+
 "@octokit/plugin-rest-endpoint-methods@4.13.5":
   version "4.13.5"
   resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.13.5.tgz#ad76285b82fe05fbb4adf2774a9c887f3534a880"
@@ -2919,6 +3060,13 @@
     "@octokit/types" "^6.12.2"
     deprecation "^2.3.1"
 
+"@octokit/plugin-rest-endpoint-methods@^13.3.0":
+  version "13.3.0"
+  resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.0.tgz#ee18b9d6364bbae1d86e960d5576b555b41d2079"
+  integrity sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==
+  dependencies:
+    "@octokit/types" "^13.7.0"
+
 "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0":
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677"
@@ -2928,6 +3076,13 @@
     deprecation "^2.0.0"
     once "^1.4.0"
 
+"@octokit/request-error@^6.0.1", "@octokit/request-error@^6.1.6":
+  version "6.1.6"
+  resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.6.tgz#5f42c7894e7c3ab47c63aa3241f78cee8a826644"
+  integrity sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==
+  dependencies:
+    "@octokit/types" "^13.6.2"
+
 "@octokit/request@^5.6.0", "@octokit/request@^5.6.3":
   version "5.6.3"
   resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0"
@@ -2940,6 +3095,17 @@
     node-fetch "^2.6.7"
     universal-user-agent "^6.0.0"
 
+"@octokit/request@^9.1.4":
+  version "9.2.0"
+  resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.2.0.tgz#21aa1e72ff645f5b99ccf4a590cc33c4578bb356"
+  integrity sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw==
+  dependencies:
+    "@octokit/endpoint" "^10.0.0"
+    "@octokit/request-error" "^6.0.1"
+    "@octokit/types" "^13.6.2"
+    fast-content-type-parse "^2.0.0"
+    universal-user-agent "^7.0.2"
+
 "@octokit/rest@18.3.5":
   version "18.3.5"
   resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.3.5.tgz#a89903d46e0b4273bd3234674ec2777a651d68ab"
@@ -2950,6 +3116,23 @@
     "@octokit/plugin-request-log" "^1.0.2"
     "@octokit/plugin-rest-endpoint-methods" "4.13.5"
 
+"@octokit/rest@21.1.0":
+  version "21.1.0"
+  resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-21.1.0.tgz#adbd3eca32a686e3d24e7840a58270e030267a1f"
+  integrity sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ==
+  dependencies:
+    "@octokit/core" "^6.1.3"
+    "@octokit/plugin-paginate-rest" "^11.4.0"
+    "@octokit/plugin-request-log" "^5.3.1"
+    "@octokit/plugin-rest-endpoint-methods" "^13.3.0"
+
+"@octokit/types@^13.6.2", "@octokit/types@^13.7.0":
+  version "13.7.0"
+  resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.7.0.tgz#22d0e26a8c9f53599bfb907213d8ccde547f36aa"
+  integrity sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==
+  dependencies:
+    "@octokit/openapi-types" "^23.0.1"
+
 "@octokit/types@^6.0.3", "@octokit/types@^6.12.2", "@octokit/types@^6.16.1", "@octokit/types@^6.40.0":
   version "6.41.0"
   resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04"
@@ -2957,11 +3140,28 @@
   dependencies:
     "@octokit/openapi-types" "^12.11.0"
 
-"@opentelemetry/api@^1.0.0":
+"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.9.0":
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe"
   integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
 
+"@opentelemetry/context-async-hooks@^1.26.0":
+  version "1.30.1"
+  resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz#4f76280691a742597fd0bf682982126857622948"
+  integrity sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==
+
+"@opentelemetry/core@^1.27.0":
+  version "1.30.1"
+  resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.30.1.tgz#a0b468bb396358df801881709ea38299fc30ab27"
+  integrity sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==
+  dependencies:
+    "@opentelemetry/semantic-conventions" "1.28.0"
+
+"@opentelemetry/semantic-conventions@1.28.0", "@opentelemetry/semantic-conventions@^1.25.1":
+  version "1.28.0"
+  resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6"
+  integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==
+
 "@opentelemetry/semantic-conventions@^1.0.0":
   version "1.25.1"
   resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz#0deecb386197c5e9c2c28f2f89f51fb8ae9f145e"
@@ -3566,6 +3766,11 @@
   resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
   integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
 
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
 "@tsconfig/node10@^1.0.7":
   version "1.0.11"
   resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"
@@ -3644,6 +3849,11 @@
   dependencies:
     "@babel/types" "^7.20.7"
 
+"@types/big.js@^6.0.0":
+  version "6.2.2"
+  resolved "https://registry.yarnpkg.com/@types/big.js/-/big.js-6.2.2.tgz#69422ec9ef59df1330ccfde2106d9e1159a083c3"
+  integrity sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==
+
 "@types/body-parser@*":
   version "1.19.5"
   resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
@@ -3669,6 +3879,11 @@
     "@types/serve-static" "*"
     chokidar "^3.0.0"
 
+"@types/caseless@*":
+  version "0.12.5"
+  resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5"
+  integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==
+
 "@types/connect-history-api-fallback@^1.5.4":
   version "1.5.4"
   resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3"
@@ -3696,7 +3911,7 @@
   dependencies:
     "@types/node" "*"
 
-"@types/duplexify@^3.6.0":
+"@types/duplexify@*", "@types/duplexify@^3.6.0":
   version "3.6.4"
   resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.4.tgz#aa7e916c33fcc05be8769546fd0441d9b368613e"
   integrity sha512-2eahVPsd+dy3CL6FugAzJcxoraWhUghZGEQJns1kTKfCXWKJ5iG/VkaB05wRVrDKHfOFKqb0X0kXh91eE99RZg==
@@ -3919,6 +4134,14 @@
   resolved "https://registry.yarnpkg.com/@types/ps-tree/-/ps-tree-1.1.6.tgz#fbb22dabe3d64b79295f37ce0afb7320a26ac9a6"
   integrity sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==
 
+"@types/pumpify@^1.4.1":
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/@types/pumpify/-/pumpify-1.4.4.tgz#2246750e9380a1f885bf43c58cb31ddbb280d4a7"
+  integrity sha512-+cWbQUecD04MQYkjNBhPmcUIP368aloYmqm+ImdMKA8rMpxRNAhZAD6gIj+sAVTF1DliqrT/qUp6aGNi/9U3tw==
+  dependencies:
+    "@types/duplexify" "*"
+    "@types/node" "*"
+
 "@types/q@^0.0.32":
   version "0.0.32"
   resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
@@ -3941,6 +4164,16 @@
   dependencies:
     "@types/node" "*"
 
+"@types/request@^2.48.8":
+  version "2.48.12"
+  resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.12.tgz#0f590f615a10f87da18e9790ac94c29ec4c5ef30"
+  integrity sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==
+  dependencies:
+    "@types/caseless" "*"
+    "@types/node" "*"
+    "@types/tough-cookie" "*"
+    form-data "^2.5.0"
+
 "@types/resolve@1.17.1":
   version "1.17.1"
   resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
@@ -3966,7 +4199,7 @@
     "@types/node" "*"
     "@types/ws" "*"
 
-"@types/semver@^7.3.9":
+"@types/semver@^7.3.6", "@types/semver@^7.3.9":
   version "7.5.8"
   resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
   integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
@@ -4010,11 +4243,26 @@
   dependencies:
     "@types/node" "*"
 
+"@types/stack-trace@0.0.33":
+  version "0.0.33"
+  resolved "https://registry.yarnpkg.com/@types/stack-trace/-/stack-trace-0.0.33.tgz#979a3fde9e721e78603b781e468ef30f0df0f049"
+  integrity sha512-O7in6531Bbvlb2KEsJ0dq0CHZvc3iWSR5ZYMtvGgnHA56VgriAN/AU2LorfmcvAl2xc9N5fbCTRyMRRl8nd74g==
+
+"@types/supports-color@^8.1.1":
+  version "8.1.3"
+  resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.3.tgz#b769cdce1d1bb1a3fa794e35b62c62acdf93c139"
+  integrity sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==
+
 "@types/tmp@^0.2.1":
   version "0.2.6"
   resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217"
   integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==
 
+"@types/tough-cookie@*":
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304"
+  integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==
+
 "@types/triple-beam@^1.3.2":
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c"
@@ -4667,7 +4915,7 @@ arrify@^1.0.0, arrify@^1.0.1:
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
   integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
 
-arrify@^2.0.0:
+arrify@^2.0.0, arrify@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
   integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
@@ -4740,7 +4988,7 @@ async@1.5.2, async@1.x, async@^1.3.0:
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
   integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==
 
-async@^2.6.0, async@^2.6.4:
+async@^2.4.0, async@^2.6.0, async@^2.6.4:
   version "2.6.4"
   resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
   integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
@@ -4923,6 +5171,11 @@ before-after-hook@^2.2.0:
   resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c"
   integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
 
+before-after-hook@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d"
+  integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==
+
 bent@~7.3.6:
   version "7.3.12"
   resolved "https://registry.yarnpkg.com/bent/-/bent-7.3.12.tgz#e0a2775d4425e7674c64b78b242af4f49da6b035"
@@ -4949,6 +5202,11 @@ big.js@^5.2.2:
   resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
   integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
 
+big.js@^6.0.0:
+  version "6.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.2.tgz#be3bb9ac834558b53b099deef2a1d06ac6368e1a"
+  integrity sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==
+
 bignumber.js@^9.0.0:
   version "9.1.2"
   resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c"
@@ -5591,6 +5849,17 @@ chardet@^0.7.0:
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
   integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
 
+checkpoint-stream@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/checkpoint-stream/-/checkpoint-stream-0.1.2.tgz#5e2359456e5df4f3ec34c62bf1573e07df6e5039"
+  integrity sha512-eYXIcydL3mPjjEVLxHdi1ISgTwmxGJZ8vyJ3lYVvFTDRyTOZMTbKZdRJqiA7Gi1rPcwOyyzcrZmGLL8ff7e69w==
+  dependencies:
+    "@types/pumpify" "^1.4.1"
+    events-intercept "^2.0.0"
+    pumpify "^1.3.5"
+    split-array-stream "^1.0.0"
+    through2 "^2.0.3"
+
 "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.0.2, chokidar@^3.4.1, chokidar@^3.5.1, chokidar@^3.6.0:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
@@ -6752,7 +7021,17 @@ duplexer@~0.1.1:
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
   integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
 
-duplexify@^4.0.0:
+duplexify@^3.6.0:
+  version "3.7.1"
+  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+  integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+  dependencies:
+    end-of-stream "^1.0.0"
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+    stream-shift "^1.0.0"
+
+duplexify@^4.0.0, duplexify@^4.1.1:
   version "4.1.3"
   resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f"
   integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==
@@ -6850,7 +7129,7 @@ encoding@^0.1.13:
   dependencies:
     iconv-lite "^0.6.2"
 
-end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
   version "1.4.4"
   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
   integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
@@ -7349,7 +7628,7 @@ event-target-shim@^5.0.0:
   resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
   integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
 
-eventemitter3@^4.0.0:
+eventemitter3@^4.0.0, eventemitter3@^4.0.4:
   version "4.0.7"
   resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
   integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
@@ -7359,6 +7638,11 @@ eventemitter3@^5.0.1:
   resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
   integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
 
+events-intercept@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/events-intercept/-/events-intercept-2.0.0.tgz#adbf38681c5a4b2011c41ee41f61a34cba448897"
+  integrity sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==
+
 events-listener@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/events-listener/-/events-listener-1.1.0.tgz#dd49b4628480eba58fde31b870ee346b3990b349"
@@ -7523,6 +7807,11 @@ eyes@0.1.x:
   resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
   integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==
 
+fast-content-type-parse@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz#c236124534ee2cb427c8d8e5ba35a4856947847b"
+  integrity sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==
+
 fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -7886,6 +8175,16 @@ forever-agent@~0.6.1:
   resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
   integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
 
+form-data@^2.5.0:
+  version "2.5.2"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2"
+  integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.6"
+    mime-types "^2.1.12"
+    safe-buffer "^5.2.1"
+
 form-data@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
@@ -8064,6 +8363,17 @@ gaxios@^4.0.0:
     is-stream "^2.0.0"
     node-fetch "^2.6.7"
 
+gaxios@^6.0.0, gaxios@^6.1.1:
+  version "6.7.1"
+  resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.1.tgz#ebd9f7093ede3ba502685e73390248bb5b7f71fb"
+  integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==
+  dependencies:
+    extend "^3.0.2"
+    https-proxy-agent "^7.0.1"
+    is-stream "^2.0.0"
+    node-fetch "^2.6.9"
+    uuid "^9.0.1"
+
 gcp-metadata@^4.2.0:
   version "4.3.1"
   resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.1.tgz#fb205fe6a90fef2fd9c85e6ba06e5559ee1eefa9"
@@ -8072,6 +8382,14 @@ gcp-metadata@^4.2.0:
     gaxios "^4.0.0"
     json-bigint "^1.0.0"
 
+gcp-metadata@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.0.tgz#9b0dd2b2445258e7597f2024332d20611cbd6b8c"
+  integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==
+  dependencies:
+    gaxios "^6.0.0"
+    json-bigint "^1.0.0"
+
 gensync@^1.0.0-beta.2:
   version "1.0.0-beta.2"
   resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -8348,6 +8666,18 @@ google-auth-library@^7.0.0, google-auth-library@^7.14.0:
     jws "^4.0.0"
     lru-cache "^6.0.0"
 
+google-auth-library@^9.0.0, google-auth-library@^9.3.0:
+  version "9.15.0"
+  resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.0.tgz#1b009c08557929c881d72f953f17e839e91b009b"
+  integrity sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==
+  dependencies:
+    base64-js "^1.3.0"
+    ecdsa-sig-formatter "^1.0.11"
+    gaxios "^6.1.1"
+    gcp-metadata "^6.1.0"
+    gtoken "^7.0.0"
+    jws "^4.0.0"
+
 google-gax@2.30.3:
   version "2.30.3"
   resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.30.3.tgz#5d2c227972d99d6a6cd77963c44d0575974e7b60"
@@ -8367,6 +8697,24 @@ google-gax@2.30.3:
     protobufjs "6.11.2"
     retry-request "^4.0.0"
 
+google-gax@4.4.1:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-4.4.1.tgz#95a9cf7ee7777ac22d1926a45b5f886dd8beecae"
+  integrity sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==
+  dependencies:
+    "@grpc/grpc-js" "^1.10.9"
+    "@grpc/proto-loader" "^0.7.13"
+    "@types/long" "^4.0.0"
+    abort-controller "^3.0.0"
+    duplexify "^4.0.0"
+    google-auth-library "^9.3.0"
+    node-fetch "^2.7.0"
+    object-hash "^3.0.0"
+    proto3-json-serializer "^2.0.2"
+    protobufjs "^7.3.2"
+    retry-request "^7.0.0"
+    uuid "^9.0.1"
+
 google-p12-pem@^3.1.3:
   version "3.1.4"
   resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.4.tgz#123f7b40da204de4ed1fbf2fd5be12c047fc8b3b"
@@ -8415,6 +8763,13 @@ graphviz@0.0.9:
   dependencies:
     temp "~0.4.0"
 
+grpc-gcp@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/grpc-gcp/-/grpc-gcp-1.0.1.tgz#39f0569486a5ee25c3d44dda7c08c5d7c3cb6d60"
+  integrity sha512-06r73IoGaAIpzT+DRPnw7V5BXvZ5mjy1OcKqSPX+ZHOgbLxT+lJfz8IN83z/sbA3t55ZX88MfDaaCjDGdveVIA==
+  dependencies:
+    "@grpc/grpc-js" "^1.7.0"
+
 gtoken@^5.0.4:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.2.tgz#deb7dc876abe002178e0515e383382ea9446d58f"
@@ -8424,6 +8779,14 @@ gtoken@^5.0.4:
     google-p12-pem "^3.1.3"
     jws "^4.0.0"
 
+gtoken@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26"
+  integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==
+  dependencies:
+    gaxios "^6.0.0"
+    jws "^4.0.0"
+
 handle-thing@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
@@ -8631,7 +8994,7 @@ hpack.js@^2.1.6:
     readable-stream "^2.0.1"
     wbuf "^1.1.0"
 
-html-entities@^2.4.0:
+html-entities@^2.4.0, html-entities@^2.5.2:
   version "2.5.2"
   resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f"
   integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==
@@ -8744,6 +9107,15 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1:
     agent-base "6"
     debug "4"
 
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" "2"
+    agent-base "6"
+    debug "4"
+
 http-proxy-agent@^7.0.0:
   version "7.0.2"
   resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
@@ -9314,7 +9686,7 @@ is-running@^2.1.0:
   resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0"
   integrity sha512-mjJd3PujZMl7j+D395WTIO5tU5RIDBfVSRtRR4VOJou3H66E38UjbjvDGh3slJzPuolsb+yQFqwHNNdyp5jg3w==
 
-is-stream-ended@^0.1.4:
+is-stream-ended@^0.1.0, is-stream-ended@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda"
   integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==
@@ -9389,6 +9761,11 @@ is2@^2.0.6:
     ip-regex "^4.1.0"
     is-url "^1.2.4"
 
+is@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79"
+  integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==
+
 isarray@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -11098,7 +11475,7 @@ node-emoji@^1.4.1:
   dependencies:
     lodash "^4.17.21"
 
-node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7:
+node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0:
   version "2.7.0"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
   integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
@@ -11512,6 +11889,11 @@ p-defer@^3.0.0:
   resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83"
   integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==
 
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
 p-limit@^2.2.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -11566,6 +11948,14 @@ p-map@^7.0.2:
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.2.tgz#7c5119fada4755660f70199a66aa3fe2f85a1fe8"
   integrity sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==
 
+p-queue@^6.0.2:
+  version "6.6.2"
+  resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+  integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+  dependencies:
+    eventemitter3 "^4.0.4"
+    p-timeout "^3.2.0"
+
 p-retry@^6.2.0:
   version "6.2.0"
   resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd"
@@ -11575,6 +11965,13 @@ p-retry@^6.2.0:
     is-network-error "^1.0.0"
     retry "^0.13.1"
 
+p-timeout@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+  integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+  dependencies:
+    p-finally "^1.0.0"
+
 p-try@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
@@ -12175,6 +12572,13 @@ proto3-json-serializer@^0.1.8:
   dependencies:
     protobufjs "^6.11.2"
 
+proto3-json-serializer@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz#5b705203b4d58f3880596c95fad64902617529dd"
+  integrity sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==
+  dependencies:
+    protobufjs "^7.2.5"
+
 protobufjs@6.11.2:
   version "6.11.2"
   resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b"
@@ -12232,6 +12636,24 @@ protobufjs@^6.10.0, protobufjs@^6.11.2:
     "@types/node" ">=13.7.0"
     long "^4.0.0"
 
+protobufjs@^7.0.0, protobufjs@^7.3.2:
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a"
+  integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==
+  dependencies:
+    "@protobufjs/aspromise" "^1.1.2"
+    "@protobufjs/base64" "^1.1.2"
+    "@protobufjs/codegen" "^2.0.4"
+    "@protobufjs/eventemitter" "^1.1.0"
+    "@protobufjs/fetch" "^1.1.0"
+    "@protobufjs/float" "^1.0.2"
+    "@protobufjs/inquire" "^1.1.0"
+    "@protobufjs/path" "^1.1.2"
+    "@protobufjs/pool" "^1.1.0"
+    "@protobufjs/utf8" "^1.1.0"
+    "@types/node" ">=13.7.0"
+    long "^5.0.0"
+
 protobufjs@^7.2.5:
   version "7.3.2"
   resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4"
@@ -12315,6 +12737,14 @@ psl@^1.1.28:
   resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
   integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
 
+pump@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+  integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
 pump@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -12323,6 +12753,15 @@ pump@^3.0.0:
     end-of-stream "^1.1.0"
     once "^1.3.1"
 
+pumpify@^1.3.5:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+  integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+  dependencies:
+    duplexify "^3.6.0"
+    inherits "^2.0.3"
+    pump "^2.0.0"
+
 punycode@^1.3.2, punycode@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -12466,6 +12905,15 @@ readable-stream@1.1.x:
     isarray "0.0.1"
     string_decoder "~0.10.x"
 
+readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
 readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
@@ -12479,15 +12927,6 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable
     string_decoder "~1.1.1"
     util-deprecate "~1.0.1"
 
-readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
-  version "3.6.2"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
-  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
 readable-stream@~2.0.0:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
@@ -12838,6 +13277,15 @@ retry-request@^4.0.0:
     debug "^4.1.1"
     extend "^3.0.2"
 
+retry-request@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.2.tgz#60bf48cfb424ec01b03fca6665dee91d06dd95f3"
+  integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==
+  dependencies:
+    "@types/request" "^2.48.8"
+    extend "^3.0.2"
+    teeny-request "^9.0.0"
+
 retry@^0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
@@ -13813,6 +14261,21 @@ spdy@^4.0.2:
     select-hose "^2.0.0"
     spdy-transport "^3.0.0"
 
+split-array-stream@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-1.0.3.tgz#d2b75a8e5e0d824d52fdec8b8225839dc2e35dfa"
+  integrity sha512-yGY35QmZFzZkWZ0eHE06RPBi63umym8m+pdtuC/dlO1ADhdKSfCj0uNn87BYCXBBDFxyTq4oTw0BgLYT0K5z/A==
+  dependencies:
+    async "^2.4.0"
+    is-stream-ended "^0.1.0"
+
+split-array-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-2.0.0.tgz#85a4f8bfe14421d7bca7f33a6d176d0c076a53b1"
+  integrity sha512-hmMswlVY91WvGMxs0k8MRgq8zb2mSen4FmDNc5AFiTWtrBpdZN6nwD6kROVe4vNL+ywrvbCKsWVCnEd4riELIg==
+  dependencies:
+    is-stream-ended "^0.1.4"
+
 split@0.3:
   version "0.3.3"
   resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
@@ -13859,7 +14322,7 @@ ssri@^12.0.0:
   dependencies:
     minipass "^7.0.3"
 
-stack-trace@0.0.x:
+stack-trace@0.0.10, stack-trace@0.0.x:
   version "0.0.10"
   resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
   integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
@@ -13891,7 +14354,14 @@ stream-combiner@~0.0.4:
   dependencies:
     duplexer "~0.1.1"
 
-stream-shift@^1.0.2:
+stream-events@^1.0.4, stream-events@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5"
+  integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==
+  dependencies:
+    stubs "^3.0.0"
+
+stream-shift@^1.0.0, stream-shift@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b"
   integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==
@@ -14023,6 +14493,11 @@ strip-json-comments@~3.1.1:
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
+stubs@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
+  integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==
+
 style-search@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
@@ -14112,6 +14587,11 @@ superstatic@^7.1.0:
   optionalDependencies:
     re2 "^1.15.8"
 
+supports-color@10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-10.0.0.tgz#32000d5e49f1ae70b2645d47701004644a1d7b90"
+  integrity sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==
+
 supports-color@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -14261,6 +14741,17 @@ tcp-port-used@^1.0.1:
     debug "4.3.1"
     is2 "^2.0.6"
 
+teeny-request@^9.0.0:
+  version "9.0.0"
+  resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d"
+  integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==
+  dependencies:
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    node-fetch "^2.6.9"
+    stream-events "^1.0.5"
+    uuid "^9.0.0"
+
 temp-fs@^0.9.9:
   version "0.9.9"
   resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7"
@@ -14344,6 +14835,21 @@ through2@2.0.1:
     readable-stream "~2.0.0"
     xtend "~4.0.0"
 
+through2@^2.0.3:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+  dependencies:
+    readable-stream "~2.3.6"
+    xtend "~4.0.1"
+
+through2@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
+  integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
+  dependencies:
+    readable-stream "3"
+
 through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -14653,6 +15159,11 @@ typed-assert@^1.0.8:
   resolved "https://registry.yarnpkg.com/typed-assert/-/typed-assert-1.0.9.tgz#8af9d4f93432c4970ec717e3006f33f135b06213"
   integrity sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==
 
+typed-graphqlify@^3.1.1:
+  version "3.1.6"
+  resolved "https://registry.yarnpkg.com/typed-graphqlify/-/typed-graphqlify-3.1.6.tgz#eea5b839efb6953ab216819751369cfa27512b71"
+  integrity sha512-Snlg1ZrokbkQuemOb4xjWWCJrNcOMeb2Ii0/BwMfwLCcJVNjygyqhrFkrYNvi4gDrwWFrGE0TvxxM+Slym2JMg==
+
 typedarray-to-buffer@^3.1.5:
   version "3.1.5"
   resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
@@ -14818,6 +15329,11 @@ universal-user-agent@^6.0.0:
   resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa"
   integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==
 
+universal-user-agent@^7.0.0, universal-user-agent@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e"
+  integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==
+
 universalify@^0.1.0:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -14962,7 +15478,7 @@ uuid@^8.3.2:
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
   integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
 
-uuid@^9.0.0:
+uuid@^9.0.0, uuid@^9.0.1:
   version "9.0.1"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
   integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
@@ -15489,7 +16005,7 @@ xregexp@2.0.0:
   resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
   integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==
 
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0:
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
   integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -15524,6 +16040,11 @@ yaml@*, yaml@^2.1.1:
   resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e"
   integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==
 
+yaml@2.7.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98"
+  integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==
+
 yaml@^1.10.0, yaml@^1.10.2:
   version "1.10.2"
   resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"

From 8ba411f646c1c3d36ef772d5400c931f4d2b6625 Mon Sep 17 00:00:00 2001
From: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date: Thu, 23 Jan 2025 14:43:28 +0100
Subject: [PATCH 25/91] build: fix docs deployment and monitoring (#30373)

The docs deploy job currently tries to inject/install our snapshot
builds, but Yarn 2.x doesn't allow it by default.

In addition, GitHub actions execute with Ubuntu 24 as of recently, as
this requires additional pre-setup to be able to execute Chromium via
Pupeteer.

(cherry picked from commit e50a73faf67d2613edfec8fc6bc28200013818ad)
---
 .github/workflows/ci.yml                  |   4 +
 .github/workflows/scheduled-ci.yml        |   4 +
 material.angular.io/package.json          |   2 +-
 material.angular.io/yarn.lock             | 344 +++++++++++++++-------
 scripts/docs-deploy/docs-deps-install.mts |   4 +-
 5 files changed, 244 insertions(+), 114 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5076e4084934..f689566cecb4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -238,6 +238,10 @@ jobs:
         uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
         with:
           cache-node-modules: true
+      # See: https://github.com/puppeteer/puppeteer/pull/13196 and
+      # https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md.
+      - name: Disable AppArmor
+        run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns
       - name: Setup Bazel
         uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
       - name: Setup Bazel RBE
diff --git a/.github/workflows/scheduled-ci.yml b/.github/workflows/scheduled-ci.yml
index e51025c8c40c..2282de9da1ca 100644
--- a/.github/workflows/scheduled-ci.yml
+++ b/.github/workflows/scheduled-ci.yml
@@ -74,6 +74,10 @@ jobs:
         uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
         with:
           cache-node-modules: true
+      # See: https://github.com/puppeteer/puppeteer/pull/13196 and
+      # https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md.
+      - name: Disable AppArmor
+        run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Check Docs Site
diff --git a/material.angular.io/package.json b/material.angular.io/package.json
index 70f3c01d8b2d..1347d89b8ac6 100644
--- a/material.angular.io/package.json
+++ b/material.angular.io/package.json
@@ -96,7 +96,7 @@
     "lighthouse-logger": "~1.2.0",
     "npm-run-all": "^4.1.5",
     "protractor": "^7.0.0",
-    "puppeteer": "~21.1.0",
+    "puppeteer": "^24.1.0",
     "sass": "^1.70.0",
     "shelljs": "^0.8.4",
     "ts-node": "^8.10.2",
diff --git a/material.angular.io/yarn.lock b/material.angular.io/yarn.lock
index 102304bd4a63..046c68cc5867 100644
--- a/material.angular.io/yarn.lock
+++ b/material.angular.io/yarn.lock
@@ -3487,23 +3487,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@puppeteer/browsers@npm:1.7.0":
-  version: 1.7.0
-  resolution: "@puppeteer/browsers@npm:1.7.0"
-  dependencies:
-    debug: "npm:4.3.4"
-    extract-zip: "npm:2.0.1"
-    progress: "npm:2.0.3"
-    proxy-agent: "npm:6.3.0"
-    tar-fs: "npm:3.0.4"
-    unbzip2-stream: "npm:1.4.3"
-    yargs: "npm:17.7.1"
-  bin:
-    browsers: lib/cjs/main-cli.js
-  checksum: 10c0/f423b65cc83c9304e11a0e23027b9847b26c7d3f2b07f7372f5fe657dd15a9e779591c4b67eb83a36de7d557c0299962ab3c582b5c948c88b80d7a25bac7691b
-  languageName: node
-  linkType: hard
-
 "@puppeteer/browsers@npm:1.9.1":
   version: 1.9.1
   resolution: "@puppeteer/browsers@npm:1.9.1"
@@ -3521,6 +3504,24 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@puppeteer/browsers@npm:2.7.0":
+  version: 2.7.0
+  resolution: "@puppeteer/browsers@npm:2.7.0"
+  dependencies:
+    debug: "npm:^4.4.0"
+    extract-zip: "npm:^2.0.1"
+    progress: "npm:^2.0.3"
+    proxy-agent: "npm:^6.5.0"
+    semver: "npm:^7.6.3"
+    tar-fs: "npm:^3.0.6"
+    unbzip2-stream: "npm:^1.4.3"
+    yargs: "npm:^17.7.2"
+  bin:
+    browsers: lib/cjs/main-cli.js
+  checksum: 10c0/1b71c89337d04603621a4d19a0e66277453a1e8f41410d777e162ee02e83b0882b7595869c1351bf14ef6fb7d435faac798aa5239fa714296da7faf4ec1f1452
+  languageName: node
+  linkType: hard
+
 "@rollup/rollup-android-arm-eabi@npm:4.28.1":
   version: 4.28.1
   resolution: "@rollup/rollup-android-arm-eabi@npm:4.28.1"
@@ -5561,6 +5562,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"bare-events@npm:^2.0.0":
+  version: 2.5.4
+  resolution: "bare-events@npm:2.5.4"
+  checksum: 10c0/877a9cea73d545e2588cdbd6fd01653e27dac48ad6b44985cdbae73e1f57f292d4ba52e25d1fba53674c1053c463d159f3d5c7bc36a2e6e192e389b499ddd627
+  languageName: node
+  linkType: hard
+
 "bare-events@npm:^2.2.0":
   version: 2.4.2
   resolution: "bare-events@npm:2.4.2"
@@ -5568,6 +5576,50 @@ __metadata:
   languageName: node
   linkType: hard
 
+"bare-fs@npm:^4.0.1":
+  version: 4.0.1
+  resolution: "bare-fs@npm:4.0.1"
+  dependencies:
+    bare-events: "npm:^2.0.0"
+    bare-path: "npm:^3.0.0"
+    bare-stream: "npm:^2.0.0"
+  checksum: 10c0/db2f4e2646faa011e322cbdc4615fe0cac865a03c2f76d7c686eccf96b0b5eea2bc71dfa37e8cfb14f4f61f8cd3ca95ff7b745d37c55fca319e40ec351d4ae0c
+  languageName: node
+  linkType: hard
+
+"bare-os@npm:^3.0.1":
+  version: 3.4.0
+  resolution: "bare-os@npm:3.4.0"
+  checksum: 10c0/2d1a4467ef8aff0a13d738e549aac30bbecf7631721f7099de78d6f8fc0ced9334ab391e489de28d69809f788f64081ac25108303a9a9e122f9bf87a8d589025
+  languageName: node
+  linkType: hard
+
+"bare-path@npm:^3.0.0":
+  version: 3.0.0
+  resolution: "bare-path@npm:3.0.0"
+  dependencies:
+    bare-os: "npm:^3.0.1"
+  checksum: 10c0/56a3ca82a9f808f4976cb1188640ac206546ce0ddff582afafc7bd2a6a5b31c3bd16422653aec656eeada2830cfbaa433c6cbf6d6b4d9eba033d5e06d60d9a68
+  languageName: node
+  linkType: hard
+
+"bare-stream@npm:^2.0.0":
+  version: 2.6.4
+  resolution: "bare-stream@npm:2.6.4"
+  dependencies:
+    streamx: "npm:^2.21.0"
+  peerDependencies:
+    bare-buffer: "*"
+    bare-events: "*"
+  peerDependenciesMeta:
+    bare-buffer:
+      optional: true
+    bare-events:
+      optional: true
+  checksum: 10c0/91fcc50e0d75514c5d7896e4b753c477130fdc5b8a58443bfd2fa5267490eff5667ce70ef6da1d72217b8b44e337a0ffdb98b28a8007167223e5930ac87a5833
+  languageName: node
+  linkType: hard
+
 "base64-js@npm:^1.3.0, base64-js@npm:^1.3.1":
   version: 1.5.1
   resolution: "base64-js@npm:1.5.1"
@@ -6232,14 +6284,27 @@ __metadata:
   languageName: node
   linkType: hard
 
-"chromium-bidi@npm:0.4.22":
-  version: 0.4.22
-  resolution: "chromium-bidi@npm:0.4.22"
+"chromium-bidi@npm:0.11.0":
+  version: 0.11.0
+  resolution: "chromium-bidi@npm:0.11.0"
+  dependencies:
+    mitt: "npm:3.0.1"
+    zod: "npm:3.23.8"
+  peerDependencies:
+    devtools-protocol: "*"
+  checksum: 10c0/7155b1b78bc07371cc750f5a431fb7120fb96e412d24895e5107efe21056a2406f4d051c26be89d2a7355258d6322d203e6d1c4e82f4b30f9b02923de50ba6c9
+  languageName: node
+  linkType: hard
+
+"chromium-bidi@npm:0.12.0":
+  version: 0.12.0
+  resolution: "chromium-bidi@npm:0.12.0"
   dependencies:
     mitt: "npm:3.0.1"
+    zod: "npm:3.24.1"
   peerDependencies:
     devtools-protocol: "*"
-  checksum: 10c0/3c9e7f019dc63136fe7330cf625c2d6f64ce862c471794ca6612334c8a4ea1b7f49191c1df9f0f6022703350873897c8e3601cb4268f04b657cc12af8df26b44
+  checksum: 10c0/dbddf97e9c829922078dc40e069c7ba5d5949c0902dde624000299027b2ecb4fb905068c5f3e67be619d5ff1906795629da676aa3ae1ac53adf719893d757f4f
   languageName: node
   linkType: hard
 
@@ -6780,18 +6845,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"cosmiconfig@npm:8.2.0":
-  version: 8.2.0
-  resolution: "cosmiconfig@npm:8.2.0"
-  dependencies:
-    import-fresh: "npm:^3.2.1"
-    js-yaml: "npm:^4.1.0"
-    parse-json: "npm:^5.0.0"
-    path-type: "npm:^4.0.0"
-  checksum: 10c0/4180aa6d1881b75ba591b2fc04b022741a3a4b67e9e243c0eb8d169b6e1efbd3cdf7e8ca19243c0f2e53a9d59ac3eccd5cad5f95f487fcbf4e740f9e86745747
-  languageName: node
-  linkType: hard
-
 "cosmiconfig@npm:^9.0.0":
   version: 9.0.0
   resolution: "cosmiconfig@npm:9.0.0"
@@ -7094,6 +7147,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"debug@npm:^4.4.0":
+  version: 4.4.0
+  resolution: "debug@npm:4.4.0"
+  dependencies:
+    ms: "npm:^2.1.3"
+  peerDependenciesMeta:
+    supports-color:
+      optional: true
+  checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de
+  languageName: node
+  linkType: hard
+
 "decamelize@npm:^1.2.0":
   version: 1.2.0
   resolution: "decamelize@npm:1.2.0"
@@ -7392,13 +7457,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"devtools-protocol@npm:0.0.1159816":
-  version: 0.0.1159816
-  resolution: "devtools-protocol@npm:0.0.1159816"
-  checksum: 10c0/704795ac59b78a6b322d69b94d39df7ae67396098f09fd609c027890a2b20c5a10531dad66e566e425dda5973e75a0ff7facac77bba1f1ee00a6124aec367be1
-  languageName: node
-  linkType: hard
-
 "devtools-protocol@npm:0.0.1232444":
   version: 0.0.1232444
   resolution: "devtools-protocol@npm:0.0.1232444"
@@ -7406,6 +7464,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"devtools-protocol@npm:0.0.1380148":
+  version: 0.0.1380148
+  resolution: "devtools-protocol@npm:0.0.1380148"
+  checksum: 10c0/489cb7af6890e19a2815fabcbc5178a9d3e510e25680a0eb28567d76a7664e8db228ea221079ef7e5a9619e37951cf71191df641b86b7c47d8ed4f1aa7edb4db
+  languageName: node
+  linkType: hard
+
 "di@npm:^0.0.1":
   version: 0.0.1
   resolution: "di@npm:0.0.1"
@@ -8638,7 +8703,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"extract-zip@npm:2.0.1":
+"extract-zip@npm:2.0.1, extract-zip@npm:^2.0.1":
   version: 2.0.1
   resolution: "extract-zip@npm:2.0.1"
   dependencies:
@@ -10094,7 +10159,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"http-proxy-agent@npm:^7.0.0":
+"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.1":
   version: 7.0.2
   resolution: "http-proxy-agent@npm:7.0.2"
   dependencies:
@@ -10168,7 +10233,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"https-proxy-agent@npm:7.0.6":
+"https-proxy-agent@npm:7.0.6, https-proxy-agent@npm:^7.0.6":
   version: 7.0.6
   resolution: "https-proxy-agent@npm:7.0.6"
   dependencies:
@@ -10188,7 +10253,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"https-proxy-agent@npm:^7.0.0, https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2, https-proxy-agent@npm:^7.0.5":
+"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2, https-proxy-agent@npm:^7.0.5":
   version: 7.0.5
   resolution: "https-proxy-agent@npm:7.0.5"
   dependencies:
@@ -12599,7 +12664,7 @@ __metadata:
     npm-run-all: "npm:^4.1.5"
     path-normalize: "npm:^6.0.7"
     protractor: "npm:^7.0.0"
-    puppeteer: "npm:~21.1.0"
+    puppeteer: "npm:^24.1.0"
     rxjs: "npm:^7.8.1"
     sass: "npm:^1.70.0"
     shelljs: "npm:^0.8.4"
@@ -13962,7 +14027,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"pac-proxy-agent@npm:^7.0.0, pac-proxy-agent@npm:^7.0.1":
+"pac-proxy-agent@npm:^7.0.1":
   version: 7.0.2
   resolution: "pac-proxy-agent@npm:7.0.2"
   dependencies:
@@ -13978,6 +14043,22 @@ __metadata:
   languageName: node
   linkType: hard
 
+"pac-proxy-agent@npm:^7.1.0":
+  version: 7.1.0
+  resolution: "pac-proxy-agent@npm:7.1.0"
+  dependencies:
+    "@tootallnate/quickjs-emscripten": "npm:^0.23.0"
+    agent-base: "npm:^7.1.2"
+    debug: "npm:^4.3.4"
+    get-uri: "npm:^6.0.1"
+    http-proxy-agent: "npm:^7.0.0"
+    https-proxy-agent: "npm:^7.0.6"
+    pac-resolver: "npm:^7.0.1"
+    socks-proxy-agent: "npm:^8.0.5"
+  checksum: 10c0/072528e3e7a0bb1187d5c09687a112ae230f6fa0d974e7460eaa0c1406666930ed53ffadfbfadfe8e1c7a8cc8d6ae26a4db96e27723d40a918c8454f0f1a012a
+  languageName: node
+  linkType: hard
+
 "pac-resolver@npm:^5.0.0":
   version: 5.0.1
   resolution: "pac-resolver@npm:5.0.1"
@@ -14076,7 +14157,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0":
+"parse-json@npm:^5.2.0":
   version: 5.2.0
   resolution: "parse-json@npm:5.2.0"
   dependencies:
@@ -14688,22 +14769,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"proxy-agent@npm:6.3.0":
-  version: 6.3.0
-  resolution: "proxy-agent@npm:6.3.0"
-  dependencies:
-    agent-base: "npm:^7.0.2"
-    debug: "npm:^4.3.4"
-    http-proxy-agent: "npm:^7.0.0"
-    https-proxy-agent: "npm:^7.0.0"
-    lru-cache: "npm:^7.14.1"
-    pac-proxy-agent: "npm:^7.0.0"
-    proxy-from-env: "npm:^1.1.0"
-    socks-proxy-agent: "npm:^8.0.1"
-  checksum: 10c0/40a0df2c9af5da8e6fcb95268f3e93181d8dd5c5ee9493517793fe75f847641f44a962d25a49d7208ec3b68cf1998fcd0d976bae773796e2023c71cddd76b642
-  languageName: node
-  linkType: hard
-
 "proxy-agent@npm:6.3.1":
   version: 6.3.1
   resolution: "proxy-agent@npm:6.3.1"
@@ -14736,6 +14801,22 @@ __metadata:
   languageName: node
   linkType: hard
 
+"proxy-agent@npm:^6.5.0":
+  version: 6.5.0
+  resolution: "proxy-agent@npm:6.5.0"
+  dependencies:
+    agent-base: "npm:^7.1.2"
+    debug: "npm:^4.3.4"
+    http-proxy-agent: "npm:^7.0.1"
+    https-proxy-agent: "npm:^7.0.6"
+    lru-cache: "npm:^7.14.1"
+    pac-proxy-agent: "npm:^7.1.0"
+    proxy-from-env: "npm:^1.1.0"
+    socks-proxy-agent: "npm:^8.0.5"
+  checksum: 10c0/7fd4e6f36bf17098a686d4aee3b8394abfc0b0537c2174ce96b0a4223198b9fafb16576c90108a3fcfc2af0168bd7747152bfa1f58e8fee91d3780e79aab7fd8
+  languageName: node
+  linkType: hard
+
 "proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0":
   version: 1.1.0
   resolution: "proxy-from-env@npm:1.1.0"
@@ -14811,17 +14892,17 @@ __metadata:
   languageName: node
   linkType: hard
 
-"puppeteer-core@npm:21.1.1":
-  version: 21.1.1
-  resolution: "puppeteer-core@npm:21.1.1"
+"puppeteer-core@npm:24.1.0":
+  version: 24.1.0
+  resolution: "puppeteer-core@npm:24.1.0"
   dependencies:
-    "@puppeteer/browsers": "npm:1.7.0"
-    chromium-bidi: "npm:0.4.22"
-    cross-fetch: "npm:4.0.0"
-    debug: "npm:4.3.4"
-    devtools-protocol: "npm:0.0.1159816"
-    ws: "npm:8.13.0"
-  checksum: 10c0/05efd196e1871ae2bd1a31779cd0424e01c4584ed419fee79b3fbfc2aa5c4bb770f1f03418432242f7bab8c63e09d7cad135984dbb5dacbe8f0124f64e199cfa
+    "@puppeteer/browsers": "npm:2.7.0"
+    chromium-bidi: "npm:0.11.0"
+    debug: "npm:^4.4.0"
+    devtools-protocol: "npm:0.0.1380148"
+    typed-query-selector: "npm:^2.12.0"
+    ws: "npm:^8.18.0"
+  checksum: 10c0/3ff0f4b6f1b86a8de973cd6a3e4d2db562062b88ef4d565ba986e3114c04e7cf61d16ecc90b0e2db29ae5adeb7bb260dfaac614d4e35be1c0d1432061edaebb7
   languageName: node
   linkType: hard
 
@@ -14839,14 +14920,19 @@ __metadata:
   languageName: node
   linkType: hard
 
-"puppeteer@npm:~21.1.0":
-  version: 21.1.1
-  resolution: "puppeteer@npm:21.1.1"
+"puppeteer@npm:^24.1.0":
+  version: 24.1.0
+  resolution: "puppeteer@npm:24.1.0"
   dependencies:
-    "@puppeteer/browsers": "npm:1.7.0"
-    cosmiconfig: "npm:8.2.0"
-    puppeteer-core: "npm:21.1.1"
-  checksum: 10c0/3b5dceb295252794b13204fcf07e5cccd6edbfba5297db8318e84426d238f7c57a99265ed2a05cdfc04efb16ea86937eb9b938d112d57f84381a771dd2e305db
+    "@puppeteer/browsers": "npm:2.7.0"
+    chromium-bidi: "npm:0.12.0"
+    cosmiconfig: "npm:^9.0.0"
+    devtools-protocol: "npm:0.0.1380148"
+    puppeteer-core: "npm:24.1.0"
+    typed-query-selector: "npm:^2.12.0"
+  bin:
+    puppeteer: lib/cjs/puppeteer/node/cli.js
+  checksum: 10c0/b2c84610fdd0ea5cf0f1f0b53d24c34e87093e9012616fad9ffa96f447a874be48d68ad9804a344016d30cd18fddfeb67fd429d7a52c44aa445e06b4f93e2417
   languageName: node
   linkType: hard
 
@@ -16190,7 +16276,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"socks-proxy-agent@npm:^8.0.1, socks-proxy-agent@npm:^8.0.2, socks-proxy-agent@npm:^8.0.3, socks-proxy-agent@npm:^8.0.4":
+"socks-proxy-agent@npm:^8.0.2, socks-proxy-agent@npm:^8.0.3, socks-proxy-agent@npm:^8.0.4":
   version: 8.0.4
   resolution: "socks-proxy-agent@npm:8.0.4"
   dependencies:
@@ -16201,6 +16287,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"socks-proxy-agent@npm:^8.0.5":
+  version: 8.0.5
+  resolution: "socks-proxy-agent@npm:8.0.5"
+  dependencies:
+    agent-base: "npm:^7.1.2"
+    debug: "npm:^4.3.4"
+    socks: "npm:^2.8.3"
+  checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6
+  languageName: node
+  linkType: hard
+
 "socks@npm:^2.3.3, socks@npm:^2.8.3":
   version: 2.8.3
   resolution: "socks@npm:2.8.3"
@@ -16525,6 +16622,21 @@ __metadata:
   languageName: node
   linkType: hard
 
+"streamx@npm:^2.21.0":
+  version: 2.21.1
+  resolution: "streamx@npm:2.21.1"
+  dependencies:
+    bare-events: "npm:^2.2.0"
+    fast-fifo: "npm:^1.3.2"
+    queue-tick: "npm:^1.0.1"
+    text-decoder: "npm:^1.1.0"
+  dependenciesMeta:
+    bare-events:
+      optional: true
+  checksum: 10c0/752297e877bdeba4a4c180335564c446636c3a33f1c8733b4773746dab6212266e97cd71be8cade9748bbb1b9e2fee61f81e46bcdaf1ff396b79c9cb9355f26e
+  languageName: node
+  linkType: hard
+
 "strict-uri-encode@npm:^1.0.0":
   version: 1.1.0
   resolution: "strict-uri-encode@npm:1.1.0"
@@ -16834,6 +16946,23 @@ __metadata:
   languageName: node
   linkType: hard
 
+"tar-fs@npm:^3.0.6":
+  version: 3.0.8
+  resolution: "tar-fs@npm:3.0.8"
+  dependencies:
+    bare-fs: "npm:^4.0.1"
+    bare-path: "npm:^3.0.0"
+    pump: "npm:^3.0.0"
+    tar-stream: "npm:^3.1.5"
+  dependenciesMeta:
+    bare-fs:
+      optional: true
+    bare-path:
+      optional: true
+  checksum: 10c0/b70bb2ad0490ab13b48edd10bd648bb54c52b681981cdcdc3aa4517e98ad94c94659ddca1925872ee658d781b9fcdd2b1c808050647f06b1bca157dd2fcae038
+  languageName: node
+  linkType: hard
+
 "tar-stream@npm:^1.5.2":
   version: 1.6.2
   resolution: "tar-stream@npm:1.6.2"
@@ -17361,6 +17490,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"typed-query-selector@npm:^2.12.0":
+  version: 2.12.0
+  resolution: "typed-query-selector@npm:2.12.0"
+  checksum: 10c0/069509887ecfff824a470f5f93d300cc9223cb059a36c47ac685f2812c4c9470340e07615893765e4264cef1678507532fa78f642fd52f276b589f7f5d791f79
+  languageName: node
+  linkType: hard
+
 "typedarray-to-buffer@npm:^3.1.5":
   version: 3.1.5
   resolution: "typedarray-to-buffer@npm:3.1.5"
@@ -17432,7 +17568,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"unbzip2-stream@npm:1.4.3, unbzip2-stream@npm:^1.0.9":
+"unbzip2-stream@npm:1.4.3, unbzip2-stream@npm:^1.0.9, unbzip2-stream@npm:^1.4.3":
   version: 1.4.3
   resolution: "unbzip2-stream@npm:1.4.3"
   dependencies:
@@ -18257,21 +18393,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"ws@npm:8.13.0":
-  version: 8.13.0
-  resolution: "ws@npm:8.13.0"
-  peerDependencies:
-    bufferutil: ^4.0.1
-    utf-8-validate: ">=5.0.2"
-  peerDependenciesMeta:
-    bufferutil:
-      optional: true
-    utf-8-validate:
-      optional: true
-  checksum: 10c0/579817dbbab3ee46669129c220cfd81ba6cdb9ab5c3e9a105702dd045743c4ab72e33bb384573827c0c481213417cc880e41bc097e0fc541a0b79fa3eb38207d
-  languageName: node
-  linkType: hard
-
 "ws@npm:8.16.0":
   version: 8.16.0
   resolution: "ws@npm:8.16.0"
@@ -18452,21 +18573,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"yargs@npm:17.7.1":
-  version: 17.7.1
-  resolution: "yargs@npm:17.7.1"
-  dependencies:
-    cliui: "npm:^8.0.1"
-    escalade: "npm:^3.1.1"
-    get-caller-file: "npm:^2.0.5"
-    require-directory: "npm:^2.1.1"
-    string-width: "npm:^4.2.3"
-    y18n: "npm:^5.0.5"
-    yargs-parser: "npm:^21.1.1"
-  checksum: 10c0/0ed3b7694d94da777f3591f1d786d947ed2e59b897da0a0c30e541109ae087979ac26b4ec39557f5e9c4592f19806447963fb132049b9806a1d416bcdd24d2b4
-  languageName: node
-  linkType: hard
-
 "yargs@npm:17.7.2, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.7.2":
   version: 17.7.2
   resolution: "yargs@npm:17.7.2"
@@ -18565,6 +18671,20 @@ __metadata:
   languageName: node
   linkType: hard
 
+"zod@npm:3.23.8":
+  version: 3.23.8
+  resolution: "zod@npm:3.23.8"
+  checksum: 10c0/8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69
+  languageName: node
+  linkType: hard
+
+"zod@npm:3.24.1":
+  version: 3.24.1
+  resolution: "zod@npm:3.24.1"
+  checksum: 10c0/0223d21dbaa15d8928fe0da3b54696391d8e3e1e2d0283a1a070b5980a1dbba945ce631c2d1eccc088fdbad0f2dfa40155590bf83732d3ac4fcca2cc9237591b
+  languageName: node
+  linkType: hard
+
 "zone.js@npm:~0.14.10":
   version: 0.14.10
   resolution: "zone.js@npm:0.14.10"
diff --git a/scripts/docs-deploy/docs-deps-install.mts b/scripts/docs-deploy/docs-deps-install.mts
index 1a710c713796..cb74de8f7634 100644
--- a/scripts/docs-deploy/docs-deps-install.mts
+++ b/scripts/docs-deploy/docs-deps-install.mts
@@ -16,7 +16,9 @@ export async function installDepsForDocsSite(
 
   if (options.frozenLockfile) {
     additionalArgs.push(yarnBin.legacy ? '--frozen-lock-file' : '--immutable');
+  } else if (!yarnBin.legacy) {
+    additionalArgs.push('--no-immutable');
   }
 
-  await $`${yarnBin.binary} ${yarnBin.args} --cwd ${repoDirPath} install ${additionalArgs}`;
+  await $`${yarnBin.binary} ${yarnBin.args} --cwd ${repoDirPath} install ${additionalArgs.join(' ')}`;
 }

From b68347467279635c28e48077dd1a076b5499e0cd Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Thu, 23 Jan 2025 18:36:40 +0100
Subject: [PATCH 26/91] fix(material/button-toggle): incorrect shape of focus
 indicator in vertical group (#30376)

Fixes that the first/last buttons in a vertical button group had the wrong shape.

Fixes #30368.

(cherry picked from commit e91d5091bbf3d44cc168be458269d260a0c22c27)
---
 src/material/button-toggle/button-toggle.scss | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/material/button-toggle/button-toggle.scss b/src/material/button-toggle/button-toggle.scss
index 778df32843af..1e02fbd24b25 100644
--- a/src/material/button-toggle/button-toggle.scss
+++ b/src/material/button-toggle/button-toggle.scss
@@ -386,7 +386,7 @@ $_standard-tokens: (
     @include token-utils.create-token-slot(--mat-focus-indicator-border-radius, shape);
   }
 
-  .mat-button-toggle-group-appearance-standard .mat-button-toggle {
+  .mat-button-toggle-group-appearance-standard:not(.mat-button-toggle-vertical) .mat-button-toggle {
     &:last-of-type .mat-button-toggle-button::before {
       @include token-utils.create-token-slot(border-top-right-radius, shape);
       @include token-utils.create-token-slot(border-bottom-right-radius, shape);
@@ -397,4 +397,16 @@ $_standard-tokens: (
       @include token-utils.create-token-slot(border-bottom-left-radius, shape);
     }
   }
+
+  .mat-button-toggle-group-appearance-standard.mat-button-toggle-vertical .mat-button-toggle {
+    &:last-of-type .mat-button-toggle-button::before {
+      @include token-utils.create-token-slot(border-bottom-right-radius, shape);
+      @include token-utils.create-token-slot(border-bottom-left-radius, shape);
+    }
+
+    &:first-of-type .mat-button-toggle-button::before {
+      @include token-utils.create-token-slot(border-top-right-radius, shape);
+      @include token-utils.create-token-slot(border-top-left-radius, shape);
+    }
+  }
 }

From 5b4ca17d5381cd0a8c4b439baf91edb571f3bf7b Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Fri, 24 Jan 2025 11:38:51 -0500
Subject: [PATCH 27/91] fix(cdk/table): Column sizing and scrolling bug when
 number of columns in table changes (#30378)

Part of fix includes cdk-experimental/column-resize.

See internal issue 390466445.

(cherry picked from commit 8950ec3720e4220b830a591261f4579e7fea42c2)
---
 src/cdk-experimental/column-resize/resize-strategy.ts | 5 +++++
 src/cdk/table/sticky-styler.ts                        | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/cdk-experimental/column-resize/resize-strategy.ts b/src/cdk-experimental/column-resize/resize-strategy.ts
index a37ea5db0b43..372e35baa659 100644
--- a/src/cdk-experimental/column-resize/resize-strategy.ts
+++ b/src/cdk-experimental/column-resize/resize-strategy.ts
@@ -65,6 +65,11 @@ export abstract class ResizeStrategy implements OnDestroy {
       });
 
       this.styleScheduler.scheduleEnd(() => {
+        // Once the column sizes have updated, we unset the table width so that
+        // it does not have unwanted side effects on future changes in the table
+        // such as columns being added or removed.
+        tableElement.style.width = '';
+
         this.table.updateStickyColumnStyles();
       });
     }
diff --git a/src/cdk/table/sticky-styler.ts b/src/cdk/table/sticky-styler.ts
index cdf8a9569803..eebe0b8ec3ea 100644
--- a/src/cdk/table/sticky-styler.ts
+++ b/src/cdk/table/sticky-styler.ts
@@ -185,7 +185,7 @@ export class StickyStyler {
           }
         }
 
-        if (this._positionListener) {
+        if (this._positionListener && cellWidths.some(w => !!w)) {
           this._positionListener.stickyColumnsUpdated({
             sizes:
               lastStickyStart === -1

From 777d1c1268970ba2fa0835f4ade363a1748581d4 Mon Sep 17 00:00:00 2001
From: Naji <54370141+naaajii@users.noreply.github.com>
Date: Mon, 27 Jan 2025 18:26:59 +0500
Subject: [PATCH 28/91] ci: add `material-angular-io` to commit scopes (#30391)

(cherry picked from commit 41d12d49b63f53aa9ebacfae4398c84c274fcca9)
---
 .ng-dev/commit-message.mts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.ng-dev/commit-message.mts b/.ng-dev/commit-message.mts
index 6da5589955a0..92dbdecf796e 100644
--- a/.ng-dev/commit-message.mts
+++ b/.ng-dev/commit-message.mts
@@ -89,5 +89,6 @@ export const commitMessage: CommitMessageConfig = {
     'material-date-fns-adapter',
     'material-luxon-adapter',
     'youtube-player',
+    'material-angular-io',
   ],
 };

From 92e7ad70ae363767fda827dc42c05531460a6ef8 Mon Sep 17 00:00:00 2001
From: Wagner Maciel <wagnermaciel@google.com>
Date: Mon, 27 Jan 2025 09:41:49 -0500
Subject: [PATCH 29/91] docs(material/sidenav): fix sidenav not working
 (#30390) (#30397)

fixes broken example for responsive sidebar which included routerLink directive but is missing router module which prevents sidebar from opening by removing directive as it serve no purpose

fixes #30307

Co-authored-by: Naji <54370141+naaajii@users.noreply.github.com>
---
 .../sidenav-responsive/sidenav-responsive-example.html |  2 +-
 .../sidenav-responsive/sidenav-responsive-example.ts   | 10 +---------
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.html b/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.html
index cf7c57f17924..e34c05948d25 100644
--- a/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.html
+++ b/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.html
@@ -11,7 +11,7 @@ <h1 class="example-app-name">Responsive App</h1>
                   [fixedInViewport]="isMobile()" fixedTopGap="56">
         <mat-nav-list>
           @for (nav of fillerNav; track nav) {
-            <a mat-list-item routerLink=".">{{nav}}</a>
+            <a mat-list-item>{{nav}}</a>
           }
         </mat-nav-list>
       </mat-sidenav>
diff --git a/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.ts b/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.ts
index a10511604986..f47ad84be085 100644
--- a/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.ts
+++ b/src/components-examples/material/sidenav/sidenav-responsive/sidenav-responsive-example.ts
@@ -5,21 +5,13 @@ import {MatSidenavModule} from '@angular/material/sidenav';
 import {MatIconModule} from '@angular/material/icon';
 import {MatButtonModule} from '@angular/material/button';
 import {MatToolbarModule} from '@angular/material/toolbar';
-import {RouterLink} from '@angular/router';
 
 /** @title Responsive sidenav */
 @Component({
   selector: 'sidenav-responsive-example',
   templateUrl: 'sidenav-responsive-example.html',
   styleUrl: 'sidenav-responsive-example.css',
-  imports: [
-    MatToolbarModule,
-    MatButtonModule,
-    MatIconModule,
-    MatSidenavModule,
-    MatListModule,
-    RouterLink,
-  ],
+  imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatSidenavModule, MatListModule],
 })
 export class SidenavResponsiveExample implements OnDestroy {
   protected readonly fillerNav = Array.from({length: 50}, (_, i) => `Nav Item ${i + 1}`);

From 836ad799f4114cbca347743a8d56c4a16bd840b1 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 27 Jan 2025 15:45:46 +0100
Subject: [PATCH 30/91] fix(google-maps): hide info window node when opened
 with content (#30392)

Fixes that the info window would become visible when it is opened with explicit content.

Fixes #30298.

(cherry picked from commit 61103c542ab442f6e89352f638b7aebee7db00fc)
---
 src/google-maps/map-info-window/map-info-window.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/google-maps/map-info-window/map-info-window.ts b/src/google-maps/map-info-window/map-info-window.ts
index 32c8497e6499..bd6d23a2bea1 100644
--- a/src/google-maps/map-info-window/map-info-window.ts
+++ b/src/google-maps/map-info-window/map-info-window.ts
@@ -231,7 +231,9 @@ export class MapInfoWindow implements OnInit, OnDestroy {
     // undefined. If that's the case, we have to allow it to open in order to handle the
     // case where the window doesn't have an anchor, but is placed at a particular position.
     if (this.infoWindow.get('anchor') !== anchorObject || !anchorObject) {
-      this._elementRef.nativeElement.style.display = '';
+      // If no explicit content is provided, it is taken from the DOM node.
+      // If it is, we need to hide it so it doesn't take up space on the page.
+      this._elementRef.nativeElement.style.display = content ? 'none' : '';
       if (content) {
         this.infoWindow.setContent(content);
       }

From 557f6cdf21272c2ed9db9532f6b4124e2e292e3d Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 27 Jan 2025 17:21:18 +0100
Subject: [PATCH 31/91] build: update to Angular 19.1 stable (#30394)

Updates to the stable version of Angular 19.1.

(cherry picked from commit e1cca90ff1e13db6f02070099f099e02c7041db8)
---
 package.json |  34 ++++-----
 yarn.lock    | 190 +++++++++++++++++++++++++--------------------------
 2 files changed, 112 insertions(+), 112 deletions(-)

diff --git a/package.json b/package.json
index ad5bdeb69c1e..8ac40dd19671 100644
--- a/package.json
+++ b/package.json
@@ -56,12 +56,12 @@
   },
   "version": "19.1.1",
   "dependencies": {
-    "@angular/animations": "^19.1.0-rc.0",
-    "@angular/common": "^19.1.0-rc.0",
-    "@angular/compiler": "^19.1.0-rc.0",
-    "@angular/core": "^19.1.0-rc.0",
-    "@angular/forms": "^19.1.0-rc.0",
-    "@angular/platform-browser": "^19.1.0-rc.0",
+    "@angular/animations": "^19.1.3",
+    "@angular/common": "^19.1.3",
+    "@angular/compiler": "^19.1.3",
+    "@angular/core": "^19.1.3",
+    "@angular/forms": "^19.1.3",
+    "@angular/platform-browser": "^19.1.3",
     "@types/google.maps": "^3.54.10",
     "@types/youtube": "^0.1.0",
     "rxjs": "^6.6.7",
@@ -70,19 +70,19 @@
     "zone.js": "~0.15.0"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^19.1.0-rc.0",
-    "@angular-devkit/core": "^19.1.0-rc.0",
-    "@angular-devkit/schematics": "^19.1.0-rc.0",
+    "@angular-devkit/build-angular": "^19.1.3",
+    "@angular-devkit/core": "^19.1.3",
+    "@angular-devkit/schematics": "^19.1.3",
     "@angular/bazel": "https://github.com/angular/bazel-builds.git#d9a8ea4f9e62cb475eff89519426a38631b2704d",
     "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#74e0e7b090c6e16056290836b2d936ca7820b86f",
-    "@angular/build": "^19.1.0-rc.0",
-    "@angular/cli": "^19.1.0-rc.0",
-    "@angular/compiler-cli": "^19.1.0-rc.0",
-    "@angular/localize": "^19.1.0-rc.0",
+    "@angular/build": "^19.1.3",
+    "@angular/cli": "^19.1.3",
+    "@angular/compiler-cli": "^19.1.3",
+    "@angular/localize": "^19.1.3",
     "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1fa3a08b6a111de820da092799319ed47c058849",
-    "@angular/platform-browser-dynamic": "^19.1.0-rc.0",
-    "@angular/platform-server": "^19.1.0-rc.0",
-    "@angular/router": "^19.1.0-rc.0",
+    "@angular/platform-browser-dynamic": "^19.1.3",
+    "@angular/platform-server": "^19.1.3",
+    "@angular/router": "^19.1.3",
     "@babel/core": "^7.16.12",
     "@babel/helper-explode-assignable-expression": "^7.18.6",
     "@babel/helper-string-parser": "^7.22.5",
@@ -102,7 +102,7 @@
     "@octokit/rest": "18.3.5",
     "@rollup/plugin-commonjs": "^21.0.0",
     "@rollup/plugin-node-resolve": "^13.1.3",
-    "@schematics/angular": "^19.1.0-rc.0",
+    "@schematics/angular": "^19.1.3",
     "@types/babel__core": "^7.1.18",
     "@types/browser-sync": "^2.26.3",
     "@types/fs-extra": "^9.0.13",
diff --git a/yarn.lock b/yarn.lock
index 3e41dc482211..ab2206ac345f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18,24 +18,24 @@
     "@angular-devkit/core" "18.1.0-next.0"
     rxjs "7.8.1"
 
-"@angular-devkit/architect@0.1901.0-rc.0":
-  version "0.1901.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1901.0-rc.0.tgz#0f3c39529b2639910ae0cf084d43187bffffef8e"
-  integrity sha512-BDZV/o1afvbUu8dqr77jjTovcC03DfQB/LGoSN6BkW2vu0jwFCHPXdc/D588p0Bw8cdlMJghkyQhqZ7SHPRivg==
+"@angular-devkit/architect@0.1901.4":
+  version "0.1901.4"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1901.4.tgz#d8df65cd0cf5a0e1de960e48f523fc56975d7a48"
+  integrity sha512-EoRTN8p7z0YnqOEIJKKu/NwSsCJxFkyGuZOobz7btnUWwlDqG8CNAhJgtlsOXPihwEkHEkzRIm1feDkWEjCYsA==
   dependencies:
-    "@angular-devkit/core" "19.1.0-rc.0"
+    "@angular-devkit/core" "19.1.4"
     rxjs "7.8.1"
 
-"@angular-devkit/build-angular@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-19.1.0-rc.0.tgz#f47f4e7aa08b1d23fd4345eda7837c48f1f6c412"
-  integrity sha512-hVuVwGASabKYOFZVnBxCzt+1eqw9bEtNA/N3XZMTkVz0kU12Okw7V78+fmlxODD3T//DuBF39w/UjwpsSAq7ag==
+"@angular-devkit/build-angular@^19.1.3":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-19.1.4.tgz#9dddc06a152ae7dd55114102ffc401bca2c1d60f"
+  integrity sha512-t8qC26Boz1aAMt2xVKthwEXRqMI4ZVwelxRNfHryLdLTujTaehFt3qbjxukMmRGCWmQObauH0UOvDh3pAA24dQ==
   dependencies:
     "@ampproject/remapping" "2.3.0"
-    "@angular-devkit/architect" "0.1901.0-rc.0"
-    "@angular-devkit/build-webpack" "0.1901.0-rc.0"
-    "@angular-devkit/core" "19.1.0-rc.0"
-    "@angular/build" "19.1.0-rc.0"
+    "@angular-devkit/architect" "0.1901.4"
+    "@angular-devkit/build-webpack" "0.1901.4"
+    "@angular-devkit/core" "19.1.4"
+    "@angular/build" "19.1.4"
     "@babel/core" "7.26.0"
     "@babel/generator" "7.26.3"
     "@babel/helper-annotate-as-pure" "7.25.9"
@@ -46,7 +46,7 @@
     "@babel/preset-env" "7.26.0"
     "@babel/runtime" "7.26.0"
     "@discoveryjs/json-ext" "0.6.3"
-    "@ngtools/webpack" "19.1.0-rc.0"
+    "@ngtools/webpack" "19.1.4"
     "@vitejs/plugin-basic-ssl" "1.2.0"
     ansi-colors "4.1.3"
     autoprefixer "10.4.20"
@@ -89,12 +89,12 @@
   optionalDependencies:
     esbuild "0.24.2"
 
-"@angular-devkit/build-webpack@0.1901.0-rc.0":
-  version "0.1901.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1901.0-rc.0.tgz#44b734e3224703649833ced10a4094cc5b7a61c3"
-  integrity sha512-1rxJ2oNqjeWF7rXkElGWtWeR6F4C+uF1HU1b65OI9pYNjzUp5Wh7+z1V/l3gfexohkv7W+7KyQkAFzFjwoJMpw==
+"@angular-devkit/build-webpack@0.1901.4":
+  version "0.1901.4"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1901.4.tgz#a7627e3ca79f2c398249ab2e6f3a57c92a294893"
+  integrity sha512-C/Cd1JeRTy2P/powIldc5UZObw92TDGATD/LFlfPfi94celLa2DlEL1ybPTpnGs/R5/q5R26F6fbhmAVSeTJ8g==
   dependencies:
-    "@angular-devkit/architect" "0.1901.0-rc.0"
+    "@angular-devkit/architect" "0.1901.4"
     rxjs "7.8.1"
 
 "@angular-devkit/core@18.1.0-next.0":
@@ -109,10 +109,10 @@
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/core@19.1.0-rc.0", "@angular-devkit/core@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.1.0-rc.0.tgz#b71c99234200e85d0a74ba526fceb9e465fb50bf"
-  integrity sha512-0kGErE+1jgEU2a6Q2JCg0XHeI+3PW48ZkINWMgD249TyRO7vC/VChSBMTi3CxuEatxp+1t9MQgMehZSuN4JL9w==
+"@angular-devkit/core@19.1.4", "@angular-devkit/core@^19.1.3":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.1.4.tgz#dad947bce8f311d02fce715875dc91392bdc12e6"
+  integrity sha512-IDvSSiQgaixH2RtZtIpq1+XaHeuzMiTWfDyNF9DuYcU+S8CdG1SWrc8d59tmOrM/q+IRGyFgbBhTU1un52hNHw==
   dependencies:
     ajv "8.17.1"
     ajv-formats "3.0.1"
@@ -121,21 +121,21 @@
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/schematics@19.1.0-rc.0", "@angular-devkit/schematics@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.1.0-rc.0.tgz#ec47363d7dc98c7d468ed5991fe6b119651cd4fb"
-  integrity sha512-SfgiXmRsfqH+zn6vkO1Oi4PpzQ9QA6G/ACV65+fgm3YeAaiD2v2h6UXOF/CVC2yjRfzD5ychEIcsY2YPAsvJIA==
+"@angular-devkit/schematics@19.1.4", "@angular-devkit/schematics@^19.1.3":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.1.4.tgz#1c440c091f03f01f9891ef3947e88c9a22a28427"
+  integrity sha512-EKXBkx6EDcvyO+U68w/eXicRaF92zSSzYNvR3tMZszEKYE6xBr3kZxY99PP54HXQHR4zYwLvFJVp+T6bnvte2w==
   dependencies:
-    "@angular-devkit/core" "19.1.0-rc.0"
+    "@angular-devkit/core" "19.1.4"
     jsonc-parser "3.3.1"
     magic-string "0.30.17"
     ora "5.4.1"
     rxjs "7.8.1"
 
-"@angular/animations@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-19.1.0-rc.0.tgz#08d5b25f3b57eb8acc9cc8fd2d188d0c76bf31b8"
-  integrity sha512-CAbv8Zr7RLYUFh6afw/3k7OHXvpxJvXDl5YeXWw5gBC7j1zHWochCVcEZVqBnrumGllVhxctM7L6gCI0x+EG/g==
+"@angular/animations@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-19.1.3.tgz#9fbf588cc2eb61f000553ce63a2514f417a992d6"
+  integrity sha512-MI+Tbp9OOisrQtTQH7o+xiQCODXicCs8WHNpGzdCpnXdRkQuVSOb6xAjD9OXJqcQGotLgeyennnkIJGXdz4RTA==
   dependencies:
     tslib "^2.3.0"
 
@@ -231,13 +231,13 @@
     vite "5.2.12"
     watchpack "2.4.1"
 
-"@angular/build@19.1.0-rc.0", "@angular/build@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/build/-/build-19.1.0-rc.0.tgz#7ac3a48be233c2978d94d3587badc74a817d60bd"
-  integrity sha512-ALl+MVMYBF+E7HyAQ+1MtE6sNIOAX0o2Sfs0wdIQfM2unRl6jPsz/Ker4BjnNQIK4wRCcstyzBv5mZBDulfFIQ==
+"@angular/build@19.1.4", "@angular/build@^19.1.3":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@angular/build/-/build-19.1.4.tgz#82cac484059560d7a904f16fdcbc6ea5707a4caf"
+  integrity sha512-yfvLeUT2a8JTuVBY259vsSv0uLyhikHHgQcWa3VSr0TvCKrwCsBIFDq7vqmhLqIVWi/Z4D7n3J5JQAbDrl38Sg==
   dependencies:
     "@ampproject/remapping" "2.3.0"
-    "@angular-devkit/architect" "0.1901.0-rc.0"
+    "@angular-devkit/architect" "0.1901.4"
     "@babel/core" "7.26.0"
     "@babel/helper-annotate-as-pure" "7.25.9"
     "@babel/helper-split-export-declaration" "7.24.7"
@@ -264,17 +264,17 @@
   optionalDependencies:
     lmdb "3.2.2"
 
-"@angular/cli@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-19.1.0-rc.0.tgz#f83c8fce3addda86d59c4741c676b62270962743"
-  integrity sha512-NWrXdaGxC4l8mJTeJDVDd8eKFIvWa+S0grQON88orL4Rm5n7LwT8SC3vPPDIrc/W6m8Z9Wc+JBrI3VPI9lZh3w==
+"@angular/cli@^19.1.3":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-19.1.4.tgz#1559c0e2996dad21ffe270b2c5e46c562ab5b156"
+  integrity sha512-C1Z2OTLjUJIkLsay6RJ1rzY0Tdb1Mj/cBh9dZryDstuits8G0Tphe36hnLownnoHspFQfjSRtVzF4NwKiDlQRw==
   dependencies:
-    "@angular-devkit/architect" "0.1901.0-rc.0"
-    "@angular-devkit/core" "19.1.0-rc.0"
-    "@angular-devkit/schematics" "19.1.0-rc.0"
+    "@angular-devkit/architect" "0.1901.4"
+    "@angular-devkit/core" "19.1.4"
+    "@angular-devkit/schematics" "19.1.4"
     "@inquirer/prompts" "7.2.1"
     "@listr2/prompt-adapter-inquirer" "2.0.18"
-    "@schematics/angular" "19.1.0-rc.0"
+    "@schematics/angular" "19.1.4"
     "@yarnpkg/lockfile" "1.1.0"
     ini "5.0.0"
     jsonc-parser "3.3.1"
@@ -287,17 +287,17 @@
     symbol-observable "4.0.0"
     yargs "17.7.2"
 
-"@angular/common@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/common/-/common-19.1.0-rc.0.tgz#eaceae526eee21403b922583d94cb79ea3a7beac"
-  integrity sha512-kDo8El2h4I90Cai2lI7hIV4vMMqEfPz/sM9FmogwzJZ2t5ao5PtutbaoInF3w1xyQj9cnVx2UH5Q0in04uwS4g==
+"@angular/common@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/common/-/common-19.1.3.tgz#6b21830ede0b1ed8132d3c3871a673a1886505c9"
+  integrity sha512-r1P0W6FKrON83szIJboF8z6UNCVL4HIxyD+nhmHMMT/iJpu4kDHVugaN/+w2jYLb4oelAJK5xzkzA+1IaHpzLg==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/compiler-cli@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-19.1.0-rc.0.tgz#f3645dc3764138f043ecbeb1b4f01ff851acfd39"
-  integrity sha512-7D0jLS/qooH782rgE5SbWJUpSsqR9/qlbhYvcyLosr1YjH3dsaZV8j4h2r+qJ+qwjKLWxRr2XLtVzVxPyeyKIQ==
+"@angular/compiler-cli@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-19.1.3.tgz#df250faeb527e9b133f9a1cc447ab3cd4cffc94a"
+  integrity sha512-nDBvZenQECcr9CClmTp3iJNilRQ6oDKFgBkhlWffEFBx0Z6kBA36MXKKLuCkf31D+NGmt5VJlAkl8Ax8BJ9qJw==
   dependencies:
     "@babel/core" "7.26.0"
     "@jridgewell/sourcemap-codec" "^1.4.14"
@@ -308,10 +308,10 @@
     tslib "^2.3.0"
     yargs "^17.2.1"
 
-"@angular/compiler@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-19.1.0-rc.0.tgz#38c489e0430527b176f088062922ad6108032ffd"
-  integrity sha512-bQb8+l+7IntSLoEkrdA8xghgOMPth0Kuv5ywSw0uh/TmbF82K/g6IiRdRwqTordeSWy0G8RZlh3fKrSm8vRvNw==
+"@angular/compiler@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-19.1.3.tgz#79689c3fe937da2a203e12865fa04b576990d3a9"
+  integrity sha512-omX5Gyt3zlJVTUteO2YxsqYWtAIpkvs8kRYSUsLTi79V1gbGo+J1TawFuyBTrWxj4UtTGvwmDgZxiCIwMtP5KQ==
   dependencies:
     tslib "^2.3.0"
 
@@ -322,24 +322,24 @@
   dependencies:
     tslib "^2.3.0"
 
-"@angular/core@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/core/-/core-19.1.0-rc.0.tgz#303dcf8ee8ed8aa196eb71de43eecb291e8d82d9"
-  integrity sha512-t4zWPx+EyKi7qIjBo+dBhmkk8nZVB88YBj+et5oklG1CNL8//w7q/b8bmmirT+/JGHsB9E044skeMohhayCJ3A==
+"@angular/core@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/core/-/core-19.1.3.tgz#9a4ebb2689e84e1e234d6e0e9da2edd0b2392a09"
+  integrity sha512-Hh1eHvi+y+gsTRODiEEEWnRj5zqv9WNoou1KmQ1mv1NTOf0Pv61Hg9P2rBWDr0mPIXFSzqUKjyzW30BgdQ+AEA==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/forms@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-19.1.0-rc.0.tgz#30642ce2b5191ef7a3ae81adc1ce89425f72df09"
-  integrity sha512-XrBUbZiQBzsD6li0RO5i1xcPTFln1NTtOHKT1Qga35zmFg+jPgz1/asPghEQs7WMKrXVoZer2tKNiRRdhKv7/A==
+"@angular/forms@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-19.1.3.tgz#34f3110c39ed92abba0bff8406e111f7eea02f04"
+  integrity sha512-M6eEJBysJm9zSUhm8ggljZCsgHLccZl70P34tyddb8erh9it2uoOXW0aVaZgDt1UAiF5a1EzjdVdN4TZTT/OGA==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/localize@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-19.1.0-rc.0.tgz#7ed7fde890c7bb3a7c569e358fba74b3f25b55fd"
-  integrity sha512-2CYgwuv9rzwWuPFrg6+q8oQMdtR/NrXmSkulA39JyggkmArZzqCOKBMYM5CEkPDJyvBdX1iPP8LJtqKNe5sJEQ==
+"@angular/localize@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-19.1.3.tgz#73adbcd660c4eca89294555001688f2a099a9b32"
+  integrity sha512-MrDZG3A5Wk9l5AXt9Y5a7FYM608SqqnhWfnWPlkBU8HwE/IEOKY1QDIRLDoUZ1RchEFpI7QX46sqTEIGc5V+hA==
   dependencies:
     "@babel/core" "7.26.0"
     "@types/babel__core" "7.20.5"
@@ -362,32 +362,32 @@
     typescript "~4.9.0"
     yaml "2.7.0"
 
-"@angular/platform-browser-dynamic@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.1.0-rc.0.tgz#5c038a7a624b9ad0fb6532a161a81876f387a104"
-  integrity sha512-sUDbSeHS5uVWNT5cFcDFCZVOAIBa9ZaRUN504FJ2psPv0vBtMBDdA67rSz9xa8e/GRm/EOX+a7izEVKeU48M5Q==
+"@angular/platform-browser-dynamic@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.1.3.tgz#70f6ecdfb4517e661bf42f1396245001a79ec3f5"
+  integrity sha512-rfsHu/+wB8YLPjsHKd/Go0SI8zP2gjMkebUHM9SbvVLXEAkxFubcF2htVKbKu8eTncfEJEXD6+3gRAjh5SLrKw==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-browser@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-19.1.0-rc.0.tgz#8c3c88027f9f15ff70dc374d7d79cb7a88e79a82"
-  integrity sha512-IwAO/oNUYe3zWunIyJsdzV/Nq4Yu6KxognJGCEUKkxj++Yu2pwaUnheNm/+L++yx5bYPMVcIURgseRqpwJt55g==
+"@angular/platform-browser@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-19.1.3.tgz#768e83918e5ade876930ce3d2b89e21e704f0844"
+  integrity sha512-bLgnM2hRyzUdoWRoUhe+IMenlr74EvrgwyG7anJ27bjg5PcvhQPXrGqU0hri5yPDb9SHVJZminr7OjNCN8QJkQ==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-server@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-19.1.0-rc.0.tgz#ee9a0337549d921c050851237a5292b2152e1ecf"
-  integrity sha512-kPdNLnBMxLc32Rq76qHdpMufZ7l6w7K2TOTlXGj5nWDymhLJhg19TvYHWH2PgbIY/11bAwejw9TI4756enIEAQ==
+"@angular/platform-server@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-19.1.3.tgz#c4f1bd6a4414790e3f5305daa938fc0831b3b9c1"
+  integrity sha512-8tORd/GPtZTr+gC+eXgBHyfQAhAa4CcDaM9+rqiTU4hXAJzD+7+XyW1M1ITGqieGIuLf0nlnhg4Vys+dlkUqEQ==
   dependencies:
     tslib "^2.3.0"
     xhr2 "^0.2.0"
 
-"@angular/router@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@angular/router/-/router-19.1.0-rc.0.tgz#ae6dd541441feebbe9169817c6e6452c6fd7eb6a"
-  integrity sha512-GYrTk2Me7nVfSGMlAh/IcKX2Fxan+ZXSCIx9y/BHGhG4SxUtTitqnj0oXsJy6DXibn6G2FkJqByC7ceZOD0OoA==
+"@angular/router@^19.1.3":
+  version "19.1.3"
+  resolved "https://registry.yarnpkg.com/@angular/router/-/router-19.1.3.tgz#4429fad5540086e083be302203c5c68400fd9a75"
+  integrity sha512-DJ9BgvtxJV6xohaPQXPdBsFCZoQIEq2OPDyKcoW4L0ST4kIIFpHyI6wJ+AlPnLkhSwmOOoHciH0oxZ2xPVxmiQ==
   dependencies:
     tslib "^2.3.0"
 
@@ -2818,10 +2818,10 @@
     "@napi-rs/nice-win32-ia32-msvc" "1.0.1"
     "@napi-rs/nice-win32-x64-msvc" "1.0.1"
 
-"@ngtools/webpack@19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-19.1.0-rc.0.tgz#139fd4576f09be91afbcfc3a8c589af3d1639120"
-  integrity sha512-alRs/9Lk0x4LBWw6e3MaSS7ISDFoorM4DBwA2qPrIfytYkJR1tbKKCn5m+TwgeNPPp43+QpBzIfftzHhnyiRuw==
+"@ngtools/webpack@19.1.4":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-19.1.4.tgz#3062b99456c600039a3b5def867efd548bef15e2"
+  integrity sha512-ZmUlbVqu/pz8abxVxNCKgKeY5g2MX1NsKxhM8rRV5tVV/MaAtSYNHgmFSYcKWA178v7k6BUuhnoNNxl5qqc1kw==
 
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
@@ -3684,13 +3684,13 @@
     argparse "~1.0.9"
     string-argv "~0.3.1"
 
-"@schematics/angular@19.1.0-rc.0", "@schematics/angular@^19.1.0-rc.0":
-  version "19.1.0-rc.0"
-  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-19.1.0-rc.0.tgz#9192d8f26d0c26b0ffc895d9392a7d7746ec1408"
-  integrity sha512-YJi2fO9sUMnUG2fhEDWlb7Ad3Xx6sr1OJHLN4snFq3smZEzgrYKqiOp97/ZMcEsVOtgTpYAQ1l0nci2MJa6YtQ==
+"@schematics/angular@19.1.4", "@schematics/angular@^19.1.3":
+  version "19.1.4"
+  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-19.1.4.tgz#333817e440866b5b4e92adc2e784b2f501dc68d7"
+  integrity sha512-HFf83SoXbj1K4jkYSSfCg/oXkmSGBx0zG1Lh+dE5GZFdTQmykrBY519aSdrqLVyZzKYjTGfDfSewUeO4a0GE2A==
   dependencies:
-    "@angular-devkit/core" "19.1.0-rc.0"
-    "@angular-devkit/schematics" "19.1.0-rc.0"
+    "@angular-devkit/core" "19.1.4"
+    "@angular-devkit/schematics" "19.1.4"
     jsonc-parser "3.3.1"
 
 "@sigstore/bundle@^3.0.0":

From 4a96a25e12683b438a168e4acbfaca7ef89766da Mon Sep 17 00:00:00 2001
From: Anco <a.j.j.postma@gmail.com>
Date: Mon, 27 Jan 2025 20:22:36 +0100
Subject: [PATCH 32/91] fix(material/select): fixed text color for selected
 options in multiple select (#30367)

* fixed text color for selected options in multiple select

* added change to comment

(cherry picked from commit 11f02eecc18939a1c8a2ac4c4cc9b74b2f5ca07a)
---
 src/material/core/option/option.scss | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/material/core/option/option.scss b/src/material/core/option/option.scss
index 36b1614dffa2..18ef14e69fe6 100644
--- a/src/material/core/option/option.scss
+++ b/src/material/core/option/option.scss
@@ -42,14 +42,13 @@ $_side-padding: 16px;
     }
 
     &.mdc-list-item--selected:not(.mdc-list-item--disabled) {
-      .mdc-list-item__primary-text {
-        @include token-utils.create-token-slot(color, selected-state-label-text-color);
-      }
-
-      // We don't change the background in multiple mode since
+      // We don't change the background & text color in multiple mode since
       // it has the checkbox to show the selected state.
       &:not(.mat-mdc-option-multiple) {
         @include token-utils.create-token-slot(background-color, selected-state-layer-color);
+        .mdc-list-item__primary-text {
+          @include token-utils.create-token-slot(color, selected-state-label-text-color);
+        }
       }
     }
 

From 5d6d25fc5071d0825fe13b66974339279ca7fe74 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Mon, 27 Jan 2025 16:01:30 -0500
Subject: [PATCH 33/91] perf(material/checkbox): Optimize css selectors
 (#30386)

(cherry picked from commit e4388c6f2594d81c3a95543482a2edeaa34bccff)
---
 src/material/checkbox/_checkbox-common.scss | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/material/checkbox/_checkbox-common.scss b/src/material/checkbox/_checkbox-common.scss
index 221c116ef439..55be454fb01a 100644
--- a/src/material/checkbox/_checkbox-common.scss
+++ b/src/material/checkbox/_checkbox-common.scss
@@ -457,7 +457,7 @@ $_fallback-size: 40px;
   // MDC expects `.mdc-checkbox__ripple::before` to be the state layer, but we use
   // `.mdc-checkbox__ripple` instead, so we emit the state layer slots ourselves.
   &:hover {
-    .mdc-checkbox__ripple {
+    > .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(opacity, unselected-hover-state-layer-opacity);
       @include token-utils.create-token-slot(
         background-color,
@@ -465,7 +465,7 @@ $_fallback-size: 40px;
       );
     }
 
-    .mat-mdc-checkbox-ripple .mat-ripple-element {
+    > .mat-mdc-checkbox-ripple .mat-ripple-element {
       @include token-utils.create-token-slot(
         background-color,
         unselected-hover-state-layer-color
@@ -474,7 +474,7 @@ $_fallback-size: 40px;
   }
 
   .mdc-checkbox__native-control:focus {
-    & ~ .mdc-checkbox__ripple {
+    & + .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(opacity, unselected-focus-state-layer-opacity);
       @include token-utils.create-token-slot(
         background-color,
@@ -490,8 +490,8 @@ $_fallback-size: 40px;
     }
   }
 
-  &:active .mdc-checkbox__native-control {
-    & ~ .mdc-checkbox__ripple {
+  &:active > .mdc-checkbox__native-control {
+    & + .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(opacity, unselected-pressed-state-layer-opacity);
       @include token-utils.create-token-slot(
         background-color,
@@ -508,7 +508,7 @@ $_fallback-size: 40px;
   }
 
   &:hover .mdc-checkbox__native-control:checked {
-    & ~ .mdc-checkbox__ripple {
+    & + .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(opacity, selected-hover-state-layer-opacity);
       @include token-utils.create-token-slot(
         background-color,
@@ -525,7 +525,7 @@ $_fallback-size: 40px;
   }
 
   .mdc-checkbox__native-control:focus:checked {
-    & ~ .mdc-checkbox__ripple {
+    & + .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(opacity, selected-focus-state-layer-opacity);
       @include token-utils.create-token-slot(
         background-color,
@@ -541,8 +541,8 @@ $_fallback-size: 40px;
     }
   }
 
-  &:active .mdc-checkbox__native-control:checked {
-    & ~ .mdc-checkbox__ripple {
+  &:active > .mdc-checkbox__native-control:checked {
+    & + .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(opacity, selected-pressed-state-layer-opacity);
       @include token-utils.create-token-slot(
         background-color,
@@ -561,7 +561,7 @@ $_fallback-size: 40px;
   // Needs extra specificity to override the focus, hover, active states.
   .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive & {
     .mdc-checkbox__native-control ~ .mat-mdc-checkbox-ripple .mat-ripple-element,
-    .mdc-checkbox__native-control ~ .mdc-checkbox__ripple {
+    .mdc-checkbox__native-control + .mdc-checkbox__ripple {
       @include token-utils.create-token-slot(
         background-color,
         unselected-hover-state-layer-color

From 29f1da4fb79fd681319e42531f180ec46955a16d Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Mon, 27 Jan 2025 16:04:31 -0500
Subject: [PATCH 34/91] perf(material/button): Change frequently missed
 descendant selectors to child selectors (#30385)

(cherry picked from commit 21586aee82c9051149c519468d639459b3e72391)
---
 src/material/button/_button-base.scss | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/material/button/_button-base.scss b/src/material/button/_button-base.scss
index bafc6ee62811..de6c79c2e224 100644
--- a/src/material/button/_button-base.scss
+++ b/src/material/button/_button-base.scss
@@ -52,7 +52,7 @@
     @include layout-common.fill();
   }
 
-  &:focus .mat-focus-indicator::before {
+  &:focus > .mat-focus-indicator::before {
     content: '';
   }
 }
@@ -78,12 +78,12 @@
     &.cdk-program-focused,
     &.cdk-keyboard-focused,
     &.mat-mdc-button-disabled-interactive:focus {
-      .mat-mdc-button-persistent-ripple::before {
+      > .mat-mdc-button-persistent-ripple::before {
         @include token-utils.create-token-slot(opacity, focus-state-layer-opacity);
       }
     }
 
-    &:active .mat-mdc-button-persistent-ripple::before {
+    &:active > .mat-mdc-button-persistent-ripple::before {
       @include token-utils.create-token-slot(opacity, pressed-state-layer-opacity);
     }
   }

From f936c97fbe25d20b3c2e652c183f17e25bf2d726 Mon Sep 17 00:00:00 2001
From: Sepandar Derakhshandeh <69620649+Sepandard@users.noreply.github.com>
Date: Tue, 28 Jan 2025 10:46:05 +0330
Subject: [PATCH 35/91] fix(cdk/tree): fix broken examples in stackblitz
 (#30387)

resolves #30159

(cherry picked from commit 8b876d8e4a6ba2b2c726513a54ab074e9659851e)
---
 ...ree-flat-children-accessor-example-data.ts | 28 ++++++++
 ...cdk-tree-flat-children-accessor-example.ts |  2 +-
 ...-tree-flat-level-accessor-example-data.ts} | 29 ---------
 .../cdk-tree-flat-level-accessor-example.ts   |  2 +-
 ...e-nested-children-accessor-example-data.ts | 28 ++++++++
 ...k-tree-nested-children-accessor-example.ts |  2 +-
 ...tree-nested-level-accessor-example-data.ts | 65 +++++++++++++++++++
 .../cdk-tree-nested-level-accessor-example.ts |  2 +-
 8 files changed, 125 insertions(+), 33 deletions(-)
 create mode 100644 src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example-data.ts
 rename src/components-examples/cdk/tree/{tree-data.ts => cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example-data.ts} (61%)
 create mode 100644 src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example-data.ts
 create mode 100644 src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example-data.ts

diff --git a/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example-data.ts b/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example-data.ts
new file mode 100644
index 000000000000..acac71a54292
--- /dev/null
+++ b/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example-data.ts
@@ -0,0 +1,28 @@
+/**
+ * Food data with nested structure.
+ * Each node has a name and an optional list of children.
+ */
+export interface NestedFoodNode {
+  name: string;
+  children?: NestedFoodNode[];
+}
+
+export const NESTED_DATA: NestedFoodNode[] = [
+  {
+    name: 'Fruit',
+    children: [{name: 'Apple'}, {name: 'Banana'}, {name: 'Fruit loops'}],
+  },
+  {
+    name: 'Vegetables',
+    children: [
+      {
+        name: 'Green',
+        children: [{name: 'Broccoli'}, {name: 'Brussels sprouts'}],
+      },
+      {
+        name: 'Orange',
+        children: [{name: 'Pumpkins'}, {name: 'Carrots'}],
+      },
+    ],
+  },
+];
diff --git a/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example.ts b/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example.ts
index 984ef463f93c..05afa9bc04a7 100644
--- a/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example.ts
+++ b/src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example.ts
@@ -5,7 +5,7 @@ import {MatButtonModule} from '@angular/material/button';
 import {MatIconModule} from '@angular/material/icon';
 import {timer} from 'rxjs';
 import {mapTo} from 'rxjs/operators';
-import {NestedFoodNode, NESTED_DATA} from '../tree-data';
+import {NestedFoodNode, NESTED_DATA} from './cdk-tree-flat-children-accessor-example-data';
 
 function flattenNodes(nodes: NestedFoodNode[]): NestedFoodNode[] {
   const flattenedNodes = [];
diff --git a/src/components-examples/cdk/tree/tree-data.ts b/src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example-data.ts
similarity index 61%
rename from src/components-examples/cdk/tree/tree-data.ts
rename to src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example-data.ts
index 780c969d532f..7adbadfd8412 100644
--- a/src/components-examples/cdk/tree/tree-data.ts
+++ b/src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example-data.ts
@@ -63,32 +63,3 @@ export const FLAT_DATA: FlatFoodNode[] = [
     level: 2,
   },
 ];
-
-/**
- * Food data with nested structure.
- * Each node has a name and an optional list of children.
- */
-export interface NestedFoodNode {
-  name: string;
-  children?: NestedFoodNode[];
-}
-
-export const NESTED_DATA: NestedFoodNode[] = [
-  {
-    name: 'Fruit',
-    children: [{name: 'Apple'}, {name: 'Banana'}, {name: 'Fruit loops'}],
-  },
-  {
-    name: 'Vegetables',
-    children: [
-      {
-        name: 'Green',
-        children: [{name: 'Broccoli'}, {name: 'Brussels sprouts'}],
-      },
-      {
-        name: 'Orange',
-        children: [{name: 'Pumpkins'}, {name: 'Carrots'}],
-      },
-    ],
-  },
-];
diff --git a/src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example.ts b/src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example.ts
index 486cf9ca84c6..0c43535778d6 100644
--- a/src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example.ts
+++ b/src/components-examples/cdk/tree/cdk-tree-flat-level-accessor/cdk-tree-flat-level-accessor-example.ts
@@ -3,7 +3,7 @@ import {CdkTree, CdkTreeModule} from '@angular/cdk/tree';
 import {ChangeDetectionStrategy, Component, ViewChild} from '@angular/core';
 import {MatButtonModule} from '@angular/material/button';
 import {MatIconModule} from '@angular/material/icon';
-import {FlatFoodNode, FLAT_DATA} from '../tree-data';
+import {FlatFoodNode, FLAT_DATA} from './cdk-tree-flat-level-accessor-example-data';
 
 /**
  * @title Tree with flat nodes
diff --git a/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example-data.ts b/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example-data.ts
new file mode 100644
index 000000000000..acac71a54292
--- /dev/null
+++ b/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example-data.ts
@@ -0,0 +1,28 @@
+/**
+ * Food data with nested structure.
+ * Each node has a name and an optional list of children.
+ */
+export interface NestedFoodNode {
+  name: string;
+  children?: NestedFoodNode[];
+}
+
+export const NESTED_DATA: NestedFoodNode[] = [
+  {
+    name: 'Fruit',
+    children: [{name: 'Apple'}, {name: 'Banana'}, {name: 'Fruit loops'}],
+  },
+  {
+    name: 'Vegetables',
+    children: [
+      {
+        name: 'Green',
+        children: [{name: 'Broccoli'}, {name: 'Brussels sprouts'}],
+      },
+      {
+        name: 'Orange',
+        children: [{name: 'Pumpkins'}, {name: 'Carrots'}],
+      },
+    ],
+  },
+];
diff --git a/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example.ts b/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example.ts
index d1cfd6f73f38..910aafbf9343 100644
--- a/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example.ts
+++ b/src/components-examples/cdk/tree/cdk-tree-nested-children-accessor/cdk-tree-nested-children-accessor-example.ts
@@ -3,7 +3,7 @@ import {CdkTree, CdkTreeModule} from '@angular/cdk/tree';
 import {ChangeDetectionStrategy, Component, ViewChild} from '@angular/core';
 import {MatButtonModule} from '@angular/material/button';
 import {MatIconModule} from '@angular/material/icon';
-import {NestedFoodNode, NESTED_DATA} from '../tree-data';
+import {NestedFoodNode, NESTED_DATA} from './cdk-tree-nested-children-accessor-example-data';
 
 function flattenNodes(nodes: NestedFoodNode[]): NestedFoodNode[] {
   const flattenedNodes = [];
diff --git a/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example-data.ts b/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example-data.ts
new file mode 100644
index 000000000000..7adbadfd8412
--- /dev/null
+++ b/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example-data.ts
@@ -0,0 +1,65 @@
+/** Flat node with expandable and level information */
+export interface FlatFoodNode {
+  expandable: boolean;
+  name: string;
+  level: number;
+  isExpanded?: boolean;
+}
+
+export const FLAT_DATA: FlatFoodNode[] = [
+  {
+    name: 'Fruit',
+    expandable: true,
+    level: 0,
+  },
+  {
+    name: 'Apple',
+    expandable: false,
+    level: 1,
+  },
+  {
+    name: 'Banana',
+    expandable: false,
+    level: 1,
+  },
+  {
+    name: 'Fruit loops',
+    expandable: false,
+    level: 1,
+  },
+  {
+    name: 'Vegetables',
+    expandable: true,
+    level: 0,
+  },
+  {
+    name: 'Green',
+    expandable: true,
+    level: 1,
+  },
+  {
+    name: 'Broccoli',
+    expandable: false,
+    level: 2,
+  },
+  {
+    name: 'Brussels sprouts',
+    expandable: false,
+    level: 2,
+  },
+  {
+    name: 'Orange',
+    expandable: true,
+    level: 1,
+  },
+  {
+    name: 'Pumpkins',
+    expandable: false,
+    level: 2,
+  },
+  {
+    name: 'Carrots',
+    expandable: false,
+    level: 2,
+  },
+];
diff --git a/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example.ts b/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example.ts
index 0505e70669ae..4b2c9b641c6d 100644
--- a/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example.ts
+++ b/src/components-examples/cdk/tree/cdk-tree-nested-level-accessor/cdk-tree-nested-level-accessor-example.ts
@@ -3,7 +3,7 @@ import {CdkTree, CdkTreeModule} from '@angular/cdk/tree';
 import {ChangeDetectionStrategy, Component, ViewChild} from '@angular/core';
 import {MatButtonModule} from '@angular/material/button';
 import {MatIconModule} from '@angular/material/icon';
-import {FLAT_DATA, FlatFoodNode} from '../tree-data';
+import {FLAT_DATA, FlatFoodNode} from './cdk-tree-nested-level-accessor-example-data';
 
 /**
  * @title Tree with nested nodes and level accessor

From ad786f492e73580d60de99cf5da1ebb12f2b1f6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joy=20Serqui=C3=B1a?=
 <44146839+essjay05@users.noreply.github.com>
Date: Mon, 27 Jan 2025 23:18:07 -0800
Subject: [PATCH 36/91] docs: updates buttons with icons a11y recommendations
 (#30400)

Updates Buttons with icons documentation to recommend that any icon
button be a minimum of 48x48 to be fully accessible and easily
clickable on smaller screens.

(cherry picked from commit d84a4c3b26dd2bdb14e6403eadc2cae8cca2fcec)
---
 src/material/button/button.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/material/button/button.md b/src/material/button/button.md
index 6b51d9963fc0..4ed6d42af291 100644
--- a/src/material/button/button.md
+++ b/src/material/button/button.md
@@ -68,7 +68,7 @@ with any assistive technology your application supports.
 Buttons or links containing only icons (such as `mat-fab`, `mat-mini-fab`, and `mat-icon-button`)
 should be given a meaningful label via `aria-label` or `aria-labelledby`. [See the documentation
 for `MatIcon`](https://material.angular.io/components/icon) for more
-information on using icons in buttons.
+information on using icons in buttons. Additionally, to be fully accessible the icon should have a minimum touch-target of 48x48 to ensure that the icon is easily clickable particularly on mobile devices and small screens.
 
 #### Toggle buttons
 [See the documentation for `MatButtonToggle`](https://material.angular.io/components/button-toggle)

From be49103c505403055f19f1dc893587b5d73dd355 Mon Sep 17 00:00:00 2001
From: Naji <54370141+naaajii@users.noreply.github.com>
Date: Tue, 28 Jan 2025 20:10:52 +0500
Subject: [PATCH 37/91] refactor(cdk/a11y): explicitly add `Provider` type
 (#30393)

add `Provider` type to `NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER` as the
inferred type throws error when running dev-app locally

(cherry picked from commit be74ffeab87b838b6086951250b37cf589c32f08)
---
 src/cdk/a11y/key-manager/noop-tree-key-manager.ts | 3 ++-
 tools/public_api_guard/cdk/a11y.md                | 6 ++----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/cdk/a11y/key-manager/noop-tree-key-manager.ts b/src/cdk/a11y/key-manager/noop-tree-key-manager.ts
index b8a243d0ae99..e58e397e1e9e 100644
--- a/src/cdk/a11y/key-manager/noop-tree-key-manager.ts
+++ b/src/cdk/a11y/key-manager/noop-tree-key-manager.ts
@@ -13,6 +13,7 @@ import {
   TreeKeyManagerItem,
   TreeKeyManagerStrategy,
 } from './tree-key-manager-strategy';
+import {Provider} from '@angular/core';
 
 // NoopTreeKeyManager is a "noop" implementation of TreeKeyMangerStrategy. Methods are noops. Does
 // not emit to streams.
@@ -102,7 +103,7 @@ export function NOOP_TREE_KEY_MANAGER_FACTORY<
  *
  * @breaking-change 21.0.0
  */
-export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER = {
+export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER: Provider = {
   provide: TREE_KEY_MANAGER,
   useFactory: NOOP_TREE_KEY_MANAGER_FACTORY,
 };
diff --git a/tools/public_api_guard/cdk/a11y.md b/tools/public_api_guard/cdk/a11y.md
index d447dca237d1..ce3629d5b870 100644
--- a/tools/public_api_guard/cdk/a11y.md
+++ b/tools/public_api_guard/cdk/a11y.md
@@ -17,6 +17,7 @@ import { NgZone } from '@angular/core';
 import { Observable } from 'rxjs';
 import { OnChanges } from '@angular/core';
 import { OnDestroy } from '@angular/core';
+import { Provider } from '@angular/core';
 import { QueryList } from '@angular/core';
 import { Signal } from '@angular/core';
 import { SimpleChanges } from '@angular/core';
@@ -430,10 +431,7 @@ export const MESSAGES_CONTAINER_ID = "cdk-describedby-message-container";
 export function NOOP_TREE_KEY_MANAGER_FACTORY<T extends TreeKeyManagerItem>(): TreeKeyManagerFactory<T>;
 
 // @public @deprecated
-export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER: {
-    provide: InjectionToken<TreeKeyManagerFactory<any>>;
-    useFactory: typeof NOOP_TREE_KEY_MANAGER_FACTORY;
-};
+export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER: Provider;
 
 // @public @deprecated
 export class NoopTreeKeyManager<T extends TreeKeyManagerItem> implements TreeKeyManagerStrategy<T> {

From b72838b10ddff42bba788ffee202651ec1017918 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 28 Jan 2025 16:50:43 +0100
Subject: [PATCH 38/91] fix(cdk/platform): preserve compatibility with angular
 versions less than 19.1 (#30401) (#30407)

Fixes that we were importing a symbol only available in Angular 19.1, even though our peer dependencies allow 19.0.x.

Fixes #30388.
---
 .../platform/features/backwards-compatibility.ts    | 12 ++++++++++--
 tools/public_api_guard/cdk/platform.md              | 13 +++++++++++--
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/cdk/platform/features/backwards-compatibility.ts b/src/cdk/platform/features/backwards-compatibility.ts
index 717f880d7654..8be208a78268 100644
--- a/src/cdk/platform/features/backwards-compatibility.ts
+++ b/src/cdk/platform/features/backwards-compatibility.ts
@@ -6,7 +6,15 @@
  * found in the LICENSE file at https://angular.dev/license
  */
 
-import {Renderer2, VERSION, ListenerOptions} from '@angular/core';
+import {Renderer2, VERSION} from '@angular/core';
+
+// TODO(crisbeto): replace interface with the one from core when making breaking changes for v20.
+/** Options when binding events manually. */
+export interface _ListenerOptions {
+  capture?: boolean;
+  once?: boolean;
+  passive?: boolean;
+}
 
 // TODO(crisbeto): remove this function when making breaking changes for v20.
 /**
@@ -20,7 +28,7 @@ export function _bindEventWithOptions(
   target: EventTarget,
   eventName: string,
   callback: (event: any) => boolean | void,
-  options: ListenerOptions,
+  options: _ListenerOptions,
 ): () => void {
   const major = parseInt(VERSION.major);
   const minor = parseInt(VERSION.minor);
diff --git a/tools/public_api_guard/cdk/platform.md b/tools/public_api_guard/cdk/platform.md
index a93b2f19e708..3721a386f6c1 100644
--- a/tools/public_api_guard/cdk/platform.md
+++ b/tools/public_api_guard/cdk/platform.md
@@ -5,11 +5,10 @@
 ```ts
 
 import * as i0 from '@angular/core';
-import { ListenerOptions } from '@angular/core';
 import { Renderer2 } from '@angular/core';
 
 // @public
-export function _bindEventWithOptions(renderer: Renderer2, target: EventTarget, eventName: string, callback: (event: any) => boolean | void, options: ListenerOptions): () => void;
+export function _bindEventWithOptions(renderer: Renderer2, target: EventTarget, eventName: string, callback: (event: any) => boolean | void, options: _ListenerOptions): () => void;
 
 // @public
 export function _getEventTarget<T extends EventTarget>(event: Event): T | null;
@@ -29,6 +28,16 @@ export function getSupportedInputTypes(): Set<string>;
 // @public
 export function _isTestEnvironment(): boolean;
 
+// @public
+export interface _ListenerOptions {
+    // (undocumented)
+    capture?: boolean;
+    // (undocumented)
+    once?: boolean;
+    // (undocumented)
+    passive?: boolean;
+}
+
 // @public
 export function normalizePassiveListenerOptions(options: AddEventListenerOptions): AddEventListenerOptions | boolean;
 

From 0852c88eaad171d49bad594687260b4642fc1df6 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Wed, 29 Jan 2025 14:03:24 +0100
Subject: [PATCH 39/91] fix(cdk/dialog): default aria-modal to false (#30411)

Having `aria-modal="true"` appears to hide other overlay-based components like `mat-select` from assistive technology. These changes set the default to `false` since the attribute is redundant anyway, because the dialog marks all outside content as `aria-hidden`.

(cherry picked from commit c1ff40f3bfdfc8dcbe073aa86896bb17d6f97de0)
---
 src/cdk/dialog/dialog-config.ts                  |  8 ++++++--
 src/cdk/dialog/dialog.spec.ts                    | 15 +++++++++++++--
 src/material/bottom-sheet/bottom-sheet-config.ts |  8 ++++++--
 src/material/bottom-sheet/bottom-sheet.spec.ts   | 12 +++++++++++-
 src/material/dialog/dialog-config.ts             |  8 ++++++--
 src/material/dialog/dialog.spec.ts               | 15 +++++++++++++--
 6 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/src/cdk/dialog/dialog-config.ts b/src/cdk/dialog/dialog-config.ts
index ff63a19068a4..584f3762991f 100644
--- a/src/cdk/dialog/dialog-config.ts
+++ b/src/cdk/dialog/dialog-config.ts
@@ -87,8 +87,12 @@ export class DialogConfig<D = unknown, R = unknown, C extends BasePortalOutlet =
   /** Dialog label applied via `aria-label` */
   ariaLabel?: string | null = null;
 
-  /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */
-  ariaModal?: boolean = true;
+  /**
+   * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,
+   * because it can interfere with other overlay-based components (e.g. `mat-select`) and because
+   * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.
+   */
+  ariaModal?: boolean = false;
 
   /**
    * Where the dialog should focus on open.
diff --git a/src/cdk/dialog/dialog.spec.ts b/src/cdk/dialog/dialog.spec.ts
index f224117dea08..bda16129413e 100644
--- a/src/cdk/dialog/dialog.spec.ts
+++ b/src/cdk/dialog/dialog.spec.ts
@@ -94,7 +94,18 @@ describe('Dialog', () => {
     viewContainerFixture.detectChanges();
     let dialogContainerElement = overlayContainerElement.querySelector('cdk-dialog-container')!;
     expect(dialogContainerElement.getAttribute('role')).toBe('dialog');
-    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('true');
+    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('false');
+  });
+
+  it('should be able to set aria-modal', () => {
+    dialog.open(PizzaMsg, {
+      viewContainerRef: testViewContainerRef,
+      ariaModal: true,
+    });
+    viewContainerFixture.detectChanges();
+
+    const container = overlayContainerElement.querySelector('cdk-dialog-container')!;
+    expect(container.getAttribute('aria-modal')).toBe('true');
   });
 
   it('should open a dialog with a template', () => {
@@ -117,7 +128,7 @@ describe('Dialog', () => {
 
     let dialogContainerElement = overlayContainerElement.querySelector('cdk-dialog-container')!;
     expect(dialogContainerElement.getAttribute('role')).toBe('dialog');
-    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('true');
+    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('false');
 
     dialogRef.close();
   });
diff --git a/src/material/bottom-sheet/bottom-sheet-config.ts b/src/material/bottom-sheet/bottom-sheet-config.ts
index ded882266ce6..6740e47bf4aa 100644
--- a/src/material/bottom-sheet/bottom-sheet-config.ts
+++ b/src/material/bottom-sheet/bottom-sheet-config.ts
@@ -44,8 +44,12 @@ export class MatBottomSheetConfig<D = any> {
   /** Aria label to assign to the bottom sheet element. */
   ariaLabel?: string | null = null;
 
-  /** Whether this is a modal bottom sheet. Used to set the `aria-modal` attribute. */
-  ariaModal?: boolean = true;
+  /**
+   * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,
+   * because it can interfere with other overlay-based components (e.g. `mat-select`) and because
+   * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.
+   */
+  ariaModal?: boolean = false;
 
   /**
    * Whether the bottom sheet should close when the user goes backwards/forwards in history.
diff --git a/src/material/bottom-sheet/bottom-sheet.spec.ts b/src/material/bottom-sheet/bottom-sheet.spec.ts
index 4f978f23767d..b632d66e7f99 100644
--- a/src/material/bottom-sheet/bottom-sheet.spec.ts
+++ b/src/material/bottom-sheet/bottom-sheet.spec.ts
@@ -153,7 +153,17 @@ describe('MatBottomSheet', () => {
 
     const containerElement = overlayContainerElement.querySelector('mat-bottom-sheet-container')!;
     expect(containerElement.getAttribute('role')).toBe('dialog');
-    expect(containerElement.getAttribute('aria-modal')).toBe('true');
+    expect(containerElement.getAttribute('aria-modal')).toBe('false');
+  });
+
+  it('should be able to set aria-modal', () => {
+    bottomSheet.open(PizzaMsg, {
+      ariaModal: true,
+    });
+    viewContainerFixture.detectChanges();
+
+    const container = overlayContainerElement.querySelector('mat-bottom-sheet-container')!;
+    expect(container.getAttribute('aria-modal')).toBe('true');
   });
 
   it('should close a bottom sheet via the escape key', fakeAsync(() => {
diff --git a/src/material/dialog/dialog-config.ts b/src/material/dialog/dialog-config.ts
index 3f50db03278e..66c106f15472 100644
--- a/src/material/dialog/dialog-config.ts
+++ b/src/material/dialog/dialog-config.ts
@@ -104,8 +104,12 @@ export class MatDialogConfig<D = any> {
   /** Aria label to assign to the dialog element. */
   ariaLabel?: string | null = null;
 
-  /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */
-  ariaModal?: boolean = true;
+  /**
+   * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,
+   * because it can interfere with other overlay-based components (e.g. `mat-select`) and because
+   * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.
+   */
+  ariaModal?: boolean = false;
 
   /**
    * Where the dialog should focus on open.
diff --git a/src/material/dialog/dialog.spec.ts b/src/material/dialog/dialog.spec.ts
index 1aa69b524ff6..b3752a42af52 100644
--- a/src/material/dialog/dialog.spec.ts
+++ b/src/material/dialog/dialog.spec.ts
@@ -112,7 +112,18 @@ describe('MatDialog', () => {
     viewContainerFixture.detectChanges();
     let dialogContainerElement = overlayContainerElement.querySelector('mat-dialog-container')!;
     expect(dialogContainerElement.getAttribute('role')).toBe('dialog');
-    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('true');
+    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('false');
+  });
+
+  it('should be able to set aria-modal', () => {
+    dialog.open(PizzaMsg, {
+      viewContainerRef: testViewContainerRef,
+      ariaModal: true,
+    });
+    viewContainerFixture.detectChanges();
+
+    const container = overlayContainerElement.querySelector('mat-dialog-container')!;
+    expect(container.getAttribute('aria-modal')).toBe('true');
   });
 
   it('should open a dialog with a template', () => {
@@ -134,7 +145,7 @@ describe('MatDialog', () => {
 
     let dialogContainerElement = overlayContainerElement.querySelector('mat-dialog-container')!;
     expect(dialogContainerElement.getAttribute('role')).toBe('dialog');
-    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('true');
+    expect(dialogContainerElement.getAttribute('aria-modal')).toBe('false');
 
     dialogRef.close();
   });

From c1a3caeed8ff25b7756231bc77bebeeb7ff329bb Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Wed, 29 Jan 2025 18:09:54 +0100
Subject: [PATCH 40/91] fix(cdk/text-field): auto sizing broken if user styles
 stretch the element (#30412)

Fixes that our logic for measuring the `textarea` was being thrown off by user code that stretches it out.

(cherry picked from commit 73022d8e20a5d9b7ba94f5ca6bc3eb53b22c1895)
---
 src/cdk/text-field/autosize.ts | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/cdk/text-field/autosize.ts b/src/cdk/text-field/autosize.ts
index 029c54142323..7d17f795de54 100644
--- a/src/cdk/text-field/autosize.ts
+++ b/src/cdk/text-field/autosize.ts
@@ -198,26 +198,30 @@ export class CdkTextareaAutosize implements AfterViewInit, DoCheck, OnDestroy {
     }
 
     // Use a clone element because we have to override some styles.
-    let textareaClone = this._textareaElement.cloneNode(false) as HTMLTextAreaElement;
+    const textareaClone = this._textareaElement.cloneNode(false) as HTMLTextAreaElement;
+    const cloneStyles = textareaClone.style;
     textareaClone.rows = 1;
 
     // Use `position: absolute` so that this doesn't cause a browser layout and use
     // `visibility: hidden` so that nothing is rendered. Clear any other styles that
     // would affect the height.
-    textareaClone.style.position = 'absolute';
-    textareaClone.style.visibility = 'hidden';
-    textareaClone.style.border = 'none';
-    textareaClone.style.padding = '0';
-    textareaClone.style.height = '';
-    textareaClone.style.minHeight = '';
-    textareaClone.style.maxHeight = '';
+    cloneStyles.position = 'absolute';
+    cloneStyles.visibility = 'hidden';
+    cloneStyles.border = 'none';
+    cloneStyles.padding = '0';
+    cloneStyles.height = '';
+    cloneStyles.minHeight = '';
+    cloneStyles.maxHeight = '';
+
+    // App styles might be messing with the height through the positioning properties.
+    cloneStyles.top = cloneStyles.bottom = cloneStyles.left = cloneStyles.right = 'auto';
 
     // In Firefox it happens that textarea elements are always bigger than the specified amount
     // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.
     // As a workaround that removes the extra space for the scrollbar, we can just set overflow
     // to hidden. This ensures that there is no invalid calculation of the line height.
     // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654
-    textareaClone.style.overflow = 'hidden';
+    cloneStyles.overflow = 'hidden';
 
     this._textareaElement.parentNode!.appendChild(textareaClone);
     this._cachedLineHeight = textareaClone.clientHeight;

From b21e4f727402f3a8e5ed42a32d6f52d466959c4a Mon Sep 17 00:00:00 2001
From: Wagner Maciel <wagnermaciel@google.com>
Date: Wed, 29 Jan 2025 19:37:21 +0000
Subject: [PATCH 41/91] release: cut the v19.1.2 release

---
 CHANGELOG.md | 24 ++++++++++++++++++++++++
 package.json |  2 +-
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e77a587316f..cc9777cf3a2b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,27 @@
+<a name="19.1.2"></a>
+# 19.1.2 "dolomite-domino" (2025-01-29)
+### cdk
+| Commit | Type | Description |
+| -- | -- | -- |
+| [0852c88ea](https://github.com/angular/components/commit/0852c88eaad171d49bad594687260b4642fc1df6) | fix | **dialog:** default aria-modal to false ([#30411](https://github.com/angular/components/pull/30411)) |
+| [b72838b10](https://github.com/angular/components/commit/b72838b10ddff42bba788ffee202651ec1017918) | fix | **platform:** preserve compatibility with angular versions less than 19.1 ([#30401](https://github.com/angular/components/pull/30401)) ([#30407](https://github.com/angular/components/pull/30407)) |
+| [5b4ca17d5](https://github.com/angular/components/commit/5b4ca17d5381cd0a8c4b439baf91edb571f3bf7b) | fix | **table:** Column sizing and scrolling bug when number of columns in table changes ([#30378](https://github.com/angular/components/pull/30378)) |
+| [c1a3caeed](https://github.com/angular/components/commit/c1a3caeed8ff25b7756231bc77bebeeb7ff329bb) | fix | **text-field:** auto sizing broken if user styles stretch the element ([#30412](https://github.com/angular/components/pull/30412)) |
+| [f936c97fb](https://github.com/angular/components/commit/f936c97fbe25d20b3c2e652c183f17e25bf2d726) | fix | **tree:** fix broken examples in stackblitz ([#30387](https://github.com/angular/components/pull/30387)) |
+### material
+| Commit | Type | Description |
+| -- | -- | -- |
+| [b68347467](https://github.com/angular/components/commit/b68347467279635c28e48077dd1a076b5499e0cd) | fix | **button-toggle:** incorrect shape of focus indicator in vertical group ([#30376](https://github.com/angular/components/pull/30376)) |
+| [4a96a25e1](https://github.com/angular/components/commit/4a96a25e12683b438a168e4acbfaca7ef89766da) | fix | **select:** fixed text color for selected options in multiple select ([#30367](https://github.com/angular/components/pull/30367)) |
+| [29f1da4fb](https://github.com/angular/components/commit/29f1da4fb79fd681319e42531f180ec46955a16d) | perf | **button:** Change frequently missed descendant selectors to child selectors ([#30385](https://github.com/angular/components/pull/30385)) |
+| [5d6d25fc5](https://github.com/angular/components/commit/5d6d25fc5071d0825fe13b66974339279ca7fe74) | perf | **checkbox:** Optimize css selectors ([#30386](https://github.com/angular/components/pull/30386)) |
+### google-maps
+| Commit | Type | Description |
+| -- | -- | -- |
+| [836ad799f](https://github.com/angular/components/commit/836ad799f4114cbca347743a8d56c4a16bd840b1) | fix | hide info window node when opened with content ([#30392](https://github.com/angular/components/pull/30392)) |
+
+<!-- CHANGELOG SPLIT MARKER -->
+
 <a name="19.1.1"></a>
 # 19.1.1 "lanthanum-labrador" (2025-01-22)
 ### cdk
diff --git a/package.json b/package.json
index 8ac40dd19671..8d42392075b3 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.1",
+  "version": "19.1.2",
   "dependencies": {
     "@angular/animations": "^19.1.3",
     "@angular/common": "^19.1.3",

From 37436bd299ebe48b54213b91aa42cbdbe3dfb3f7 Mon Sep 17 00:00:00 2001
From: Kaushal Savani <kaushalsavani@gmail.com>
Date: Thu, 30 Jan 2025 22:17:00 +0530
Subject: [PATCH 42/91] fix(material/button-toggle): make null value selected
 on init (#25553)

When button-toggle have init value as null, it's not get selected. This fix remove condition which stopping null button to select.

Fixes #25472

(cherry picked from commit 9ea468a591f5ba96628aa28c47e72c2086fec90a)
---
 .../button-toggle/button-toggle.spec.ts       | 20 +++++++++++++++--
 src/material/button-toggle/button-toggle.ts   | 22 +++++++++----------
 2 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/material/button-toggle/button-toggle.spec.ts b/src/material/button-toggle/button-toggle.spec.ts
index cc66f085dd50..3c37aa3f1008 100644
--- a/src/material/button-toggle/button-toggle.spec.ts
+++ b/src/material/button-toggle/button-toggle.spec.ts
@@ -1004,6 +1004,22 @@ describe('MatButtonToggle without forms', () => {
     expect(fixture.componentInstance.toggles.toArray()[1].checked).toBe(true);
   });
 
+  it('should not throw on init when toggles are repeated and there is an initial value null', () => {
+    const fixture = TestBed.createComponent(RepeatedButtonTogglesWithPreselectedValue);
+    fixture.detectChanges();
+
+    expect(fixture.componentInstance.toggleGroup.value).toBe('Two');
+    expect(fixture.componentInstance.toggles.toArray()[1].checked).toBe(true);
+
+    fixture.componentInstance.possibleValues = [null, 'Five', 'Six'];
+    fixture.componentInstance.value = null;
+    fixture.changeDetectorRef.markForCheck();
+    fixture.detectChanges();
+
+    expect(fixture.componentInstance.toggleGroup.value).toBe(null);
+    expect(fixture.componentInstance.toggles.toArray()[0].checked).toBe(true);
+  });
+
   it('should not throw on init when toggles are repeated and there is an initial value', () => {
     const fixture = TestBed.createComponent(ButtonToggleWithStaticName);
     fixture.detectChanges();
@@ -1245,8 +1261,8 @@ class RepeatedButtonTogglesWithPreselectedValue {
   @ViewChild(MatButtonToggleGroup) toggleGroup: MatButtonToggleGroup;
   @ViewChildren(MatButtonToggle) toggles: QueryList<MatButtonToggle>;
 
-  possibleValues = ['One', 'Two', 'Three'];
-  value = 'Two';
+  possibleValues: (string | null)[] = ['One', 'Two', 'Three'];
+  value: string | null = 'Two';
 }
 
 @Component({
diff --git a/src/material/button-toggle/button-toggle.ts b/src/material/button-toggle/button-toggle.ts
index 2838742faa19..8ccdbce0ad52 100644
--- a/src/material/button-toggle/button-toggle.ts
+++ b/src/material/button-toggle/button-toggle.ts
@@ -7,10 +7,15 @@
  */
 
 import {_IdGenerator, FocusMonitor} from '@angular/cdk/a11y';
+import {Direction, Directionality} from '@angular/cdk/bidi';
 import {SelectionModel} from '@angular/cdk/collections';
-import {DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, SPACE, ENTER} from '@angular/cdk/keycodes';
+import {DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW} from '@angular/cdk/keycodes';
+import {_CdkPrivateStyleLoader} from '@angular/cdk/private';
 import {
   AfterContentInit,
+  AfterViewInit,
+  ANIMATION_MODULE_TYPE,
+  booleanAttribute,
   ChangeDetectionStrategy,
   ChangeDetectorRef,
   Component,
@@ -19,6 +24,9 @@ import {
   ElementRef,
   EventEmitter,
   forwardRef,
+  HostAttributeToken,
+  inject,
+  InjectionToken,
   Input,
   OnDestroy,
   OnInit,
@@ -26,17 +34,9 @@ import {
   QueryList,
   ViewChild,
   ViewEncapsulation,
-  InjectionToken,
-  AfterViewInit,
-  booleanAttribute,
-  inject,
-  HostAttributeToken,
-  ANIMATION_MODULE_TYPE,
 } from '@angular/core';
-import {Direction, Directionality} from '@angular/cdk/bidi';
 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
-import {MatRipple, MatPseudoCheckbox, _StructuralStylesLoader} from '@angular/material/core';
-import {_CdkPrivateStyleLoader} from '@angular/cdk/private';
+import {_StructuralStylesLoader, MatPseudoCheckbox, MatRipple} from '@angular/material/core';
 
 /**
  * @deprecated No longer used.
@@ -513,7 +513,7 @@ export class MatButtonToggleGroup implements ControlValueAccessor, OnInit, After
   /** Selects a value if there's a toggle that corresponds to it. */
   private _selectValue(value: any, toggles: MatButtonToggle[]) {
     for (const toggle of toggles) {
-      if (toggle.value != null && toggle.value === value) {
+      if (toggle.value === value) {
         toggle.checked = true;
         this._selectionModel.select(toggle);
         if (!this.multiple) {

From 7409b29ec7f991cc42a38bfeb4a73f0f2817b646 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 31 Jan 2025 17:29:15 +0100
Subject: [PATCH 43/91] build: reformat docs site code (#30418)

Currently Prettier will complain for any docs site file we change since it was never reformatted. These changes update the formatting.

(cherry picked from commit 2081cb9825215eb4b376500b76b6593693c1a16b)
---
 material.angular.io/.eslintrc.json            |  58 ++-------
 material.angular.io/BUILD.bazel               |  62 +++++----
 material.angular.io/e2e/protractor.conf.js    |  22 ++--
 material.angular.io/e2e/src/app.e2e-spec.ts   |   8 +-
 material.angular.io/e2e/src/app.po.ts         |   5 +-
 material.angular.io/e2e/tsconfig.json         |   6 +-
 material.angular.io/karma-custom-launchers.js |  15 +--
 material.angular.io/karma.conf.js             |   6 +-
 material.angular.io/scenes/BUILD.bazel        |   6 +-
 .../scenes/e2e/protractor.conf.js             |  28 ++--
 material.angular.io/scenes/e2e/screenshot.ts  |  10 +-
 material.angular.io/scenes/e2e/src/app.po.ts  |   2 +-
 material.angular.io/scenes/e2e/tsconfig.json  |   6 +-
 material.angular.io/scenes/karma.conf.js      |  11 +-
 .../scenes/src/app/app-routes.ts              |  17 +--
 .../scenes/src/app/app.component.ts           |   4 +-
 .../src/app/scene-viewer/scene-viewer.ts      |  10 +-
 .../scenes/autocomplete/autocomplete-scene.ts |   9 +-
 .../src/app/scenes/badge/badge-scene.ts       |   2 +-
 .../scenes/bottom-sheet/bottom-sheet-scene.ts |   3 +-
 .../src/app/scenes/button/button-scene.ts     |   5 +-
 .../scenes/src/app/scenes/card/card-scene.ts  |   1 -
 .../src/app/scenes/checkbox/checkbox-scene.ts |   2 +-
 .../src/app/scenes/chips/chips-scene.ts       |   2 +-
 .../scenes/src/app/scenes/core/core-scene.ts  |   2 +-
 .../app/scenes/datepicker/datepicker-scene.ts |   3 +-
 .../src/app/scenes/dialog/dialog-scene.ts     |   3 +-
 .../src/app/scenes/divider/divider-scene.ts   |   2 +-
 .../app/scenes/expansion/expansion-scene.ts   |   2 +-
 .../app/scenes/form-field/form-field-scene.ts |   6 +-
 .../scenes/src/app/scenes/icon/icon-scene.ts  |   2 +-
 .../src/app/scenes/input/input-scene.ts       |   2 +-
 .../scenes/src/app/scenes/list/list-scene.ts  |   2 +-
 .../scenes/src/app/scenes/menu/menu-scene.ts  |   2 +-
 .../app/scenes/paginator/paginator-scene.ts   |   3 +-
 .../scenes/placeholder/placeholder-scene.ts   |   2 +-
 .../scenes/progress-bar/progress-bar-scene.ts |   3 +-
 .../progress-spinner-scene.ts                 |   3 +-
 .../src/app/scenes/radio/radio-scene.ts       |   2 +-
 .../src/app/scenes/ripples/ripples-scene.ts   |   6 +-
 .../src/app/scenes/select/select-scene.ts     |   2 +-
 .../src/app/scenes/sidenav/sidenav-scene.ts   |   2 +-
 .../scenes/slide-toggle/slide-toggle-scene.ts |   3 +-
 .../src/app/scenes/slider/slider-scene.ts     |   4 +-
 .../app/scenes/snack-bar/snack-bar-scene.ts   |   1 -
 .../scenes/src/app/scenes/sort/sort-scene.ts  |   2 +-
 .../src/app/scenes/stepper/stepper-scene.ts   |   2 +-
 .../src/app/scenes/table/table-scene.ts       |   2 +-
 .../scenes/src/app/scenes/tabs/tabs-scene.ts  |   2 +-
 .../app/scenes/timepicker/timepicker-scene.ts |   3 +-
 .../src/app/scenes/toolbar/toolbar-scene.ts   |   2 +-
 .../src/app/scenes/tooltip/tooltip-scene.ts   |   6 +-
 .../scenes/src/app/scenes/tree/tree-scene.ts  |  10 +-
 .../src/environments/environment.prod.ts      |   2 +-
 .../scenes/src/environments/environment.ts    |   2 +-
 material.angular.io/scenes/src/main.ts        |  10 +-
 material.angular.io/scenes/src/polyfills.ts   |   3 +-
 material.angular.io/scenes/src/test.ts        |   4 +-
 material.angular.io/scenes/tsconfig.app.json  |   9 +-
 material.angular.io/scenes/tsconfig.spec.json |  15 +--
 material.angular.io/src/app/index.ts          |   1 -
 .../src/app/material-docs-app.ts              |   4 +-
 .../component-category-list.spec.ts           |   9 +-
 .../component-category-list.ts                |  20 +--
 .../component-page-header.spec.ts             |   1 -
 .../component-page-header.ts                  |   2 +-
 .../component-sidenav-can-load-guard.ts       |   4 +-
 .../component-sidenav.spec.ts                 |   9 +-
 .../component-sidenav/component-sidenav.ts    | 117 ++++++++---------
 .../component-viewer/component-styling.ts     |  11 +-
 .../component-viewer/component-viewer.spec.ts |  18 +--
 .../component-viewer/component-viewer.ts      | 122 ++++++++----------
 .../app/pages/component-viewer/token-table.ts |  10 +-
 .../app/pages/guide-list/guide-list.spec.ts   |   6 +-
 .../src/app/pages/guide-list/guide-list.ts    |   7 +-
 .../pages/guide-viewer/guide-viewer.spec.ts   |  10 +-
 .../app/pages/guide-viewer/guide-viewer.ts    |  26 ++--
 .../src/app/pages/homepage/homepage.ts        |   3 +-
 .../src/app/pages/not-found/not-found.ts      |   2 +-
 material.angular.io/src/app/routes.ts         |  14 +-
 .../src/app/shared/analytics/analytics.ts     |   7 +-
 .../src/app/shared/carousel/carousel.spec.ts  |  10 +-
 .../src/app/shared/carousel/carousel.ts       |   4 +-
 .../app/shared/cookie-popup/cookie-popup.ts   |   2 +-
 .../shared/doc-viewer/deprecated-tooltip.ts   |  18 +--
 .../shared/doc-viewer/doc-viewer-module.ts    |   7 +-
 .../app/shared/doc-viewer/doc-viewer.spec.ts  |   9 +-
 .../src/app/shared/doc-viewer/doc-viewer.ts   |  70 +++++-----
 .../src/app/shared/doc-viewer/header-link.ts  |   4 +-
 .../documentation-items.ts                    |  37 +++---
 .../app/shared/example-viewer/code-snippet.ts |  10 +-
 .../shared/example-viewer/example-viewer.ts   |  14 +-
 .../src/app/shared/footer/footer.ts           |   2 +-
 .../shared/guide-items/guide-items.spec.ts    |   1 -
 .../src/app/shared/guide-items/guide-items.ts |  17 ++-
 .../src/app/shared/navbar/navbar.ts           |   3 +-
 .../navigation-focus.service.ts               |  41 +++---
 .../navigation-focus/navigation-focus.spec.ts |  35 +++--
 .../navigation-focus/navigation-focus.ts      |   6 +-
 .../shared/stack-blitz/stack-blitz-button.ts  |  23 ++--
 .../stack-blitz/stack-blitz-writer.spec.ts    |  17 +--
 .../shared/stack-blitz/stack-blitz-writer.ts  |  30 +++--
 .../style-manager/style-manager.spec.ts       |  11 +-
 .../app/shared/style-manager/style-manager.ts |   1 -
 .../src/app/shared/support/support.spec.ts    |   2 +-
 .../src/app/shared/support/support.ts         |   5 +-
 .../src/app/shared/svg-viewer/svg-viewer.ts   |   5 +-
 .../table-of-contents.spec.ts                 |  15 +--
 .../table-of-contents/table-of-contents.ts    |  70 +++++-----
 .../app/shared/theme-picker/theme-picker.ts   |  17 ++-
 .../theme-storage/theme-storage.spec.ts       |   5 +-
 .../theme-storage/theme-storage.ts            |   5 +-
 .../shared/version-picker/version-picker.ts   |   6 +-
 .../src/app/testing/testing-module.ts         |   5 +-
 .../src/assets/stack-blitz/angular.json       |  20 +--
 .../src/assets/stack-blitz/karma.conf.js      |  13 +-
 .../src/assets/stack-blitz/src/main.ts        |   6 +-
 .../src/assets/stack-blitz/src/test.ts        |   9 +-
 .../src/assets/stack-blitz/tsconfig.app.json  |   8 +-
 .../src/assets/stack-blitz/tsconfig.json      |   5 +-
 .../src/assets/stack-blitz/tsconfig.spec.json |  13 +-
 material.angular.io/src/main.ts               |  20 +--
 material.angular.io/src/polyfills.ts          |   3 +-
 .../tools/optimize-scene-screenshots.js       |   6 +-
 material.angular.io/tsconfig.app.json         |   9 +-
 material.angular.io/tsconfig.spec.json        |  15 +--
 126 files changed, 638 insertions(+), 830 deletions(-)

diff --git a/material.angular.io/.eslintrc.json b/material.angular.io/.eslintrc.json
index ac195bb30e20..53064e82a2e5 100644
--- a/material.angular.io/.eslintrc.json
+++ b/material.angular.io/.eslintrc.json
@@ -1,24 +1,12 @@
 {
   "root": true,
-  "ignorePatterns": [
-    "*.d.ts",
-    "src/assets/stack-blitz/**/*.ts"
-  ],
+  "ignorePatterns": ["*.d.ts", "src/assets/stack-blitz/**/*.ts"],
   "overrides": [
     {
-      "files": [
-        "*.ts"
-      ],
-      "plugins": [
-        "@stylistic",
-        "@typescript-eslint",
-        "ban"
-      ],
+      "files": ["*.ts"],
+      "plugins": ["@stylistic", "@typescript-eslint", "ban"],
       "parserOptions": {
-        "project": [
-          "tsconfig.json",
-          "e2e/tsconfig.json"
-        ],
+        "project": ["tsconfig.json", "e2e/tsconfig.json"],
         "createDefaultProgram": true
       },
       "extends": [
@@ -53,28 +41,11 @@
             "allowTemplateLiterals": true
           }
         ],
-        "@stylistic/semi": [
-          "error"
-        ],
-        "arrow-parens": [
-          "off",
-          "always"
-        ],
-        "brace-style": [
-          "error",
-          "1tbs"
-        ],
+        "@stylistic/semi": ["error"],
+        "arrow-parens": ["off", "always"],
+        "brace-style": ["error", "1tbs"],
         "import/order": "off",
-        "linebreak-style": [
-          "error",
-          "unix"
-        ],
-        "max-len": [
-          "error",
-          {
-            "code": 100
-          }
-        ],
+        "linebreak-style": ["error", "unix"],
         "ban/ban": [
           "error",
           {
@@ -90,10 +61,7 @@
             "name": "xdescribe"
           },
           {
-            "name": [
-              "Object",
-              "assign"
-            ],
+            "name": ["Object", "assign"],
             "message": "Use the spread operator instead."
           }
         ],
@@ -107,12 +75,8 @@
       }
     },
     {
-      "files": [
-        "*.html"
-      ],
-      "extends": [
-        "plugin:@angular-eslint/template/recommended"
-      ],
+      "files": ["*.html"],
+      "extends": ["plugin:@angular-eslint/template/recommended"],
       "rules": {
         "@angular-eslint/template/accessibility-alt-text": "error",
         "@angular-eslint/template/accessibility-elements-content": "error",
diff --git a/material.angular.io/BUILD.bazel b/material.angular.io/BUILD.bazel
index c7a12d00a617..97c50244a31f 100644
--- a/material.angular.io/BUILD.bazel
+++ b/material.angular.io/BUILD.bazel
@@ -12,56 +12,54 @@ npm_link_all_packages(name = "node_modules")
 copy_to_bin(
     name = "ng-base-config",
     srcs = [
-      "angular.json",
-      "tsconfig.json",
-      "package.json",
+        "angular.json",
+        "package.json",
+        "tsconfig.json",
     ],
 )
 
 # Test config files
 copy_to_bin(
-  name = "ng-base-test-config",
-  srcs = [
-    "karma-custom-launchers.js",
-  ],
+    name = "ng-base-test-config",
+    srcs = [
+        "karma-custom-launchers.js",
+    ],
 )
 
 # Lint config files
 copy_to_bin(
-  name = "ng-base-lint-config",
-  srcs = [
-      ".eslintrc.json",
-  ],
+    name = "ng-base-lint-config",
+    srcs = [
+        ".eslintrc.json",
+    ],
 )
 
-
 # The main application
 ng_app(
     name = "app",
     project_name = "material-angular-io",
     deps = [
-      "//:node_modules/@angular/components-examples",
-      "//:node_modules/@stackblitz/sdk",
-      "//:node_modules/path-normalize",
-      "//:node_modules/moment",
+        "//:node_modules/@angular/components-examples",
+        "//:node_modules/@stackblitz/sdk",
+        "//:node_modules/moment",
+        "//:node_modules/path-normalize",
     ],
 )
 
-
 js_test(
-  name = "audit",
-  entry_point = "tools/audit-docs.js",
-  args = [
-    "$(location //:build.production)",
-  ],
-  data = [
-    "tools/lighthouse-audit.mjs",
-    "//:build.production",
-    "//:node_modules/lighthouse",
-    "//:node_modules/lighthouse-logger",
-    "//:node_modules/puppeteer",
-    "//:node_modules/shelljs",
-    "//:node_modules/light-server",
-  ],
-  tags = ["audit"],
+    name = "audit",
+    args = [
+        "$(location //:build.production)",
+    ],
+    data = [
+        "tools/lighthouse-audit.mjs",
+        "//:build.production",
+        "//:node_modules/light-server",
+        "//:node_modules/lighthouse",
+        "//:node_modules/lighthouse-logger",
+        "//:node_modules/puppeteer",
+        "//:node_modules/shelljs",
+    ],
+    entry_point = "tools/audit-docs.js",
+    tags = ["audit"],
 )
diff --git a/material.angular.io/e2e/protractor.conf.js b/material.angular.io/e2e/protractor.conf.js
index e55b5e92f9e8..933e382d79e7 100644
--- a/material.angular.io/e2e/protractor.conf.js
+++ b/material.angular.io/e2e/protractor.conf.js
@@ -8,10 +8,10 @@ const path = require('path');
 // TODO(bazel): drop non-bazel
 const isBazel = !!process.env['TEST_TARGET'];
 if (isBazel) {
-    // Resolve CHROME_BIN and CHROMEDRIVER_BIN from relative paths to absolute paths within the
-    // runfiles tree so that subprocesses spawned in a different working directory can still find them.
-    process.env.CHROME_BIN = path.resolve(process.env.CHROME_BIN);
-    process.env.CHROMEDRIVER_BIN = path.resolve(process.env.CHROMEDRIVER_BIN);
+  // Resolve CHROME_BIN and CHROMEDRIVER_BIN from relative paths to absolute paths within the
+  // runfiles tree so that subprocesses spawned in a different working directory can still find them.
+  process.env.CHROME_BIN = path.resolve(process.env.CHROME_BIN);
+  process.env.CHROMEDRIVER_BIN = path.resolve(process.env.CHROMEDRIVER_BIN);
 }
 
 /**
@@ -19,9 +19,7 @@ if (isBazel) {
  */
 const config = {
   allScriptsTimeout: 11000,
-  specs: [
-    './src/**/*.e2e-spec.ts'
-  ],
+  specs: ['./src/**/*.e2e-spec.ts'],
   chromeDriver: process.env.CHROMEDRIVER_BIN,
   capabilities: {
     'browserName': 'chrome',
@@ -37,7 +35,7 @@ const config = {
         '--hide-scrollbars',
         '--mute-audio',
       ],
-    }
+    },
   },
   directConnect: true,
   baseUrl: 'http://localhost:4200/',
@@ -45,16 +43,16 @@ const config = {
   jasmineNodeOpts: {
     showColors: true,
     defaultTimeoutInterval: 30000,
-    print: function() {}
+    print: function () {},
   },
   onPrepare() {
     if (!isBazel) {
       require('ts-node').register({
-        project: require('path').join(__dirname, './tsconfig.json')
+        project: require('path').join(__dirname, './tsconfig.json'),
       });
     }
     jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}}));
-  }
+  },
 };
 
 if (isBazel) {
@@ -70,7 +68,7 @@ if (process.env['TRAVIS']) {
 
     'tunnel-identifier': process.env['TRAVIS_JOB_NUMBER'],
     'build': process.env['TRAVIS_JOB_NUMBER'],
-    'name': 'Material Docs E2E'
+    'name': 'Material Docs E2E',
   };
 }
 
diff --git a/material.angular.io/e2e/src/app.e2e-spec.ts b/material.angular.io/e2e/src/app.e2e-spec.ts
index 00643a7e5eea..9f9fa0406ace 100644
--- a/material.angular.io/e2e/src/app.e2e-spec.ts
+++ b/material.angular.io/e2e/src/app.e2e-spec.ts
@@ -16,8 +16,10 @@ describe('Material Docs App', () => {
   afterEach(async () => {
     // Assert that there are no errors emitted from the browser
     const logs = await browser.manage().logs().get(logging.Type.BROWSER);
-    expect(logs).not.toContain(jasmine.objectContaining({
-      level: logging.Level.SEVERE,
-    } as logging.Entry));
+    expect(logs).not.toContain(
+      jasmine.objectContaining({
+        level: logging.Level.SEVERE,
+      } as logging.Entry),
+    );
   });
 });
diff --git a/material.angular.io/e2e/src/app.po.ts b/material.angular.io/e2e/src/app.po.ts
index a02501b1cade..803e6041e524 100644
--- a/material.angular.io/e2e/src/app.po.ts
+++ b/material.angular.io/e2e/src/app.po.ts
@@ -6,7 +6,8 @@ export class MaterialDocsAppPage {
   }
 
   getTitleText() {
-    return element(by.css('app-homepage header .docs-header-headline .mat-h1'))
-      .getText() as Promise<string>;
+    return element(
+      by.css('app-homepage header .docs-header-headline .mat-h1'),
+    ).getText() as Promise<string>;
   }
 }
diff --git a/material.angular.io/e2e/tsconfig.json b/material.angular.io/e2e/tsconfig.json
index 39b800f78961..677f30ff8ab5 100644
--- a/material.angular.io/e2e/tsconfig.json
+++ b/material.angular.io/e2e/tsconfig.json
@@ -4,10 +4,6 @@
     "outDir": "../out-tsc/e2e",
     "module": "commonjs",
     "target": "es5",
-    "types": [
-      "jasmine",
-      "jasminewd2",
-      "node"
-    ]
+    "types": ["jasmine", "jasminewd2", "node"]
   }
 }
diff --git a/material.angular.io/karma-custom-launchers.js b/material.angular.io/karma-custom-launchers.js
index 198b2f1b42c3..cbe1090015c6 100644
--- a/material.angular.io/karma-custom-launchers.js
+++ b/material.angular.io/karma-custom-launchers.js
@@ -11,26 +11,19 @@ exports.customLaunchers = {
       '--disable-gpu',
       '--disable-dev-shm-usage',
       '--hide-scrollbars',
-      '--mute-audio'
+      '--mute-audio',
     ],
   },
   ChromeHeadlessLocal: {
     base: 'ChromeHeadless',
-    flags: [
-      '--window-size=1024,768'
-    ]
+    flags: ['--window-size=1024,768'],
   },
   ChromeHeadlessCI: {
     base: 'ChromeHeadless',
-    flags: [
-      '--window-size=1024,768',
-      '--no-sandbox'
-    ]
+    flags: ['--window-size=1024,768', '--no-sandbox'],
   },
   FirefoxHeadless: {
     base: 'Firefox',
-    flags: [
-      '-headless'
-    ]
+    flags: ['-headless'],
   },
 };
diff --git a/material.angular.io/karma.conf.js b/material.angular.io/karma.conf.js
index 7bdfcd2b74f3..38a067b0095a 100644
--- a/material.angular.io/karma.conf.js
+++ b/material.angular.io/karma.conf.js
@@ -25,12 +25,12 @@ module.exports = function (config) {
       require('@angular-devkit/build-angular/plugins/karma'),
     ],
     client: {
-      clearContext: false // leave Jasmine Spec Runner output visible in browser
+      clearContext: false, // leave Jasmine Spec Runner output visible in browser
     },
     coverageIstanbulReporter: {
       dir: require('path').join(__dirname, 'coverage'),
       reports: ['html', 'lcovonly', 'text-summary'],
-      fixWebpackSourcePaths: true
+      fixWebpackSourcePaths: true,
     },
     reporters: ['progress', 'kjhtml'],
     port: 9876,
@@ -43,6 +43,6 @@ module.exports = function (config) {
   });
 
   if (process.env['TRAVIS']) {
-    config.browsers = [isBazel ? 'ChromeHeadlessNoSandbox' : 'ChromeHeadlessCI', 'FirefoxHeadless']
+    config.browsers = [isBazel ? 'ChromeHeadlessNoSandbox' : 'ChromeHeadlessCI', 'FirefoxHeadless'];
   }
 };
diff --git a/material.angular.io/scenes/BUILD.bazel b/material.angular.io/scenes/BUILD.bazel
index aba0093bc1c6..53b4848a432b 100644
--- a/material.angular.io/scenes/BUILD.bazel
+++ b/material.angular.io/scenes/BUILD.bazel
@@ -6,8 +6,8 @@ package(default_visibility = ["//visibility:public"])
 ng_app(
     name = "scenes",
     deps = [
-      "//:node_modules/@angular/components-examples",
-      "//:node_modules/@stackblitz/sdk",
-      "//:node_modules/moment",
+        "//:node_modules/@angular/components-examples",
+        "//:node_modules/@stackblitz/sdk",
+        "//:node_modules/moment",
     ],
 )
diff --git a/material.angular.io/scenes/e2e/protractor.conf.js b/material.angular.io/scenes/e2e/protractor.conf.js
index 4e4f468abb74..eea35e611f1d 100644
--- a/material.angular.io/scenes/e2e/protractor.conf.js
+++ b/material.angular.io/scenes/e2e/protractor.conf.js
@@ -2,17 +2,17 @@
 // Protractor configuration file, see link for more information
 // https://github.com/angular/protractor/blob/master/lib/config.ts
 
-const { StacktraceOption } = require('jasmine-spec-reporter/built/configuration');
-const { SpecReporter } = require('jasmine-spec-reporter');
+const {StacktraceOption} = require('jasmine-spec-reporter/built/configuration');
+const {SpecReporter} = require('jasmine-spec-reporter');
 const path = require('path');
 
 // TODO(bazel): drop non-bazel
 const isBazel = !!process.env['TEST_TARGET'];
 if (isBazel) {
-    // Resolve CHROME_BIN and CHROMEDRIVER_BIN from relative paths to absolute paths within the
-    // runfiles tree so that subprocesses spawned in a different working directory can still find them.
-    process.env.CHROME_BIN = path.resolve(process.env.CHROME_BIN);
-    process.env.CHROMEDRIVER_BIN = path.resolve(process.env.CHROMEDRIVER_BIN);
+  // Resolve CHROME_BIN and CHROMEDRIVER_BIN from relative paths to absolute paths within the
+  // runfiles tree so that subprocesses spawned in a different working directory can still find them.
+  process.env.CHROME_BIN = path.resolve(process.env.CHROME_BIN);
+  process.env.CHROMEDRIVER_BIN = path.resolve(process.env.CHROMEDRIVER_BIN);
 }
 
 /**
@@ -20,9 +20,7 @@ if (isBazel) {
  */
 const config = {
   allScriptsTimeout: 11000,
-  specs: [
-    './src/**/*.e2e-spec.ts'
-  ],
+  specs: ['./src/**/*.e2e-spec.ts'],
   chromeDriver: process.env.CHROMEDRIVER_BIN,
   capabilities: {
     'browserName': 'chrome',
@@ -38,7 +36,7 @@ const config = {
         '--hide-scrollbars',
         '--mute-audio',
       ],
-    }
+    },
   },
   directConnect: true,
   baseUrl: 'http://localhost:4200/',
@@ -46,16 +44,18 @@ const config = {
   jasmineNodeOpts: {
     showColors: true,
     defaultTimeoutInterval: 30000,
-    print: function() {}
+    print: function () {},
   },
   onPrepare() {
     if (!isBazel) {
       require('ts-node').register({
-        project: require('path').join(__dirname, './tsconfig.json')
+        project: require('path').join(__dirname, './tsconfig.json'),
       });
     }
-    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: StacktraceOption.PRETTY } }));
-  }
+    jasmine
+      .getEnv()
+      .addReporter(new SpecReporter({spec: {displayStacktrace: StacktraceOption.PRETTY}}));
+  },
 };
 
 if (isBazel) {
diff --git a/material.angular.io/scenes/e2e/screenshot.ts b/material.angular.io/scenes/e2e/screenshot.ts
index 5a76d44423fd..d8c97707e1a6 100644
--- a/material.angular.io/scenes/e2e/screenshot.ts
+++ b/material.angular.io/scenes/e2e/screenshot.ts
@@ -4,15 +4,15 @@ import {by, element} from 'protractor';
 
 const OUTPUT_DIR = path.join(__dirname, '..', '..', 'src', 'assets', 'screenshots');
 
-
 export class Screenshot {
   /** The filename used to store the screenshot. */
   get filename(): string {
-    return this.id
+    return (
+      this.id
         .toLowerCase()
         .replace(/\s/g, '_')
-        .replace(/[^/a-z0-9_-]+/g, '')
-      + '.scene.png';
+        .replace(/[^/a-z0-9_-]+/g, '') + '.scene.png'
+    );
   }
 
   /** The full path to the screenshot */
@@ -34,7 +34,7 @@ export class Screenshot {
     }
 
     if (fs.existsSync(OUTPUT_DIR)) {
-      fs.writeFileSync(this.fullPath, png, {encoding: 'base64' });
+      fs.writeFileSync(this.fullPath, png, {encoding: 'base64'});
     }
   }
 }
diff --git a/material.angular.io/scenes/e2e/src/app.po.ts b/material.angular.io/scenes/e2e/src/app.po.ts
index 1d7291c9d647..4ec5e5a46fbf 100644
--- a/material.angular.io/scenes/e2e/src/app.po.ts
+++ b/material.angular.io/scenes/e2e/src/app.po.ts
@@ -1,4 +1,4 @@
-import { browser } from 'protractor';
+import {browser} from 'protractor';
 
 export class AppPage {
   async navigateTo(component: string): Promise<unknown> {
diff --git a/material.angular.io/scenes/e2e/tsconfig.json b/material.angular.io/scenes/e2e/tsconfig.json
index 7328b23a9ebd..41eb1193dab9 100644
--- a/material.angular.io/scenes/e2e/tsconfig.json
+++ b/material.angular.io/scenes/e2e/tsconfig.json
@@ -4,10 +4,6 @@
     "outDir": "../../../out-tsc/e2e",
     "module": "commonjs",
     "target": "es5",
-    "types": [
-      "jasmine",
-      "jasminewd2",
-      "node"
-    ]
+    "types": ["jasmine", "jasminewd2", "node"]
   }
 }
diff --git a/material.angular.io/scenes/karma.conf.js b/material.angular.io/scenes/karma.conf.js
index 4f63ca506034..fbad10db22c4 100644
--- a/material.angular.io/scenes/karma.conf.js
+++ b/material.angular.io/scenes/karma.conf.js
@@ -22,15 +22,15 @@ module.exports = function (config) {
       require('karma-firefox-launcher'),
       require('karma-jasmine-html-reporter'),
       require('karma-coverage-istanbul-reporter'),
-      require('@angular-devkit/build-angular/plugins/karma')
+      require('@angular-devkit/build-angular/plugins/karma'),
     ],
     client: {
-      clearContext: false // leave Jasmine Spec Runner output visible in browser
+      clearContext: false, // leave Jasmine Spec Runner output visible in browser
     },
     coverageIstanbulReporter: {
       dir: require('path').join(__dirname, '../../coverage/scenes'),
       reports: ['html', 'lcovonly', 'text-summary'],
-      fixWebpackSourcePaths: true
+      fixWebpackSourcePaths: true,
     },
     reporters: ['progress', 'kjhtml'],
     port: 9876,
@@ -40,11 +40,10 @@ module.exports = function (config) {
     browsers: [isBazel ? 'ChromeHeadlessNoSandbox' : 'ChromeHeadlessLocal'],
     singleRun: false,
     customLaunchers: customLaunchers,
-    restartOnFileChange: true
+    restartOnFileChange: true,
   });
 
-
   if (process.env['TRAVIS']) {
-    config.browsers = [isBazel ? 'ChromeHeadlessNoSandbox' : 'ChromeHeadlessCI', 'FirefoxHeadless']
+    config.browsers = [isBazel ? 'ChromeHeadlessNoSandbox' : 'ChromeHeadlessCI', 'FirefoxHeadless'];
   }
 };
diff --git a/material.angular.io/scenes/src/app/app-routes.ts b/material.angular.io/scenes/src/app/app-routes.ts
index fd060efc10ed..d11b086b4e7f 100644
--- a/material.angular.io/scenes/src/app/app-routes.ts
+++ b/material.angular.io/scenes/src/app/app-routes.ts
@@ -41,13 +41,13 @@ import {TreeScene} from './scenes/tree/tree-scene';
 let hue = 0;
 
 type SceneViewerRoute = {
-  path: string,
-  component: ComponentType<SceneViewer>,
+  path: string;
+  component: ComponentType<SceneViewer>;
   data: {
-    scene: ComponentType<unknown>,
-    scale?: number,
-    hueRotate?: number
-  }
+    scene: ComponentType<unknown>;
+    scale?: number;
+    hueRotate?: number;
+  };
 };
 
 export const routes: SceneViewerRoute[] = [
@@ -75,7 +75,7 @@ export const routes: SceneViewerRoute[] = [
   {
     path: 'progress-spinner',
     component: SceneViewer,
-    data: {scale: 1.3, scene: ProgressSpinnerScene}
+    data: {scale: 1.3, scene: ProgressSpinnerScene},
   },
   {path: 'radio', component: SceneViewer, data: {scene: RadioScene}},
   {path: 'ripple', component: SceneViewer, data: {scene: RipplesScene}},
@@ -92,5 +92,6 @@ export const routes: SceneViewerRoute[] = [
   {path: 'toolbar', component: SceneViewer, data: {scene: ToolbarScene}},
   {path: 'tooltip', component: SceneViewer, data: {scene: TooltipScene}},
   {path: 'tree', component: SceneViewer, data: {scene: TreeScene}},
-].sort((a, b) => (a.path > b.path) ? 1 : ((b.path > a.path) ? -1 : 0))
+]
+  .sort((a, b) => (a.path > b.path ? 1 : b.path > a.path ? -1 : 0))
   .map((route: SceneViewerRoute) => ({...route, data: {...route.data, hueRotate: 15 * hue++}}));
diff --git a/material.angular.io/scenes/src/app/app.component.ts b/material.angular.io/scenes/src/app/app.component.ts
index da0935b22750..2340bfeaec77 100644
--- a/material.angular.io/scenes/src/app/app.component.ts
+++ b/material.angular.io/scenes/src/app/app.component.ts
@@ -6,6 +6,6 @@ import {RouterOutlet} from '@angular/router';
   template: '<router-outlet></router-outlet>',
   styleUrls: ['./app.component.scss'],
   standalone: true,
-  imports: [RouterOutlet]
+  imports: [RouterOutlet],
 })
-export class AppComponent { }
+export class AppComponent {}
diff --git a/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.ts b/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.ts
index 0044f3a0f20d..cfcc7b8b9347 100644
--- a/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.ts
+++ b/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.ts
@@ -5,7 +5,7 @@ import {
   OnInit,
   ViewContainerRef,
   ViewEncapsulation,
-  viewChild
+  viewChild,
 } from '@angular/core';
 import {ActivatedRoute} from '@angular/router';
 import {DomSanitizer, SafeStyle} from '@angular/platform-browser';
@@ -43,10 +43,12 @@ export class SceneViewer implements OnInit {
   /** Component of scene to display */
   @Input() component: any;
 
-  readonly scene = viewChild.required('scene', { read: ViewContainerRef });
+  readonly scene = viewChild.required('scene', {read: ViewContainerRef});
 
-  constructor(private route: ActivatedRoute,
-              private sanitizer: DomSanitizer) {
+  constructor(
+    private route: ActivatedRoute,
+    private sanitizer: DomSanitizer,
+  ) {
     this.hueRotation = this.route.snapshot.data['hueRotate'];
     this.component = this.route.snapshot.data['scene'];
     this.scale = this.route.snapshot.data['scale'];
diff --git a/material.angular.io/scenes/src/app/scenes/autocomplete/autocomplete-scene.ts b/material.angular.io/scenes/src/app/scenes/autocomplete/autocomplete-scene.ts
index ee5f1fa16e30..22d55ce1229d 100644
--- a/material.angular.io/scenes/src/app/scenes/autocomplete/autocomplete-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/autocomplete/autocomplete-scene.ts
@@ -1,15 +1,9 @@
-import {
-  AfterViewInit,
-  Component,
-  ViewEncapsulation,
-  viewChild
-} from '@angular/core';
+import {AfterViewInit, Component, ViewEncapsulation, viewChild} from '@angular/core';
 import {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';
 import {MatFormFieldModule} from '@angular/material/form-field';
 import {MatInput, MatInputModule} from '@angular/material/input';
 import {MatAutocompleteModule} from '@angular/material/autocomplete';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-autocomplete-scene',
@@ -33,4 +27,3 @@ export class AutocompleteScene implements AfterViewInit {
     this.input().focus();
   }
 }
-
diff --git a/material.angular.io/scenes/src/app/scenes/badge/badge-scene.ts b/material.angular.io/scenes/src/app/scenes/badge/badge-scene.ts
index 6b42b18dae8e..0d57c710c80d 100644
--- a/material.angular.io/scenes/src/app/scenes/badge/badge-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/badge/badge-scene.ts
@@ -8,6 +8,6 @@ import {MatBadgeModule} from '@angular/material/badge';
   templateUrl: './badge-scene.html',
   styleUrls: ['./badge-scene.scss'],
   standalone: true,
-  imports: [MatIconModule, MatBadgeModule]
+  imports: [MatIconModule, MatBadgeModule],
 })
 export class BadgeScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/bottom-sheet/bottom-sheet-scene.ts b/material.angular.io/scenes/src/app/scenes/bottom-sheet/bottom-sheet-scene.ts
index 906b1a719444..18eb3cac6d05 100644
--- a/material.angular.io/scenes/src/app/scenes/bottom-sheet/bottom-sheet-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/bottom-sheet/bottom-sheet-scene.ts
@@ -3,7 +3,6 @@ import {MatBottomSheet} from '@angular/material/bottom-sheet';
 import {MatIconModule} from '@angular/material/icon';
 import {MatListModule} from '@angular/material/list';
 
-
 @Component({
   selector: 'app-bottom-sheet-scene',
   template: '',
@@ -25,6 +24,6 @@ export class BottomSheetScene implements AfterViewInit {
   templateUrl: './bottom-sheet-scene.html',
   styleUrls: ['./bottom-sheet-scene.scss'],
   standalone: true,
-  imports: [MatListModule, MatIconModule]
+  imports: [MatListModule, MatIconModule],
 })
 export class SampleBottomSheet {}
diff --git a/material.angular.io/scenes/src/app/scenes/button/button-scene.ts b/material.angular.io/scenes/src/app/scenes/button/button-scene.ts
index 0202cfd19964..78f6f41685ab 100644
--- a/material.angular.io/scenes/src/app/scenes/button/button-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/button/button-scene.ts
@@ -8,7 +8,6 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './button-scene.html',
   styleUrls: ['./button-scene.scss'],
   standalone: true,
-  imports: [MatButtonModule, MatIconModule]
+  imports: [MatButtonModule, MatIconModule],
 })
-export class ButtonScene {
-}
+export class ButtonScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/card/card-scene.ts b/material.angular.io/scenes/src/app/scenes/card/card-scene.ts
index 8daa63d7d9ce..6b0bc6a8fa84 100644
--- a/material.angular.io/scenes/src/app/scenes/card/card-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/card/card-scene.ts
@@ -1,7 +1,6 @@
 import {Component} from '@angular/core';
 import {MatCardModule} from '@angular/material/card';
 
-
 @Component({
   selector: 'app-card-scene',
   templateUrl: './card-scene.html',
diff --git a/material.angular.io/scenes/src/app/scenes/checkbox/checkbox-scene.ts b/material.angular.io/scenes/src/app/scenes/checkbox/checkbox-scene.ts
index 384004017fe9..15ca57982c8b 100755
--- a/material.angular.io/scenes/src/app/scenes/checkbox/checkbox-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/checkbox/checkbox-scene.ts
@@ -7,6 +7,6 @@ import {MatCheckboxModule} from '@angular/material/checkbox';
   templateUrl: './checkbox-scene.html',
   styleUrls: ['./checkbox-scene.scss'],
   standalone: true,
-  imports: [MatCheckboxModule]
+  imports: [MatCheckboxModule],
 })
 export class CheckboxScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/chips/chips-scene.ts b/material.angular.io/scenes/src/app/scenes/chips/chips-scene.ts
index 274979a5bed0..9ab2f1283fe9 100644
--- a/material.angular.io/scenes/src/app/scenes/chips/chips-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/chips/chips-scene.ts
@@ -7,6 +7,6 @@ import {MatChipsModule} from '@angular/material/chips';
   templateUrl: './chips-scene.html',
   styleUrls: ['./chips-scene.scss'],
   standalone: true,
-  imports: [MatChipsModule]
+  imports: [MatChipsModule],
 })
 export class ChipsScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/core/core-scene.ts b/material.angular.io/scenes/src/app/scenes/core/core-scene.ts
index 8c64e58174cc..57768470f765 100644
--- a/material.angular.io/scenes/src/app/scenes/core/core-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/core/core-scene.ts
@@ -7,6 +7,6 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './core-scene.html',
   styleUrls: ['./core-scene.scss'],
   standalone: true,
-  imports: [MatIconModule]
+  imports: [MatIconModule],
 })
 export class CoreScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/datepicker/datepicker-scene.ts b/material.angular.io/scenes/src/app/scenes/datepicker/datepicker-scene.ts
index 5b8a63fc5c1a..1c81efd466bc 100644
--- a/material.angular.io/scenes/src/app/scenes/datepicker/datepicker-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/datepicker/datepicker-scene.ts
@@ -1,14 +1,13 @@
 import {Component, ViewEncapsulation} from '@angular/core';
 import {MatDatepickerModule} from '@angular/material/datepicker';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-datepicker-scene',
   templateUrl: './datepicker-scene.html',
   styleUrls: ['./datepicker-scene.scss'],
   standalone: true,
-  imports: [MatDatepickerModule]
+  imports: [MatDatepickerModule],
 })
 export class DatepickerScene {
   minDate = new Date(2024, 3, 2);
diff --git a/material.angular.io/scenes/src/app/scenes/dialog/dialog-scene.ts b/material.angular.io/scenes/src/app/scenes/dialog/dialog-scene.ts
index b27fe4127bfb..5886ee1b5166 100644
--- a/material.angular.io/scenes/src/app/scenes/dialog/dialog-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/dialog/dialog-scene.ts
@@ -6,7 +6,7 @@ import {MatDialog, MatDialogModule} from '@angular/material/dialog';
   encapsulation: ViewEncapsulation.None,
   selector: 'app-dialog-scene',
   template: '',
-  standalone: true
+  standalone: true,
 })
 export class DialogScene {
   constructor(public dialog: MatDialog) {
@@ -18,7 +18,6 @@ export class DialogScene {
   }
 }
 
-
 @Component({
   selector: 'app-dialog-scene-example-dialog',
   template: `
diff --git a/material.angular.io/scenes/src/app/scenes/divider/divider-scene.ts b/material.angular.io/scenes/src/app/scenes/divider/divider-scene.ts
index 54fa0c4b4c2d..8d93cd798b5d 100644
--- a/material.angular.io/scenes/src/app/scenes/divider/divider-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/divider/divider-scene.ts
@@ -9,6 +9,6 @@ import {MatDividerModule} from '@angular/material/divider';
   templateUrl: './divider-scene.html',
   styleUrls: ['./divider-scene.scss'],
   standalone: true,
-  imports: [MatListModule, MatIconModule, MatDividerModule]
+  imports: [MatListModule, MatIconModule, MatDividerModule],
 })
 export class DividerScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/expansion/expansion-scene.ts b/material.angular.io/scenes/src/app/scenes/expansion/expansion-scene.ts
index d4d39b709ff8..15a308b22c4a 100644
--- a/material.angular.io/scenes/src/app/scenes/expansion/expansion-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/expansion/expansion-scene.ts
@@ -8,6 +8,6 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './expansion-scene.html',
   styleUrls: ['./expansion-scene.scss'],
   standalone: true,
-  imports: [MatExpansionModule, MatIconModule]
+  imports: [MatExpansionModule, MatIconModule],
 })
 export class ExpansionScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/form-field/form-field-scene.ts b/material.angular.io/scenes/src/app/scenes/form-field/form-field-scene.ts
index a83ef0a19546..6ba94d2aa82f 100644
--- a/material.angular.io/scenes/src/app/scenes/form-field/form-field-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/form-field/form-field-scene.ts
@@ -8,10 +8,6 @@ import {MatFormFieldModule} from '@angular/material/form-field';
   selector: 'app-form-field-scene',
   templateUrl: './form-field-scene.html',
   standalone: true,
-  imports: [
-    MatFormFieldModule,
-    MatInputModule,
-    MatIconModule,
-  ],
+  imports: [MatFormFieldModule, MatInputModule, MatIconModule],
 })
 export class FormFieldScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/icon/icon-scene.ts b/material.angular.io/scenes/src/app/scenes/icon/icon-scene.ts
index af4014ced2aa..4844c32ee2c1 100644
--- a/material.angular.io/scenes/src/app/scenes/icon/icon-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/icon/icon-scene.ts
@@ -7,6 +7,6 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './icon-scene.html',
   styleUrls: ['./icon-scene.scss'],
   standalone: true,
-  imports: [MatIconModule]
+  imports: [MatIconModule],
 })
 export class IconScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/input/input-scene.ts b/material.angular.io/scenes/src/app/scenes/input/input-scene.ts
index 34c4aeeb84ef..3f3f588583b0 100644
--- a/material.angular.io/scenes/src/app/scenes/input/input-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/input/input-scene.ts
@@ -8,6 +8,6 @@ import {MatInputModule} from '@angular/material/input';
   templateUrl: './input-scene.html',
   styleUrls: ['./input-scene.scss'],
   standalone: true,
-  imports: [MatFormFieldModule, MatInputModule]
+  imports: [MatFormFieldModule, MatInputModule],
 })
 export class InputScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/list/list-scene.ts b/material.angular.io/scenes/src/app/scenes/list/list-scene.ts
index 447a14377b52..306e1d9eb934 100644
--- a/material.angular.io/scenes/src/app/scenes/list/list-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/list/list-scene.ts
@@ -8,6 +8,6 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './list-scene.html',
   styleUrls: ['./list-scene.scss'],
   standalone: true,
-  imports: [MatListModule, MatIconModule]
+  imports: [MatListModule, MatIconModule],
 })
 export class ListScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/menu/menu-scene.ts b/material.angular.io/scenes/src/app/scenes/menu/menu-scene.ts
index 7b4267e7b4c0..7fa162d98eb9 100644
--- a/material.angular.io/scenes/src/app/scenes/menu/menu-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/menu/menu-scene.ts
@@ -9,7 +9,7 @@ import {MatMenuModule, MatMenuTrigger} from '@angular/material/menu';
   templateUrl: './menu-scene.html',
   styleUrls: ['./menu-scene.scss'],
   standalone: true,
-  imports: [MatButtonModule, MatMenuModule, MatIconModule]
+  imports: [MatButtonModule, MatMenuModule, MatIconModule],
 })
 export class MenuScene implements AfterViewInit {
   readonly trigger = viewChild.required<MatMenuTrigger>('menuTrigger');
diff --git a/material.angular.io/scenes/src/app/scenes/paginator/paginator-scene.ts b/material.angular.io/scenes/src/app/scenes/paginator/paginator-scene.ts
index a423548df484..d5c98bac822a 100644
--- a/material.angular.io/scenes/src/app/scenes/paginator/paginator-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/paginator/paginator-scene.ts
@@ -1,13 +1,12 @@
 import {Component, ViewEncapsulation} from '@angular/core';
 import {MatPaginatorModule} from '@angular/material/paginator';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-paginator-scene',
   templateUrl: './paginator-scene.html',
   styleUrls: ['./paginator-scene.scss'],
   standalone: true,
-  imports: [MatPaginatorModule]
+  imports: [MatPaginatorModule],
 })
 export class PaginatorScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/placeholder/placeholder-scene.ts b/material.angular.io/scenes/src/app/scenes/placeholder/placeholder-scene.ts
index 63721598e80c..197fd1748cba 100644
--- a/material.angular.io/scenes/src/app/scenes/placeholder/placeholder-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/placeholder/placeholder-scene.ts
@@ -5,6 +5,6 @@ import {Component, ViewEncapsulation} from '@angular/core';
   selector: 'app-button-toggle-scene',
   templateUrl: './placeholder-scene.html',
   styleUrls: ['./placeholder-scene.scss'],
-  standalone: true
+  standalone: true,
 })
 export class PlaceHolderScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/progress-bar/progress-bar-scene.ts b/material.angular.io/scenes/src/app/scenes/progress-bar/progress-bar-scene.ts
index 405405fe749f..3fcd92c05e69 100644
--- a/material.angular.io/scenes/src/app/scenes/progress-bar/progress-bar-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/progress-bar/progress-bar-scene.ts
@@ -1,13 +1,12 @@
 import {Component, ViewEncapsulation} from '@angular/core';
 import {MatProgressBarModule} from '@angular/material/progress-bar';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-progress-bar-scene',
   templateUrl: './progress-bar-scene.html',
   styleUrls: ['./progress-bar-scene.scss'],
   standalone: true,
-  imports: [MatProgressBarModule]
+  imports: [MatProgressBarModule],
 })
 export class ProgressBarScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/progress-spinner/progress-spinner-scene.ts b/material.angular.io/scenes/src/app/scenes/progress-spinner/progress-spinner-scene.ts
index 683fb2a6d007..9ef0c7195cd6 100644
--- a/material.angular.io/scenes/src/app/scenes/progress-spinner/progress-spinner-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/progress-spinner/progress-spinner-scene.ts
@@ -1,13 +1,12 @@
 import {Component, ViewEncapsulation} from '@angular/core';
 import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-input-scene',
   templateUrl: './progress-spinner-scene.html',
   styleUrls: ['./progress-spinner-scene.scss'],
   standalone: true,
-  imports: [MatProgressSpinnerModule]
+  imports: [MatProgressSpinnerModule],
 })
 export class ProgressSpinnerScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/radio/radio-scene.ts b/material.angular.io/scenes/src/app/scenes/radio/radio-scene.ts
index 85b4fadc6a65..7ce1d302ef5f 100644
--- a/material.angular.io/scenes/src/app/scenes/radio/radio-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/radio/radio-scene.ts
@@ -7,6 +7,6 @@ import {MatRadioModule} from '@angular/material/radio';
   templateUrl: './radio-scene.html',
   styleUrls: ['./radio-scene.scss'],
   standalone: true,
-  imports: [MatRadioModule]
+  imports: [MatRadioModule],
 })
 export class RadioScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/ripples/ripples-scene.ts b/material.angular.io/scenes/src/app/scenes/ripples/ripples-scene.ts
index 946ef6ee6188..6e6575becdc5 100644
--- a/material.angular.io/scenes/src/app/scenes/ripples/ripples-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/ripples/ripples-scene.ts
@@ -8,11 +8,11 @@ import {MatRipple, MatRippleModule} from '@angular/material/core';
   templateUrl: './ripples-scene.html',
   styleUrls: ['./ripples-scene.scss'],
   standalone: true,
-  imports: [MatRippleModule, MatButtonModule]
+  imports: [MatRippleModule, MatButtonModule],
 })
 export class RipplesScene implements AfterViewInit {
-  readonly buttonRipple = viewChild.required('button', { read: MatRipple });
-  readonly wrapperRipple = viewChild.required('wrapper', { read: MatRipple });
+  readonly buttonRipple = viewChild.required('button', {read: MatRipple});
+  readonly wrapperRipple = viewChild.required('wrapper', {read: MatRipple});
 
   ngAfterViewInit() {
     this.buttonRipple().launch(140, 100, {
diff --git a/material.angular.io/scenes/src/app/scenes/select/select-scene.ts b/material.angular.io/scenes/src/app/scenes/select/select-scene.ts
index 346eb104af49..646457561958 100644
--- a/material.angular.io/scenes/src/app/scenes/select/select-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/select/select-scene.ts
@@ -9,7 +9,7 @@ import {MatOptionModule} from '@angular/material/core';
   templateUrl: './select-scene.html',
   styleUrls: ['./select-scene.scss'],
   standalone: true,
-  imports: [MatFormFieldModule, MatSelectModule, MatOptionModule]
+  imports: [MatFormFieldModule, MatSelectModule, MatOptionModule],
 })
 export class SelectScene implements AfterViewInit {
   readonly select = viewChild.required(MatSelect);
diff --git a/material.angular.io/scenes/src/app/scenes/sidenav/sidenav-scene.ts b/material.angular.io/scenes/src/app/scenes/sidenav/sidenav-scene.ts
index 6b4124feef60..2eb64d6e8d27 100644
--- a/material.angular.io/scenes/src/app/scenes/sidenav/sidenav-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/sidenav/sidenav-scene.ts
@@ -9,6 +9,6 @@ import {MatListModule} from '@angular/material/list';
   templateUrl: './sidenav-scene.html',
   styleUrls: ['./sidenav-scene.scss'],
   standalone: true,
-  imports: [MatSidenavModule, MatListModule, MatIconModule]
+  imports: [MatSidenavModule, MatListModule, MatIconModule],
 })
 export class SidenavScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/slide-toggle/slide-toggle-scene.ts b/material.angular.io/scenes/src/app/scenes/slide-toggle/slide-toggle-scene.ts
index 290387a2043f..f83d32d344c2 100644
--- a/material.angular.io/scenes/src/app/scenes/slide-toggle/slide-toggle-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/slide-toggle/slide-toggle-scene.ts
@@ -2,13 +2,12 @@ import {Component, ViewEncapsulation} from '@angular/core';
 import {MatIconModule} from '@angular/material/icon';
 import {MatSlideToggleModule} from '@angular/material/slide-toggle';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-slide-toggle-scene',
   templateUrl: './slide-toggle-scene.html',
   styleUrls: ['./slide-toggle-scene.scss'],
   standalone: true,
-  imports: [MatIconModule, MatSlideToggleModule]
+  imports: [MatIconModule, MatSlideToggleModule],
 })
 export class SlideToggleScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/slider/slider-scene.ts b/material.angular.io/scenes/src/app/scenes/slider/slider-scene.ts
index a822962b8587..999d7a335c4b 100644
--- a/material.angular.io/scenes/src/app/scenes/slider/slider-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/slider/slider-scene.ts
@@ -2,17 +2,15 @@ import {AfterViewInit, Component, ViewEncapsulation} from '@angular/core';
 import {MatIconModule} from '@angular/material/icon';
 import {MatSliderModule} from '@angular/material/slider';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-slider-scene',
   templateUrl: './slider-scene.html',
   styleUrls: ['./slider-scene.scss'],
   standalone: true,
-  imports: [MatIconModule, MatSliderModule]
+  imports: [MatIconModule, MatSliderModule],
 })
 export class SliderScene implements AfterViewInit {
-
   ngAfterViewInit() {
     const volume = document.querySelector('mat-slider input');
     (volume as any).focus();
diff --git a/material.angular.io/scenes/src/app/scenes/snack-bar/snack-bar-scene.ts b/material.angular.io/scenes/src/app/scenes/snack-bar/snack-bar-scene.ts
index 2b9386adf190..4b09c06de058 100644
--- a/material.angular.io/scenes/src/app/scenes/snack-bar/snack-bar-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/snack-bar/snack-bar-scene.ts
@@ -1,7 +1,6 @@
 import {Component, ViewEncapsulation} from '@angular/core';
 import {MatSnackBar} from '@angular/material/snack-bar';
 
-
 @Component({
   selector: 'app-snack-bar-scene',
   template: '<div class="docs-scene-snackbar-background"></div>',
diff --git a/material.angular.io/scenes/src/app/scenes/sort/sort-scene.ts b/material.angular.io/scenes/src/app/scenes/sort/sort-scene.ts
index 12c6a8c9114e..3b6d3680b4af 100644
--- a/material.angular.io/scenes/src/app/scenes/sort/sort-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/sort/sort-scene.ts
@@ -15,7 +15,7 @@ export interface Dessert {
   templateUrl: './sort-scene.html',
   styleUrls: ['./sort-scene.scss'],
   standalone: true,
-  imports: [MatSortModule]
+  imports: [MatSortModule],
 })
 export class SortScene {
   desserts: Dessert[] = [
diff --git a/material.angular.io/scenes/src/app/scenes/stepper/stepper-scene.ts b/material.angular.io/scenes/src/app/scenes/stepper/stepper-scene.ts
index 648b55d6c4fc..875c439bdb79 100644
--- a/material.angular.io/scenes/src/app/scenes/stepper/stepper-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/stepper/stepper-scene.ts
@@ -9,6 +9,6 @@ import {MatFormFieldModule} from '@angular/material/form-field';
   templateUrl: './stepper-scene.html',
   styleUrls: ['./stepper-scene.scss'],
   standalone: true,
-  imports: [MatStepperModule, MatFormFieldModule, MatInputModule]
+  imports: [MatStepperModule, MatFormFieldModule, MatInputModule],
 })
 export class StepperScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/table/table-scene.ts b/material.angular.io/scenes/src/app/scenes/table/table-scene.ts
index 7ff9392d46a7..bbd97e2525f8 100644
--- a/material.angular.io/scenes/src/app/scenes/table/table-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/table/table-scene.ts
@@ -21,7 +21,7 @@ const ELEMENT_DATA: PeriodicElement[] = [
   templateUrl: './table-scene.html',
   styleUrls: ['./table-scene.scss'],
   standalone: true,
-  imports: [MatCardModule, MatTableModule]
+  imports: [MatCardModule, MatTableModule],
 })
 export class TableScene {
   displayedColumns: string[] = ['position', 'name', 'weight', 'symbol'];
diff --git a/material.angular.io/scenes/src/app/scenes/tabs/tabs-scene.ts b/material.angular.io/scenes/src/app/scenes/tabs/tabs-scene.ts
index 26dcee9af2c9..6e317918d328 100644
--- a/material.angular.io/scenes/src/app/scenes/tabs/tabs-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/tabs/tabs-scene.ts
@@ -6,6 +6,6 @@ import {MatTabsModule} from '@angular/material/tabs';
   templateUrl: './tabs-scene.html',
   styleUrls: ['./tabs-scene.scss'],
   standalone: true,
-  imports: [MatTabsModule]
+  imports: [MatTabsModule],
 })
 export class TabsScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/timepicker/timepicker-scene.ts b/material.angular.io/scenes/src/app/scenes/timepicker/timepicker-scene.ts
index ded18214a14b..5fc584e88a83 100644
--- a/material.angular.io/scenes/src/app/scenes/timepicker/timepicker-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/timepicker/timepicker-scene.ts
@@ -3,14 +3,13 @@ import {MatFormFieldModule} from '@angular/material/form-field';
 import {MatInputModule} from '@angular/material/input';
 import {MatTimepickerModule, MatTimepicker} from '@angular/material/timepicker';
 
-
 @Component({
   encapsulation: ViewEncapsulation.None,
   selector: 'app-timepicker-scene',
   templateUrl: './timepicker-scene.html',
   styleUrls: ['./timepicker-scene.scss'],
   standalone: true,
-  imports: [MatTimepickerModule, MatFormFieldModule, MatInputModule]
+  imports: [MatTimepickerModule, MatFormFieldModule, MatInputModule],
 })
 export class TimepickerScene implements AfterViewInit {
   value = new Date(2024, 0, 0, 0, 30, 0);
diff --git a/material.angular.io/scenes/src/app/scenes/toolbar/toolbar-scene.ts b/material.angular.io/scenes/src/app/scenes/toolbar/toolbar-scene.ts
index 7cd0a3bc77c6..0502b7be89a8 100644
--- a/material.angular.io/scenes/src/app/scenes/toolbar/toolbar-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/toolbar/toolbar-scene.ts
@@ -8,6 +8,6 @@ import {MatToolbarModule} from '@angular/material/toolbar';
   templateUrl: './toolbar-scene.html',
   styleUrls: ['./toolbar-scene.scss'],
   standalone: true,
-  imports: [MatToolbarModule, MatIconModule]
+  imports: [MatToolbarModule, MatIconModule],
 })
 export class ToolbarScene {}
diff --git a/material.angular.io/scenes/src/app/scenes/tooltip/tooltip-scene.ts b/material.angular.io/scenes/src/app/scenes/tooltip/tooltip-scene.ts
index bf4eed61dac3..d2ca4e197c36 100644
--- a/material.angular.io/scenes/src/app/scenes/tooltip/tooltip-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/tooltip/tooltip-scene.ts
@@ -9,11 +9,7 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './tooltip-scene.html',
   styleUrls: ['./tooltip-scene.scss'],
   standalone: true,
-  imports: [
-    MatButtonModule,
-    MatTooltipModule,
-    MatIconModule,
-  ],
+  imports: [MatButtonModule, MatTooltipModule, MatIconModule],
 })
 export class TooltipScene implements AfterViewInit {
   readonly tooltip = viewChild.required(MatTooltip);
diff --git a/material.angular.io/scenes/src/app/scenes/tree/tree-scene.ts b/material.angular.io/scenes/src/app/scenes/tree/tree-scene.ts
index 1a4fd59cf25d..1372bc50b32c 100644
--- a/material.angular.io/scenes/src/app/scenes/tree/tree-scene.ts
+++ b/material.angular.io/scenes/src/app/scenes/tree/tree-scene.ts
@@ -36,23 +36,19 @@ interface FileFlatNode {
   templateUrl: './tree-scene.html',
   styleUrls: ['./tree-scene.scss'],
   standalone: true,
-  imports: [
-    MatTreeModule,
-    MatIconModule,
-    MatButtonModule,
-  ],
+  imports: [MatTreeModule, MatIconModule, MatButtonModule],
 })
 export class TreeScene {
   treeControl = new FlatTreeControl<FileFlatNode>(
     node => node.level,
-    node => node.expandable
+    node => node.expandable,
   );
 
   treeFlattener = new MatTreeFlattener(
     this._transformer,
     node => node.level,
     node => node.expandable,
-    node => node.children
+    node => node.children,
   );
 
   dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
diff --git a/material.angular.io/scenes/src/environments/environment.prod.ts b/material.angular.io/scenes/src/environments/environment.prod.ts
index 3612073bc31c..c9669790be17 100644
--- a/material.angular.io/scenes/src/environments/environment.prod.ts
+++ b/material.angular.io/scenes/src/environments/environment.prod.ts
@@ -1,3 +1,3 @@
 export const environment = {
-  production: true
+  production: true,
 };
diff --git a/material.angular.io/scenes/src/environments/environment.ts b/material.angular.io/scenes/src/environments/environment.ts
index 30d7bccb1989..31cb7855f144 100644
--- a/material.angular.io/scenes/src/environments/environment.ts
+++ b/material.angular.io/scenes/src/environments/environment.ts
@@ -3,7 +3,7 @@
 // The list of file replacements can be found in `angular.json`.
 
 export const environment = {
-  production: false
+  production: false,
 };
 
 /*
diff --git a/material.angular.io/scenes/src/main.ts b/material.angular.io/scenes/src/main.ts
index c7fe4aa2707c..2eb8057d9d0e 100644
--- a/material.angular.io/scenes/src/main.ts
+++ b/material.angular.io/scenes/src/main.ts
@@ -13,16 +13,12 @@ import {provideRouter} from '@angular/router';
 
 bootstrapApplication(AppComponent, {
   providers: [
-    importProvidersFrom(
-      BrowserModule,
-      MatNativeDateModule,
-      NoopAnimationsModule,
-    ),
+    importProvidersFrom(BrowserModule, MatNativeDateModule, NoopAnimationsModule),
     {
       provide: OverlayContainer,
       useFactory: (doc: any, platform: Platform) => new SceneOverlayContainer(doc, platform),
-      deps: [DOCUMENT, Platform]
+      deps: [DOCUMENT, Platform],
     },
     provideRouter(routes),
-  ]
+  ],
 }).catch(err => console.error(err));
diff --git a/material.angular.io/scenes/src/polyfills.ts b/material.angular.io/scenes/src/polyfills.ts
index eb98194e4dba..7563149a0e62 100644
--- a/material.angular.io/scenes/src/polyfills.ts
+++ b/material.angular.io/scenes/src/polyfills.ts
@@ -58,8 +58,7 @@
 /***************************************************************************************************
  * Zone JS is required by default for Angular itself.
  */
-import 'zone.js';  // Included with Angular CLI.
-
+import 'zone.js'; // Included with Angular CLI.
 
 /***************************************************************************************************
  * APPLICATION IMPORTS
diff --git a/material.angular.io/scenes/src/test.ts b/material.angular.io/scenes/src/test.ts
index bcc2186d9557..826f7f0d03fa 100644
--- a/material.angular.io/scenes/src/test.ts
+++ b/material.angular.io/scenes/src/test.ts
@@ -1,10 +1,10 @@
 // This file is required by karma.conf.js and loads recursively all the .spec and framework files
 
 import 'zone.js/testing';
-import { getTestBed } from '@angular/core/testing';
+import {getTestBed} from '@angular/core/testing';
 import {
   BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting
+  platformBrowserDynamicTesting,
 } from '@angular/platform-browser-dynamic/testing';
 
 // First, initialize the Angular testing environment.
diff --git a/material.angular.io/scenes/tsconfig.app.json b/material.angular.io/scenes/tsconfig.app.json
index 5efcaa84b26c..2e8cbcc4aa6d 100644
--- a/material.angular.io/scenes/tsconfig.app.json
+++ b/material.angular.io/scenes/tsconfig.app.json
@@ -4,11 +4,6 @@
     "outDir": "../../out-tsc/app",
     "types": []
   },
-  "files": [
-    "src/main.ts",
-    "src/polyfills.ts"
-  ],
-  "include": [
-    "src/**/*.d.ts"
-  ]
+  "files": ["src/main.ts", "src/polyfills.ts"],
+  "include": ["src/**/*.d.ts"]
 }
diff --git a/material.angular.io/scenes/tsconfig.spec.json b/material.angular.io/scenes/tsconfig.spec.json
index 836da120a6d6..50e52a04a0a1 100644
--- a/material.angular.io/scenes/tsconfig.spec.json
+++ b/material.angular.io/scenes/tsconfig.spec.json
@@ -2,17 +2,8 @@
   "extends": "../tsconfig.json",
   "compilerOptions": {
     "outDir": "../../out-tsc/spec",
-    "types": [
-      "jasmine",
-      "node"
-    ]
+    "types": ["jasmine", "node"]
   },
-  "files": [
-    "src/test.ts",
-    "src/polyfills.ts"
-  ],
-  "include": [
-    "src/**/*.spec.ts",
-    "src/**/*.d.ts"
-  ]
+  "files": ["src/test.ts", "src/polyfills.ts"],
+  "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
 }
diff --git a/material.angular.io/src/app/index.ts b/material.angular.io/src/app/index.ts
index a595619f7f3b..ea7ac372be40 100644
--- a/material.angular.io/src/app/index.ts
+++ b/material.angular.io/src/app/index.ts
@@ -1,2 +1 @@
 export * from './material-docs-app';
-
diff --git a/material.angular.io/src/app/material-docs-app.ts b/material.angular.io/src/app/material-docs-app.ts
index afd88e4e8800..7dfe75179983 100644
--- a/material.angular.io/src/app/material-docs-app.ts
+++ b/material.angular.io/src/app/material-docs-app.ts
@@ -29,7 +29,7 @@ export class MaterialDocsApp implements OnDestroy {
         .pipe(
           map(e => e.urlAfterRedirects),
           startWith(''),
-          pairwise()
+          pairwise(),
         )
         .subscribe(([fromUrl, toUrl]) => {
           // We want to reset the scroll position on navigation except when navigating within
@@ -38,7 +38,7 @@ export class MaterialDocsApp implements OnDestroy {
             resetScrollPosition();
           }
           analytics.locationChanged(toUrl);
-        })
+        }),
     );
   }
 
diff --git a/material.angular.io/src/app/pages/component-category-list/component-category-list.spec.ts b/material.angular.io/src/app/pages/component-category-list/component-category-list.spec.ts
index 23375f3f05cd..243b0039958a 100644
--- a/material.angular.io/src/app/pages/component-category-list/component-category-list.spec.ts
+++ b/material.angular.io/src/app/pages/component-category-list/component-category-list.spec.ts
@@ -13,14 +13,12 @@ describe('ComponentCategoryList', () => {
 
     const fakeActivatedRoute = {
       snapshot: {},
-      pathFromRoot: [{params}]
+      pathFromRoot: [{params}],
     };
 
     TestBed.configureTestingModule({
       imports: [ComponentCategoryListModule, DocsAppTestingModule],
-      providers: [
-        {provide: ActivatedRoute, useValue: fakeActivatedRoute}
-      ]
+      providers: [{provide: ActivatedRoute, useValue: fakeActivatedRoute}],
     }).compileComponents();
   }));
 
@@ -37,8 +35,7 @@ describe('ComponentCategoryList', () => {
 
     const component = fixture.componentInstance;
     const components = component.docItems.getItems('components');
-    const cards = fixture
-        .nativeElement.querySelectorAll('.docs-component-category-list-card');
+    const cards = fixture.nativeElement.querySelectorAll('.docs-component-category-list-card');
     expect(cards.length).toEqual(components.length);
   });
 });
diff --git a/material.angular.io/src/app/pages/component-category-list/component-category-list.ts b/material.angular.io/src/app/pages/component-category-list/component-category-list.ts
index 4030884a5046..581068532dda 100644
--- a/material.angular.io/src/app/pages/component-category-list/component-category-list.ts
+++ b/material.angular.io/src/app/pages/component-category-list/component-category-list.ts
@@ -5,10 +5,7 @@ import {ActivatedRoute, Params, RouterModule, RouterLink} from '@angular/router'
 import {MatRipple} from '@angular/material/core';
 import {combineLatest, Observable, Subscription} from 'rxjs';
 
-import {
-  DocumentationItems,
-  SECTIONS
-} from '../../shared/documentation-items/documentation-items';
+import {DocumentationItems, SECTIONS} from '../../shared/documentation-items/documentation-items';
 import {NavigationFocus} from '../../shared/navigation-focus/navigation-focus';
 
 import {ComponentPageTitle} from '../page-title/page-title';
@@ -18,22 +15,25 @@ import {ComponentPageTitle} from '../page-title/page-title';
   templateUrl: './component-category-list.html',
   styleUrls: ['./component-category-list.scss'],
   standalone: true,
-  imports: [NavigationFocus, RouterLink, AsyncPipe, MatRipple]
+  imports: [NavigationFocus, RouterLink, AsyncPipe, MatRipple],
 })
 export class ComponentCategoryList implements OnInit, OnDestroy {
   params: Observable<Params> | undefined;
   routeParamSubscription: Subscription = new Subscription();
   _categoryListSummary: string | undefined;
 
-  constructor(public docItems: DocumentationItems,
-              public _componentPageTitle: ComponentPageTitle,
-              private _route: ActivatedRoute) {}
+  constructor(
+    public docItems: DocumentationItems,
+    public _componentPageTitle: ComponentPageTitle,
+    private _route: ActivatedRoute,
+  ) {}
 
   ngOnInit() {
     // Combine params from all of the path into a single object.
     this.params = combineLatest(
       this._route.pathFromRoot.map(route => route.params),
-      Object.assign);
+      Object.assign,
+    );
 
     // title on topbar navigation
     this.routeParamSubscription = this.params.subscribe(params => {
@@ -55,4 +55,4 @@ export class ComponentCategoryList implements OnInit, OnDestroy {
   imports: [MatCardModule, RouterModule, ComponentCategoryList],
   exports: [ComponentCategoryList],
 })
-export class ComponentCategoryListModule { }
+export class ComponentCategoryListModule {}
diff --git a/material.angular.io/src/app/pages/component-page-header/component-page-header.spec.ts b/material.angular.io/src/app/pages/component-page-header/component-page-header.spec.ts
index 6911f62a5dad..fba5ad18ae95 100644
--- a/material.angular.io/src/app/pages/component-page-header/component-page-header.spec.ts
+++ b/material.angular.io/src/app/pages/component-page-header/component-page-header.spec.ts
@@ -2,7 +2,6 @@ import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing';
 import {ComponentPageHeader} from './component-page-header';
 import {DocsAppTestingModule} from '../../testing/testing-module';
 
-
 describe('ComponentPageHeader', () => {
   let fixture: ComponentFixture<ComponentPageHeader>;
 
diff --git a/material.angular.io/src/app/pages/component-page-header/component-page-header.ts b/material.angular.io/src/app/pages/component-page-header/component-page-header.ts
index 94dcc34ca148..71d2297e8182 100644
--- a/material.angular.io/src/app/pages/component-page-header/component-page-header.ts
+++ b/material.angular.io/src/app/pages/component-page-header/component-page-header.ts
@@ -8,7 +8,7 @@ import {MatIconModule} from '@angular/material/icon';
   templateUrl: './component-page-header.html',
   styleUrls: ['./component-page-header.scss'],
   standalone: true,
-  imports: [MatButtonModule, MatIconModule]
+  imports: [MatButtonModule, MatIconModule],
 })
 export class ComponentPageHeader {
   @Output() toggleSidenav = new EventEmitter<void>();
diff --git a/material.angular.io/src/app/pages/component-sidenav/component-sidenav-can-load-guard.ts b/material.angular.io/src/app/pages/component-sidenav/component-sidenav-can-load-guard.ts
index 74d761a0c55a..3f3c222a6dff 100644
--- a/material.angular.io/src/app/pages/component-sidenav/component-sidenav-can-load-guard.ts
+++ b/material.angular.io/src/app/pages/component-sidenav/component-sidenav-can-load-guard.ts
@@ -7,14 +7,14 @@ import {SECTIONS} from '../../shared/documentation-items/documentation-items';
  * items.
  */
 @Injectable({providedIn: 'root'})
-export class CanActivateComponentSidenav  {
+export class CanActivateComponentSidenav {
   constructor(private router: Router) {}
 
   canActivate(route: ActivatedRouteSnapshot) {
     // Searches if the section defined in the base UrlSegment is a valid section from the
     // documentation items. If found, returns true to allow activation, otherwise blocks activation
     // and navigates to '/'.
-    if (Object.keys(SECTIONS).some((s => s.toLowerCase() === route.url[0].path.toLowerCase()))) {
+    if (Object.keys(SECTIONS).some(s => s.toLowerCase() === route.url[0].path.toLowerCase())) {
       return true;
     }
 
diff --git a/material.angular.io/src/app/pages/component-sidenav/component-sidenav.spec.ts b/material.angular.io/src/app/pages/component-sidenav/component-sidenav.spec.ts
index f0a6e2fa2c21..fbc1faa5eba6 100644
--- a/material.angular.io/src/app/pages/component-sidenav/component-sidenav.spec.ts
+++ b/material.angular.io/src/app/pages/component-sidenav/component-sidenav.spec.ts
@@ -23,7 +23,7 @@ describe('ComponentSidenav', () => {
   it('should close the sidenav on init', () => {
     // Spy on window.mediaMatch and return stub
     spyOn(window, 'matchMedia').and.returnValue({
-      matches: true
+      matches: true,
     } as any);
 
     // TODO refactor this as none of these expectations are ever verified
@@ -36,10 +36,9 @@ describe('ComponentSidenav', () => {
 
   it('should show a link for each item in doc items categories', () => {
     const totalItems = component.docItems.getItems('categories').length;
-    const totalLinks = fixture
-      .nativeElement
-      .querySelectorAll('.docs-component-viewer-sidenav li a')
-      .length;
+    const totalLinks = fixture.nativeElement.querySelectorAll(
+      '.docs-component-viewer-sidenav li a',
+    ).length;
     expect(totalLinks).toEqual(totalItems);
   });
 });
diff --git a/material.angular.io/src/app/pages/component-sidenav/component-sidenav.ts b/material.angular.io/src/app/pages/component-sidenav/component-sidenav.ts
index 4f483289874f..132410678283 100644
--- a/material.angular.io/src/app/pages/component-sidenav/component-sidenav.ts
+++ b/material.angular.io/src/app/pages/component-sidenav/component-sidenav.ts
@@ -7,7 +7,7 @@ import {
   ViewEncapsulation,
   forwardRef,
   input,
-  viewChild
+  viewChild,
 } from '@angular/core';
 import {animate, state, style, transition, trigger} from '@angular/animations';
 import {CdkAccordionModule} from '@angular/cdk/accordion';
@@ -24,24 +24,20 @@ import {
   Routes,
   RouterOutlet,
   RouterLinkActive,
-  RouterLink
+  RouterLink,
 } from '@angular/router';
 import {combineLatest, Observable, Subscription} from 'rxjs';
 import {map} from 'rxjs/operators';
 
 import {DocViewerModule} from '../../shared/doc-viewer/doc-viewer-module';
-import {
-  DocumentationItems
-} from '../../shared/documentation-items/documentation-items';
+import {DocumentationItems} from '../../shared/documentation-items/documentation-items';
 import {Footer} from '../../shared/footer/footer';
 
-import {
-  NavigationFocusService
-} from '../../shared/navigation-focus/navigation-focus.service';
+import {NavigationFocusService} from '../../shared/navigation-focus/navigation-focus.service';
 
 import {
   ComponentCategoryList,
-  ComponentCategoryListModule
+  ComponentCategoryListModule,
 } from '../component-category-list/component-category-list';
 import {ComponentPageHeader} from '../component-page-header/component-page-header';
 import {
@@ -49,7 +45,7 @@ import {
   ComponentExamples,
   ComponentOverview,
   ComponentViewer,
-  ComponentViewerModule
+  ComponentViewerModule,
 } from '../component-viewer/component-viewer';
 import {ComponentStyling} from '../component-viewer/component-styling';
 
@@ -85,32 +81,38 @@ export class ComponentSidenav implements OnInit, OnDestroy {
   isScreenSmall: Observable<boolean>;
   private subscriptions = new Subscription();
 
-  constructor(public docItems: DocumentationItems,
-              private _route: ActivatedRoute,
-              private _navigationFocusService: NavigationFocusService,
-              zone: NgZone,
-              breakpoints: BreakpointObserver) {
-    this.isExtraScreenSmall =
-        breakpoints.observe(`(max-width: ${EXTRA_SMALL_WIDTH_BREAKPOINT}px)`)
-            .pipe(map(breakpoint => breakpoint.matches));
-    this.isScreenSmall = breakpoints.observe(`(max-width: ${SMALL_WIDTH_BREAKPOINT}px)`)
-    .pipe(map(breakpoint => breakpoint.matches));
+  constructor(
+    public docItems: DocumentationItems,
+    private _route: ActivatedRoute,
+    private _navigationFocusService: NavigationFocusService,
+    zone: NgZone,
+    breakpoints: BreakpointObserver,
+  ) {
+    this.isExtraScreenSmall = breakpoints
+      .observe(`(max-width: ${EXTRA_SMALL_WIDTH_BREAKPOINT}px)`)
+      .pipe(map(breakpoint => breakpoint.matches));
+    this.isScreenSmall = breakpoints
+      .observe(`(max-width: ${SMALL_WIDTH_BREAKPOINT}px)`)
+      .pipe(map(breakpoint => breakpoint.matches));
   }
 
   ngOnInit() {
     // Combine params from all of the path into a single object.
     this.params = combineLatest(
-        this._route.pathFromRoot.map(route => route.params), Object.assign);
+      this._route.pathFromRoot.map(route => route.params),
+      Object.assign,
+    );
 
     this.subscriptions.add(
-      this._navigationFocusService.navigationEndEvents.pipe(map(() => this.isScreenSmall))
-      .subscribe((shouldCloseSideNav) => {
+      this._navigationFocusService.navigationEndEvents
+        .pipe(map(() => this.isScreenSmall))
+        .subscribe(shouldCloseSideNav => {
           const sidenav = this.sidenav();
           if (shouldCloseSideNav && sidenav) {
             sidenav.close();
           }
-        }
-      ));
+        }),
+    );
   }
 
   ngOnDestroy() {
@@ -127,18 +129,13 @@ export class ComponentSidenav implements OnInit, OnDestroy {
   templateUrl: './component-nav.html',
   animations: [
     trigger('bodyExpansion', [
-      state('collapsed', style({ height: '0px', display: 'none' })),
-      state('expanded', style({ height: '*', display: 'block' })),
+      state('collapsed', style({height: '0px', display: 'none'})),
+      state('expanded', style({height: '*', display: 'block'})),
       transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),
     ]),
   ],
   standalone: true,
-  imports: [
-    MatListModule,
-    RouterLinkActive,
-    RouterLink,
-    AsyncPipe,
-  ],
+  imports: [MatListModule, RouterLinkActive, RouterLink, AsyncPipe],
 })
 export class ComponentNav {
   readonly params = input<Observable<Params>>();
@@ -147,32 +144,32 @@ export class ComponentNav {
   constructor(public docItems: DocumentationItems) {}
 }
 
-const routes: Routes = [{
-  path: '',
-  component: ComponentSidenav,
-  children: [
-    {path: 'component/:id', redirectTo: ':id', pathMatch: 'full'},
-    {path: 'category/:id', redirectTo: '/categories/:id', pathMatch: 'full'},
-    {
-      path: 'categories',
-      children: [
-        {path: '', component: ComponentCategoryList},
-      ],
-    },
-    {
-      path: ':id',
-      component: ComponentViewer,
-      children: [
-        {path: '', redirectTo: 'overview', pathMatch: 'full'},
-        {path: 'overview', component: ComponentOverview, pathMatch: 'full'},
-        {path: 'api', component: ComponentApi, pathMatch: 'full'},
-        {path: 'styling', component: ComponentStyling, pathMatch: 'full'},
-        {path: 'examples', component: ComponentExamples, pathMatch: 'full'},
-      ],
-    },
-    {path: '**', redirectTo: '/404'}
-  ]
-}];
+const routes: Routes = [
+  {
+    path: '',
+    component: ComponentSidenav,
+    children: [
+      {path: 'component/:id', redirectTo: ':id', pathMatch: 'full'},
+      {path: 'category/:id', redirectTo: '/categories/:id', pathMatch: 'full'},
+      {
+        path: 'categories',
+        children: [{path: '', component: ComponentCategoryList}],
+      },
+      {
+        path: ':id',
+        component: ComponentViewer,
+        children: [
+          {path: '', redirectTo: 'overview', pathMatch: 'full'},
+          {path: 'overview', component: ComponentOverview, pathMatch: 'full'},
+          {path: 'api', component: ComponentApi, pathMatch: 'full'},
+          {path: 'styling', component: ComponentStyling, pathMatch: 'full'},
+          {path: 'examples', component: ComponentExamples, pathMatch: 'full'},
+        ],
+      },
+      {path: '**', redirectTo: '/404'},
+    ],
+  },
+];
 
 @NgModule({
   imports: [
@@ -187,7 +184,7 @@ const routes: Routes = [{
     MatIconModule,
     RouterModule.forChild(routes),
     ComponentSidenav,
-    ComponentNav
+    ComponentNav,
   ],
   exports: [ComponentSidenav],
 })
diff --git a/material.angular.io/src/app/pages/component-viewer/component-styling.ts b/material.angular.io/src/app/pages/component-viewer/component-styling.ts
index 5d27b1eb224d..287a1f16704a 100644
--- a/material.angular.io/src/app/pages/component-viewer/component-styling.ts
+++ b/material.angular.io/src/app/pages/component-viewer/component-styling.ts
@@ -47,11 +47,12 @@ export class ComponentStyling {
   private tokenService = inject(TokenService);
   private domSanitizer = inject(DomSanitizer);
   protected docItem = this.componentViewer.componentDocItem;
-  protected dataStream =
-    this.docItem.pipe(switchMap(item => this.tokenService.getTokenData(item)));
+  protected dataStream = this.docItem.pipe(switchMap(item => this.tokenService.getTokenData(item)));
   protected hasDataStream = this.dataStream.pipe(
-    map(data => data.themes.length > 0 && data.themes.some(d => d.tokens.length > 0)));
+    map(data => data.themes.length > 0 && data.themes.some(d => d.tokens.length > 0)),
+  );
 
-  protected exampleStream = this.dataStream.pipe(map(data => data.example ?
-    this.domSanitizer.bypassSecurityTrustHtml(data.example) : null));
+  protected exampleStream = this.dataStream.pipe(
+    map(data => (data.example ? this.domSanitizer.bypassSecurityTrustHtml(data.example) : null)),
+  );
 }
diff --git a/material.angular.io/src/app/pages/component-viewer/component-viewer.spec.ts b/material.angular.io/src/app/pages/component-viewer/component-viewer.spec.ts
index 6fa2097f8870..7fac20e394da 100644
--- a/material.angular.io/src/app/pages/component-viewer/component-viewer.spec.ts
+++ b/material.angular.io/src/app/pages/component-viewer/component-viewer.spec.ts
@@ -15,9 +15,9 @@ const mockActivatedRoute = {
   snapshot: {},
   fragment: observableOf({}),
   parent: {
-    params: observableOf({})
+    params: observableOf({}),
   },
-  params: observableOf({id: docItemsId})
+  params: observableOf({id: docItemsId}),
 };
 
 describe('ComponentViewer', () => {
@@ -26,9 +26,7 @@ describe('ComponentViewer', () => {
   beforeEach(waitForAsync(() => {
     TestBed.configureTestingModule({
       imports: [ComponentViewerModule, DocsAppTestingModule, TestExampleModule],
-      providers: [
-        {provide: ActivatedRoute, useValue: mockActivatedRoute},
-      ]
+      providers: [{provide: ActivatedRoute, useValue: mockActivatedRoute}],
     }).compileComponents();
   }));
 
@@ -48,15 +46,9 @@ describe('ComponentViewer', () => {
   });
 });
 
-
 // Create a version of ExampleModule for testing with only one component so that we odn't have
 // to compile all of the examples for these tests.
 @NgModule({
-  imports: [
-    MatButtonModule,
-    MatIconModule,
-    NoopAnimationsModule,
-    ButtonOverviewExample,
-  ],
+  imports: [MatButtonModule, MatIconModule, NoopAnimationsModule, ButtonOverviewExample],
 })
-class TestExampleModule { }
+class TestExampleModule {}
diff --git a/material.angular.io/src/app/pages/component-viewer/component-viewer.ts b/material.angular.io/src/app/pages/component-viewer/component-viewer.ts
index b19d6f61b809..445f6f1b9932 100644
--- a/material.angular.io/src/app/pages/component-viewer/component-viewer.ts
+++ b/material.angular.io/src/app/pages/component-viewer/component-viewer.ts
@@ -9,16 +9,17 @@ import {
   OnInit,
   ViewEncapsulation,
   viewChild,
-  viewChildren
+  viewChildren,
 } from '@angular/core';
 import {MatTabsModule} from '@angular/material/tabs';
-import {ActivatedRoute,
+import {
+  ActivatedRoute,
   Params,
   Router,
   RouterModule,
   RouterLinkActive,
   RouterLink,
-  RouterOutlet
+  RouterOutlet,
 } from '@angular/router';
 import {combineLatest, Observable, ReplaySubject, Subject} from 'rxjs';
 import {map, skip, takeUntil} from 'rxjs/operators';
@@ -31,20 +32,13 @@ import {NavigationFocus} from '../../shared/navigation-focus/navigation-focus';
 import {DocViewer} from '../../shared/doc-viewer/doc-viewer';
 import {ExampleViewer} from '../../shared/example-viewer/example-viewer';
 
-
 @Component({
   selector: 'app-component-viewer',
   templateUrl: './component-viewer.html',
   styleUrls: ['./component-viewer.scss'],
   encapsulation: ViewEncapsulation.None,
   standalone: true,
-  imports: [
-    MatTabsModule,
-    NavigationFocus,
-    RouterLinkActive,
-    RouterLink,
-    RouterOutlet,
-  ],
+  imports: [MatTabsModule, NavigationFocus, RouterLinkActive, RouterLink, RouterOutlet],
 })
 export class ComponentViewer implements OnDestroy {
   componentDocItem = new ReplaySubject<DocItem>(1);
@@ -55,45 +49,47 @@ export class ComponentViewer implements OnDestroy {
     route: ActivatedRoute,
     private router: Router,
     public componentPageTitle: ComponentPageTitle,
-    readonly docItems: DocumentationItems) {
+    readonly docItems: DocumentationItems,
+  ) {
     const routeAndParentParams = [route.params];
     if (route.parent) {
       routeAndParentParams.push(route.parent.params);
     }
     // Listen to changes on the current route for the doc id (e.g. button/checkbox) and the
     // parent route for the section (material/cdk).
-    combineLatest(routeAndParentParams).pipe(
-      map((params: Params[]) => {
-        const id = params[0]['id'];
-        const section = params[1]['section'];
-
-        return ({
-          doc: docItems.getItemById(id, section),
-          section: section
-        });
-      },
-      takeUntil(this._destroyed))
-    ).subscribe(({doc, section}) => {
-      if (!doc) {
-        this.router.navigate(['/' + section]);
-        return;
-      }
-
-      this.componentDocItem.next(doc);
-      componentPageTitle.title = `${doc.name}`;
-
-      if (doc.hasStyling) {
-        this.sections.add('styling');
-      } else {
-        this.sections.delete('styling');
-      }
-
-      if (doc.examples && doc.examples.length) {
-        this.sections.add('examples');
-      } else {
-        this.sections.delete('examples');
-      }
-    });
+    combineLatest(routeAndParentParams)
+      .pipe(
+        map((params: Params[]) => {
+          const id = params[0]['id'];
+          const section = params[1]['section'];
+
+          return {
+            doc: docItems.getItemById(id, section),
+            section: section,
+          };
+        }, takeUntil(this._destroyed)),
+      )
+      .subscribe(({doc, section}) => {
+        if (!doc) {
+          this.router.navigate(['/' + section]);
+          return;
+        }
+
+        this.componentDocItem.next(doc);
+        componentPageTitle.title = `${doc.name}`;
+
+        if (doc.hasStyling) {
+          this.sections.add('styling');
+        } else {
+          this.sections.delete('styling');
+        }
+
+        if (doc.examples && doc.examples.length) {
+          this.sections.add('examples');
+        } else {
+          this.sections.delete('examples');
+        }
+      });
   }
 
   ngOnDestroy(): void {
@@ -118,14 +114,14 @@ export class ComponentBaseView implements OnInit, OnDestroy {
   constructor(
     public componentViewer: ComponentViewer,
     breakpointObserver: BreakpointObserver,
-    private changeDetectorRef: ChangeDetectorRef) {
-    this.showToc = breakpointObserver.observe('(max-width: 1200px)')
-      .pipe(
-        map(result => {
-          this.changeDetectorRef.detectChanges();
-          return !result.matches;
-        })
-      );
+    private changeDetectorRef: ChangeDetectorRef,
+  ) {
+    this.showToc = breakpointObserver.observe('(max-width: 1200px)').pipe(
+      map(result => {
+        this.changeDetectorRef.detectChanges();
+        return !result.matches;
+      }),
+    );
   }
 
   ngOnInit() {
@@ -136,10 +132,7 @@ export class ComponentBaseView implements OnInit, OnDestroy {
       }
     });
 
-    this.showToc.pipe(
-      skip(1),
-      takeUntil(this._destroyed)
-    ).subscribe(() => {
+    this.showToc.pipe(skip(1), takeUntil(this._destroyed)).subscribe(() => {
       if (this.tableOfContents()) {
         this.viewers().forEach(viewer => {
           viewer.contentRendered.emit(viewer._elementRef.nativeElement);
@@ -167,11 +160,7 @@ export class ComponentBaseView implements OnInit, OnDestroy {
   templateUrl: './component-overview.html',
   encapsulation: ViewEncapsulation.None,
   standalone: true,
-  imports: [
-    DocViewer,
-    TableOfContents,
-    AsyncPipe,
-  ],
+  imports: [DocViewer, TableOfContents, AsyncPipe],
 })
 export class ComponentOverview extends ComponentBaseView {
   getOverviewDocumentUrl(doc: DocItem) {
@@ -191,11 +180,7 @@ export class ComponentOverview extends ComponentBaseView {
   styleUrls: ['./component-api.scss'],
   encapsulation: ViewEncapsulation.None,
   standalone: true,
-  imports: [
-    DocViewer,
-    TableOfContents,
-    AsyncPipe,
-  ],
+  imports: [DocViewer, TableOfContents, AsyncPipe],
 })
 export class ComponentApi extends ComponentBaseView {
   getApiDocumentUrl(doc: DocItem) {
@@ -209,10 +194,7 @@ export class ComponentApi extends ComponentBaseView {
   templateUrl: './component-examples.html',
   encapsulation: ViewEncapsulation.None,
   standalone: true,
-  imports: [
-    ExampleViewer,
-    AsyncPipe,
-  ],
+  imports: [ExampleViewer, AsyncPipe],
 })
 export class ComponentExamples extends ComponentBaseView {}
 
diff --git a/material.angular.io/src/app/pages/component-viewer/token-table.ts b/material.angular.io/src/app/pages/component-viewer/token-table.ts
index 7001074a61a8..49fd3f68006b 100644
--- a/material.angular.io/src/app/pages/component-viewer/token-table.ts
+++ b/material.angular.io/src/app/pages/component-viewer/token-table.ts
@@ -29,7 +29,7 @@ export interface Token {
     MatSelectModule,
     TokenName,
     TitleCasePipe,
-  ]
+  ],
 })
 export class TokenTable {
   tokens = input.required<Token[]>();
@@ -41,9 +41,11 @@ export class TokenTable {
     const name = this.nameFilter().trim().toLowerCase();
     const typeFilter = this.typeFilter();
 
-    return this.tokens().filter(token =>
-      (!name || token.overridesName.toLowerCase().includes(name)) &&
-      (!typeFilter || token.type === typeFilter));
+    return this.tokens().filter(
+      token =>
+        (!name || token.overridesName.toLowerCase().includes(name)) &&
+        (!typeFilter || token.type === typeFilter),
+    );
   });
 
   protected reset() {
diff --git a/material.angular.io/src/app/pages/guide-list/guide-list.spec.ts b/material.angular.io/src/app/pages/guide-list/guide-list.spec.ts
index a228f95745d7..1c72a40a27c0 100644
--- a/material.angular.io/src/app/pages/guide-list/guide-list.spec.ts
+++ b/material.angular.io/src/app/pages/guide-list/guide-list.spec.ts
@@ -2,7 +2,6 @@ import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing';
 import {GuideList} from './guide-list';
 import {DocsAppTestingModule} from '../../testing/testing-module';
 
-
 describe('GuideList', () => {
   let fixture: ComponentFixture<GuideList>;
 
@@ -18,10 +17,7 @@ describe('GuideList', () => {
     fixture.detectChanges();
 
     const totalItems = component.guideItems.getAllItems().length;
-    const totalLinks = fixture
-      .nativeElement
-      .querySelectorAll('.docs-guide-item')
-      .length;
+    const totalLinks = fixture.nativeElement.querySelectorAll('.docs-guide-item').length;
     expect(totalLinks).toEqual(totalItems);
   });
 });
diff --git a/material.angular.io/src/app/pages/guide-list/guide-list.ts b/material.angular.io/src/app/pages/guide-list/guide-list.ts
index a7b52101cfd8..1c81a4cc3422 100644
--- a/material.angular.io/src/app/pages/guide-list/guide-list.ts
+++ b/material.angular.io/src/app/pages/guide-list/guide-list.ts
@@ -12,12 +12,15 @@ import {MatRipple} from '@angular/material/core';
   templateUrl: './guide-list.html',
   styleUrls: ['./guide-list.scss'],
   standalone: true,
-  imports: [NavigationFocus, RouterLink, MatCardModule, Footer, MatRipple]
+  imports: [NavigationFocus, RouterLink, MatCardModule, Footer, MatRipple],
 })
 export class GuideList implements OnInit {
   @HostBinding('class.main-content') readonly mainContentClass = true;
 
-  constructor(public guideItems: GuideItems, public _componentPageTitle: ComponentPageTitle) {}
+  constructor(
+    public guideItems: GuideItems,
+    public _componentPageTitle: ComponentPageTitle,
+  ) {}
 
   ngOnInit(): void {
     this._componentPageTitle.title = 'Guides';
diff --git a/material.angular.io/src/app/pages/guide-viewer/guide-viewer.spec.ts b/material.angular.io/src/app/pages/guide-viewer/guide-viewer.spec.ts
index a04726358fec..02536bf025ad 100644
--- a/material.angular.io/src/app/pages/guide-viewer/guide-viewer.spec.ts
+++ b/material.angular.io/src/app/pages/guide-viewer/guide-viewer.spec.ts
@@ -13,19 +13,16 @@ const mockActivatedRoute = {
   params: new Observable(observer => {
     observer.next({id: guideItemsId});
     observer.complete();
-  })
+  }),
 };
 
-
 describe('GuideViewer', () => {
   let fixture: ComponentFixture<GuideViewer>;
 
   beforeEach(waitForAsync(() => {
     TestBed.configureTestingModule({
       imports: [GuideViewerModule, DocsAppTestingModule],
-      providers: [
-        {provide: ActivatedRoute, useValue: mockActivatedRoute},
-      ]
+      providers: [{provide: ActivatedRoute, useValue: mockActivatedRoute}],
     }).compileComponents();
   }));
 
@@ -36,7 +33,6 @@ describe('GuideViewer', () => {
   it('should set the guide based off route params', () => {
     const component = fixture.componentInstance;
     fixture.detectChanges();
-    expect(component.guide)
-      .toEqual(component.guideItems.getItemById(guideItemsId));
+    expect(component.guide).toEqual(component.guideItems.getItemById(guideItemsId));
   });
 });
diff --git a/material.angular.io/src/app/pages/guide-viewer/guide-viewer.ts b/material.angular.io/src/app/pages/guide-viewer/guide-viewer.ts
index f759e89d8049..899b3c252d08 100644
--- a/material.angular.io/src/app/pages/guide-viewer/guide-viewer.ts
+++ b/material.angular.io/src/app/pages/guide-viewer/guide-viewer.ts
@@ -15,21 +15,18 @@ import {DocViewer} from '../../shared/doc-viewer/doc-viewer';
   templateUrl: './guide-viewer.html',
   styleUrls: ['./guide-viewer.scss'],
   standalone: true,
-  imports: [
-    DocViewer,
-    NavigationFocus,
-    TableOfContents,
-    Footer,
-  ],
+  imports: [DocViewer, NavigationFocus, TableOfContents, Footer],
 })
 export class GuideViewer implements OnInit {
   @HostBinding('class.main-content') readonly mainContentClass = true;
   guide: GuideItem | undefined;
 
-  constructor(_route: ActivatedRoute,
-              private _componentPageTitle: ComponentPageTitle,
-              private router: Router,
-              public guideItems: GuideItems) {
+  constructor(
+    _route: ActivatedRoute,
+    private _componentPageTitle: ComponentPageTitle,
+    private router: Router,
+    public guideItems: GuideItems,
+  ) {
     _route.params.subscribe(p => {
       const guideItem = guideItems.getItemById(p['id']);
       if (guideItem) {
@@ -49,18 +46,13 @@ export class GuideViewer implements OnInit {
   }
 }
 
-const routes: Routes = [ {path : '', component : GuideViewer} ];
+const routes: Routes = [{path: '', component: GuideViewer}];
 
 // This module needs to include all of the modules required by the examples in the guides.
 // For example, the custom form-field guide requires the ReactiveFormsModule.
 // These imports may need to be updated when adding examples to new or existing guides.
 @NgModule({
-  imports: [
-    DocViewerModule,
-    ReactiveFormsModule,
-    RouterModule.forChild(routes),
-    GuideViewer,
-  ],
+  imports: [DocViewerModule, ReactiveFormsModule, RouterModule.forChild(routes), GuideViewer],
   exports: [GuideViewer],
 })
 export class GuideViewerModule {}
diff --git a/material.angular.io/src/app/pages/homepage/homepage.ts b/material.angular.io/src/app/pages/homepage/homepage.ts
index 251fe2464e6a..41d90f951106 100644
--- a/material.angular.io/src/app/pages/homepage/homepage.ts
+++ b/material.angular.io/src/app/pages/homepage/homepage.ts
@@ -45,7 +45,8 @@ export class Homepage implements OnInit {
   constructor(
     public _componentPageTitle: ComponentPageTitle,
     public guideItems: GuideItems,
-    @Optional() @Inject(ANIMATION_MODULE_TYPE) animationsModule?: string) {
+    @Optional() @Inject(ANIMATION_MODULE_TYPE) animationsModule?: string,
+  ) {
     this.animationsDisabled = animationsModule === 'NoopAnimations';
   }
 
diff --git a/material.angular.io/src/app/pages/not-found/not-found.ts b/material.angular.io/src/app/pages/not-found/not-found.ts
index c2fdac3b4ba7..a49fb49990b8 100644
--- a/material.angular.io/src/app/pages/not-found/not-found.ts
+++ b/material.angular.io/src/app/pages/not-found/not-found.ts
@@ -8,7 +8,7 @@ import {RouterLink} from '@angular/router';
   templateUrl: './not-found.html',
   styleUrls: ['./not-found.scss'],
   standalone: true,
-  imports: [MatButtonModule, RouterLink, Footer]
+  imports: [MatButtonModule, RouterLink, Footer],
 })
 export class NotFound {
   @HostBinding('class.main-content') readonly mainContentClass = true;
diff --git a/material.angular.io/src/app/routes.ts b/material.angular.io/src/app/routes.ts
index 73e79df4db8a..5e10b6400981 100644
--- a/material.angular.io/src/app/routes.ts
+++ b/material.angular.io/src/app/routes.ts
@@ -1,20 +1,18 @@
 import {Routes} from '@angular/router';
-import {
-  CanActivateComponentSidenav
-} from './pages/component-sidenav/component-sidenav-can-load-guard';
+import {CanActivateComponentSidenav} from './pages/component-sidenav/component-sidenav-can-load-guard';
 
 export const MATERIAL_DOCS_ROUTES: Routes = [
   {
     path: '',
     pathMatch: 'full',
-    loadComponent: () => import('./pages/homepage').then(m => m.Homepage)
+    loadComponent: () => import('./pages/homepage').then(m => m.Homepage),
   },
   {path: 'categories', redirectTo: '/components/categories'},
   {path: 'cdk', pathMatch: 'full', redirectTo: '/cdk/categories'},
   {path: 'components', pathMatch: 'full', redirectTo: '/components/categories'},
   {
     path: 'guides',
-    loadComponent: () => import('./pages/guide-list').then(m => m.GuideList)
+    loadComponent: () => import('./pages/guide-list').then(m => m.GuideList),
   },
   // Since https://github.com/angular/components/pull/9574, the cdk-table guide became the overview
   // document for the cdk table. To avoid any dead / broken links, we redirect to the new location.
@@ -29,18 +27,18 @@ export const MATERIAL_DOCS_ROUTES: Routes = [
   {path: 'guide/duplicate-theming-styles', redirectTo: '/guide/theming'},
   {
     path: 'guide/:id',
-    loadChildren: () => import('./pages/guide-viewer').then(m => m.GuideViewerModule)
+    loadChildren: () => import('./pages/guide-viewer').then(m => m.GuideViewerModule),
   },
   // Needs to be defined before `:section` so it gets picked first when redirecting a missing page.
   {
     path: '404',
-    loadComponent: () => import('./pages/not-found').then(m => m.NotFound)
+    loadComponent: () => import('./pages/not-found').then(m => m.NotFound),
   },
   {
     path: ':section',
     canActivate: [CanActivateComponentSidenav],
     loadChildren: () =>
-      import('./pages/component-sidenav/component-sidenav').then(m => m.ComponentSidenavModule)
+      import('./pages/component-sidenav/component-sidenav').then(m => m.ComponentSidenavModule),
   },
   {path: '**', redirectTo: '/404'},
 ];
diff --git a/material.angular.io/src/app/shared/analytics/analytics.ts b/material.angular.io/src/app/shared/analytics/analytics.ts
index b31b1a2a5e3d..cbc27a2328e5 100644
--- a/material.angular.io/src/app/shared/analytics/analytics.ts
+++ b/material.angular.io/src/app/shared/analytics/analytics.ts
@@ -75,15 +75,14 @@ export class AnalyticsService {
   }
 
   private _installGlobalSiteTag() {
-    const url =
-      `https://www.googletagmanager.com/gtag/js?id=${environment.googleAnalyticsMaterialId}`;
+    const url = `https://www.googletagmanager.com/gtag/js?id=${environment.googleAnalyticsMaterialId}`;
 
     // Note: This cannot be an arrow function as `gtag.js` expects an actual `Arguments`
     // instance with e.g. `callee` to be set. Do not attempt to change this and keep this
     // as much as possible in sync with the tracking code snippet suggested by the Google
     // Analytics 4 web UI under `Data Streams`.
     window.dataLayer = window.dataLayer || [];
-    window.gtag = function() {
+    window.gtag = function () {
       window.dataLayer?.push(arguments);
     };
     window.gtag('js', new Date());
@@ -106,7 +105,7 @@ export class AnalyticsService {
 
   private _installWindowErrorHandler() {
     window.addEventListener('error', event =>
-      this.reportError(formatErrorEventForAnalytics(event), true)
+      this.reportError(formatErrorEventForAnalytics(event), true),
     );
   }
 }
diff --git a/material.angular.io/src/app/shared/carousel/carousel.spec.ts b/material.angular.io/src/app/shared/carousel/carousel.spec.ts
index 4624690f62de..652d465ad940 100644
--- a/material.angular.io/src/app/shared/carousel/carousel.spec.ts
+++ b/material.angular.io/src/app/shared/carousel/carousel.spec.ts
@@ -3,12 +3,10 @@ import {waitForAsync, ComponentFixture, fakeAsync, flush, TestBed} from '@angula
 import {DocsAppTestingModule} from '../../testing/testing-module';
 import {Carousel, CarouselItem} from './carousel';
 
-
 describe('HorizontalCarousel', () => {
   let fixture: ComponentFixture<CarouselTestComponent>;
   let component: Carousel;
 
-
   beforeEach(waitForAsync(() => {
     TestBed.configureTestingModule({
       imports: [DocsAppTestingModule, CarouselTestComponent],
@@ -57,14 +55,16 @@ describe('HorizontalCarousel', () => {
         <div carousel-item class="docs-carousel-item-container"></div>
       }
     </app-carousel>`,
-  styles: [`
+  styles: [
+    `
     .docs-carousel-item-container {
       display: flex;
       width: 250px;
     }
-  `],
+  `,
+  ],
   standalone: true,
-  imports: [Carousel, CarouselItem, DocsAppTestingModule]
+  imports: [Carousel, CarouselItem, DocsAppTestingModule],
 })
 class CarouselTestComponent {
   @ViewChild(Carousel) carousel!: Carousel;
diff --git a/material.angular.io/src/app/shared/carousel/carousel.ts b/material.angular.io/src/app/shared/carousel/carousel.ts
index f64ae3be3819..b5443741995b 100644
--- a/material.angular.io/src/app/shared/carousel/carousel.ts
+++ b/material.angular.io/src/app/shared/carousel/carousel.ts
@@ -9,7 +9,7 @@ import {
   ViewEncapsulation,
   input,
   contentChildren,
-  viewChild
+  viewChild,
 } from '@angular/core';
 import {FocusableOption, FocusKeyManager} from '@angular/cdk/a11y';
 import {LEFT_ARROW, RIGHT_ARROW, TAB} from '@angular/cdk/keycodes';
@@ -41,7 +41,7 @@ export class CarouselItem implements FocusableOption {
   imports: [MatButtonModule, MatIconModule],
 })
 export class Carousel implements AfterContentInit {
-  readonly ariaLabel = input<string|undefined>(undefined, { alias: 'aria-label' });
+  readonly ariaLabel = input<string | undefined>(undefined, {alias: 'aria-label'});
   readonly items = contentChildren(CarouselItem);
   readonly list = viewChild.required<ElementRef<HTMLElement>>('list');
   @HostBinding('class.animations-disabled') readonly animationsDisabled: boolean;
diff --git a/material.angular.io/src/app/shared/cookie-popup/cookie-popup.ts b/material.angular.io/src/app/shared/cookie-popup/cookie-popup.ts
index fb9a437762d5..8c923b177d20 100644
--- a/material.angular.io/src/app/shared/cookie-popup/cookie-popup.ts
+++ b/material.angular.io/src/app/shared/cookie-popup/cookie-popup.ts
@@ -9,7 +9,7 @@ const STORAGE_KEY = 'docs-cookies';
   styleUrls: ['./cookie-popup.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
   standalone: true,
-  imports: [MatButtonModule]
+  imports: [MatButtonModule],
 })
 export class CookiePopup {
   /** Whether the user has accepted the cookie disclaimer. */
diff --git a/material.angular.io/src/app/shared/doc-viewer/deprecated-tooltip.ts b/material.angular.io/src/app/shared/doc-viewer/deprecated-tooltip.ts
index 78cafe381e7a..1627c1c182ec 100644
--- a/material.angular.io/src/app/shared/doc-viewer/deprecated-tooltip.ts
+++ b/material.angular.io/src/app/shared/doc-viewer/deprecated-tooltip.ts
@@ -2,23 +2,23 @@ import {Component} from '@angular/core';
 import {MatTooltipModule} from '@angular/material/tooltip';
 
 /**
- * This component is responsible for showing the 
+ * This component is responsible for showing the
  * deprecated fields throughout API from material repo,
- * 
+ *
  * When deprecated docs content is generated like:
- * 
- * <div class="docs-api-class-deprecated-marker" 
+ *
+ * <div class="docs-api-class-deprecated-marker"
  *  title="Will be removed in v21.0.0 or later">
  *  Deprecated
  * </div>
- * 
+ *
  * It uses `title` attribute to show information regarding
  * deprecation and other information regarding deprecation
- * isnt shown either. 
- * 
- * We are gonna use this component to show deprecation 
+ * isnt shown either.
+ *
+ * We are gonna use this component to show deprecation
  * information using the `material/tooltip`, the information
- * would contain when the field is being deprecated and what 
+ * would contain when the field is being deprecated and what
  * are the alternatives to it which both are extracted from
  * `breaking-change` and `deprecated`.
  */
diff --git a/material.angular.io/src/app/shared/doc-viewer/doc-viewer-module.ts b/material.angular.io/src/app/shared/doc-viewer/doc-viewer-module.ts
index 36f5a9addc3e..cd45e0083123 100644
--- a/material.angular.io/src/app/shared/doc-viewer/doc-viewer-module.ts
+++ b/material.angular.io/src/app/shared/doc-viewer/doc-viewer-module.ts
@@ -11,7 +11,6 @@ import {HeaderLink} from './header-link';
 import {CodeSnippet} from '../example-viewer/code-snippet';
 import {DeprecatedFieldComponent} from './deprecated-tooltip';
 
-
 // ExampleViewer is included in the DocViewerModule because they have a circular dependency.
 @NgModule({
   imports: [
@@ -25,8 +24,8 @@ import {DeprecatedFieldComponent} from './deprecated-tooltip';
     ExampleViewer,
     HeaderLink,
     CodeSnippet,
-    DeprecatedFieldComponent
+    DeprecatedFieldComponent,
   ],
-  exports: [DocViewer, ExampleViewer, HeaderLink, DeprecatedFieldComponent]
+  exports: [DocViewer, ExampleViewer, HeaderLink, DeprecatedFieldComponent],
 })
-export class DocViewerModule { }
+export class DocViewerModule {}
diff --git a/material.angular.io/src/app/shared/doc-viewer/doc-viewer.spec.ts b/material.angular.io/src/app/shared/doc-viewer/doc-viewer.spec.ts
index 6878aca949fa..e8649b45bb29 100644
--- a/material.angular.io/src/app/shared/doc-viewer/doc-viewer.spec.ts
+++ b/material.angular.io/src/app/shared/doc-viewer/doc-viewer.spec.ts
@@ -142,10 +142,10 @@ describe('DocViewer', () => {
 
     http.expectOne(errorUrl).flush('Not found', {status: 404, statusText: 'Not found'});
 
-
     expect(docViewer).not.toBeNull();
     expect(docViewer.nativeElement.innerHTML).toContain(
-        'Failed to load document: http://material.angular.io/error-doc.html');
+      'Failed to load document: http://material.angular.io/error-doc.html',
+    );
     expect(console.error).toHaveBeenCalledTimes(1);
   });
 
@@ -165,7 +165,7 @@ describe('DocViewer', () => {
     // and properties.
     expect(docViewer.children.length).toBe(5);
 
-    // it should have "Deprecated" as its inner text 
+    // it should have "Deprecated" as its inner text
     const deprecatedSymbol = docViewer.children.shift()!;
     expect(deprecatedSymbol.nativeElement.innerText).toBe('Deprecated');
 
@@ -207,8 +207,7 @@ const FAKE_DOCS: {[key: string]: string} = {
     '<div material-docs-example="demo-example"></div>',
   'http://material.angular.io/whole-snippet-example.html':
     '<div material-docs-example="whole-snippet-example" file="whole-snippet-example.ts"></div>',
-  'http://material.angular.io/deprecated.html':
-    `<div class="docs-api-class-deprecated-marker" 
+  'http://material.angular.io/deprecated.html': `<div class="docs-api-class-deprecated-marker" 
         deprecated-message="deprecated class">Deprecated</div>
   
       <div class="docs-api-constant-deprecated-marker" 
diff --git a/material.angular.io/src/app/shared/doc-viewer/doc-viewer.ts b/material.angular.io/src/app/shared/doc-viewer/doc-viewer.ts
index a4f633274c12..25ff18066eaf 100644
--- a/material.angular.io/src/app/shared/doc-viewer/doc-viewer.ts
+++ b/material.angular.io/src/app/shared/doc-viewer/doc-viewer.ts
@@ -3,7 +3,7 @@ import {
   ComponentPortal,
   DomPortalOutlet,
   Portal,
-  PortalModule
+  PortalModule,
 } from '@angular/cdk/portal';
 import {HttpClient, HttpErrorResponse} from '@angular/common/http';
 import {DomSanitizer} from '@angular/platform-browser';
@@ -21,7 +21,7 @@ import {
   Output,
   SecurityContext,
   ViewContainerRef,
-  input
+  input,
 } from '@angular/core';
 import {Observable, Subscription} from 'rxjs';
 import {shareReplay, take, tap} from 'rxjs/operators';
@@ -41,7 +41,7 @@ class DocFetcher {
     }
 
     const stream = this._http.get(url, {responseType: 'text'}).pipe(shareReplay(1));
-    return stream.pipe(tap(() => this._cache[url] = stream));
+    return stream.pipe(tap(() => (this._cache[url] = stream)));
   }
 }
 
@@ -55,7 +55,7 @@ class DocFetcher {
     }
   `,
   standalone: true,
-  imports: [PortalModule]
+  imports: [PortalModule],
 })
 export class DocViewer implements OnDestroy {
   private _portalHosts: DomPortalOutlet[] = [];
@@ -86,10 +86,12 @@ export class DocViewer implements OnDestroy {
   /** The document text. It should not be HTML encoded. */
   textContent = '';
 
-  private static initExampleViewer(exampleViewerComponent: ExampleViewer,
-                                   example: string,
-                                   file: string | null,
-                                   region: string | null) {
+  private static initExampleViewer(
+    exampleViewerComponent: ExampleViewer,
+    example: string,
+    file: string | null,
+    region: string | null,
+  ) {
     exampleViewerComponent.example = example;
     if (file) {
       // if the html div has field `file` then it should be in compact view to show the code
@@ -106,25 +108,25 @@ export class DocViewer implements OnDestroy {
       // otherwise it is an embedded demo
       exampleViewerComponent.view = 'demo';
     }
-
   }
 
-  constructor(private _appRef: ApplicationRef,
-              private _componentFactoryResolver: ComponentFactoryResolver,
-              public _elementRef: ElementRef,
-              private _injector: Injector,
-              private _viewContainerRef: ViewContainerRef,
-              private _ngZone: NgZone,
-              private _domSanitizer: DomSanitizer,
-              private _docFetcher: DocFetcher) {
-  }
+  constructor(
+    private _appRef: ApplicationRef,
+    private _componentFactoryResolver: ComponentFactoryResolver,
+    public _elementRef: ElementRef,
+    private _injector: Injector,
+    private _viewContainerRef: ViewContainerRef,
+    private _ngZone: NgZone,
+    private _domSanitizer: DomSanitizer,
+    private _docFetcher: DocFetcher,
+  ) {}
 
   /** Fetch a document by URL. */
   private _fetchDocument(url: string) {
     this._documentFetchSubscription?.unsubscribe();
     this._documentFetchSubscription = this._docFetcher.fetchDocument(url).subscribe(
       document => this.updateDocument(document),
-      error => this.showError(url, error)
+      error => this.showError(url, error),
     );
   }
 
@@ -159,21 +161,23 @@ export class DocViewer implements OnDestroy {
   /** Show an error that occurred when fetching a document. */
   private showError(url: string, error: HttpErrorResponse) {
     console.error(error);
-    this._elementRef.nativeElement.innerText =
-      `Failed to load document: ${url}. Error: ${error.statusText}`;
+    this._elementRef.nativeElement.innerText = `Failed to load document: ${url}. Error: ${error.statusText}`;
   }
 
   /** Instantiate a ExampleViewer for each example. */
   private _loadComponents(componentName: string, componentClass: any) {
-    const exampleElements =
-        this._elementRef.nativeElement.querySelectorAll(`[${componentName}]`);
+    const exampleElements = this._elementRef.nativeElement.querySelectorAll(`[${componentName}]`);
 
     [...exampleElements].forEach((element: Element) => {
       const example = element.getAttribute(componentName);
       const region = element.getAttribute('region');
       const file = element.getAttribute('file');
       const portalHost = new DomPortalOutlet(
-          element, this._componentFactoryResolver, this._appRef, this._injector);
+        element,
+        this._componentFactoryResolver,
+        this._appRef,
+        this._injector,
+      );
       const examplePortal = new ComponentPortal(componentClass, this._viewContainerRef);
       const exampleViewer = portalHost.attach(examplePortal);
       const exampleViewerComponent = exampleViewer.instance as ExampleViewer;
@@ -195,18 +199,19 @@ export class DocViewer implements OnDestroy {
   }
 
   _createTooltipsForDeprecated() {
-    // all of the deprecated symbols end with `deprecated-marker` 
+    // all of the deprecated symbols end with `deprecated-marker`
     // class name on their element.
-    // for example: 
-    // <div class="docs-api-deprecated-marker">Deprecated</div>, 
+    // for example:
+    // <div class="docs-api-deprecated-marker">Deprecated</div>,
     // these can vary for each deprecated symbols such for class, interface,
     // type alias, constants or properties:
     // .docs-api-class-interface-marker, docs-api-type-alias-deprecated-marker
     // .docs-api-constant-deprecated-marker, .some-more
     // so instead of manually writing each deprecated class, we just query
     // elements that ends with `deprecated-marker` in their class name.
-    const deprecatedElements =
-      this._elementRef.nativeElement.querySelectorAll(`[class$=deprecated-marker]`);
+    const deprecatedElements = this._elementRef.nativeElement.querySelectorAll(
+      `[class$=deprecated-marker]`,
+    );
 
     [...deprecatedElements].forEach((element: Element) => {
       // the deprecation message, it will include alternative to deprecated item
@@ -214,12 +219,15 @@ export class DocViewer implements OnDestroy {
       const deprecationTitle = element.getAttribute('deprecated-message');
 
       const elementPortalOutlet = new DomPortalOutlet(
-        element, this._componentFactoryResolver, this._appRef, this._injector);
+        element,
+        this._componentFactoryResolver,
+        this._appRef,
+        this._injector,
+      );
 
       const tooltipPortal = new ComponentPortal(DeprecatedFieldComponent, this._viewContainerRef);
       const tooltipOutlet = elementPortalOutlet.attach(tooltipPortal);
 
-
       if (deprecationTitle) {
         tooltipOutlet.instance.message = deprecationTitle;
       }
diff --git a/material.angular.io/src/app/shared/doc-viewer/header-link.ts b/material.angular.io/src/app/shared/doc-viewer/header-link.ts
index 011c9a094292..e4bb47c1ce59 100644
--- a/material.angular.io/src/app/shared/doc-viewer/header-link.ts
+++ b/material.angular.io/src/app/shared/doc-viewer/header-link.ts
@@ -24,10 +24,9 @@ import {MatIconModule} from '@angular/material/icon';
     </a>
   `,
   standalone: true,
-  imports: [MatIconModule]
+  imports: [MatIconModule],
 })
 export class HeaderLink {
-
   /**
    * Id of the anchor element. Note that is uses "example" because we instantiate the
    * header link components through the ComponentPortal.
@@ -44,5 +43,4 @@ export class HeaderLink {
   _getFragmentUrl(): string {
     return `${this._baseUrl}#${this.example}`;
   }
-
 }
diff --git a/material.angular.io/src/app/shared/documentation-items/documentation-items.ts b/material.angular.io/src/app/shared/documentation-items/documentation-items.ts
index 38716682f947..e949d7af5792 100644
--- a/material.angular.io/src/app/shared/documentation-items/documentation-items.ts
+++ b/material.angular.io/src/app/shared/documentation-items/documentation-items.ts
@@ -42,21 +42,22 @@ export interface DocSection {
 const exampleNames = Object.keys(EXAMPLE_COMPONENTS);
 const CDK = 'cdk';
 const COMPONENTS = 'components';
-export const SECTIONS: { [key: string]: DocSection } = {
+export const SECTIONS: {[key: string]: DocSection} = {
   [COMPONENTS]: {
     name: 'Components',
-    summary: 'Angular Material offers a wide variety of UI components based on the <a' +
-      ' href="https://material.io/components">Material Design specification</a>'
+    summary:
+      'Angular Material offers a wide variety of UI components based on the <a' +
+      ' href="https://material.io/components">Material Design specification</a>',
   },
   [CDK]: {
     name: 'CDK',
-    summary: 'The Component Dev Kit (CDK) is a set of behavior primitives for building UI' +
-      ' components.'
+    summary:
+      'The Component Dev Kit (CDK) is a set of behavior primitives for building UI' +
+      ' components.',
   },
 };
 
-
-const DOCS: { [key: string]: DocItem[] } = {
+const DOCS: {[key: string]: DocItem[]} = {
   [COMPONENTS]: [
     {
       id: 'autocomplete',
@@ -91,7 +92,7 @@ const DOCS: { [key: string]: DocItem[] } = {
       summary: 'An interactive button with a range of presentation options.',
       exampleSpecs: {
         prefix: 'button-',
-        exclude: ['button-toggle-']
+        exclude: ['button-toggle-'],
       },
       additionalApiDocs: [{name: 'Testing', path: 'material-button-testing.html'}],
     },
@@ -263,7 +264,6 @@ const DOCS: { [key: string]: DocItem[] } = {
       summary: 'Allows the user to select one option from a group.',
       exampleSpecs: {
         prefix: 'radio-',
-
       },
       additionalApiDocs: [{name: 'Testing', path: 'material-radio-testing.html'}],
     },
@@ -502,7 +502,7 @@ const DOCS: { [key: string]: DocItem[] } = {
     {
       id: 'platform',
       name: 'Platform',
-      summary: 'Provides information about the user\'s platform.',
+      summary: "Provides information about the user's platform.",
       exampleSpecs: {
         prefix: 'cdk-platform-',
       },
@@ -551,12 +551,12 @@ const DOCS: { [key: string]: DocItem[] } = {
       additionalApiDocs: [
         {
           name: 'Testbed',
-          path: 'cdk-testing-testbed.html'
+          path: 'cdk-testing-testbed.html',
         },
         {
           name: 'Protractor',
-          path: 'cdk-testing-protractor.html'
-        }
+          path: 'cdk-testing-protractor.html',
+        },
       ],
     },
     {
@@ -575,7 +575,7 @@ const DOCS: { [key: string]: DocItem[] } = {
         prefix: 'cdk-tree-',
       },
     },
-  ]
+  ],
   // TODO(jelbourn): re-add utilities and a11y as top-level categories once we can generate
   // their API docs with dgeni. Currently our setup doesn't generate API docs for constants
   // and standalone functions (much of the utilities) and we have no way of generating API
@@ -588,7 +588,6 @@ const ALL_DOCS = [...ALL_COMPONENTS, ...ALL_CDK];
 
 @Injectable({providedIn: 'root'})
 export class DocumentationItems {
-
   getItems(section: string): DocItem[] {
     if (section === COMPONENTS) {
       return ALL_COMPONENTS;
@@ -609,9 +608,11 @@ function processDocs(packageName: string, docs: DocItem[]): DocItem[] {
   for (const doc of docs) {
     doc.packageName = packageName;
     doc.hasStyling ??= packageName === 'material';
-    doc.examples = exampleNames.filter(key =>
-      key.match(RegExp(`^${doc.exampleSpecs.prefix}`)) &&
-      !doc.exampleSpecs.exclude?.some(excludeName => key.indexOf(excludeName) === 0));
+    doc.examples = exampleNames.filter(
+      key =>
+        key.match(RegExp(`^${doc.exampleSpecs.prefix}`)) &&
+        !doc.exampleSpecs.exclude?.some(excludeName => key.indexOf(excludeName) === 0),
+    );
   }
 
   return docs.sort((a, b) => a.name.localeCompare(b.name, 'en'));
diff --git a/material.angular.io/src/app/shared/example-viewer/code-snippet.ts b/material.angular.io/src/app/shared/example-viewer/code-snippet.ts
index 8cbe61ac36e6..ca2cb4f31658 100644
--- a/material.angular.io/src/app/shared/example-viewer/code-snippet.ts
+++ b/material.angular.io/src/app/shared/example-viewer/code-snippet.ts
@@ -1,10 +1,4 @@
-import {
-  ChangeDetectionStrategy,
-  Component,
-  forwardRef,
-  input,
-  viewChild
-} from '@angular/core';
+import {ChangeDetectionStrategy, Component, forwardRef, input, viewChild} from '@angular/core';
 import {DocViewer} from '../doc-viewer/doc-viewer';
 
 @Component({
@@ -13,7 +7,7 @@ import {DocViewer} from '../doc-viewer/doc-viewer';
   styleUrls: ['./example-viewer.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
   standalone: true,
-  imports: [forwardRef(() => DocViewer)]
+  imports: [forwardRef(() => DocViewer)],
 })
 export class CodeSnippet {
   readonly source = input<string>();
diff --git a/material.angular.io/src/app/shared/example-viewer/example-viewer.ts b/material.angular.io/src/app/shared/example-viewer/example-viewer.ts
index 686ff0422f6b..f6432ae29d51 100644
--- a/material.angular.io/src/app/shared/example-viewer/example-viewer.ts
+++ b/material.angular.io/src/app/shared/example-viewer/example-viewer.ts
@@ -1,12 +1,4 @@
-import {
-  Component,
-  ElementRef,
-  HostBinding,
-  Input,
-  OnInit,
-  Type,
-  viewChildren
-} from '@angular/core';
+import {Component, ElementRef, HostBinding, Input, OnInit, Type, viewChildren} from '@angular/core';
 import {MatSnackBar} from '@angular/material/snack-bar';
 import {Clipboard} from '@angular/cdk/clipboard';
 
@@ -79,7 +71,7 @@ export class ExampleViewer implements OnInit {
       this.exampleData = EXAMPLE_COMPONENTS[exampleName];
       this._generateExampleTabs();
       this._loadExampleComponent().catch(error =>
-        console.error(`Could not load example '${exampleName}': ${error}`)
+        console.error(`Could not load example '${exampleName}': ${error}`),
       );
     } else {
       console.error(`Could not find example: ${exampleName}`);
@@ -96,7 +88,7 @@ export class ExampleViewer implements OnInit {
   constructor(
     private readonly snackbar: MatSnackBar,
     private readonly clipboard: Clipboard,
-    private readonly elementRef: ElementRef<HTMLElement>
+    private readonly elementRef: ElementRef<HTMLElement>,
   ) {}
 
   ngOnInit() {
diff --git a/material.angular.io/src/app/shared/footer/footer.ts b/material.angular.io/src/app/shared/footer/footer.ts
index 1225bffb5121..929024998c33 100644
--- a/material.angular.io/src/app/shared/footer/footer.ts
+++ b/material.angular.io/src/app/shared/footer/footer.ts
@@ -6,7 +6,7 @@ import {AppLogo} from '../logo/logo';
   templateUrl: './footer.html',
   styleUrls: ['./footer.scss'],
   imports: [AppLogo],
-  standalone: true
+  standalone: true,
 })
 export class Footer {
   year = new Date().getFullYear();
diff --git a/material.angular.io/src/app/shared/guide-items/guide-items.spec.ts b/material.angular.io/src/app/shared/guide-items/guide-items.spec.ts
index 50e23c8abce2..0f7328e76f97 100644
--- a/material.angular.io/src/app/shared/guide-items/guide-items.spec.ts
+++ b/material.angular.io/src/app/shared/guide-items/guide-items.spec.ts
@@ -1,7 +1,6 @@
 import {TestBed, inject, waitForAsync} from '@angular/core/testing';
 import {GuideItems} from './guide-items';
 
-
 describe('GuideItems', () => {
   let guideItems: GuideItems;
 
diff --git a/material.angular.io/src/app/shared/guide-items/guide-items.ts b/material.angular.io/src/app/shared/guide-items/guide-items.ts
index 3984ac0c095d..81e74ab01859 100644
--- a/material.angular.io/src/app/shared/guide-items/guide-items.ts
+++ b/material.angular.io/src/app/shared/guide-items/guide-items.ts
@@ -14,55 +14,54 @@ const GUIDES: GuideItem[] = [
     id: 'getting-started',
     name: 'Getting started',
     document: '/docs-content/guides/getting-started.html',
-    overview: 'Add Angular Material to your project!'
+    overview: 'Add Angular Material to your project!',
   },
   {
     id: 'schematics',
     name: 'Schematics',
     document: '/docs-content/guides/schematics.html',
-    overview: 'Use schematics to quickly generate views with Material Design components.'
+    overview: 'Use schematics to quickly generate views with Material Design components.',
   },
   {
     id: 'theming',
     name: 'Theming Angular Material',
     document: '/docs-content/guides/theming.html',
-    overview: 'Customize your application with Angular Material\'s theming system.'
+    overview: "Customize your application with Angular Material's theming system.",
   },
   {
     id: 'system-variables',
     name: 'System Variables',
     document: SystemVariables,
-    overview: 'Understand the system variables available to use in your application.'
+    overview: 'Understand the system variables available to use in your application.',
   },
   {
     id: 'creating-a-custom-form-field-control',
     name: 'Custom form field control',
     document: '/docs-content/guides/creating-a-custom-form-field-control.html',
-    overview: 'Build a custom control that integrates with `<mat-form-field>`.'
+    overview: 'Build a custom control that integrates with `<mat-form-field>`.',
   },
   {
     id: 'creating-a-custom-stepper-using-the-cdk-stepper',
     name: 'Custom stepper using the CdkStepper',
     document: '/docs-content/guides/creating-a-custom-stepper-using-the-cdk-stepper.html',
-    overview: 'Create a custom stepper components using Angular CDK.'
+    overview: 'Create a custom stepper components using Angular CDK.',
   },
   {
     id: 'using-component-harnesses',
     name: 'Testing with component harnesses',
     document: '/docs-content/guides/using-component-harnesses.html',
-    overview: 'Write tests with component harnesses for convenience and meaningful results.'
+    overview: 'Write tests with component harnesses for convenience and meaningful results.',
   },
   {
     id: 'material-2-theming',
     name: 'Theming Angular Material with Material 2',
     document: '/docs-content/guides/material-2.html',
-    overview: 'Customize your application with Angular Material\'s theming system.'
+    overview: "Customize your application with Angular Material's theming system.",
   },
 ];
 
 @Injectable({providedIn: 'root'})
 export class GuideItems {
-
   getAllItems(): GuideItem[] {
     return GUIDES;
   }
diff --git a/material.angular.io/src/app/shared/navbar/navbar.ts b/material.angular.io/src/app/shared/navbar/navbar.ts
index 6a2b477ab8d7..ce2238959157 100644
--- a/material.angular.io/src/app/shared/navbar/navbar.ts
+++ b/material.angular.io/src/app/shared/navbar/navbar.ts
@@ -34,7 +34,7 @@ export class NavBar implements OnDestroy {
   skipLinkHidden = true;
 
   constructor(private navigationFocusService: NavigationFocusService) {
-    setTimeout(() => this.skipLinkHref = this.navigationFocusService.getSkipLinkHref(), 100);
+    setTimeout(() => (this.skipLinkHref = this.navigationFocusService.getSkipLinkHref()), 100);
   }
 
   get sections() {
@@ -49,4 +49,3 @@ export class NavBar implements OnDestroy {
     this.subscriptions.unsubscribe();
   }
 }
-
diff --git a/material.angular.io/src/app/shared/navigation-focus/navigation-focus.service.ts b/material.angular.io/src/app/shared/navigation-focus/navigation-focus.service.ts
index 63255d1e6188..b71cbe29411c 100644
--- a/material.angular.io/src/app/shared/navigation-focus/navigation-focus.service.ts
+++ b/material.angular.io/src/app/shared/navigation-focus/navigation-focus.service.ts
@@ -12,22 +12,26 @@ export class NavigationFocusService implements OnDestroy {
   private skipLinkFocusRequests: HTMLElement[] = [];
   private skipLinkHref: string | null | undefined;
 
-  readonly navigationEndEvents = this.router.events
-    .pipe(filter((event: Event): event is NavigationEnd => event instanceof NavigationEnd));
+  readonly navigationEndEvents = this.router.events.pipe(
+    filter((event: Event): event is NavigationEnd => event instanceof NavigationEnd),
+  );
   readonly softNavigations = this.navigationEndEvents.pipe(skip(1));
 
   constructor(private router: Router) {
-    this.subscriptions.add(this.softNavigations.subscribe(() => {
-      // focus if url does not have fragment
-      if (!this.router.url.split('#')[1]) {
-        setTimeout(() => {
-          if (this.navigationFocusRequests.length) {
-            this.navigationFocusRequests[this.navigationFocusRequests.length - 1]
-              .focus({preventScroll: true});
-          }
-        }, 100);
-      }
-    }));
+    this.subscriptions.add(
+      this.softNavigations.subscribe(() => {
+        // focus if url does not have fragment
+        if (!this.router.url.split('#')[1]) {
+          setTimeout(() => {
+            if (this.navigationFocusRequests.length) {
+              this.navigationFocusRequests[this.navigationFocusRequests.length - 1].focus({
+                preventScroll: true,
+              });
+            }
+          }, 100);
+        }
+      }),
+    );
   }
 
   ngOnDestroy() {
@@ -68,8 +72,13 @@ export class NavigationFocusService implements OnDestroy {
     const previousUrlMatch = previousUrl.match(componentViewExpression);
     const newUrlMatch = newUrl.match(componentViewExpression);
 
-    return previousUrl && newUrl && previousUrlMatch && newUrlMatch
-      && previousUrlMatch[0] === newUrlMatch[0]
-      && previousUrlMatch[1] === newUrlMatch[1];
+    return (
+      previousUrl &&
+      newUrl &&
+      previousUrlMatch &&
+      newUrlMatch &&
+      previousUrlMatch[0] === newUrlMatch[0] &&
+      previousUrlMatch[1] === newUrlMatch[1]
+    );
   }
 }
diff --git a/material.angular.io/src/app/shared/navigation-focus/navigation-focus.spec.ts b/material.angular.io/src/app/shared/navigation-focus/navigation-focus.spec.ts
index be66a9abfe2b..7b43472873b6 100644
--- a/material.angular.io/src/app/shared/navigation-focus/navigation-focus.spec.ts
+++ b/material.angular.io/src/app/shared/navigation-focus/navigation-focus.spec.ts
@@ -17,21 +17,20 @@ describe('Navigation focus service', () => {
   };
 
   beforeEach(() => {
-      TestBed.configureTestingModule({
-        imports: [
-          RouterTestingModule.withRoutes([
-            {path: '', component: RouteTest},
-            {path: 'cdk', component: RouteTest},
-            {path: 'guides', component: RouteTest}
-          ]),
-          NavigationFocus
-        ],
-        providers: [NavigationFocusService],
-        declarations: [NavigationFocusTest, RouteTest],
-      });
-      fixture = TestBed.createComponent(NavigationFocusTest);
-    }
-  );
+    TestBed.configureTestingModule({
+      imports: [
+        RouterTestingModule.withRoutes([
+          {path: '', component: RouteTest},
+          {path: 'cdk', component: RouteTest},
+          {path: 'guides', component: RouteTest},
+        ]),
+        NavigationFocus,
+      ],
+      providers: [NavigationFocusService],
+      declarations: [NavigationFocusTest, RouteTest],
+    });
+    fixture = TestBed.createComponent(NavigationFocusTest);
+  });
 
   beforeEach(() => {
     zone = TestBed.inject(NgZone);
@@ -131,13 +130,11 @@ describe('Navigation focus service', () => {
   `,
   standalone: false,
 })
-class NavigationFocusTest {
-}
+class NavigationFocusTest {}
 
 @Component({
   selector: 'route-test',
   template: '',
   standalone: false,
 })
-class RouteTest {
-}
+class RouteTest {}
diff --git a/material.angular.io/src/app/shared/navigation-focus/navigation-focus.ts b/material.angular.io/src/app/shared/navigation-focus/navigation-focus.ts
index 9739a8ad567a..3fbcb0e38ff8 100644
--- a/material.angular.io/src/app/shared/navigation-focus/navigation-focus.ts
+++ b/material.angular.io/src/app/shared/navigation-focus/navigation-focus.ts
@@ -10,7 +10,10 @@ export class NavigationFocus implements OnDestroy {
   @HostBinding('tabindex') readonly tabindex = '-1';
   @HostBinding('style.outline') readonly outline = 'none';
 
-  constructor(private el: ElementRef, private navigationFocusService: NavigationFocusService) {
+  constructor(
+    private el: ElementRef,
+    private navigationFocusService: NavigationFocusService,
+  ) {
     if (!el.nativeElement.id) {
       el.nativeElement.id = `skip-link-target-${uid++}`;
     }
@@ -23,4 +26,3 @@ export class NavigationFocus implements OnDestroy {
     this.navigationFocusService.relinquishSkipLinkFocus(this.el.nativeElement);
   }
 }
-
diff --git a/material.angular.io/src/app/shared/stack-blitz/stack-blitz-button.ts b/material.angular.io/src/app/shared/stack-blitz/stack-blitz-button.ts
index 9e845cd3cb34..e9f2b1c143cb 100644
--- a/material.angular.io/src/app/shared/stack-blitz/stack-blitz-button.ts
+++ b/material.angular.io/src/app/shared/stack-blitz/stack-blitz-button.ts
@@ -10,11 +10,7 @@ import {MatSnackBar} from '@angular/material/snack-bar';
   selector: 'stack-blitz-button',
   templateUrl: './stack-blitz-button.html',
   standalone: true,
-  imports: [
-    MatButtonModule,
-    MatTooltipModule,
-    MatIconModule,
-  ],
+  imports: [MatButtonModule, MatTooltipModule, MatIconModule],
 })
 export class StackBlitzButton {
   exampleData: ExampleData | undefined;
@@ -43,22 +39,29 @@ export class StackBlitzButton {
   constructor(
     private stackBlitzWriter: StackBlitzWriter,
     private ngZone: NgZone,
-    private snackBar: MatSnackBar) {}
+    private snackBar: MatSnackBar,
+  ) {}
 
   openStackBlitz(): void {
     if (this._openStackBlitzFn) {
       this._openStackBlitzFn();
     } else {
-      this.snackBar.open('StackBlitz is not ready yet. Please try again in a few seconds.',
-          undefined, {duration: 5000});
+      this.snackBar.open(
+        'StackBlitz is not ready yet. Please try again in a few seconds.',
+        undefined,
+        {duration: 5000},
+      );
     }
   }
 
   private _prepareStackBlitzForExample(exampleId: string, data: ExampleData): void {
     this.ngZone.runOutsideAngular(async () => {
       const isTest = exampleId.includes('harness');
-      this._openStackBlitzFn = await this.stackBlitzWriter
-        .createStackBlitzForExample(exampleId, data, isTest);
+      this._openStackBlitzFn = await this.stackBlitzWriter.createStackBlitzForExample(
+        exampleId,
+        data,
+        isTest,
+      );
     });
   }
 }
diff --git a/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.spec.ts b/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.spec.ts
index b046d66fa5e8..b3a6d28496aa 100644
--- a/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.spec.ts
+++ b/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.spec.ts
@@ -10,8 +10,7 @@ const testExampleBasePath = `/docs-content/examples-source/cdk/my-comp/${testExa
 const FAKE_DOCS: {[key: string]: string} = {
   /* eslint-disable @typescript-eslint/naming-convention */
   '/assets/stack-blitz/src/index.html': '<material-docs-example></material-docs-example>',
-  '/assets/stack-blitz/src/main.ts':
-      `import {MaterialDocsExample} from './material-docs-example';`,
+  '/assets/stack-blitz/src/main.ts': `import {MaterialDocsExample} from './material-docs-example';`,
   /* eslint-enable @typescript-eslint/naming-convention */
   [`${testExampleBasePath}/test.ts`]: 'ExampleComponent',
   [`${testExampleBasePath}/test.html`]: `<example></example>`,
@@ -32,7 +31,7 @@ describe('StackBlitzWriter', () => {
   beforeEach(waitForAsync(() => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule],
-      providers: [StackBlitzWriter]
+      providers: [StackBlitzWriter],
     }).compileComponents();
   }));
 
@@ -76,7 +75,6 @@ describe('StackBlitzWriter', () => {
 <!-- Copyright ${year} Google LLC. All Rights Reserved.
     Use of this source code is governed by an MIT-style license that
     can be found in the LICENSE file at https://angular.io/license -->`);
-
   });
 
   it('should set tags for example stackblitz', fakeAsync(() => {
@@ -91,8 +89,10 @@ describe('StackBlitzWriter', () => {
     flushMicrotasks();
 
     expect(openProjectSpy).toHaveBeenCalledTimes(1);
-    expect(openProjectSpy).toHaveBeenCalledWith(jasmine.objectContaining(
-        {tags: ['angular', 'material', 'cdk', 'web', 'example']}), jasmine.anything());
+    expect(openProjectSpy).toHaveBeenCalledWith(
+      jasmine.objectContaining({tags: ['angular', 'material', 'cdk', 'web', 'example']}),
+      jasmine.anything(),
+    );
   }));
 
   it('should read and transform template files properly', fakeAsync(() => {
@@ -121,7 +121,8 @@ describe('StackBlitzWriter', () => {
     });
 
     expect(openProjectSpy).toHaveBeenCalledTimes(1);
-    expect(openProjectSpy).toHaveBeenCalledWith(
-        jasmine.objectContaining({files: expectedFiles}), {openFile: 'src/app/test.ts'});
+    expect(openProjectSpy).toHaveBeenCalledWith(jasmine.objectContaining({files: expectedFiles}), {
+      openFile: 'src/app/test.ts',
+    });
   }));
 });
diff --git a/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.ts b/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.ts
index fa59685e2047..6b77be2b5fff 100644
--- a/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.ts
+++ b/material.angular.io/src/app/shared/stack-blitz/stack-blitz-writer.ts
@@ -62,13 +62,16 @@ type FileDictionary = {[path: string]: string};
 export class StackBlitzWriter {
   private _fileCache = new Map<string, Observable<string>>();
 
-  constructor(private _http: HttpClient, private _ngZone: NgZone) {}
+  constructor(
+    private _http: HttpClient,
+    private _ngZone: NgZone,
+  ) {}
 
   /** Opens a StackBlitz for the specified example. */
   createStackBlitzForExample(
     exampleId: string,
     data: ExampleData,
-    isTest: boolean
+    isTest: boolean,
   ): Promise<() => void> {
     // Run outside the zone since the creation doesn't interact with Angular
     // and the file requests can cause excessive change detections.
@@ -107,7 +110,7 @@ export class StackBlitzWriter {
         template: PROJECT_TEMPLATE,
         tags: PROJECT_TAGS,
       },
-      {openFile}
+      {openFile},
     );
   }
 
@@ -118,22 +121,21 @@ export class StackBlitzWriter {
   private async _buildInMemoryFileDictionary(
     data: ExampleData,
     exampleId: string,
-    isTest: boolean
+    isTest: boolean,
   ): Promise<FileDictionary> {
     const result: FileDictionary = {};
     const tasks: Promise<unknown>[] = [];
     const liveExample = EXAMPLE_COMPONENTS[exampleId];
-    const exampleBaseContentPath =
-      `${DOCS_CONTENT_PATH}/${liveExample.importPath}/${exampleId}/`;
+    const exampleBaseContentPath = `${DOCS_CONTENT_PATH}/${liveExample.importPath}/${exampleId}/`;
 
     for (const relativeFilePath of TEMPLATE_FILES) {
       tasks.push(
         this._loadFile(TEMPLATE_PATH + relativeFilePath)
           // Replace example placeholders in the template files.
           .then(content =>
-            this._replaceExamplePlaceholders(data, relativeFilePath, content, isTest)
+            this._replaceExamplePlaceholders(data, relativeFilePath, content, isTest),
           )
-          .then(content => (result[relativeFilePath] = content))
+          .then(content => (result[relativeFilePath] = content)),
       );
     }
 
@@ -147,7 +149,7 @@ export class StackBlitzWriter {
         this._loadFile(exampleBaseContentPath + relativeFilePath)
           // Insert a copyright footer for all example files inserted into the project.
           .then(content => this._appendCopyright(relativeFilePath, content))
-          .then(content => (result[targetPath] = content))
+          .then(content => (result[targetPath] = content)),
       );
     }
 
@@ -182,7 +184,7 @@ export class StackBlitzWriter {
     data: ExampleData,
     fileName: string,
     fileContent: string,
-    isTest: boolean
+    isTest: boolean,
   ): string {
     // Replaces the version placeholder in the `index.html` and `package.json` file.
     // Technically we invalidate the `package-lock.json` file for the StackBlitz boilerplate
@@ -201,8 +203,10 @@ export class StackBlitzWriter {
         .replace(/material-docs-example/g, data.selectorName)
         .replace(/\${title}/g, data.description);
     } else if (fileName === '.stackblitzrc') {
-      fileContent = fileContent.replace(/\${startCommand}/,
-        isTest ? 'npm run test' : 'npm run start');
+      fileContent = fileContent.replace(
+        /\${startCommand}/,
+        isTest ? 'npm run test' : 'npm run start',
+      );
     } else if (fileName === 'src/main.ts') {
       const mainComponentName = data.componentNames[0];
 
@@ -215,7 +219,7 @@ export class StackBlitzWriter {
       // will be replaced as `bootstrapApplication(ButtonDemo,`
       fileContent = fileContent.replace(
         /bootstrapApplication\(MaterialDocsExample,/g,
-        `bootstrapApplication(${mainComponentName},`
+        `bootstrapApplication(${mainComponentName},`,
       );
 
       const dotIndex = data.indexFilename.lastIndexOf('.');
diff --git a/material.angular.io/src/app/shared/style-manager/style-manager.spec.ts b/material.angular.io/src/app/shared/style-manager/style-manager.spec.ts
index d5b958a28322..31a4b4309ff6 100644
--- a/material.angular.io/src/app/shared/style-manager/style-manager.spec.ts
+++ b/material.angular.io/src/app/shared/style-manager/style-manager.spec.ts
@@ -2,14 +2,15 @@ import {HttpClientTestingModule} from '@angular/common/http/testing';
 import {inject, TestBed} from '@angular/core/testing';
 import {StyleManager} from './style-manager';
 
-
 describe('StyleManager', () => {
   let styleManager: StyleManager;
 
-  beforeEach(() => TestBed.configureTestingModule({
-    imports: [HttpClientTestingModule],
-    providers: [StyleManager]
-  }));
+  beforeEach(() =>
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [StyleManager],
+    }),
+  );
 
   beforeEach(inject([StyleManager], (sm: StyleManager) => {
     styleManager = sm;
diff --git a/material.angular.io/src/app/shared/style-manager/style-manager.ts b/material.angular.io/src/app/shared/style-manager/style-manager.ts
index 0a6022725537..43590c63e39d 100644
--- a/material.angular.io/src/app/shared/style-manager/style-manager.ts
+++ b/material.angular.io/src/app/shared/style-manager/style-manager.ts
@@ -1,6 +1,5 @@
 import {Injectable} from '@angular/core';
 
-
 /**
  * Class for managing stylesheets. Stylesheets are loaded into named slots so that they can be
  * removed or changed later.
diff --git a/material.angular.io/src/app/shared/support/support.spec.ts b/material.angular.io/src/app/shared/support/support.spec.ts
index 30d10a615053..7849384450f4 100644
--- a/material.angular.io/src/app/shared/support/support.spec.ts
+++ b/material.angular.io/src/app/shared/support/support.spec.ts
@@ -8,7 +8,7 @@ describe('HelpSupportComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      imports: [Support]
+      imports: [Support],
     }).compileComponents();
   });
 
diff --git a/material.angular.io/src/app/shared/support/support.ts b/material.angular.io/src/app/shared/support/support.ts
index 23eeb47bd91f..6275e0bfc000 100644
--- a/material.angular.io/src/app/shared/support/support.ts
+++ b/material.angular.io/src/app/shared/support/support.ts
@@ -6,7 +6,6 @@ import {AppLogo} from '../logo/logo';
   templateUrl: './support.html',
   styleUrls: ['./support.scss'],
   standalone: true,
-  imports: [AppLogo]
+  imports: [AppLogo],
 })
-export class Support {
-}
+export class Support {}
diff --git a/material.angular.io/src/app/shared/svg-viewer/svg-viewer.ts b/material.angular.io/src/app/shared/svg-viewer/svg-viewer.ts
index df450fac7937..719f95cc550b 100644
--- a/material.angular.io/src/app/shared/svg-viewer/svg-viewer.ts
+++ b/material.angular.io/src/app/shared/svg-viewer/svg-viewer.ts
@@ -10,7 +10,10 @@ export class SvgViewer implements OnInit {
   @Input() src: string | undefined;
   @Input() scaleToContainer: boolean | undefined;
 
-  constructor(private elementRef: ElementRef, private http: HttpClient) { }
+  constructor(
+    private elementRef: ElementRef,
+    private http: HttpClient,
+  ) {}
 
   ngOnInit() {
     if (this.src) {
diff --git a/material.angular.io/src/app/shared/table-of-contents/table-of-contents.spec.ts b/material.angular.io/src/app/shared/table-of-contents/table-of-contents.spec.ts
index ac8b802c36b0..1a7c84d2b8a9 100644
--- a/material.angular.io/src/app/shared/table-of-contents/table-of-contents.spec.ts
+++ b/material.angular.io/src/app/shared/table-of-contents/table-of-contents.spec.ts
@@ -7,17 +7,14 @@ import {DocsAppTestingModule} from '../../testing/testing-module';
 const mockActivatedRoute = {
   fragment: new Observable(observer => {
     observer.complete();
-  })
+  }),
 };
 
 describe('TableOfContents', () => {
-
   beforeEach(waitForAsync(() => {
     TestBed.configureTestingModule({
       imports: [DocsAppTestingModule],
-      providers: [
-        {provide: ActivatedRoute, useValue: mockActivatedRoute},
-      ]
+      providers: [{provide: ActivatedRoute, useValue: mockActivatedRoute}],
     }).compileComponents();
   }));
 
@@ -31,9 +28,7 @@ describe('TableOfContents', () => {
   });
 
   it('should have no header', () => {
-    const header = fixture
-      .nativeElement
-      .querySelector('h2');
+    const header = fixture.nativeElement.querySelector('h2');
     expect(header).toBeNull();
   });
 
@@ -44,8 +39,8 @@ describe('TableOfContents', () => {
         id: 'test',
         name: 'test',
         top: 0,
-        active: false
-      }
+        active: false,
+      },
     ];
 
     const header = fixture.nativeElement.querySelector('h2');
diff --git a/material.angular.io/src/app/shared/table-of-contents/table-of-contents.ts b/material.angular.io/src/app/shared/table-of-contents/table-of-contents.ts
index 5a9c4d60e1eb..39dbac154055 100644
--- a/material.angular.io/src/app/shared/table-of-contents/table-of-contents.ts
+++ b/material.angular.io/src/app/shared/table-of-contents/table-of-contents.ts
@@ -7,7 +7,7 @@ import {
   OnInit,
   NgZone,
   ChangeDetectorRef,
-  input
+  input,
 } from '@angular/core';
 import {DOCUMENT} from '@angular/common';
 import {ActivatedRoute, Router} from '@angular/router';
@@ -41,7 +41,7 @@ interface Link {
   selector: 'table-of-contents',
   styleUrls: ['./table-of-contents.scss'],
   templateUrl: './table-of-contents.html',
-  standalone: true
+  standalone: true,
 })
 export class TableOfContents implements OnInit, AfterViewInit, OnDestroy {
   readonly container = input<string>();
@@ -54,32 +54,36 @@ export class TableOfContents implements OnInit, AfterViewInit, OnDestroy {
   private _urlFragment = '';
   private subscriptions = new Subscription();
 
-  constructor(private _router: Router,
-              private _route: ActivatedRoute,
-              private _element: ElementRef,
-              private _navigationFocusService: NavigationFocusService,
-              @Inject(DOCUMENT) private _document: Document,
-              private _ngZone: NgZone,
-              private _changeDetectorRef: ChangeDetectorRef) {
-
-    this.subscriptions.add(this._navigationFocusService.navigationEndEvents
-      .subscribe(() => {
+  constructor(
+    private _router: Router,
+    private _route: ActivatedRoute,
+    private _element: ElementRef,
+    private _navigationFocusService: NavigationFocusService,
+    @Inject(DOCUMENT) private _document: Document,
+    private _ngZone: NgZone,
+    private _changeDetectorRef: ChangeDetectorRef,
+  ) {
+    this.subscriptions.add(
+      this._navigationFocusService.navigationEndEvents.subscribe(() => {
         const rootUrl = _router.url.split('#')[0];
         if (rootUrl !== this._rootUrl) {
           this._rootUrl = rootUrl;
         }
-      }));
-
-    this.subscriptions.add(this._route.fragment.subscribe(fragment => {
-      if (fragment != null) {
-        this._urlFragment = fragment;
-
-        const target = document.getElementById(this._urlFragment);
-        if (target) {
-          target.scrollIntoView();
+      }),
+    );
+
+    this.subscriptions.add(
+      this._route.fragment.subscribe(fragment => {
+        if (fragment != null) {
+          this._urlFragment = fragment;
+
+          const target = document.getElementById(this._urlFragment);
+          if (target) {
+            target.scrollIntoView();
+          }
         }
-      }
-    }));
+      }),
+    );
   }
 
   ngOnInit(): void {
@@ -88,14 +92,16 @@ export class TableOfContents implements OnInit, AfterViewInit, OnDestroy {
     this._ngZone.runOutsideAngular(() => {
       Promise.resolve().then(() => {
         const container = this.container();
-        this._scrollContainer = container ?
-          this._document.querySelector(container) as HTMLElement :
-          window;
+        this._scrollContainer = container
+          ? (this._document.querySelector(container) as HTMLElement)
+          : window;
 
         if (this._scrollContainer) {
-          this.subscriptions.add(fromEvent(this._scrollContainer, 'scroll').pipe(
-              debounceTime(10))
-              .subscribe(() => this.onScroll()));
+          this.subscriptions.add(
+            fromEvent(this._scrollContainer, 'scroll')
+              .pipe(debounceTime(10))
+              .subscribe(() => this.onScroll()),
+          );
         }
       });
     });
@@ -128,7 +134,7 @@ export class TableOfContents implements OnInit, AfterViewInit, OnDestroy {
         type: header.tagName.toLowerCase(),
         top: top,
         id: header.id,
-        active: false
+        active: false,
       };
     }).filter(link => link.id);
 
@@ -163,8 +169,8 @@ export class TableOfContents implements OnInit, AfterViewInit, OnDestroy {
       // anchor without also being scrolled passed the next link.
       const currentLink = this._links[i];
       const nextLink = this._links[i + 1];
-      const isActive = scrollOffset >= currentLink.top &&
-                       (!nextLink || nextLink.top >= scrollOffset);
+      const isActive =
+        scrollOffset >= currentLink.top && (!nextLink || nextLink.top >= scrollOffset);
 
       if (isActive !== currentLink.active) {
         currentLink.active = isActive;
diff --git a/material.angular.io/src/app/shared/theme-picker/theme-picker.ts b/material.angular.io/src/app/shared/theme-picker/theme-picker.ts
index 2f299e9d0917..231545847bb9 100644
--- a/material.angular.io/src/app/shared/theme-picker/theme-picker.ts
+++ b/material.angular.io/src/app/shared/theme-picker/theme-picker.ts
@@ -23,7 +23,7 @@ import {LiveAnnouncer} from '@angular/cdk/a11y';
   changeDetection: ChangeDetectionStrategy.OnPush,
   encapsulation: ViewEncapsulation.None,
   standalone: true,
-  imports: [MatButtonModule, MatTooltipModule, MatMenuModule, MatIconModule]
+  imports: [MatButtonModule, MatTooltipModule, MatMenuModule, MatIconModule],
 })
 export class ThemePicker implements OnInit, OnDestroy {
   private _queryParamSubscription = Subscription.EMPTY;
@@ -58,10 +58,12 @@ export class ThemePicker implements OnInit, OnDestroy {
     },
   ];
 
-  constructor(public styleManager: StyleManager,
-              private _themeStorage: ThemeStorage,
-              private _activatedRoute: ActivatedRoute,
-              private liveAnnouncer: LiveAnnouncer) {
+  constructor(
+    public styleManager: StyleManager,
+    private _themeStorage: ThemeStorage,
+    private _activatedRoute: ActivatedRoute,
+    private liveAnnouncer: LiveAnnouncer,
+  ) {
     const themeName = this._themeStorage.getStoredThemeName();
     if (themeName) {
       this.selectTheme(themeName);
@@ -81,7 +83,7 @@ export class ThemePicker implements OnInit, OnDestroy {
         if (themeName) {
           this.selectTheme(themeName);
         }
-    });
+      });
   }
 
   ngOnDestroy() {
@@ -89,7 +91,8 @@ export class ThemePicker implements OnInit, OnDestroy {
   }
 
   selectTheme(themeName: string) {
-    const theme = this.themes.find(currentTheme => currentTheme.name === themeName) ||
+    const theme =
+      this.themes.find(currentTheme => currentTheme.name === themeName) ||
       this.themes.find(currentTheme => currentTheme.isDefault)!;
 
     this.currentTheme = theme;
diff --git a/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.spec.ts b/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.spec.ts
index 30be7437a5dc..ec58bd2dca38 100644
--- a/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.spec.ts
+++ b/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.spec.ts
@@ -1,11 +1,10 @@
 import {ThemeStorage, DocsSiteTheme} from './theme-storage';
 
-
 const testStorageKey = ThemeStorage.storageKey;
 const testTheme: DocsSiteTheme = {
   color: '#000000',
   background: '#ffffff',
-  name: 'test-theme'
+  name: 'test-theme',
 };
 
 describe('ThemeStorage Service', () => {
@@ -14,7 +13,7 @@ describe('ThemeStorage Service', () => {
   const secondTestTheme: DocsSiteTheme = {
     color: '#666666',
     background: '#333333',
-    name: 'other-test-theme'
+    name: 'other-test-theme',
   };
 
   beforeEach(() => {
diff --git a/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.ts b/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.ts
index 930a5581ceaf..9c61d2fa8ff8 100644
--- a/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.ts
+++ b/material.angular.io/src/app/shared/theme-picker/theme-storage/theme-storage.ts
@@ -8,7 +8,6 @@ export interface DocsSiteTheme {
   isDefault?: boolean;
 }
 
-
 @Injectable({providedIn: 'root'})
 export class ThemeStorage {
   static storageKey = 'docs-theme-storage-current-name';
@@ -18,7 +17,7 @@ export class ThemeStorage {
   storeTheme(theme: DocsSiteTheme) {
     try {
       window.localStorage[ThemeStorage.storageKey] = theme.name;
-    } catch { }
+    } catch {}
 
     this.onThemeUpdate.emit(theme);
   }
@@ -34,6 +33,6 @@ export class ThemeStorage {
   clearStorage() {
     try {
       window.localStorage.removeItem(ThemeStorage.storageKey);
-    } catch { }
+    } catch {}
   }
 }
diff --git a/material.angular.io/src/app/shared/version-picker/version-picker.ts b/material.angular.io/src/app/shared/version-picker/version-picker.ts
index f55a5436fa1c..5c09eaeee7b7 100644
--- a/material.angular.io/src/app/shared/version-picker/version-picker.ts
+++ b/material.angular.io/src/app/shared/version-picker/version-picker.ts
@@ -38,9 +38,9 @@ export class VersionPicker {
   onVersionChanged(version: VersionInfo) {
     if (!version.url.startsWith(window.location.origin)) {
       window.location.assign(
-        window.location.pathname ?
-        (version.url + window.location.pathname + window.location.hash)
-        : version.url
+        window.location.pathname
+          ? version.url + window.location.pathname + window.location.hash
+          : version.url,
       );
     }
   }
diff --git a/material.angular.io/src/app/testing/testing-module.ts b/material.angular.io/src/app/testing/testing-module.ts
index 2f0b6be7b860..942837a1bb06 100644
--- a/material.angular.io/src/app/testing/testing-module.ts
+++ b/material.angular.io/src/app/testing/testing-module.ts
@@ -3,12 +3,9 @@ import {NgModule} from '@angular/core';
 import {MATERIAL_SANITY_CHECKS} from '@angular/material/core';
 import {RouterTestingModule} from '@angular/router/testing';
 
-
 @NgModule({
   imports: [RouterTestingModule, HttpClientTestingModule],
   exports: [RouterTestingModule],
-  providers: [
-    {provide: MATERIAL_SANITY_CHECKS, useValue: false},
-  ],
+  providers: [{provide: MATERIAL_SANITY_CHECKS, useValue: false}],
 })
 export class DocsAppTestingModule {}
diff --git a/material.angular.io/src/assets/stack-blitz/angular.json b/material.angular.io/src/assets/stack-blitz/angular.json
index d6295aa90957..17f8ee732968 100644
--- a/material.angular.io/src/assets/stack-blitz/angular.json
+++ b/material.angular.io/src/assets/stack-blitz/angular.json
@@ -29,12 +29,8 @@
             "polyfills": ["zone.js"],
             "tsConfig": "tsconfig.app.json",
             "inlineStyleLanguage": "scss",
-            "assets": [
-              "src/assets"
-            ],
-            "styles": [
-              "src/styles.scss"
-            ],
+            "assets": ["src/assets"],
+            "styles": ["src/styles.scss"],
             "stylePreprocessorOptions": {
               "includePaths": ["node_modules/"]
             },
@@ -99,17 +95,11 @@
             "tsConfig": "tsconfig.spec.json",
             "karmaConfig": "karma.conf.js",
             "inlineStyleLanguage": "scss",
-            "assets": [
-              "src/assets"
-            ],
+            "assets": ["src/assets"],
             "stylePreprocessorOptions": {
-              "includePaths": [
-                "node_modules/"
-              ]
+              "includePaths": ["node_modules/"]
             },
-            "styles": [
-              "src/styles.scss"
-            ],
+            "styles": ["src/styles.scss"],
             "scripts": []
           }
         }
diff --git a/material.angular.io/src/assets/stack-blitz/karma.conf.js b/material.angular.io/src/assets/stack-blitz/karma.conf.js
index 2aaaf6bb857e..c82069f17d49 100644
--- a/material.angular.io/src/assets/stack-blitz/karma.conf.js
+++ b/material.angular.io/src/assets/stack-blitz/karma.conf.js
@@ -10,7 +10,7 @@ module.exports = function (config) {
       require('karma-chrome-launcher'),
       require('karma-jasmine-html-reporter'),
       require('karma-coverage'),
-      require('@angular-devkit/build-angular/plugins/karma')
+      require('@angular-devkit/build-angular/plugins/karma'),
     ],
     client: {
       jasmine: {
@@ -19,18 +19,15 @@ module.exports = function (config) {
         // for example, you can disable the random execution with `random: false`
         // or set a specific seed with `seed: 4321`
       },
-      clearContext: false // leave Jasmine Spec Runner output visible in browser
+      clearContext: false, // leave Jasmine Spec Runner output visible in browser
     },
     jasmineHtmlReporter: {
-      suppressAll: true // removes the duplicated traces
+      suppressAll: true, // removes the duplicated traces
     },
     coverageReporter: {
       dir: require('path').join(__dirname, './coverage/example-app'),
       subdir: '.',
-      reporters: [
-        { type: 'html' },
-        { type: 'text-summary' }
-      ]
+      reporters: [{type: 'html'}, {type: 'text-summary'}],
     },
     reporters: ['progress', 'kjhtml'],
     port: 9876,
@@ -39,6 +36,6 @@ module.exports = function (config) {
     autoWatch: true,
     browsers: ['Chrome'],
     singleRun: false,
-    restartOnFileChange: true
+    restartOnFileChange: true,
   });
 };
diff --git a/material.angular.io/src/assets/stack-blitz/src/main.ts b/material.angular.io/src/assets/stack-blitz/src/main.ts
index 2ed89e930359..217a573d9bac 100644
--- a/material.angular.io/src/assets/stack-blitz/src/main.ts
+++ b/material.angular.io/src/assets/stack-blitz/src/main.ts
@@ -12,9 +12,5 @@ console.info('Angular CDK version', CDK_VERSION.full);
 console.info('Angular Material version', MAT_VERSION.full);
 
 bootstrapApplication(MaterialDocsExample, {
-  providers: [
-    provideAnimations(),
-    provideHttpClient(),
-    importProvidersFrom(MatNativeDateModule)
-  ]
+  providers: [provideAnimations(), provideHttpClient(), importProvidersFrom(MatNativeDateModule)],
 }).catch(err => console.error(err));
diff --git a/material.angular.io/src/assets/stack-blitz/src/test.ts b/material.angular.io/src/assets/stack-blitz/src/test.ts
index 0e1bfcd6b7e8..045eeb686d73 100644
--- a/material.angular.io/src/assets/stack-blitz/src/test.ts
+++ b/material.angular.io/src/assets/stack-blitz/src/test.ts
@@ -4,19 +4,16 @@ import 'zone.js/testing';
 import {getTestBed} from '@angular/core/testing';
 import {
   BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting
+  platformBrowserDynamicTesting,
 } from '@angular/platform-browser-dynamic/testing';
 
 // First, initialize the Angular testing environment.
-getTestBed().initTestEnvironment(
-  BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting()
-);
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
 
 // Then we find all the tests.
 const context = (import.meta as any).webpackContext('./', {
   recursive: true,
-  regExp: /\.spec\.ts$/
+  regExp: /\.spec\.ts$/,
 });
 
 // And load the modules.
diff --git a/material.angular.io/src/assets/stack-blitz/tsconfig.app.json b/material.angular.io/src/assets/stack-blitz/tsconfig.app.json
index 374cc9d294aa..84f1f992d275 100644
--- a/material.angular.io/src/assets/stack-blitz/tsconfig.app.json
+++ b/material.angular.io/src/assets/stack-blitz/tsconfig.app.json
@@ -5,10 +5,6 @@
     "outDir": "./out-tsc/app",
     "types": []
   },
-  "files": [
-    "src/main.ts"
-  ],
-  "include": [
-    "src/**/*.d.ts"
-  ]
+  "files": ["src/main.ts"],
+  "include": ["src/**/*.d.ts"]
 }
diff --git a/material.angular.io/src/assets/stack-blitz/tsconfig.json b/material.angular.io/src/assets/stack-blitz/tsconfig.json
index fe21199d0c15..be068ba9c780 100644
--- a/material.angular.io/src/assets/stack-blitz/tsconfig.json
+++ b/material.angular.io/src/assets/stack-blitz/tsconfig.json
@@ -12,10 +12,7 @@
     "importHelpers": true,
     "target": "es2022",
     "module": "es2020",
-    "lib": [
-      "es2020",
-      "dom"
-    ],
+    "lib": ["es2020", "dom"],
     // Strictness flags. Matching the settings applied in the Angular Components source
     // code, ensuring that examples do not break in StackBlitz with stricter settings.
     "noUnusedParameters": false,
diff --git a/material.angular.io/src/assets/stack-blitz/tsconfig.spec.json b/material.angular.io/src/assets/stack-blitz/tsconfig.spec.json
index 61c1bb357d33..f140ce15bf10 100644
--- a/material.angular.io/src/assets/stack-blitz/tsconfig.spec.json
+++ b/material.angular.io/src/assets/stack-blitz/tsconfig.spec.json
@@ -3,15 +3,8 @@
   "extends": "./tsconfig.json",
   "compilerOptions": {
     "outDir": "./out-tsc/spec",
-    "types": [
-      "jasmine"
-    ]
+    "types": ["jasmine"]
   },
-  "files": [
-    "src/test.ts"
-  ],
-  "include": [
-    "src/**/*.spec.ts",
-    "src/**/*.d.ts"
-  ]
+  "files": ["src/test.ts"],
+  "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
 }
diff --git a/material.angular.io/src/main.ts b/material.angular.io/src/main.ts
index 35a94c10c7b4..b703599bbb96 100644
--- a/material.angular.io/src/main.ts
+++ b/material.angular.io/src/main.ts
@@ -13,22 +13,22 @@ import {LocationStrategy, PathLocationStrategy} from '@angular/common';
 const prefersReducedMotion =
   typeof matchMedia === 'function' ? matchMedia('(prefers-reduced-motion)').matches : false;
 
-
 // Unregister all installed service workers and force reload the page if there was
 // an old service worker from a previous version of the docs.
-unregisterServiceWorkers()
-  .then(hadServiceWorker => hadServiceWorker && location.reload());
+unregisterServiceWorkers().then(hadServiceWorker => hadServiceWorker && location.reload());
 
 bootstrapApplication(MaterialDocsApp, {
   providers: [
     prefersReducedMotion ? provideNoopAnimations() : provideAnimations(),
     {provide: LocationStrategy, useClass: PathLocationStrategy},
     {provide: ErrorHandler, useClass: AnalyticsErrorReportHandler},
-    provideRouter(MATERIAL_DOCS_ROUTES, withInMemoryScrolling({
-      scrollPositionRestoration: 'enabled',
-      anchorScrolling: 'enabled'
-    })),
+    provideRouter(
+      MATERIAL_DOCS_ROUTES,
+      withInMemoryScrolling({
+        scrollPositionRestoration: 'enabled',
+        anchorScrolling: 'enabled',
+      }),
+    ),
     provideHttpClient(),
-  ]
-})
-  .catch(err => console.error(err));
+  ],
+}).catch(err => console.error(err));
diff --git a/material.angular.io/src/polyfills.ts b/material.angular.io/src/polyfills.ts
index af8644d1bcf9..9b436dd009b4 100644
--- a/material.angular.io/src/polyfills.ts
+++ b/material.angular.io/src/polyfills.ts
@@ -58,8 +58,7 @@
 /***************************************************************************************************
  * Zone JS is required by default for Angular itself.
  */
-import 'zone.js';  // Included with Angular CLI.
-
+import 'zone.js'; // Included with Angular CLI.
 
 /***************************************************************************************************
  * APPLICATION IMPORTS
diff --git a/material.angular.io/tools/optimize-scene-screenshots.js b/material.angular.io/tools/optimize-scene-screenshots.js
index c5025e7a8923..8b8b6d020dd6 100644
--- a/material.angular.io/tools/optimize-scene-screenshots.js
+++ b/material.angular.io/tools/optimize-scene-screenshots.js
@@ -19,7 +19,7 @@ sh.set('-e');
 
 imagemin(['src/assets/screenshots/*.png'], {
   destination: 'src/assets/screenshots',
-  plugins: [imageminPngquant({quality: [0.4, 0.6]})]
+  plugins: [imageminPngquant({quality: [0.4, 0.6]})],
 })
-.then(() => console.log('Optimization complete.'))
-.catch(error => console.error);
+  .then(() => console.log('Optimization complete.'))
+  .catch(error => console.error);
diff --git a/material.angular.io/tsconfig.app.json b/material.angular.io/tsconfig.app.json
index f758d9820d53..29f5f5864eb6 100644
--- a/material.angular.io/tsconfig.app.json
+++ b/material.angular.io/tsconfig.app.json
@@ -4,11 +4,6 @@
     "outDir": "./out-tsc/app",
     "types": []
   },
-  "files": [
-    "src/main.ts",
-    "src/polyfills.ts"
-  ],
-  "include": [
-    "src/**/*.d.ts"
-  ]
+  "files": ["src/main.ts", "src/polyfills.ts"],
+  "include": ["src/**/*.d.ts"]
 }
diff --git a/material.angular.io/tsconfig.spec.json b/material.angular.io/tsconfig.spec.json
index 6400fde7d544..430cf757cee7 100644
--- a/material.angular.io/tsconfig.spec.json
+++ b/material.angular.io/tsconfig.spec.json
@@ -2,17 +2,8 @@
   "extends": "./tsconfig.json",
   "compilerOptions": {
     "outDir": "./out-tsc/spec",
-    "types": [
-      "jasmine",
-      "node"
-    ]
+    "types": ["jasmine", "node"]
   },
-  "files": [
-    "src/test.ts",
-    "src/polyfills.ts"
-  ],
-  "include": [
-    "src/**/*.spec.ts",
-    "src/**/*.d.ts"
-  ]
+  "files": ["src/test.ts", "src/polyfills.ts"],
+  "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
 }

From db5430701f3e6dc9f8e3018042cf8533d6ac16f6 Mon Sep 17 00:00:00 2001
From: Gourav102 <gourav.pokharkar94@gmail.com>
Date: Fri, 31 Jan 2025 22:02:08 +0530
Subject: [PATCH 44/91] Updated selectors in CSS snippet as per HTML snippet
 (#30424)

---
 ...reating-a-custom-stepper-using-the-cdk-stepper.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/guides/creating-a-custom-stepper-using-the-cdk-stepper.md b/guides/creating-a-custom-stepper-using-the-cdk-stepper.md
index 04643e01487a..7dc5a11d7f8f 100644
--- a/guides/creating-a-custom-stepper-using-the-cdk-stepper.md
+++ b/guides/creating-a-custom-stepper-using-the-cdk-stepper.md
@@ -60,23 +60,23 @@ In the `app.component.css` file we can now style the stepper however we want:
 **custom-stepper.component.css**
 
 ```css
-.example-container {
+.container {
   border: 1px solid black;
   padding: 10px;
   margin: 10px;
 }
 
-.example-step-navigation-bar {
+.step-navigation-bar {
   display: flex;
   justify-content: flex-start;
   margin-top: 10px;
 }
 
-.example-active {
+.active {
   color: blue;
 }
 
-.example-step {
+.step {
   background: transparent;
   border: 0;
   margin: 0 10px;
@@ -84,12 +84,12 @@ In the `app.component.css` file we can now style the stepper however we want:
   color: black;
 }
 
-.example-step.example-active {
+.step.active {
   color: blue;
   border-bottom: 1px solid blue;
 }
 
-.example-nav-button {
+.nav-button {
   background: transparent;
   border: 0;
 }

From d4397030ab274c54bc26ba7398e95290796e839c Mon Sep 17 00:00:00 2001
From: Naji <54370141+naaajii@users.noreply.github.com>
Date: Fri, 31 Jan 2025 21:49:06 +0500
Subject: [PATCH 45/91] docs: clear input field whenever a selection is
 (#30396)

made in chips autocomplete example

fixes #30339

(cherry picked from commit 00515aded9cabf043ce1fdb34a06cbd4e1661d80)
---
 .../chips/chips-autocomplete/chips-autocomplete-example.html    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components-examples/material/chips/chips-autocomplete/chips-autocomplete-example.html b/src/components-examples/material/chips/chips-autocomplete/chips-autocomplete-example.html
index b9d6271c95cd..cead65eaa9fd 100644
--- a/src/components-examples/material/chips/chips-autocomplete/chips-autocomplete-example.html
+++ b/src/components-examples/material/chips/chips-autocomplete/chips-autocomplete-example.html
@@ -21,7 +21,7 @@
       [matChipInputSeparatorKeyCodes]="separatorKeysCodes"
       (matChipInputTokenEnd)="add($event)"
     />
-    <mat-autocomplete #auto="matAutocomplete" (optionSelected)="selected($event)">
+    <mat-autocomplete #auto="matAutocomplete" (optionSelected)="selected($event); fruitInput.value = ''">
       @for (fruit of filteredFruits(); track fruit) {
         <mat-option [value]="fruit">{{fruit}}</mat-option>
       }

From 6bd376174ed3b56e211d725ac21bcb6fba90bbc6 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Fri, 31 Jan 2025 12:28:55 -0500
Subject: [PATCH 46/91] perf(material/checkbox): Optimize more expensive
 selectors (#30409)

(cherry picked from commit 1b3c42e074988dc953198ac071fad1d90298efae)
---
 src/material/checkbox/_checkbox-common.scss | 45 +++++++++++++--------
 src/material/list/list-option.scss          |  6 ++-
 2 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/src/material/checkbox/_checkbox-common.scss b/src/material/checkbox/_checkbox-common.scss
index 55be454fb01a..2a2392a96976 100644
--- a/src/material/checkbox/_checkbox-common.scss
+++ b/src/material/checkbox/_checkbox-common.scss
@@ -119,15 +119,17 @@ $_fallback-size: 40px;
       border-color: transparent;
     }
 
-    .mdc-checkbox:hover .mdc-checkbox__native-control:not(:checked) ~ .mdc-checkbox__background,
+    // stylelint-disable selector-combinator-space-before
+    .mdc-checkbox:hover > .mdc-checkbox__native-control:not(:checked) ~ .mdc-checkbox__background,
     .mdc-checkbox:hover
-      .mdc-checkbox__native-control:not(:indeterminate) ~ .mdc-checkbox__background {
+      > .mdc-checkbox__native-control:not(:indeterminate) ~ .mdc-checkbox__background {
       @include token-utils.create-token-slot(border-color, unselected-hover-icon-color);
       background-color: transparent;
     }
+    // stylelint-enable selector-combinator-space-before
 
-    .mdc-checkbox:hover .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background,
-    .mdc-checkbox:hover .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background {
+    .mdc-checkbox:hover > .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background,
+    .mdc-checkbox:hover > .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background {
       @include token-utils.create-token-slot(border-color, selected-hover-icon-color);
       @include token-utils.create-token-slot(background-color, selected-hover-icon-color);
     }
@@ -147,7 +149,7 @@ $_fallback-size: 40px;
 
     // Needs extra specificity to override the focus, hover, active states.
     .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive {
-      .mdc-checkbox:hover .mdc-checkbox__native-control ~ .mdc-checkbox__background,
+      .mdc-checkbox:hover > .mdc-checkbox__native-control ~ .mdc-checkbox__background,
       .mdc-checkbox .mdc-checkbox__native-control:focus ~ .mdc-checkbox__background,
       .mdc-checkbox__background {
         @include token-utils.create-token-slot(border-color, disabled-unselected-icon-color);
@@ -306,31 +308,31 @@ $_fallback-size: 40px;
     transition: border-color $_transition-duration $_enter-curve,
                 background-color $_transition-duration $_enter-curve;
 
-    .mdc-checkbox__checkmark-path {
+    > .mdc-checkbox__checkmark > .mdc-checkbox__checkmark-path {
       stroke-dashoffset: 0;
     }
   }
 
   .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background {
-    .mdc-checkbox__checkmark {
+    > .mdc-checkbox__checkmark {
       transition: opacity $_transition-duration * 2 $_enter-curve,
                   transform $_transition-duration * 2 $_enter-curve;
       opacity: 1;
     }
 
-    .mdc-checkbox__mixedmark {
+    > .mdc-checkbox__mixedmark {
       transform: scaleX(1) rotate(-45deg);
     }
   }
   .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background {
-    .mdc-checkbox__checkmark {
+    > .mdc-checkbox__checkmark {
       transform: rotate(45deg);
       opacity: 0;
       transition: opacity $_transition-duration $_exit-curve,
                   transform $_transition-duration $_exit-curve;
     }
 
-    .mdc-checkbox__mixedmark {
+    > .mdc-checkbox__mixedmark {
       transform: scaleX(1) rotate(0deg);
       opacity: 1;
     }
@@ -445,11 +447,22 @@ $_fallback-size: 40px;
 
 // Conditionally disables the animations of the checkbox.
 @mixin checkbox-noop-animations() {
-  &._mat-animation-noopable .mdc-checkbox {
-    *, *::before {
-      transition: none !important;
-      animation: none !important;
-    }
+  &._mat-animation-noopable > .mat-internal-form-field > .mdc-checkbox {
+    @include checkbox-noop-animations-internal;
+  }
+}
+
+@mixin checkbox-noop-animations-internal() {
+  > .mat-mdc-checkbox-touch-target,
+  > .mdc-checkbox__native-control,
+  > .mdc-checkbox__ripple,
+  > .mat-mdc-checkbox-ripple::before,
+  > .mdc-checkbox__background,
+  > .mdc-checkbox__background > .mdc-checkbox__checkmark,
+  > .mdc-checkbox__background > .mdc-checkbox__checkmark > .mdc-checkbox__checkmark-path,
+  > .mdc-checkbox__background > .mdc-checkbox__mixedmark {
+    transition: none !important;
+    animation: none !important;
   }
 }
 
@@ -465,7 +478,7 @@ $_fallback-size: 40px;
       );
     }
 
-    > .mat-mdc-checkbox-ripple .mat-ripple-element {
+    > .mat-mdc-checkbox-ripple > .mat-ripple-element {
       @include token-utils.create-token-slot(
         background-color,
         unselected-hover-state-layer-color
diff --git a/src/material/list/list-option.scss b/src/material/list/list-option.scss
index 5c193ce768b2..fcf3bff9b092 100644
--- a/src/material/list/list-option.scss
+++ b/src/material/list/list-option.scss
@@ -63,10 +63,14 @@
   // We can't use the MDC checkbox here directly, because this checkbox is purely
   // decorative and including the MDC one will bring in unnecessary JS.
   @include checkbox-common.checkbox-structure(false);
-  @include checkbox-common.checkbox-noop-animations;
   @include radio-common.radio-structure(false);
   @include radio-common.radio-noop-animations;
 
+  &._mat-animation-noopable > .mdc-list-item__start > .mdc-checkbox,
+  &._mat-animation-noopable > .mdc-list-item__end > .mdc-checkbox {
+    @include checkbox-common.checkbox-noop-animations-internal;
+  }
+
   // The internal checkbox/radio is purely decorative, but because it's an `input`, the user can
   // still focus it by tabbing or clicking. Furthermore, `mat-list-option` has the `option` role
   // which doesn't allow a nested `input`. We use `display: none` both to remove it from the tab

From 6d96869bdb0b352da18d5adf8774cf9d211196b1 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Sun, 2 Feb 2025 05:19:50 -0800
Subject: [PATCH 47/91] fix(material/sidenav): end positioned sidenav not
 opening in RTL (#30427)

Fixes a regression that happened when we switched the sidenav away from the animations module. The specificity of the selector that shows the sidenav was decreased which meant that the RTL styles were overriding it.

Fixes #30422.

(cherry picked from commit 04ae202b600022b614c5da4e1765c333a98d5294)
---
 src/material/sidenav/drawer.scss | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/material/sidenav/drawer.scss b/src/material/sidenav/drawer.scss
index d2b74b4be44e..717c141dc2dd 100644
--- a/src/material/sidenav/drawer.scss
+++ b/src/material/sidenav/drawer.scss
@@ -230,7 +230,8 @@ $drawer-over-drawer-z-index: 4;
     }
   }
 
-  &.mat-drawer-opened {
+  // Needs additional specificity to override the RTL styles.
+  &.mat-drawer-opened.mat-drawer-opened {
     transform: none;
   }
 }

From 30ac01447007a8cc1440a96ab6f385e259e7c76f Mon Sep 17 00:00:00 2001
From: Naji <54370141+naaajii@users.noreply.github.com>
Date: Mon, 3 Feb 2025 21:23:35 +0500
Subject: [PATCH 48/91] docs: update links for Shadow DOM & Constructable
 Stylesheets (#30433)

previous links were getting redirect to new ones which may be a bit confusing, this commit updates them with new URL

(cherry picked from commit f9ca76cba7ef89aa51a5d9edc28fcefc194d2f06)
---
 guides/theming.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/guides/theming.md b/guides/theming.md
index f30e54fab197..7b092fb5d7e9 100644
--- a/guides/theming.md
+++ b/guides/theming.md
@@ -462,8 +462,8 @@ be defined through the `overrides` API instead of defined explicitly.
 
 Angular Material assumes that, by default, all theme styles are loaded as global
 CSS. If you want to use
-[Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM)
+[Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM)
 in your application, you must load the theme styles within each shadow root that
 contains an Angular Material component. You can accomplish this by manually
 loading the CSS in each shadow root, or by using
-[Constructable Stylesheets](https://developers.google.com/web/updates/2019/02/constructable-stylesheets).
+[Constructable Stylesheets](https://web.dev/articles/constructable-stylesheets).

From 9e152910b1937be2ba169a27c2840b20869495d0 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Mon, 3 Feb 2025 11:46:51 -0500
Subject: [PATCH 49/91] perf(material/button): Optimize the remaining
 descendant state selector. (#30428)

(cherry picked from commit 7b1724368965ebc350e0eb63555f8331e1a01661)
---
 src/material/button/_button-base.scss | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/material/button/_button-base.scss b/src/material/button/_button-base.scss
index de6c79c2e224..42f0af85f757 100644
--- a/src/material/button/_button-base.scss
+++ b/src/material/button/_button-base.scss
@@ -71,7 +71,7 @@
       @include token-utils.create-token-slot(background-color, disabled-state-layer-color);
     }
 
-    &:hover .mat-mdc-button-persistent-ripple::before {
+    &:hover > .mat-mdc-button-persistent-ripple::before {
       @include token-utils.create-token-slot(opacity, hover-state-layer-opacity);
     }
 

From 8a99cf45f56f62f21c745d62c09075b4f7fcb970 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 3 Feb 2025 09:10:53 -0800
Subject: [PATCH 50/91] fix(material/datepicker): set aria-expanded on
 datepicker toggle (#30438)

Fixes that the datepicker toggle's button wasn't setting `aria-expanded` properly.

Fixes #30406.

(cherry picked from commit f15a9395a89b00b74a973f65f3c323d56462879a)
---
 .../datepicker/datepicker-toggle.html         |  1 +
 src/material/datepicker/datepicker.spec.ts    | 60 +++++++++++++------
 2 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/src/material/datepicker/datepicker-toggle.html b/src/material/datepicker/datepicker-toggle.html
index b2a852166fea..a1f7f190dfcf 100644
--- a/src/material/datepicker/datepicker-toggle.html
+++ b/src/material/datepicker/datepicker-toggle.html
@@ -5,6 +5,7 @@
   [attr.aria-haspopup]="datepicker ? 'dialog' : null"
   [attr.aria-label]="ariaLabel || _intl.openCalendarLabel"
   [attr.tabindex]="disabled ? -1 : tabIndex"
+  [attr.aria-expanded]="datepicker ? datepicker.opened : null"
   [disabled]="disabled"
   [disableRipple]="disableRipple">
 
diff --git a/src/material/datepicker/datepicker.spec.ts b/src/material/datepicker/datepicker.spec.ts
index 0078af06367f..20e898051b6c 100644
--- a/src/material/datepicker/datepicker.spec.ts
+++ b/src/material/datepicker/datepicker.spec.ts
@@ -272,27 +272,23 @@ describe('MatDatepicker', () => {
         expect(popup.getAttribute('role')).toBe('dialog');
       }));
 
-      it(
-        'should set aria-labelledby to the one from the input, if not placed inside ' +
-          'a mat-form-field',
-        fakeAsync(() => {
-          expect(fixture.nativeElement.querySelector('mat-form-field')).toBeFalsy();
+      it('should set aria-labelledby to the one from the input, if not placed inside a mat-form-field', fakeAsync(() => {
+        expect(fixture.nativeElement.querySelector('mat-form-field')).toBeFalsy();
 
-          const input: HTMLInputElement = fixture.nativeElement.querySelector('input');
-          input.setAttribute('aria-labelledby', 'test-label');
+        const input: HTMLInputElement = fixture.nativeElement.querySelector('input');
+        input.setAttribute('aria-labelledby', 'test-label');
 
-          testComponent.datepicker.open();
-          fixture.detectChanges();
-          tick();
-          flush();
+        testComponent.datepicker.open();
+        fixture.detectChanges();
+        tick();
+        flush();
 
-          const popup = document.querySelector(
-            '.cdk-overlay-pane .mat-datepicker-content-container',
-          )!;
-          expect(popup).toBeTruthy();
-          expect(popup.getAttribute('aria-labelledby')).toBe('test-label');
-        }),
-      );
+        const popup = document.querySelector(
+          '.cdk-overlay-pane .mat-datepicker-content-container',
+        )!;
+        expect(popup).toBeTruthy();
+        expect(popup.getAttribute('aria-labelledby')).toBe('test-label');
+      }));
 
       it('close should close dialog', fakeAsync(() => {
         testComponent.touch = true;
@@ -1449,6 +1445,26 @@ describe('MatDatepicker', () => {
 
         expect(toggle.classList).not.toContain('mat-datepicker-toggle-active');
       }));
+
+      it('should set aria-expanded on the toggle', fakeAsync(() => {
+        const button = fixture.nativeElement.querySelector('mat-datepicker-toggle button');
+
+        expect(button.getAttribute('aria-expanded')).toBe('false');
+
+        fixture.componentInstance.datepicker.open();
+        fixture.detectChanges();
+        tick();
+        flush();
+
+        expect(button.getAttribute('aria-expanded')).toBe('true');
+
+        fixture.componentInstance.datepicker.close();
+        fixture.detectChanges();
+        flush();
+        fixture.detectChanges();
+
+        expect(button.getAttribute('aria-expanded')).toBe('false');
+      }));
     });
 
     describe('datepicker with custom mat-datepicker-toggle icon', () => {
@@ -2183,6 +2199,14 @@ describe('MatDatepicker', () => {
       expect(toggle.hasAttribute('aria-haspopup')).toBe(false);
     });
 
+    it('should not set aria-expanded if toggle does not have a datepicker', () => {
+      const fixture = createComponent(DatepickerToggleWithNoDatepicker, [MatNativeDateModule]);
+      fixture.detectChanges();
+      const toggle = fixture.nativeElement.querySelector('.mat-datepicker-toggle button');
+
+      expect(toggle.hasAttribute('aria-expanded')).toBe(false);
+    });
+
     it('should not throw on init if input does not have a datepicker', () => {
       expect(() => {
         const fixture = createComponent(DatepickerInputWithNoDatepicker, [MatNativeDateModule]);

From 8568cd5ad1011a6af777b1355431dee4a8cbf021 Mon Sep 17 00:00:00 2001
From: Yurii Khomitskyi <54478076+yurakhomitsky@users.noreply.github.com>
Date: Tue, 4 Feb 2025 00:04:12 +0200
Subject: [PATCH 51/91] fix(material/chips): Async chips with a delay are not
 highlighted (#27399)

Fixes a bug in the Angular Material `chips` component where async chips with a delay were not highlighted correctly.

Fixes #27370

(cherry picked from commit 4eb06acbd9c30b3f5e8146b949739fe95cfcf6d3)
---
 src/material/chips/chip-listbox.spec.ts | 77 +++++++++++++++++++++++++
 src/material/chips/chip-listbox.ts      | 27 ++++-----
 2 files changed, 89 insertions(+), 15 deletions(-)

diff --git a/src/material/chips/chip-listbox.spec.ts b/src/material/chips/chip-listbox.spec.ts
index 5c9113732df6..a1ea64916436 100644
--- a/src/material/chips/chip-listbox.spec.ts
+++ b/src/material/chips/chip-listbox.spec.ts
@@ -18,6 +18,8 @@ import {ComponentFixture, TestBed, fakeAsync, flush, tick} from '@angular/core/t
 import {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';
 import {By} from '@angular/platform-browser';
 import {MatChipListbox, MatChipOption, MatChipsModule} from './index';
+import {asyncScheduler, BehaviorSubject, Observable} from 'rxjs';
+import {observeOn} from 'rxjs/operators';
 
 describe('MatChipListbox', () => {
   let fixture: ComponentFixture<any>;
@@ -862,6 +864,60 @@ describe('MatChipListbox', () => {
             .toBeFalsy();
         });
       });
+
+      describe('async multiple selection', () => {
+        it('should select initial async chips', fakeAsync(() => {
+          fixture = createComponent(AsyncMultiSelectionChipListbox, undefined, initFixture => {
+            initFixture.componentInstance.control = new FormControl(['tutorial-1', 'tutorial-2']);
+          });
+          fixture.detectChanges();
+          flush();
+
+          tick(400);
+          fixture.detectChanges();
+
+          let array = fixture.componentInstance.chips.toArray();
+
+          expect(array.length).withContext('Expect chips not to be rendered yet').toBe(0);
+
+          tick(100);
+          fixture.detectChanges();
+
+          array = fixture.componentInstance.chips.toArray();
+          flush();
+
+          expect(array[0].selected)
+            .withContext('Expect "tutorial-1" chip to be selected')
+            .toBe(true);
+          expect(array[1].selected)
+            .withContext('Expect "tutorial-2" chip to be selected')
+            .toBe(true);
+        }));
+
+        it('should select async chips that changed over time', fakeAsync(() => {
+          fixture = createComponent(AsyncMultiSelectionChipListbox, undefined, initFixture => {
+            initFixture.componentInstance.control = new FormControl(['tutorial-1']);
+          });
+          fixture.detectChanges();
+          flush();
+
+          tick(500);
+          fixture.detectChanges();
+
+          fixture.componentInstance.control.setValue(['tutorial-4']);
+          fixture.componentInstance.updateChips(['tutorial-3', 'tutorial-4']);
+
+          tick(500);
+          fixture.detectChanges();
+
+          const array = fixture.componentInstance.chips.toArray();
+          flush();
+
+          expect(array[1].selected)
+            .withContext('Expect "tutorial-4" chip to be selected')
+            .toBe(true);
+        }));
+      });
     });
   });
 
@@ -986,6 +1042,27 @@ class MultiSelectionChipListbox {
   @ViewChildren(MatChipOption) chips: QueryList<MatChipOption>;
 }
 
+@Component({
+  template: `
+      <mat-chip-listbox [multiple]="true" [formControl]="control">
+        <mat-chip-option *ngFor="let chip of chips$ | async" [value]="chip">
+          {{ chip }}
+        </mat-chip-option>
+      </mat-chip-listbox>
+  `,
+})
+class AsyncMultiSelectionChipListbox {
+  private _chipsSubject = new BehaviorSubject(['tutorial-1', 'tutorial-2', 'tutorial-3']);
+  chips$: Observable<string[]> = this._chipsSubject.pipe(observeOn(asyncScheduler, 500));
+  control = new FormControl<string[] | null>(null);
+  @ViewChild(MatChipListbox) chipListbox: MatChipListbox;
+  @ViewChildren(MatChipOption) chips: QueryList<MatChipOption>;
+
+  updateChips(chips: string[]): void {
+    this._chipsSubject.next(chips);
+  }
+}
+
 @Component({
   template: `
       <mat-chip-listbox [formControl]="control">
diff --git a/src/material/chips/chip-listbox.ts b/src/material/chips/chip-listbox.ts
index 57b87c03e48d..1c958de8b001 100644
--- a/src/material/chips/chip-listbox.ts
+++ b/src/material/chips/chip-listbox.ts
@@ -103,9 +103,6 @@ export class MatChipListbox
   // TODO: MDC uses `grid` here
   protected override _defaultRole = 'listbox';
 
-  /** Value that was assigned before the listbox was initialized. */
-  private _pendingInitialValue: any;
-
   /** Default chip options. */
   private _defaultOptions = inject(MAT_CHIPS_DEFAULT_OPTIONS, {optional: true});
 
@@ -184,7 +181,9 @@ export class MatChipListbox
     return this._value;
   }
   set value(value: any) {
-    this.writeValue(value);
+    if (this._chips && this._chips.length) {
+      this._setSelectionByValue(value, false);
+    }
     this._value = value;
   }
   protected _value: any;
@@ -202,14 +201,12 @@ export class MatChipListbox
   override _chips: QueryList<MatChipOption> = undefined!;
 
   ngAfterContentInit() {
-    if (this._pendingInitialValue !== undefined) {
-      Promise.resolve().then(() => {
-        this._setSelectionByValue(this._pendingInitialValue, false);
-        this._pendingInitialValue = undefined;
-      });
-    }
-
     this._chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {
+      if (this.value !== undefined) {
+        Promise.resolve().then(() => {
+          this._setSelectionByValue(this.value, false);
+        });
+      }
       // Update listbox selectable/multiple properties on chips
       this._syncListboxProperties();
     });
@@ -255,10 +252,10 @@ export class MatChipListbox
    * @docs-private
    */
   writeValue(value: any): void {
-    if (this._chips) {
-      this._setSelectionByValue(value, false);
-    } else if (value != null) {
-      this._pendingInitialValue = value;
+    if (value != null) {
+      this.value = value;
+    } else {
+      this.value = undefined;
     }
   }
 

From 11209b4c7d7851493d6edd33aa6fbc951f3336cf Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 3 Feb 2025 15:09:20 -0800
Subject: [PATCH 52/91] build: fix failing test (#30443)

Fixes a test that's failing at head.

(cherry picked from commit 8e091797f8664cf99af86a5c7c4d5615734fcaf1)
---
 src/material/chips/chip-listbox.spec.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/material/chips/chip-listbox.spec.ts b/src/material/chips/chip-listbox.spec.ts
index a1ea64916436..6a0f4d610fbd 100644
--- a/src/material/chips/chip-listbox.spec.ts
+++ b/src/material/chips/chip-listbox.spec.ts
@@ -1050,6 +1050,7 @@ class MultiSelectionChipListbox {
         </mat-chip-option>
       </mat-chip-listbox>
   `,
+  standalone: false,
 })
 class AsyncMultiSelectionChipListbox {
   private _chipsSubject = new BehaviorSubject(['tutorial-1', 'tutorial-2', 'tutorial-3']);

From 895bf0ea1f00bce159f75fbdc6f1c3e95ab5911b Mon Sep 17 00:00:00 2001
From: Andrew Seguin <andrewjs@google.com>
Date: Wed, 5 Feb 2025 07:49:42 -0800
Subject: [PATCH 53/91] release: cut the v19.1.3 release

---
 CHANGELOG.md | 14 ++++++++++++++
 package.json |  2 +-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index cc9777cf3a2b..1e7e04a67421 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+<a name="19.1.3"></a>
+# 19.1.3 "plastic-wombat" (2025-02-05)
+### material
+| Commit | Type | Description |
+| -- | -- | -- |
+| [37436bd299](https://github.com/angular/components/commit/37436bd299ebe48b54213b91aa42cbdbe3dfb3f7) | fix | **button-toggle:** make null value selected on init ([#25553](https://github.com/angular/components/pull/25553)) |
+| [8568cd5ad1](https://github.com/angular/components/commit/8568cd5ad1011a6af777b1355431dee4a8cbf021) | fix | **chips:** Async chips with a delay are not highlighted ([#27399](https://github.com/angular/components/pull/27399)) |
+| [8a99cf45f5](https://github.com/angular/components/commit/8a99cf45f56f62f21c745d62c09075b4f7fcb970) | fix | **datepicker:** set aria-expanded on datepicker toggle ([#30438](https://github.com/angular/components/pull/30438)) |
+| [6d96869bdb](https://github.com/angular/components/commit/6d96869bdb0b352da18d5adf8774cf9d211196b1) | fix | **sidenav:** end positioned sidenav not opening in RTL ([#30427](https://github.com/angular/components/pull/30427)) |
+| [9e152910b1](https://github.com/angular/components/commit/9e152910b1937be2ba169a27c2840b20869495d0) | perf | **button:** Optimize the remaining descendant state selector. ([#30428](https://github.com/angular/components/pull/30428)) |
+| [6bd376174e](https://github.com/angular/components/commit/6bd376174ed3b56e211d725ac21bcb6fba90bbc6) | perf | **checkbox:** Optimize more expensive selectors ([#30409](https://github.com/angular/components/pull/30409)) |
+
+<!-- CHANGELOG SPLIT MARKER -->
+
 <a name="19.1.2"></a>
 # 19.1.2 "dolomite-domino" (2025-01-29)
 ### cdk
diff --git a/package.json b/package.json
index 8d42392075b3..cfb6e71a5583 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.2",
+  "version": "19.1.3",
   "dependencies": {
     "@angular/animations": "^19.1.3",
     "@angular/common": "^19.1.3",

From 9b323df47801bef574963193c065e37df3c94c44 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Fri, 7 Feb 2025 10:39:00 -0500
Subject: [PATCH 54/91] perf(material/tooltip): Defer injection of injectables
 not needed until tooltip is shown. (#30440)

(cherry picked from commit 622152de761b629a426b744ec2ff3e4e79d18889)
---
 src/material/tooltip/tooltip.ts | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/src/material/tooltip/tooltip.ts b/src/material/tooltip/tooltip.ts
index 233dab3d1e37..194637274ae9 100644
--- a/src/material/tooltip/tooltip.ts
+++ b/src/material/tooltip/tooltip.ts
@@ -187,10 +187,7 @@ const MAX_WIDTH = 200;
   },
 })
 export class MatTooltip implements OnDestroy, AfterViewInit {
-  private _overlay = inject(Overlay);
   private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
-  private _scrollDispatcher = inject(ScrollDispatcher);
-  private _viewContainerRef = inject(ViewContainerRef);
   private _ngZone = inject(NgZone);
   private _platform = inject(Platform);
   private _ariaDescriber = inject(AriaDescriber);
@@ -209,7 +206,6 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
   private _positionAtOrigin: boolean = false;
   private _disabled: boolean = false;
   private _tooltipClass: string | string[] | Set<string> | {[key: string]: any};
-  private _scrollStrategy = inject(MAT_TOOLTIP_SCROLL_STRATEGY);
   private _viewInitialized = false;
   private _pointerExitEventsInitialized = false;
   private readonly _tooltipComponent = TooltipComponent;
@@ -362,9 +358,6 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
   private readonly _passiveListeners: (readonly [string, EventListenerOrEventListenerObject])[] =
     [];
 
-  /** Reference to the current document. */
-  private _document = inject(DOCUMENT);
-
   /** Timer started at the last `touchstart` event. */
   private _touchstartTimeout: null | ReturnType<typeof setTimeout> = null;
 
@@ -462,7 +455,8 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
     const overlayRef = this._createOverlay(origin);
     this._detach();
     this._portal =
-      this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);
+      this._portal ||
+      new ComponentPortal(this._tooltipComponent, this._injector.get(ViewContainerRef));
     const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);
     instance._triggerElement = this._elementRef.nativeElement;
     instance._mouseLeaveHideDelay = this._hideDelay;
@@ -512,12 +506,14 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
       this._detach();
     }
 
-    const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(
-      this._elementRef,
-    );
+    const scrollableAncestors = this._injector
+      .get(ScrollDispatcher)
+      .getAncestorScrollContainers(this._elementRef);
+
+    const overlay = this._injector.get(Overlay);
 
     // Create connected position strategy that listens for scroll events to reposition.
-    const strategy = this._overlay
+    const strategy = overlay
       .position()
       .flexibleConnectedTo(this.positionAtOrigin ? origin || this._elementRef : this._elementRef)
       .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)
@@ -537,11 +533,11 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
       }
     });
 
-    this._overlayRef = this._overlay.create({
+    this._overlayRef = overlay.create({
       direction: this._dir,
       positionStrategy: strategy,
       panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,
-      scrollStrategy: this._scrollStrategy(),
+      scrollStrategy: this._injector.get(MAT_TOOLTIP_SCROLL_STRATEGY)(),
     });
 
     this._updatePosition(this._overlayRef);
@@ -874,7 +870,9 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
   /** Listener for the `wheel` event on the element. */
   private _wheelListener(event: WheelEvent) {
     if (this._isTooltipVisible()) {
-      const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);
+      const elementUnderPointer = this._injector
+        .get(DOCUMENT)
+        .elementFromPoint(event.clientX, event.clientY);
       const element = this._elementRef.nativeElement;
 
       // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it

From 45e3e725e6d9b3c31b447b80f4c2698ac575abd9 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 10 Feb 2025 21:20:16 +0100
Subject: [PATCH 55/91] fix(cdk/table): memory leak when no rows are sticky
 (#30461)

The table has some logic that queues up measurements of rows that will become sticky so that they can be measured once we set up the resize observer. Afterwards the queue is cleared once the measurements are done. #29814 introduced a memory leak where the tracking was happening even if the row isn't actually sticky which meant that the resize observer was never set up and the queue kept growing as new rows are rendered.

These changes resolve the leak by only queuing the measurement if it's necessary.

I've also fixed another potential leak where we were setting up the resize observer, but we weren't destroying it.

Fixes #30453.

(cherry picked from commit bf94082f818eae53a75d5aaa319a03e7e55d5d4a)
---
 src/cdk/table/sticky-styler.ts | 33 +++++++++++++++------------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/src/cdk/table/sticky-styler.ts b/src/cdk/table/sticky-styler.ts
index eebe0b8ec3ea..0651e76dd91f 100644
--- a/src/cdk/table/sticky-styler.ts
+++ b/src/cdk/table/sticky-styler.ts
@@ -39,7 +39,7 @@ export class StickyStyler {
     ? new globalThis.ResizeObserver(entries => this._updateCachedSizes(entries))
     : null;
   private _updatedStickyColumnsParamsToReplay: UpdateStickyColumnsParams[] = [];
-  private _stickyColumnsReplayTimeout: number | null = null;
+  private _stickyColumnsReplayTimeout: ReturnType<typeof setTimeout> | null = null;
   private _cachedCellWidths: number[] = [];
   private readonly _borderCellCss: Readonly<{[d in StickyDirection]: string}>;
   private _destroyed = false;
@@ -128,24 +128,14 @@ export class StickyStyler {
     recalculateCellWidths = true,
     replay = true,
   ) {
-    if (replay) {
-      this._updateStickyColumnReplayQueue({
-        rows: [...rows],
-        stickyStartStates: [...stickyStartStates],
-        stickyEndStates: [...stickyEndStates],
-      });
-    }
-
+    // Don't cache any state if none of the columns are sticky.
     if (
       !rows.length ||
       !this._isBrowser ||
       !(stickyStartStates.some(state => state) || stickyEndStates.some(state => state))
     ) {
-      if (this._positionListener) {
-        this._positionListener.stickyColumnsUpdated({sizes: []});
-        this._positionListener.stickyEndColumnsUpdated({sizes: []});
-      }
-
+      this._positionListener?.stickyColumnsUpdated({sizes: []});
+      this._positionListener?.stickyEndColumnsUpdated({sizes: []});
       return;
     }
 
@@ -164,6 +154,14 @@ export class StickyStyler {
     let startPositions: number[];
     let endPositions: number[];
 
+    if (replay) {
+      this._updateStickyColumnReplayQueue({
+        rows: [...rows],
+        stickyStartStates: [...stickyStartStates],
+        stickyEndStates: [...stickyEndStates],
+      });
+    }
+
     this._afterNextRender({
       earlyRead: () => {
         cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);
@@ -321,6 +319,7 @@ export class StickyStyler {
       clearTimeout(this._stickyColumnsReplayTimeout);
     }
 
+    this._resizeObserver?.disconnect();
     this._destroyed = true;
   }
 
@@ -493,11 +492,9 @@ export class StickyStyler {
     this._removeFromStickyColumnReplayQueue(params.rows);
 
     // No need to replay if a flush is pending.
-    if (this._stickyColumnsReplayTimeout) {
-      return;
+    if (!this._stickyColumnsReplayTimeout) {
+      this._updatedStickyColumnsParamsToReplay.push(params);
     }
-
-    this._updatedStickyColumnsParamsToReplay.push(params);
   }
 
   /** Remove updates for the specified rows from the queue. */

From 30137c0e7ad94a8201967f03d0e8da825fdc9cc3 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 11 Feb 2025 12:43:44 +0100
Subject: [PATCH 56/91] build: add packageGroup to CDK (#30468)

Adds a `packageGroup` to the `package.json` of the CDK to avoid some warnings during `ng update`.

Fixes #30464.

(cherry picked from commit 4c3206c669b7b17e3f18f4dd0b1220c5fa068376)
---
 src/cdk/package.json | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/cdk/package.json b/src/cdk/package.json
index d47d9ee5a02a..53b816beeea2 100644
--- a/src/cdk/package.json
+++ b/src/cdk/package.json
@@ -57,7 +57,11 @@
   },
   "schematics": "./schematics/collection.json",
   "ng-update": {
-    "migrations": "./schematics/migration.json"
+    "migrations": "./schematics/migration.json",
+    "packageGroup": [
+      "@angular/material",
+      "@angular/cdk"
+    ]
   },
   "sideEffects": false
 }

From 0ac0290bb98f7ed14fd39fd1797980a7245e6b74 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Tue, 11 Feb 2025 12:39:51 -0500
Subject: [PATCH 57/91] perf(multiple): Don't double-inject the style loader.
 (#30467)

inject() is pretty cheap, but not free.

(cherry picked from commit 1ddb9cf0569f52042c59ec535e21d885245b532a)
---
 src/material/badge/badge.ts         | 5 +++--
 src/material/chips/chip.ts          | 5 +++--
 src/material/core/option/option.ts  | 5 +++--
 src/material/stepper/step-header.ts | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/material/badge/badge.ts b/src/material/badge/badge.ts
index 7c48d1e6033a..1efdeb72ba23 100644
--- a/src/material/badge/badge.ts
+++ b/src/material/badge/badge.ts
@@ -151,8 +151,9 @@ export class MatBadge implements OnInit, OnDestroy {
   constructor(...args: unknown[]);
 
   constructor() {
-    inject(_CdkPrivateStyleLoader).load(_MatBadgeStyleLoader);
-    inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
+    const styleLoader = inject(_CdkPrivateStyleLoader);
+    styleLoader.load(_MatBadgeStyleLoader);
+    styleLoader.load(_VisuallyHiddenLoader);
 
     if (typeof ngDevMode === 'undefined' || ngDevMode) {
       const nativeElement = this._elementRef.nativeElement;
diff --git a/src/material/chips/chip.ts b/src/material/chips/chip.ts
index 779c1c55916f..c49f81fd07d1 100644
--- a/src/material/chips/chip.ts
+++ b/src/material/chips/chip.ts
@@ -242,8 +242,9 @@ export class MatChip implements OnInit, AfterViewInit, AfterContentInit, DoCheck
   constructor(...args: unknown[]);
 
   constructor() {
-    inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
-    inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
+    const styleLoader = inject(_CdkPrivateStyleLoader);
+    styleLoader.load(_StructuralStylesLoader);
+    styleLoader.load(_VisuallyHiddenLoader);
     const animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});
     this._animationsDisabled = animationMode === 'NoopAnimations';
     this._monitorFocus();
diff --git a/src/material/core/option/option.ts b/src/material/core/option/option.ts
index 3b5b211f206c..1edd226780ed 100644
--- a/src/material/core/option/option.ts
+++ b/src/material/core/option/option.ts
@@ -139,8 +139,9 @@ export class MatOption<T = any> implements FocusableOption, AfterViewChecked, On
 
   constructor(...args: unknown[]);
   constructor() {
-    inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
-    inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
+    const styleLoader = inject(_CdkPrivateStyleLoader);
+    styleLoader.load(_StructuralStylesLoader);
+    styleLoader.load(_VisuallyHiddenLoader);
     this._signalDisableRipple = !!this._parent && isSignal(this._parent.disableRipple);
   }
 
diff --git a/src/material/stepper/step-header.ts b/src/material/stepper/step-header.ts
index 38240eb3ced8..19efe841a043 100644
--- a/src/material/stepper/step-header.ts
+++ b/src/material/stepper/step-header.ts
@@ -88,8 +88,9 @@ export class MatStepHeader extends CdkStepHeader implements AfterViewInit, OnDes
   constructor() {
     super();
 
-    inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
-    inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
+    const styleLoader = inject(_CdkPrivateStyleLoader);
+    styleLoader.load(_StructuralStylesLoader);
+    styleLoader.load(_VisuallyHiddenLoader);
     const changeDetectorRef = inject(ChangeDetectorRef);
     this._intlSubscription = this._intl.changes.subscribe(() => changeDetectorRef.markForCheck());
   }

From 6d38b3dd9fc36a4182326f904fa4b1e096b6ad80 Mon Sep 17 00:00:00 2001
From: Angular Robot <angular-robot@google.com>
Date: Tue, 11 Feb 2025 15:25:35 -0700
Subject: [PATCH 58/91] build: update angular shared dev-infra code to 8a438a3
 (#30289)

(cherry picked from commit 08bf7aaf82e95651c23ebf4932ff7d0437006e95)
---
 .../assistant-to-the-branch-manager.yml       |  2 +-
 .github/workflows/ci.material-aio.yml         |  8 +--
 .github/workflows/ci.yml                      | 62 +++++++++----------
 .../workflows/deploy-dev-app-main-push.yml    |  6 +-
 .github/workflows/dev-infra.yml               |  4 +-
 .github/workflows/google-internal-tests.yml   |  2 +-
 .github/workflows/pr.material-aio.yml         |  8 +--
 .github/workflows/pr.yml                      | 56 ++++++++---------
 .github/workflows/preview-build-dev-app.yml   |  8 +--
 .github/workflows/preview-deploy-dev-app.yml  |  2 +-
 .github/workflows/scheduled-ci.yml            | 14 ++---
 material.angular.io/WORKSPACE.bazel           |  6 +-
 12 files changed, 89 insertions(+), 89 deletions(-)

diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml
index 2fe989f3df08..350d10bea7ab 100644
--- a/.github/workflows/assistant-to-the-branch-manager.yml
+++ b/.github/workflows/assistant-to-the-branch-manager.yml
@@ -16,6 +16,6 @@ jobs:
       - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3.0.2
         with:
           persist-credentials: false
-      - uses: angular/dev-infra/github-actions/branch-manager@359350bbc10aab1bac85d0eec61a53377078ab82
+      - uses: angular/dev-infra/github-actions/branch-manager@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/ci.material-aio.yml b/.github/workflows/ci.material-aio.yml
index 744cbdd5e87f..6a43565e32fd 100644
--- a/.github/workflows/ci.material-aio.yml
+++ b/.github/workflows/ci.material-aio.yml
@@ -28,7 +28,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Linting
@@ -38,7 +38,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Direct Production Build (deploy usage)
@@ -50,7 +50,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Tests
@@ -67,7 +67,7 @@ jobs:
     runs-on: ubuntu-22.04 # Note, fails on Ubuntu 24.04. see https://github.com/actions/runner-images/issues/10636
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Lighthouse Audit
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f689566cecb4..10a271915517 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,7 +21,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Install node modules
@@ -54,13 +54,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Check API Goldens
@@ -75,13 +75,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run e2e tests
@@ -96,13 +96,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run integration tests
@@ -120,13 +120,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run linker AOT tests
@@ -141,13 +141,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run linker JIT tests
@@ -162,13 +162,13 @@ jobs:
     runs-on: ubuntu-latest-16core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run tests
@@ -183,13 +183,13 @@ jobs:
     runs-on: ubuntu-latest-16core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run tests
@@ -204,13 +204,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Build and Verify Release Output
@@ -235,7 +235,7 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       # See: https://github.com/puppeteer/puppeteer/pull/13196 and
@@ -243,9 +243,9 @@ jobs:
       - name: Disable AppArmor
         run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Build and Verify Release Output
@@ -273,14 +273,14 @@ jobs:
       CI_RUNNER_NUMBER: ${{ github.run_id }}
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Browserstack Variables
-        uses: angular/dev-infra/github-actions/browserstack@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/browserstack@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Run tests on Browserstack
         run: ./scripts/circleci/run-browserstack-tests.sh
diff --git a/.github/workflows/deploy-dev-app-main-push.yml b/.github/workflows/deploy-dev-app-main-push.yml
index 66c08c9555df..77e678c04fbf 100644
--- a/.github/workflows/deploy-dev-app-main-push.yml
+++ b/.github/workflows/deploy-dev-app-main-push.yml
@@ -17,13 +17,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
 
diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml
index 4aaba058fa0f..0f01b72264fb 100644
--- a/.github/workflows/dev-infra.yml
+++ b/.github/workflows/dev-infra.yml
@@ -12,13 +12,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3.0.2
-      - uses: angular/dev-infra/github-actions/commit-message-based-labels@359350bbc10aab1bac85d0eec61a53377078ab82
+      - uses: angular/dev-infra/github-actions/commit-message-based-labels@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
   post_approval_changes:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3.0.2
-      - uses: angular/dev-infra/github-actions/post-approval-changes@359350bbc10aab1bac85d0eec61a53377078ab82
+      - uses: angular/dev-infra/github-actions/post-approval-changes@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/google-internal-tests.yml b/.github/workflows/google-internal-tests.yml
index ba9ed6831056..d7378e03f932 100644
--- a/.github/workflows/google-internal-tests.yml
+++ b/.github/workflows/google-internal-tests.yml
@@ -13,7 +13,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3.1.0
-      - uses: angular/dev-infra/github-actions/google-internal-tests@359350bbc10aab1bac85d0eec61a53377078ab82
+      - uses: angular/dev-infra/github-actions/google-internal-tests@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           run-tests-guide-url: http://go/angular-material-presubmit
           github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/pr.material-aio.yml b/.github/workflows/pr.material-aio.yml
index 79e87d497071..05053cadba24 100644
--- a/.github/workflows/pr.material-aio.yml
+++ b/.github/workflows/pr.material-aio.yml
@@ -26,7 +26,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Linting
@@ -36,7 +36,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Direct Production Build (deploy usage)
@@ -48,7 +48,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Tests
@@ -65,7 +65,7 @@ jobs:
     runs-on: ubuntu-22.04 # Note, fails on Ubuntu 24.04. see https://github.com/actions/runner-images/issues/10636
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --immutable
       - name: Execute Lighthouse Audit
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 428cf4e4c19b..b8a5855ada5f 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -19,7 +19,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Install node modules
@@ -53,13 +53,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Check API Goldens
@@ -69,13 +69,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run e2e tests
@@ -85,13 +85,13 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run integration tests
@@ -104,13 +104,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run linker AOT tests
@@ -120,13 +120,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run linker JIT tests
@@ -136,13 +136,13 @@ jobs:
     runs-on: ubuntu-latest-16core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run tests
@@ -152,13 +152,13 @@ jobs:
     runs-on: ubuntu-latest-16core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Run tests
@@ -168,13 +168,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Build and Verify Release Output
@@ -197,7 +197,7 @@ jobs:
       CI_RUNNER_NUMBER: ${{ github.run_id }}
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
           # Checking out the pull request commit is intended here as we need to run the changed code tests.
@@ -205,8 +205,8 @@ jobs:
       - name: Install node modules
         run: yarn install --frozen-lockfile
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Browserstack Variables
-        uses: angular/dev-infra/github-actions/browserstack@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/browserstack@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Run tests on Browserstack
         run: ./scripts/circleci/run-browserstack-tests.sh
diff --git a/.github/workflows/preview-build-dev-app.yml b/.github/workflows/preview-build-dev-app.yml
index ad934b43f55b..12d5cd9a1262 100644
--- a/.github/workflows/preview-build-dev-app.yml
+++ b/.github/workflows/preview-build-dev-app.yml
@@ -23,18 +23,18 @@ jobs:
       (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'dev-app preview'))
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
 
       # Build the web package
       - run: bazel build //src/dev-app:web_package --symlink_prefix=dist/
 
-      - uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@359350bbc10aab1bac85d0eec61a53377078ab82
+      - uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           workflow-artifact-name: 'dev-app'
           pull-number: '${{github.event.pull_request.number}}'
diff --git a/.github/workflows/preview-deploy-dev-app.yml b/.github/workflows/preview-deploy-dev-app.yml
index 010adfb6b4e3..166d7c61cefb 100644
--- a/.github/workflows/preview-deploy-dev-app.yml
+++ b/.github/workflows/preview-deploy-dev-app.yml
@@ -33,7 +33,7 @@ jobs:
           npx -y firebase-tools@latest target:clear --project ${{env.PREVIEW_PROJECT}} hosting dev-app
           npx -y firebase-tools@latest target:apply --project ${{env.PREVIEW_PROJECT}} hosting dev-app ${{env.PREVIEW_SITE}}
 
-      - uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@359350bbc10aab1bac85d0eec61a53377078ab82
+      - uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           github-token: '${{secrets.GITHUB_TOKEN}}'
           workflow-artifact-name: 'dev-app'
diff --git a/.github/workflows/scheduled-ci.yml b/.github/workflows/scheduled-ci.yml
index 2282de9da1ca..33f89596c323 100644
--- a/.github/workflows/scheduled-ci.yml
+++ b/.github/workflows/scheduled-ci.yml
@@ -19,13 +19,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setting up Angular snapshot builds
         # Angular snapshots must be set up first so that the yarn install properly
         # updates the yarn.lock as expected with the changes
@@ -44,13 +44,13 @@ jobs:
     runs-on: ubuntu-latest-4core
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       - name: Setup Bazel
-        uses: angular/dev-infra/github-actions/bazel/setup@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/setup@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setup Bazel RBE
-        uses: angular/dev-infra/github-actions/bazel/configure-remote@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/bazel/configure-remote@8a438a3bdc519880d78b5ac92b62bfe688deb058
       - name: Setting up Angular snapshot builds
         # Angular snapshots must be set up first so that the yarn install properly
         # updates the yarn.lock as expected with the changes
@@ -71,7 +71,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Initialize environment
-        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@359350bbc10aab1bac85d0eec61a53377078ab82
+        uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@8a438a3bdc519880d78b5ac92b62bfe688deb058
         with:
           cache-node-modules: true
       # See: https://github.com/puppeteer/puppeteer/pull/13196 and
diff --git a/material.angular.io/WORKSPACE.bazel b/material.angular.io/WORKSPACE.bazel
index 9dec9614ea1b..5402335f9926 100644
--- a/material.angular.io/WORKSPACE.bazel
+++ b/material.angular.io/WORKSPACE.bazel
@@ -46,9 +46,9 @@ http_archive(
 
 http_archive(
   name = "dev-infra",
-  strip_prefix = "dev-infra-359350bbc10aab1bac85d0eec61a53377078ab82",
-  sha256 = "65d9978854686d802df180ca3812080e9acbf8cedafcb8999508457690ec735e",
-  url = "https://github.com/angular/dev-infra/archive/359350bbc10aab1bac85d0eec61a53377078ab82/359350bbc10aab1bac85d0eec61a53377078ab82.tar.gz",
+  strip_prefix = "dev-infra-8a438a3bdc519880d78b5ac92b62bfe688deb058",
+  sha256 = "2e75c26ba9f678de8496f05a10470d62a398bad05f6b64864bbed5dc304a6f4e",
+  url = "https://github.com/angular/dev-infra/archive/8a438a3bdc519880d78b5ac92b62bfe688deb058/8a438a3bdc519880d78b5ac92b62bfe688deb058.tar.gz",
 )
 
 load("@dev-infra//bazel/browsers:browser_repositories.bzl", "browser_repositories")

From e66545b60b86f545838b50a683a97a0d372e72f3 Mon Sep 17 00:00:00 2001
From: DivisionByZero <leyla.jaehnig@gmx.de>
Date: Tue, 11 Feb 2025 23:26:42 +0100
Subject: [PATCH 59/91] docs(dialog): fix typo (#30419)

(cherry picked from commit 20083416967308916d2b3f81bf95606b45dbdb0b)
---
 src/material/dialog/testing/dialog-harness.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/material/dialog/testing/dialog-harness.ts b/src/material/dialog/testing/dialog-harness.ts
index 6f456684978d..f7df99492359 100644
--- a/src/material/dialog/testing/dialog-harness.ts
+++ b/src/material/dialog/testing/dialog-harness.ts
@@ -83,7 +83,7 @@ export class MatDialogHarness
     await (await this.host()).sendKeys(TestKey.ESCAPE);
   }
 
-  /** Gets te dialog's text. */
+  /** Gets the dialog's text. */
   async getText() {
     return (await this.host()).text();
   }

From 72482406cdf11d921d81850a6114853a8ccdc3f5 Mon Sep 17 00:00:00 2001
From: Joey Perrott <josephperrott@gmail.com>
Date: Tue, 11 Feb 2025 15:45:08 -0700
Subject: [PATCH 60/91] ci: begin checking licenses of upstream dependencies to
 ensure they are approved (#29262)

Begin checking upstream dependency licenses.

(cherry picked from commit ed647165143bae38e5d255054765fd54ba2c65be)
---
 .github/workflows/pr.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index b8a5855ada5f..5624dd93c83b 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -64,6 +64,8 @@ jobs:
         run: yarn install --frozen-lockfile
       - name: Check API Goldens
         run: yarn bazel test tools/public_api_guard/...
+      - name: Check Package Licenses
+        uses: angular/dev-infra/github-actions/linting/licenses@515b575bd6650a12353b6039b618cdb808280ad7
 
   e2e:
     runs-on: ubuntu-latest

From 27a2131a0be5d843ef517695bc9dbca2b7f56864 Mon Sep 17 00:00:00 2001
From: Angular Robot <angular-robot@google.com>
Date: Wed, 12 Feb 2025 05:03:02 -0700
Subject: [PATCH 61/91] build: update angular/dev-infra digest to 8a438a3
 (#30472)

(cherry picked from commit 7abd0ebbe48755ff5403a78820c7f6211ab4f56a)
---
 .github/workflows/pr.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 5624dd93c83b..476373ed14f8 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -65,7 +65,7 @@ jobs:
       - name: Check API Goldens
         run: yarn bazel test tools/public_api_guard/...
       - name: Check Package Licenses
-        uses: angular/dev-infra/github-actions/linting/licenses@515b575bd6650a12353b6039b618cdb808280ad7
+        uses: angular/dev-infra/github-actions/linting/licenses@8a438a3bdc519880d78b5ac92b62bfe688deb058
 
   e2e:
     runs-on: ubuntu-latest

From b363eaea36899f27df4966133a670feefb7b8f59 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Wed, 12 Feb 2025 18:14:20 +0100
Subject: [PATCH 62/91] fix(cdk/overlay): avoid issues with overlapping
 backdrop removals (#30474)

Prior to #30179 the overlay ref was able to handle multiple backdrops being removed at the same time, because we didn't need to retain any state about them, aside from the DOM node. After the switch to the renderer that's no longer the case, because we also retain the event cleanup functions. This is a problem, because they can end up overriding each other and causing events to be dropped incorrectly.

These changes move the backdrop-related logic to a new `BackdropRef` class to make the removal process easier to manage, clean up the `overlay-ref.ts` a bit and resolve the issue.

Fixes #30426.

(cherry picked from commit 643484111146cdbc5dec10605e944d189300281e)
---
 src/cdk/overlay/backdrop-ref.ts |  51 +++++++++++++++
 src/cdk/overlay/overlay-ref.ts  | 112 ++++++--------------------------
 2 files changed, 71 insertions(+), 92 deletions(-)
 create mode 100644 src/cdk/overlay/backdrop-ref.ts

diff --git a/src/cdk/overlay/backdrop-ref.ts b/src/cdk/overlay/backdrop-ref.ts
new file mode 100644
index 000000000000..8ef46654d263
--- /dev/null
+++ b/src/cdk/overlay/backdrop-ref.ts
@@ -0,0 +1,51 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.dev/license
+ */
+
+import {NgZone, Renderer2} from '@angular/core';
+
+/** Encapsulates the logic for attaching and detaching a backdrop. */
+export class BackdropRef {
+  readonly element: HTMLElement;
+  private _cleanupClick: (() => void) | undefined;
+  private _cleanupTransitionEnd: (() => void) | undefined;
+  private _fallbackTimeout: ReturnType<typeof setTimeout> | undefined;
+
+  constructor(
+    document: Document,
+    private _renderer: Renderer2,
+    private _ngZone: NgZone,
+    onClick: (event: MouseEvent) => void,
+  ) {
+    this.element = document.createElement('div');
+    this.element.classList.add('cdk-overlay-backdrop');
+    this._cleanupClick = _renderer.listen(this.element, 'click', onClick);
+  }
+
+  detach() {
+    this._ngZone.runOutsideAngular(() => {
+      const element = this.element;
+      clearTimeout(this._fallbackTimeout);
+      this._cleanupTransitionEnd?.();
+      this._cleanupTransitionEnd = this._renderer.listen(element, 'transitionend', this.dispose);
+      this._fallbackTimeout = setTimeout(this.dispose, 500);
+
+      // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
+      // In this case we make it unclickable and we try to remove it after a delay.
+      element.style.pointerEvents = 'none';
+      element.classList.remove('cdk-overlay-backdrop-showing');
+    });
+  }
+
+  dispose = () => {
+    clearTimeout(this._fallbackTimeout);
+    this._cleanupClick?.();
+    this._cleanupTransitionEnd?.();
+    this._cleanupClick = this._cleanupTransitionEnd = this._fallbackTimeout = undefined;
+    this.element.remove();
+  };
+}
diff --git a/src/cdk/overlay/overlay-ref.ts b/src/cdk/overlay/overlay-ref.ts
index 7eca1b8f182f..d3cf30439fe7 100644
--- a/src/cdk/overlay/overlay-ref.ts
+++ b/src/cdk/overlay/overlay-ref.ts
@@ -28,6 +28,7 @@ import {OverlayConfig} from './overlay-config';
 import {coerceCssPixelValue, coerceArray} from '@angular/cdk/coercion';
 import {PositionStrategy} from './position/position-strategy';
 import {ScrollStrategy} from './scroll';
+import {BackdropRef} from './backdrop-ref';
 
 /** An object where all of its properties cannot be written. */
 export type ImmutableObject<T> = {
@@ -39,16 +40,13 @@ export type ImmutableObject<T> = {
  * Used to manipulate or dispose of said overlay.
  */
 export class OverlayRef implements PortalOutlet {
-  private _backdropElement: HTMLElement | null = null;
-  private _backdropTimeout: ReturnType<typeof setTimeout> | undefined;
   private readonly _backdropClick = new Subject<MouseEvent>();
   private readonly _attachments = new Subject<void>();
   private readonly _detachments = new Subject<void>();
   private _positionStrategy: PositionStrategy | undefined;
   private _scrollStrategy: ScrollStrategy | undefined;
   private _locationChanges: SubscriptionLike = Subscription.EMPTY;
-  private _cleanupBackdropClick: (() => void) | undefined;
-  private _cleanupBackdropTransitionEnd: (() => void) | undefined;
+  private _backdropRef: BackdropRef | null = null;
 
   /**
    * Reference to the parent of the `_host` at the time it was detached. Used to restore
@@ -110,7 +108,7 @@ export class OverlayRef implements PortalOutlet {
 
   /** The overlay's backdrop HTML element. */
   get backdropElement(): HTMLElement | null {
-    return this._backdropElement;
+    return this._backdropRef?.element || null;
   }
 
   /**
@@ -265,7 +263,7 @@ export class OverlayRef implements PortalOutlet {
     }
 
     this._disposeScrollStrategy();
-    this._disposeBackdrop(this._backdropElement);
+    this._backdropRef?.dispose();
     this._locationChanges.unsubscribe();
     this._keyboardDispatcher.remove(this);
     this._portalOutlet.dispose();
@@ -276,8 +274,7 @@ export class OverlayRef implements PortalOutlet {
     this._outsideClickDispatcher.remove(this);
     this._host?.remove();
     this._afterNextRenderRef?.destroy();
-
-    this._previousHostParent = this._pane = this._host = null!;
+    this._previousHostParent = this._pane = this._host = this._backdropRef = null!;
 
     if (isAttached) {
       this._detachments.next();
@@ -432,41 +429,30 @@ export class OverlayRef implements PortalOutlet {
   private _attachBackdrop() {
     const showingClass = 'cdk-overlay-backdrop-showing';
 
-    this._backdropElement = this._document.createElement('div');
-    this._backdropElement.classList.add('cdk-overlay-backdrop');
+    this._backdropRef?.dispose();
+    this._backdropRef = new BackdropRef(this._document, this._renderer, this._ngZone, event => {
+      this._backdropClick.next(event);
+    });
 
     if (this._animationsDisabled) {
-      this._backdropElement.classList.add('cdk-overlay-backdrop-noop-animation');
+      this._backdropRef.element.classList.add('cdk-overlay-backdrop-noop-animation');
     }
 
     if (this._config.backdropClass) {
-      this._toggleClasses(this._backdropElement, this._config.backdropClass, true);
+      this._toggleClasses(this._backdropRef.element, this._config.backdropClass, true);
     }
 
     // Insert the backdrop before the pane in the DOM order,
     // in order to handle stacked overlays properly.
-    this._host.parentElement!.insertBefore(this._backdropElement, this._host);
-
-    // Forward backdrop clicks such that the consumer of the overlay can perform whatever
-    // action desired when such a click occurs (usually closing the overlay).
-    this._cleanupBackdropClick?.();
-    this._cleanupBackdropClick = this._renderer.listen(
-      this._backdropElement,
-      'click',
-      (event: MouseEvent) => this._backdropClick.next(event),
-    );
+    this._host.parentElement!.insertBefore(this._backdropRef.element, this._host);
 
     // Add class to fade-in the backdrop after one frame.
     if (!this._animationsDisabled && typeof requestAnimationFrame !== 'undefined') {
       this._ngZone.runOutsideAngular(() => {
-        requestAnimationFrame(() => {
-          if (this._backdropElement) {
-            this._backdropElement.classList.add(showingClass);
-          }
-        });
+        requestAnimationFrame(() => this._backdropRef?.element.classList.add(showingClass));
       });
     } else {
-      this._backdropElement.classList.add(showingClass);
+      this._backdropRef.element.classList.add(showingClass);
     }
   }
 
@@ -485,42 +471,12 @@ export class OverlayRef implements PortalOutlet {
 
   /** Detaches the backdrop (if any) associated with the overlay. */
   detachBackdrop(): void {
-    const backdropToDetach = this._backdropElement;
-
-    if (!backdropToDetach) {
-      return;
-    }
-
     if (this._animationsDisabled) {
-      this._disposeBackdrop(backdropToDetach);
-      return;
+      this._backdropRef?.dispose();
+      this._backdropRef = null;
+    } else {
+      this._backdropRef?.detach();
     }
-
-    backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');
-
-    this._ngZone.runOutsideAngular(() => {
-      this._cleanupBackdropTransitionEnd?.();
-      this._cleanupBackdropTransitionEnd = this._renderer.listen(
-        backdropToDetach,
-        'transitionend',
-        (event: TransitionEvent) => {
-          this._disposeBackdrop(event.target as HTMLElement | null);
-        },
-      );
-    });
-
-    // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
-    // In this case we make it unclickable and we try to remove it after a delay.
-    backdropToDetach.style.pointerEvents = 'none';
-
-    // Run this outside the Angular zone because there's nothing that Angular cares about.
-    // If it were to run inside the Angular zone, every test that used Overlay would have to be
-    // either async or fakeAsync.
-    this._backdropTimeout = this._ngZone.runOutsideAngular(() =>
-      setTimeout(() => {
-        this._disposeBackdrop(backdropToDetach);
-      }, 500),
-    );
   }
 
   /** Toggles a single CSS class or an array of classes on an element. */
@@ -565,36 +521,8 @@ export class OverlayRef implements PortalOutlet {
   /** Disposes of a scroll strategy. */
   private _disposeScrollStrategy() {
     const scrollStrategy = this._scrollStrategy;
-
-    if (scrollStrategy) {
-      scrollStrategy.disable();
-
-      if (scrollStrategy.detach) {
-        scrollStrategy.detach();
-      }
-    }
-  }
-
-  /** Removes a backdrop element from the DOM. */
-  private _disposeBackdrop(backdrop: HTMLElement | null) {
-    this._cleanupBackdropClick?.();
-    this._cleanupBackdropTransitionEnd?.();
-
-    if (backdrop) {
-      backdrop.remove();
-
-      // It is possible that a new portal has been attached to this overlay since we started
-      // removing the backdrop. If that is the case, only clear the backdrop reference if it
-      // is still the same instance that we started to remove.
-      if (this._backdropElement === backdrop) {
-        this._backdropElement = null;
-      }
-    }
-
-    if (this._backdropTimeout) {
-      clearTimeout(this._backdropTimeout);
-      this._backdropTimeout = undefined;
-    }
+    scrollStrategy?.disable();
+    scrollStrategy?.detach?.();
   }
 }
 

From e8d6454e3aa8780ba599ce0e1d62270a0c6228cd Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Wed, 12 Feb 2025 18:21:17 +0100
Subject: [PATCH 63/91] fix(material/timepicker): allow scroll strategy to be
 customized (#30473) (#30479)

Adds an injection token to the timepicker that allows the scroll strategy to be customized, similar to other components.

Fixes #30421.
---
 src/material/timepicker/timepicker.ts         | 18 ++++++++++++++++--
 tools/public_api_guard/material/timepicker.md |  4 ++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/material/timepicker/timepicker.ts b/src/material/timepicker/timepicker.ts
index 2a32ca0837b9..b5ec977e6373 100644
--- a/src/material/timepicker/timepicker.ts
+++ b/src/material/timepicker/timepicker.ts
@@ -16,6 +16,7 @@ import {
   effect,
   ElementRef,
   inject,
+  InjectionToken,
   Injector,
   input,
   InputSignal,
@@ -41,7 +42,7 @@ import {
   MatOptionParentComponent,
 } from '@angular/material/core';
 import {Directionality} from '@angular/cdk/bidi';
-import {Overlay, OverlayRef} from '@angular/cdk/overlay';
+import {Overlay, OverlayRef, ScrollStrategy} from '@angular/cdk/overlay';
 import {TemplatePortal} from '@angular/cdk/portal';
 import {_getEventTarget} from '@angular/cdk/platform';
 import {ENTER, ESCAPE, hasModifierKey, TAB} from '@angular/cdk/keycodes';
@@ -62,6 +63,18 @@ export interface MatTimepickerSelected<D> {
   source: MatTimepicker<D>;
 }
 
+/** Injection token used to configure the behavior of the timepicker dropdown while scrolling. */
+export const MAT_TIMEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(
+  'MAT_TIMEPICKER_SCROLL_STRATEGY',
+  {
+    providedIn: 'root',
+    factory: () => {
+      const overlay = inject(Overlay);
+      return () => overlay.scrollStrategies.reposition();
+    },
+  },
+);
+
 /**
  * Renders out a listbox that can be used to select a time of day.
  * Intended to be used together with `MatTimepickerInput`.
@@ -101,6 +114,7 @@ export class MatTimepicker<D> implements OnDestroy, MatOptionParentComponent {
   private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});
   private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;
   private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;
+  private _scrollStrategyFactory = inject(MAT_TIMEPICKER_SCROLL_STRATEGY);
 
   private _isOpen = signal(false);
   private _activeDescendant = signal<string | null>(null);
@@ -314,7 +328,7 @@ export class MatTimepicker<D> implements OnDestroy, MatOptionParentComponent {
 
     this._overlayRef = this._overlay.create({
       positionStrategy,
-      scrollStrategy: this._overlay.scrollStrategies.reposition(),
+      scrollStrategy: this._scrollStrategyFactory(),
       direction: this._dir || 'ltr',
       hasBackdrop: false,
     });
diff --git a/tools/public_api_guard/material/timepicker.md b/tools/public_api_guard/material/timepicker.md
index 528d217bd53f..798f25f17951 100644
--- a/tools/public_api_guard/material/timepicker.md
+++ b/tools/public_api_guard/material/timepicker.md
@@ -17,6 +17,7 @@ import { MatOptionParentComponent } from '@angular/material/core';
 import { ModelSignal } from '@angular/core';
 import { OnDestroy } from '@angular/core';
 import { OutputEmitterRef } from '@angular/core';
+import { ScrollStrategy } from '@angular/cdk/overlay';
 import { Signal } from '@angular/core';
 import { TemplateRef } from '@angular/core';
 import { ValidationErrors } from '@angular/forms';
@@ -25,6 +26,9 @@ import { Validator } from '@angular/forms';
 // @public
 export const MAT_TIMEPICKER_CONFIG: InjectionToken<MatTimepickerConfig>;
 
+// @public
+export const MAT_TIMEPICKER_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;
+
 // @public
 export class MatTimepicker<D> implements OnDestroy, MatOptionParentComponent {
     constructor();

From b8c1e3a2b2649f3db973b57ecdbe35f6d37ce212 Mon Sep 17 00:00:00 2001
From: Miles Malerba <mmalerba@google.com>
Date: Wed, 12 Feb 2025 17:36:03 +0000
Subject: [PATCH 64/91] release: cut the v19.1.4 release

---
 CHANGELOG.md | 19 +++++++++++++++++++
 package.json |  2 +-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e7e04a67421..e4bd71ee38f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,22 @@
+<a name="19.1.4"></a>
+# 19.1.4 "wattle-lute" (2025-02-12)
+### cdk
+| Commit | Type | Description |
+| -- | -- | -- |
+| [b363eaea36](https://github.com/angular/components/commit/b363eaea36899f27df4966133a670feefb7b8f59) | fix | **overlay:** avoid issues with overlapping backdrop removals ([#30474](https://github.com/angular/components/pull/30474)) |
+| [45e3e725e6](https://github.com/angular/components/commit/45e3e725e6d9b3c31b447b80f4c2698ac575abd9) | fix | **table:** memory leak when no rows are sticky ([#30461](https://github.com/angular/components/pull/30461)) |
+### material
+| Commit | Type | Description |
+| -- | -- | -- |
+| [e8d6454e3a](https://github.com/angular/components/commit/e8d6454e3aa8780ba599ce0e1d62270a0c6228cd) | fix | **timepicker:** allow scroll strategy to be customized ([#30473](https://github.com/angular/components/pull/30473)) ([#30479](https://github.com/angular/components/pull/30479)) |
+| [9b323df478](https://github.com/angular/components/commit/9b323df47801bef574963193c065e37df3c94c44) | perf | **tooltip:** Defer injection of injectables not needed until tooltip is shown. ([#30440](https://github.com/angular/components/pull/30440)) |
+### multiple
+| Commit | Type | Description |
+| -- | -- | -- |
+| [0ac0290bb9](https://github.com/angular/components/commit/0ac0290bb98f7ed14fd39fd1797980a7245e6b74) | perf | Don't double-inject the style loader. ([#30467](https://github.com/angular/components/pull/30467)) |
+
+<!-- CHANGELOG SPLIT MARKER -->
+
 <a name="19.1.3"></a>
 # 19.1.3 "plastic-wombat" (2025-02-05)
 ### material
diff --git a/package.json b/package.json
index cfb6e71a5583..abcc0d49dc75 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.3",
+  "version": "19.1.4",
   "dependencies": {
     "@angular/animations": "^19.1.3",
     "@angular/common": "^19.1.3",

From b3ab7c2eb6652c3a294cb866b2f3d09f6ef4152d Mon Sep 17 00:00:00 2001
From: Alan Agius <alanagius@google.com>
Date: Thu, 13 Feb 2025 14:02:35 +0100
Subject: [PATCH 65/91] build: add missing `packageGroup` fields and packages
 in `package.json` (#30486)

This commit fixes multiple `package.json` files by adding the missing `packageGroup` field. Additionally, it ensures that all required packages are included within `packageGroup`. These updates are necessary because the affected packages have peer dependencies on `@angular/cdk` or `@angular/material`, and updating them individually.

(cherry picked from commit 2fb7836227407a99153f17dbd642e7128dee72d7)
---
 packages.bzl                               | 21 +++++++++++++++++++--
 src/cdk-experimental/package.json          |  3 +++
 src/cdk/package.json                       |  5 +----
 src/material-date-fns-adapter/package.json |  6 +-----
 src/material-experimental/package.json     |  3 +++
 src/material-luxon-adapter/package.json    |  6 +-----
 src/material-moment-adapter/package.json   |  6 +-----
 src/material/package.json                  |  8 +-------
 8 files changed, 30 insertions(+), 28 deletions(-)

diff --git a/packages.bzl b/packages.bzl
index 20e8327af100..71734420cc6f 100644
--- a/packages.bzl
+++ b/packages.bzl
@@ -4,10 +4,27 @@
 TSLIB_PACKAGE_VERSION = "^2.3.0"
 RXJS_PACKAGE_VERSION = "^6.5.3 || ^7.4.0"
 
+# Packages which are versioned together on npm
+ANGULAR_COMPONENTS_SCOPED_PACKAGES = ["@angular/%s" % p for p in [
+    "material",
+    "cdk",
+    "cdk-experimental",
+    "material-experimental",
+    "material-luxon-adapter",
+    "material-moment-adapter",
+    "material-date-fns-adapter",
+]]
+
+PKG_GROUP_REPLACEMENTS = {
+    "\"NG_UPDATE_PACKAGE_GROUP\"": """[
+      %s
+    ]""" % ",\n      ".join(["\"%s\"" % s for s in ANGULAR_COMPONENTS_SCOPED_PACKAGES]),
+}
+
 # Each placeholder is used to stamp versions during the build process, replacing the key with its
 # value pair. These replacements occur during building of `npm_package` and `ng_package` stamping in
 # the peer dependencies and versions, primarily in `package.json`s.
-NPM_PACKAGE_SUBSTITUTIONS = {
+NPM_PACKAGE_SUBSTITUTIONS = dict(PKG_GROUP_REPLACEMENTS, **{
     # Peer dependency version on the Angular framework.
     "0.0.0-NG": "{STABLE_FRAMEWORK_PEER_DEP_RANGE}",
     # Version of `tslib`
@@ -16,7 +33,7 @@ NPM_PACKAGE_SUBSTITUTIONS = {
     "0.0.0-PLACEHOLDER": "{STABLE_PROJECT_VERSION}",
     # Version of `rxjs`
     "0.0.0-RXJS": RXJS_PACKAGE_VERSION,
-}
+})
 
 NO_STAMP_NPM_PACKAGE_SUBSTITUTIONS = dict(NPM_PACKAGE_SUBSTITUTIONS, **{
     # When building NPM packages for tests (where stamping is disabled),
diff --git a/src/cdk-experimental/package.json b/src/cdk-experimental/package.json
index c4555cb78b43..e7d6dc18b7f4 100644
--- a/src/cdk-experimental/package.json
+++ b/src/cdk-experimental/package.json
@@ -18,5 +18,8 @@
   "dependencies": {
     "tslib": "0.0.0-TSLIB"
   },
+  "ng-update": {
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
+  },
   "sideEffects": false
 }
diff --git a/src/cdk/package.json b/src/cdk/package.json
index 53b816beeea2..677bc670f3cb 100644
--- a/src/cdk/package.json
+++ b/src/cdk/package.json
@@ -58,10 +58,7 @@
   "schematics": "./schematics/collection.json",
   "ng-update": {
     "migrations": "./schematics/migration.json",
-    "packageGroup": [
-      "@angular/material",
-      "@angular/cdk"
-    ]
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
   },
   "sideEffects": false
 }
diff --git a/src/material-date-fns-adapter/package.json b/src/material-date-fns-adapter/package.json
index 30ede87647fb..56a35b9b0652 100644
--- a/src/material-date-fns-adapter/package.json
+++ b/src/material-date-fns-adapter/package.json
@@ -20,11 +20,7 @@
     "tslib": "0.0.0-TSLIB"
   },
   "ng-update": {
-    "packageGroup": [
-      "@angular/material",
-      "@angular/cdk",
-      "@angular/material-date-fns-adapter"
-    ]
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
   },
   "schematics": "./schematics/collection.json",
   "sideEffects": false
diff --git a/src/material-experimental/package.json b/src/material-experimental/package.json
index 7c65bb269028..3f033ed69aa1 100644
--- a/src/material-experimental/package.json
+++ b/src/material-experimental/package.json
@@ -28,5 +28,8 @@
   "dependencies": {
     "tslib": "0.0.0-TSLIB"
   },
+  "ng-update": {
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
+  },
   "sideEffects": false
 }
diff --git a/src/material-luxon-adapter/package.json b/src/material-luxon-adapter/package.json
index 1985174a2e3b..633b572ed8ea 100644
--- a/src/material-luxon-adapter/package.json
+++ b/src/material-luxon-adapter/package.json
@@ -20,11 +20,7 @@
     "tslib": "0.0.0-TSLIB"
   },
   "ng-update": {
-    "packageGroup": [
-      "@angular/material",
-      "@angular/cdk",
-      "@angular/material-luxon-adapter"
-    ]
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
   },
   "schematics": "./schematics/collection.json",
   "sideEffects": false
diff --git a/src/material-moment-adapter/package.json b/src/material-moment-adapter/package.json
index bed3e640e6d8..db50144ef84c 100644
--- a/src/material-moment-adapter/package.json
+++ b/src/material-moment-adapter/package.json
@@ -20,11 +20,7 @@
     "tslib": "0.0.0-TSLIB"
   },
   "ng-update": {
-    "packageGroup": [
-      "@angular/material",
-      "@angular/cdk",
-      "@angular/material-moment-adapter"
-    ]
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
   },
   "schematics": "./schematics/collection.json",
   "sideEffects": false
diff --git a/src/material/package.json b/src/material/package.json
index 93363a668c99..cc940843ddd3 100644
--- a/src/material/package.json
+++ b/src/material/package.json
@@ -70,13 +70,7 @@
   "schematics": "./schematics/collection.json",
   "ng-update": {
     "migrations": "./schematics/migration.json",
-    "packageGroup": [
-      "@angular/material",
-      "@angular/cdk",
-      "@angular/material-moment-adapter",
-      "@angular/material-luxon-adapter",
-      "@angular/material-date-fns-adapter"
-    ]
+    "packageGroup": "NG_UPDATE_PACKAGE_GROUP"
   },
   "sideEffects": false
 }

From 0163b38959d14307170a37af7f26fa5ac2563856 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Thu, 13 Feb 2025 14:27:23 +0100
Subject: [PATCH 66/91] build: move license check to lint job (#30489)

The license check was in the API golden job which seems unintentional. These changes move it into the lint job.

(cherry picked from commit 48058ff832d133078ca10c64f7674900e9769526)
---
 .github/workflows/pr.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 476373ed14f8..eb25798036f3 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -44,6 +44,8 @@ jobs:
         run: yarn -s ts-circular-deps:check
       - name: Check code format
         run: yarn ng-dev format changed --check ${{ github.event.pull_request.base.sha }}
+      - name: Check Package Licenses
+        uses: angular/dev-infra/github-actions/linting/licenses@8a438a3bdc519880d78b5ac92b62bfe688deb058
       # Commit message check is last intentionally, because the caretaker can fix it
       # during merge, while other lint failures have to be resolved by the PR author.
       - name: Check commit message
@@ -64,8 +66,6 @@ jobs:
         run: yarn install --frozen-lockfile
       - name: Check API Goldens
         run: yarn bazel test tools/public_api_guard/...
-      - name: Check Package Licenses
-        uses: angular/dev-infra/github-actions/linting/licenses@8a438a3bdc519880d78b5ac92b62bfe688deb058
 
   e2e:
     runs-on: ubuntu-latest

From c24b1795550c1a591f0d19123951c6a83cd6c554 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Thu, 13 Feb 2025 11:22:35 -0500
Subject: [PATCH 67/91] perf(cdk/table): Short circuit _removeStickyStyle calls
 against elements with no sticky styles (#30471)

(cherry picked from commit 7f9970fb1880d498e6dfe0edbe35e2e31b3a12d5)
---
 src/cdk/table/sticky-styler.ts | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/cdk/table/sticky-styler.ts b/src/cdk/table/sticky-styler.ts
index 0651e76dd91f..8592a9278aa7 100644
--- a/src/cdk/table/sticky-styler.ts
+++ b/src/cdk/table/sticky-styler.ts
@@ -329,6 +329,10 @@ export class StickyStyler {
    * sticky position if there are no more directions.
    */
   _removeStickyStyle(element: HTMLElement, stickyDirections: StickyDirection[]) {
+    if (!element.classList.contains(this._stickCellCss)) {
+      return;
+    }
+
     for (const dir of stickyDirections) {
       element.style[dir] = '';
       element.classList.remove(this._borderCellCss[dir]);

From c2b363ea6b354560bb51c3783eb64595bda4e787 Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Thu, 13 Feb 2025 11:24:34 -0500
Subject: [PATCH 68/91] perf(material/radio): Optimize costly css selectors.
 (#30470)

Descendant selectors containing :state selectors as ancestors are slow as they
require the css engine to check all the way up to the dom root for matching elements.
Using child selectors instead limits the scope of these checks to just the direct parent element.

(cherry picked from commit 6bd31f978613bfdf49ca4f811708dd9893de6585)
---
 src/material/radio/_radio-common.scss | 53 ++++++++++++++-------------
 src/material/radio/radio.scss         |  6 +--
 2 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/src/material/radio/_radio-common.scss b/src/material/radio/_radio-common.scss
index 21688edc116f..20ce68945298 100644
--- a/src/material/radio/_radio-common.scss
+++ b/src/material/radio/_radio-common.scss
@@ -35,41 +35,41 @@ $_icon-size: 20px;
 
     @if ($is-interactive) {
       // MDC's hover indication comes from their ripple which we don't use.
-      &:hover .mdc-radio__native-control:not([disabled]):not(:focus) {
+      &:hover > .mdc-radio__native-control:not([disabled]):not(:focus) {
         & ~ .mdc-radio__background::before {
           opacity: 0.04;
           transform: scale(1);
         }
       }
 
-      &:hover .mdc-radio__native-control:not([disabled]) ~ .mdc-radio__background {
-        .mdc-radio__outer-circle {
+      &:hover > .mdc-radio__native-control:not([disabled]) ~ .mdc-radio__background {
+        > .mdc-radio__outer-circle {
           @include token-utils.use-tokens($tokens...) {
             @include token-utils.create-token-slot(border-color, unselected-hover-icon-color);
           }
         }
       }
 
-      &:hover .mdc-radio__native-control:enabled:checked + .mdc-radio__background {
-        .mdc-radio__outer-circle,
-        .mdc-radio__inner-circle {
+      &:hover > .mdc-radio__native-control:enabled:checked + .mdc-radio__background {
+        > .mdc-radio__outer-circle,
+        > .mdc-radio__inner-circle {
           @include token-utils.use-tokens($tokens...) {
             @include token-utils.create-token-slot(border-color, selected-hover-icon-color);
           }
         }
       }
 
-      &:active .mdc-radio__native-control:enabled:not(:checked) + .mdc-radio__background {
-        .mdc-radio__outer-circle {
+      &:active > .mdc-radio__native-control:enabled:not(:checked) + .mdc-radio__background {
+        > .mdc-radio__outer-circle {
           @include token-utils.use-tokens($tokens...) {
             @include token-utils.create-token-slot(border-color, unselected-pressed-icon-color);
           }
         }
       }
 
-      &:active .mdc-radio__native-control:enabled:checked + .mdc-radio__background {
-        .mdc-radio__outer-circle,
-        .mdc-radio__inner-circle {
+      &:active > .mdc-radio__native-control:enabled:checked + .mdc-radio__background {
+        > .mdc-radio__outer-circle,
+        > .mdc-radio__inner-circle {
           @include token-utils.use-tokens($tokens...) {
             @include token-utils.create-token-slot(border-color, selected-pressed-icon-color);
           }
@@ -152,11 +152,11 @@ $_icon-size: 20px;
       + .mdc-radio__background {
         transition: _enter-transition(opacity), _enter-transition(transform);
 
-        .mdc-radio__outer-circle {
+        > .mdc-radio__outer-circle {
           transition: _enter-transition(border-color);
         }
 
-        .mdc-radio__inner-circle {
+        > .mdc-radio__inner-circle {
           transition: _enter-transition(transform), _enter-transition(border-color);
         }
       }
@@ -172,7 +172,7 @@ $_icon-size: 20px;
 
     &:disabled {
       @include token-utils.use-tokens($tokens...) {
-        &:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle {
+        &:not(:checked) + .mdc-radio__background > .mdc-radio__outer-circle {
           @include token-utils.create-token-slot(border-color, disabled-unselected-icon-color);
           @include token-utils.create-token-slot(opacity, disabled-unselected-icon-opacity);
         }
@@ -180,8 +180,8 @@ $_icon-size: 20px;
         + .mdc-radio__background {
           cursor: default;
 
-          .mdc-radio__inner-circle,
-          .mdc-radio__outer-circle {
+          > .mdc-radio__inner-circle,
+          > .mdc-radio__outer-circle {
             @include token-utils.create-token-slot(border-color, disabled-selected-icon-color);
             @include token-utils.create-token-slot(opacity, disabled-selected-icon-opacity);
           }
@@ -191,21 +191,21 @@ $_icon-size: 20px;
 
     &:enabled {
       @include token-utils.use-tokens($tokens...) {
-        &:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle {
+        &:not(:checked) + .mdc-radio__background > .mdc-radio__outer-circle {
           @include token-utils.create-token-slot(border-color, unselected-icon-color);
         }
 
         &:checked + .mdc-radio__background {
-          .mdc-radio__outer-circle,
-          .mdc-radio__inner-circle {
+          > .mdc-radio__outer-circle,
+          > .mdc-radio__inner-circle {
             @include token-utils.create-token-slot(border-color, selected-icon-color);
           }
         }
 
         @if ($is-interactive) {
           &:focus:checked + .mdc-radio__background {
-            .mdc-radio__inner-circle,
-            .mdc-radio__outer-circle {
+            > .mdc-radio__inner-circle,
+            > .mdc-radio__outer-circle {
               @include token-utils.create-token-slot(border-color, selected-focus-icon-color);
             }
           }
@@ -213,7 +213,7 @@ $_icon-size: 20px;
       }
     }
 
-    &:checked + .mdc-radio__background .mdc-radio__inner-circle {
+    &:checked + .mdc-radio__background > .mdc-radio__inner-circle {
       transform: scale(0.5);
       transition: _enter-transition(transform), _enter-transition(border-color);
     }
@@ -224,16 +224,19 @@ $_icon-size: 20px;
       pointer-events: auto;
 
       @include token-utils.use-tokens($tokens...) {
-        .mdc-radio__native-control:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle {
+        // stylelint-disable selector-combinator-space-before
+        .mdc-radio__native-control:not(:checked) + .mdc-radio__background
+            > .mdc-radio__outer-circle {
           @include token-utils.create-token-slot(border-color, disabled-unselected-icon-color);
           @include token-utils.create-token-slot(opacity, disabled-unselected-icon-opacity);
         }
+        // stylelint-enable selector-combinator-space-before
 
         &:hover .mdc-radio__native-control:checked + .mdc-radio__background,
         .mdc-radio__native-control:checked:focus + .mdc-radio__background,
         .mdc-radio__native-control + .mdc-radio__background {
-          .mdc-radio__inner-circle,
-          .mdc-radio__outer-circle {
+          > .mdc-radio__inner-circle,
+          > .mdc-radio__outer-circle {
             @include token-utils.create-token-slot(border-color, disabled-selected-icon-color);
             @include token-utils.create-token-slot(opacity, disabled-selected-icon-opacity);
           }
diff --git a/src/material/radio/radio.scss b/src/material/radio/radio.scss
index a30c07154999..0c8416fba55a 100644
--- a/src/material/radio/radio.scss
+++ b/src/material/radio/radio.scss
@@ -50,7 +50,7 @@
     pointer-events: none;
     border-radius: 50%;
 
-    .mat-ripple-element {
+    > .mat-ripple-element {
       opacity: 0.14;
     }
 
@@ -62,8 +62,8 @@
   // We don't inherit the border focus style from MDC since we don't use their ripple.
   // Instead we need to replicate it here.
   @include token-utils.use-tokens(tokens-mdc-radio.$prefix, tokens-mdc-radio.get-token-slots()) {
-    .mdc-radio .mdc-radio__native-control:focus:enabled:not(:checked) {
-      & ~ .mdc-radio__background .mdc-radio__outer-circle {
+    .mdc-radio > .mdc-radio__native-control:focus:enabled:not(:checked) {
+      & ~ .mdc-radio__background > .mdc-radio__outer-circle {
         @include token-utils.create-token-slot(border-color, unselected-focus-icon-color);
       }
     }

From 96d7d87c801c6e0b6e8800b45331d97934f1761c Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 14 Feb 2025 08:50:59 +0100
Subject: [PATCH 69/91] fix(material/slide-toggle): rendering issue in Safari
 18.3 (#30490)

Fixes a rendering issue that was causing the icon inside the slide toggle to flicker or not display at all.

Fixes #30487.

(cherry picked from commit 657885e893f4693197d428c51bf74ec80f662f26)
---
 src/material/slide-toggle/slide-toggle.scss | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/material/slide-toggle/slide-toggle.scss b/src/material/slide-toggle/slide-toggle.scss
index c9754e7b04ad..161a2f7c4d98 100644
--- a/src/material/slide-toggle/slide-toggle.scss
+++ b/src/material/slide-toggle/slide-toggle.scss
@@ -457,6 +457,9 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
   width: 100%;
   z-index: 1;
 
+  // Works around a rendering issue in Safari 18.3 (see #30487).
+  transform: translateZ(0);
+
   @include token-utils.use-tokens($_mdc-slots...) {
     .mdc-switch--disabled.mdc-switch--unselected & {
       @include token-utils.create-token-slot(opacity, disabled-unselected-icon-opacity);

From 16593f1dcd0cc85f7795febb5ff334dec69a3632 Mon Sep 17 00:00:00 2001
From: Katie Noake <10712856+knoake@users.noreply.github.com>
Date: Fri, 14 Feb 2025 19:39:34 +0000
Subject: [PATCH 70/91] fix(material/snack-bar): snack-bar action button does
 not follow material guidelines (#27769)

Fixes a bug in the Angular Material snack-bar, where accent color is used for action
button color in light themes and grey is used in dark themes. This does not follow the
material design guidelines which recommend a tone of primary color is used in both light
and dark themes, and that the color should contrast with the background.

Fixes #13905

(cherry picked from commit 3d7f2714afd4a8acdbb292296a491b1992dc5088)
---
 src/material/core/tokens/m2/mat/_snack-bar.scss | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/material/core/tokens/m2/mat/_snack-bar.scss b/src/material/core/tokens/m2/mat/_snack-bar.scss
index 9c78d5087fbd..d9f650f73c1b 100644
--- a/src/material/core/tokens/m2/mat/_snack-bar.scss
+++ b/src/material/core/tokens/m2/mat/_snack-bar.scss
@@ -16,8 +16,12 @@ $prefix: (mat, snack-bar);
   $is-dark: inspection.get-theme-type($theme) == dark;
 
   @return (
-    button-color: if(
-        $is-dark, rgba(0, 0, 0, 0.87), inspection.get-theme-color($theme, accent, text))
+    button-color:
+      if(
+        $is-dark,
+        inspection.get-theme-color($theme, primary, 500),
+        inspection.get-theme-color($theme, primary, 100)
+      )
   );
 }
 

From 2eb6424b2331d1cf4ce873d5a270ee9af5adb9ab Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 18 Feb 2025 18:31:39 +0100
Subject: [PATCH 71/91] fix(material/paginator): disabled buttons not visible
 in high contrast mode (#30505)

#29379 changed the selector for disabled buttons from `[disabled]` to `[aria-disabled]`, however it didn't apply the same change to the high contrast styles which led to them being invisible in dark mode.

I've also improved the experience by styling the buttons as disabled in high contrast mode.

Fixes #30504.

(cherry picked from commit f2cf22987220ac087c665524708fd95f5da15119)
---
 src/material/paginator/paginator.scss | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/material/paginator/paginator.scss b/src/material/paginator/paginator.scss
index 39d8d9a801e6..ab3e9e9b06ec 100644
--- a/src/material/paginator/paginator.scss
+++ b/src/material/paginator/paginator.scss
@@ -131,17 +131,17 @@ $button-icon-size: 28px;
 
 @include cdk.high-contrast {
   // The disabled button icon has to be set explicitly since the selector is too specific.
-  .mat-mdc-icon-button[disabled] .mat-mdc-paginator-icon,
+  .mat-mdc-icon-button[aria-disabled] .mat-mdc-paginator-icon,
   .mat-mdc-paginator-icon {
     fill: currentColor;
-
-    // On Chromium browsers the `currentColor` blends in with the
-    // background for SVGs so we have to fall back to `CanvasText`.
-    fill: CanvasText;
   }
 
   .mat-mdc-paginator-range-actions .mat-mdc-icon-button {
     outline: solid 1px;
+
+    &[aria-disabled] {
+      color: GrayText;
+    }
   }
 }
 

From 76f28469f67c0e23dd99f716538aff6f45917c1d Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 18 Feb 2025 20:35:24 +0100
Subject: [PATCH 72/91] fix(material/tooltip): regression when injecting
 ViewContainerRef (#30500)

#30440 deferred the injection of some dependencies in the tooltip, including `ViewContainerRef`. This is problematic, because the act of injecting `ViewContainerRef` changes the shape of some internal data structures in the framework's runtime. As a result, hovering over a tooltip that has been hydrated will throw a runtime error because the structure from the server no longer matches the structure on the client.

Fixes #30498.

(cherry picked from commit 68b267dd59f3addf92a3b9f8ce9e8baa479df7f4)
---
 src/material/tooltip/tooltip.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/material/tooltip/tooltip.ts b/src/material/tooltip/tooltip.ts
index 194637274ae9..12259a2b9956 100644
--- a/src/material/tooltip/tooltip.ts
+++ b/src/material/tooltip/tooltip.ts
@@ -194,6 +194,7 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
   private _focusMonitor = inject(FocusMonitor);
   protected _dir = inject(Directionality);
   private _injector = inject(Injector);
+  private _viewContainerRef = inject(ViewContainerRef);
   private _defaultOptions = inject<MatTooltipDefaultOptions>(MAT_TOOLTIP_DEFAULT_OPTIONS, {
     optional: true,
   });
@@ -455,8 +456,7 @@ export class MatTooltip implements OnDestroy, AfterViewInit {
     const overlayRef = this._createOverlay(origin);
     this._detach();
     this._portal =
-      this._portal ||
-      new ComponentPortal(this._tooltipComponent, this._injector.get(ViewContainerRef));
+      this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);
     const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);
     instance._triggerElement = this._elementRef.nativeElement;
     instance._mouseLeaveHideDelay = this._hideDelay;

From 90ac6134d9bf3fdcb98a77a889641f1e89f8b84b Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Wed, 19 Feb 2025 08:47:47 +0100
Subject: [PATCH 73/91] fix(material/checkbox): ensure native control receives
 clicks (#30511)

The `input` element inside the checkbox was stacked under some other elements which might prevent clicks. These changes ensure it's stacked on top.

Fixes #30494.

(cherry picked from commit f0d6658263083fe8737a8ebd9299c90106faad8b)
---
 src/material/checkbox/_checkbox-common.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/material/checkbox/_checkbox-common.scss b/src/material/checkbox/_checkbox-common.scss
index 2a2392a96976..bf97e1c6fa09 100644
--- a/src/material/checkbox/_checkbox-common.scss
+++ b/src/material/checkbox/_checkbox-common.scss
@@ -49,6 +49,7 @@ $_fallback-size: 40px;
       padding: 0;
       opacity: 0;
       cursor: inherit;
+      z-index: 1;
 
       @include token-utils.use-tokens($prefix, $slots) {
         $layer-size: token-utils.get-token-variable(state-layer-size, $fallback: $_fallback-size);

From 719e67d2948d2a0e7a4c7f4fd8a87704fee5f5ce Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Wed, 19 Feb 2025 17:49:28 +0100
Subject: [PATCH 74/91] fix(cdk/drag-drop): avoid retaining destroyed items
 until next drag (#30514)

We have some logic that registers and de-registers the items on create/destroy. That logic only syncs the item with the internal `DragRef` once the next dragging starts which means that we might retain a destroyed item if another drag doesn't start.

These changes switch to always syncing the list when an item is removed.

I've also added some context around why things are set up as they are right now since it took a while to remember the reasoning.

Fixes #30506.

(cherry picked from commit 26765a4c7cbfd9c731b4550ac1adc109b623e098)
---
 src/cdk/drag-drop/directives/drop-list.ts | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/cdk/drag-drop/directives/drop-list.ts b/src/cdk/drag-drop/directives/drop-list.ts
index 1e6e6ff315e2..5e9c210d4c44 100644
--- a/src/cdk/drag-drop/directives/drop-list.ts
+++ b/src/cdk/drag-drop/directives/drop-list.ts
@@ -219,6 +219,8 @@ export class CdkDropList<T = any> implements OnDestroy {
   addItem(item: CdkDrag): void {
     this._unsortedItems.add(item);
 
+    // Only sync the items while dragging since this method is
+    // called when items are being initialized one-by-one.
     if (this._dropListRef.isDragging()) {
       this._syncItemsWithRef();
     }
@@ -228,9 +230,8 @@ export class CdkDropList<T = any> implements OnDestroy {
   removeItem(item: CdkDrag): void {
     this._unsortedItems.delete(item);
 
-    if (this._dropListRef.isDragging()) {
-      this._syncItemsWithRef();
-    }
+    // This method might be called on destroy so we always want to sync with the ref.
+    this._syncItemsWithRef();
   }
 
   /** Gets the registered items in the list, sorted by their position in the DOM. */

From 83e6d278eb2662aa95b681202c103f85b65b3d65 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@abv.bg>
Date: Wed, 19 Feb 2025 18:04:33 +0000
Subject: [PATCH 75/91] release: cut the v19.1.5 release

---
 CHANGELOG.md | 19 +++++++++++++++++++
 package.json |  2 +-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e4bd71ee38f2..1125c6c23c1c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,22 @@
+<a name="19.1.5"></a>
+# 19.1.5 "bromine-bread" (2025-02-19)
+### cdk
+| Commit | Type | Description |
+| -- | -- | -- |
+| [719e67d29](https://github.com/angular/components/commit/719e67d2948d2a0e7a4c7f4fd8a87704fee5f5ce) | fix | **drag-drop:** avoid retaining destroyed items until next drag ([#30514](https://github.com/angular/components/pull/30514)) |
+| [c24b17955](https://github.com/angular/components/commit/c24b1795550c1a591f0d19123951c6a83cd6c554) | perf | **table:** Short circuit _removeStickyStyle calls against elements with no sticky styles ([#30471](https://github.com/angular/components/pull/30471)) |
+### material
+| Commit | Type | Description |
+| -- | -- | -- |
+| [90ac6134d](https://github.com/angular/components/commit/90ac6134d9bf3fdcb98a77a889641f1e89f8b84b) | fix | **checkbox:** ensure native control receives clicks ([#30511](https://github.com/angular/components/pull/30511)) |
+| [2eb6424b2](https://github.com/angular/components/commit/2eb6424b2331d1cf4ce873d5a270ee9af5adb9ab) | fix | **paginator:** disabled buttons not visible in high contrast mode ([#30505](https://github.com/angular/components/pull/30505)) |
+| [96d7d87c8](https://github.com/angular/components/commit/96d7d87c801c6e0b6e8800b45331d97934f1761c) | fix | **slide-toggle:** rendering issue in Safari 18.3 ([#30490](https://github.com/angular/components/pull/30490)) |
+| [16593f1dc](https://github.com/angular/components/commit/16593f1dcd0cc85f7795febb5ff334dec69a3632) | fix | **snack-bar:** snack-bar action button does not follow material guidelines ([#27769](https://github.com/angular/components/pull/27769)) |
+| [76f28469f](https://github.com/angular/components/commit/76f28469f67c0e23dd99f716538aff6f45917c1d) | fix | **tooltip:** regression when injecting ViewContainerRef ([#30500](https://github.com/angular/components/pull/30500)) |
+| [c2b363ea6](https://github.com/angular/components/commit/c2b363ea6b354560bb51c3783eb64595bda4e787) | perf | **radio:** Optimize costly css selectors. ([#30470](https://github.com/angular/components/pull/30470)) |
+
+<!-- CHANGELOG SPLIT MARKER -->
+
 <a name="19.1.4"></a>
 # 19.1.4 "wattle-lute" (2025-02-12)
 ### cdk
diff --git a/package.json b/package.json
index abcc0d49dc75..cfb88715509f 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "ci-notify-slack-failure": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/circleci/notify-slack-job-failure.mts",
     "prepare": "husky"
   },
-  "version": "19.1.4",
+  "version": "19.1.5",
   "dependencies": {
     "@angular/animations": "^19.1.3",
     "@angular/common": "^19.1.3",

From ee3360fa38bcb445d6986a078c34b7b7834b8651 Mon Sep 17 00:00:00 2001
From: Karan Mistry <mistrykaran91@gmail.com>
Date: Thu, 20 Feb 2025 00:01:24 +0530
Subject: [PATCH 76/91] fix(cdk/stepper): Linear stepper after initialization
 navigating to previous step issue (#30323)

Set the step as interacted if its linear step and is not the first step.

#15449

(cherry picked from commit 5233a43d871fc09b302937286ecafff54e28fe14)
---
 src/cdk/stepper/stepper.ts           | 10 ++++
 src/material/stepper/stepper.spec.ts | 76 ++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+)

diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts
index 95f08f9942a3..047bf74cb8b2 100644
--- a/src/cdk/stepper/stepper.ts
+++ b/src/cdk/stepper/stepper.ts
@@ -402,6 +402,16 @@ export class CdkStepper implements AfterContentInit, AfterViewInit, OnDestroy {
     if (!this._isValidIndex(this._selectedIndex)) {
       this._selectedIndex = 0;
     }
+
+    // For linear step and selected index is greater than zero,
+    // set all the previous steps to interacted so that we can navigate to previous steps.
+    if (this.linear && this._selectedIndex > 0) {
+      const visitedSteps = this.steps.toArray().slice(0, this._selectedIndex);
+
+      for (const step of visitedSteps) {
+        step._markAsInteracted();
+      }
+    }
   }
 
   ngOnDestroy() {
diff --git a/src/material/stepper/stepper.spec.ts b/src/material/stepper/stepper.spec.ts
index ea1d4a38050e..a3d15430d4c4 100644
--- a/src/material/stepper/stepper.spec.ts
+++ b/src/material/stepper/stepper.spec.ts
@@ -917,6 +917,27 @@ describe('MatStepper', () => {
     });
   });
 
+  describe('linear stepper with form already filled and on to the last step', () => {
+    let fixture: ComponentFixture<LinearMatVerticalStepperAppForAlreadyFilledForm>;
+    let stepper: MatStepper;
+
+    beforeEach(() => {
+      fixture = createComponent(LinearMatVerticalStepperAppForAlreadyFilledForm);
+      fixture.detectChanges();
+      stepper = fixture.debugElement.query(By.directive(MatStepper))!.componentInstance;
+    });
+
+    it('should navigate to previous steps', () => {
+      expect(stepper.selectedIndex).toBe(2);
+
+      stepper.previous();
+      expect(stepper.selectedIndex).toBe(1);
+
+      stepper.previous();
+      expect(stepper.selectedIndex).toBe(0);
+    });
+  });
+
   describe('linear stepper with no `stepControl`', () => {
     let noStepControlFixture: ComponentFixture<SimpleStepperWithoutStepControl>;
     beforeEach(() => {
@@ -1989,6 +2010,61 @@ class SimplePreselectedMatHorizontalStepperApp {
   index = 0;
 }
 
+@Component({
+  template: `
+    <mat-stepper linear [selectedIndex]="selectedIndex()">
+      <mat-step [stepControl]="oneGroup">
+        <form [formGroup]="oneGroup">
+          <ng-template matStepLabel>Step one</ng-template>
+          <input formControlName="oneCtrl" required>
+          <div>
+            <button matStepperPrevious>Back</button>
+            <button matStepperNext>Next</button>
+          </div>
+        </form>
+      </mat-step>
+      <mat-step [stepControl]="twoGroup">
+        <form [formGroup]="twoGroup">
+          <ng-template matStepLabel>Step two</ng-template>
+          <input formControlName="twoCtrl" required>
+          <div>
+            <button matStepperPrevious>Back</button>
+            <button matStepperNext>Next</button>
+          </div>
+        </form>
+      </mat-step>
+      <mat-step [stepControl]="threeGroup" optional>
+        <form [formGroup]="threeGroup">
+          <ng-template matStepLabel>Step two</ng-template>
+          <input formControlName="threeCtrl">
+          <div>
+            <button matStepperPrevious>Back</button>
+            <button matStepperNext>Next</button>
+          </div>
+        </form>
+      </mat-step>
+      <mat-step>
+        Done
+      </mat-step>
+    </mat-stepper>
+  `,
+  imports: [ReactiveFormsModule, MatStepperModule],
+  standalone: false,
+})
+class LinearMatVerticalStepperAppForAlreadyFilledForm {
+  selectedIndex = signal(2);
+
+  oneGroup = new FormGroup({
+    oneCtrl: new FormControl('test 1', Validators.required),
+  });
+  twoGroup = new FormGroup({
+    twoCtrl: new FormControl('test 2', Validators.required),
+  });
+  threeGroup = new FormGroup({
+    threeCtrl: new FormControl('test 3', Validators.required),
+  });
+}
+
 @Component({
   template: `
     <mat-stepper linear>

From 312231bd5c4510d7b999fe0fa25c4c1cd351044d Mon Sep 17 00:00:00 2001
From: Wilt <wouter_wiltenburg@hotmail.com>
Date: Wed, 19 Feb 2025 19:37:21 +0100
Subject: [PATCH 77/91] fix(material/radio): Optional typing of MatRadioChange
 (#30477)

This event should be typed. Added type and fallback to any to make this optional and backwards compatible.

(cherry picked from commit 29e67e63d02cd113e8724b24f1682d7390f2b751)
---
 src/material/radio/radio.ts              | 4 ++--
 tools/public_api_guard/material/radio.md | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/material/radio/radio.ts b/src/material/radio/radio.ts
index 99b54821b07d..1478434860eb 100644
--- a/src/material/radio/radio.ts
+++ b/src/material/radio/radio.ts
@@ -49,12 +49,12 @@ import {Subscription} from 'rxjs';
 import {_CdkPrivateStyleLoader} from '@angular/cdk/private';
 
 /** Change event object emitted by radio button and radio group. */
-export class MatRadioChange {
+export class MatRadioChange<T = any> {
   constructor(
     /** The radio button that emits the change event. */
     public source: MatRadioButton,
     /** The value of the radio button. */
-    public value: any,
+    public value: T,
   ) {}
 }
 
diff --git a/tools/public_api_guard/material/radio.md b/tools/public_api_guard/material/radio.md
index 4a469a7294b6..0c9ca0a8bdd7 100644
--- a/tools/public_api_guard/material/radio.md
+++ b/tools/public_api_guard/material/radio.md
@@ -97,12 +97,12 @@ export class MatRadioButton implements OnInit, AfterViewInit, DoCheck, OnDestroy
 }
 
 // @public
-export class MatRadioChange {
+export class MatRadioChange<T = any> {
     constructor(
     source: MatRadioButton,
-    value: any);
+    value: T);
     source: MatRadioButton;
-    value: any;
+    value: T;
 }
 
 // @public (undocumented)

From 4a661cd8f5f1e7cf6bdfcd4178f379b14033ff32 Mon Sep 17 00:00:00 2001
From: Wilt <wouter_wiltenburg@hotmail.com>
Date: Thu, 20 Feb 2025 00:34:36 +0100
Subject: [PATCH 78/91] fix(material/select): Optional typing of
 MatSelectChange (#30324)

This event should be typed. Added type and fallback to any to make this optional and backwards compatible.

(cherry picked from commit dc8f98e9e34f9af6572a6cf08f9c263f7e42a118)
---
 src/material/select/select.ts             | 4 ++--
 tools/public_api_guard/material/select.md | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/material/select/select.ts b/src/material/select/select.ts
index e99ce6b7d40b..21086cdff0ba 100644
--- a/src/material/select/select.ts
+++ b/src/material/select/select.ts
@@ -161,12 +161,12 @@ export const MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {
 export const MAT_SELECT_TRIGGER = new InjectionToken<MatSelectTrigger>('MatSelectTrigger');
 
 /** Change event object that is emitted when the select value has changed. */
-export class MatSelectChange {
+export class MatSelectChange<T = any> {
   constructor(
     /** Reference to the select that emitted the change event. */
     public source: MatSelect,
     /** Current value of the select that emitted the event. */
-    public value: any,
+    public value: T,
   ) {}
 }
 
diff --git a/tools/public_api_guard/material/select.md b/tools/public_api_guard/material/select.md
index a39d47dbd3d6..07c04e09e6e6 100644
--- a/tools/public_api_guard/material/select.md
+++ b/tools/public_api_guard/material/select.md
@@ -189,7 +189,7 @@ export class MatSelect implements AfterContentInit, OnChanges, OnDestroy, OnInit
     _scrollOptionIntoView(index: number): void;
     _scrollStrategy: ScrollStrategy;
     get selected(): MatOption | MatOption[];
-    readonly selectionChange: EventEmitter<MatSelectChange>;
+    readonly selectionChange: EventEmitter<MatSelectChange<any>>;
     _selectionModel: SelectionModel<MatOption>;
     setDescribedByIds(ids: string[]): void;
     setDisabledState(isDisabled: boolean): void;
@@ -224,12 +224,12 @@ export const matSelectAnimations: {
 };
 
 // @public
-export class MatSelectChange {
+export class MatSelectChange<T = any> {
     constructor(
     source: MatSelect,
-    value: any);
+    value: T);
     source: MatSelect;
-    value: any;
+    value: T;
 }
 
 // @public

From ec8c300bbd94507425ff91c56ed24a0d66c8df5a Mon Sep 17 00:00:00 2001
From: Naji <54370141+naaajii@users.noreply.github.com>
Date: Thu, 20 Feb 2025 12:09:58 +0500
Subject: [PATCH 79/91] fix(material/form-field): trigger CD when form (#30395)

gets reassigned

fixes the issue we were not marking component
for changes when form is reassigned making it
not update UI for required asterisk

fixes #29066

(cherry picked from commit cdb15925494fa83bf1e4033b49e42d6649e43deb)
---
 src/material/form-field/form-field.ts | 23 ++++++++-
 src/material/input/input.spec.ts      | 68 +++++++++++++++++++++++++++
 2 files changed, 90 insertions(+), 1 deletion(-)

diff --git a/src/material/form-field/form-field.ts b/src/material/form-field/form-field.ts
index 7e871d0bd2bb..2cadd9fd5d12 100644
--- a/src/material/form-field/form-field.ts
+++ b/src/material/form-field/form-field.ts
@@ -32,7 +32,7 @@ import {
   contentChild,
   inject,
 } from '@angular/core';
-import {AbstractControlDirective} from '@angular/forms';
+import {AbstractControlDirective, ValidatorFn} from '@angular/forms';
 import {ThemePalette} from '@angular/material/core';
 import {_IdGenerator} from '@angular/cdk/a11y';
 import {Subject, Subscription, merge} from 'rxjs';
@@ -326,6 +326,7 @@ export class MatFormField
   private _explicitFormFieldControl: MatFormFieldControl<any>;
   private _needsOutlineLabelOffsetUpdate = false;
   private _previousControl: MatFormFieldControl<unknown> | null = null;
+  private _previousControlValidatorFn: ValidatorFn | null = null;
   private _stateChanges: Subscription | undefined;
   private _valueChanges: Subscription | undefined;
   private _describedByChanges: Subscription | undefined;
@@ -369,10 +370,30 @@ export class MatFormField
   ngAfterContentChecked() {
     this._assertFormFieldControl();
 
+    // if form field was being used with an input in first place and then replaced by other
+    // component such as select.
     if (this._control !== this._previousControl) {
       this._initializeControl(this._previousControl);
+
+      // keep a reference for last validator we had.
+      if (this._control.ngControl && this._control.ngControl.control) {
+        this._previousControlValidatorFn = this._control.ngControl.control.validator;
+      }
+
       this._previousControl = this._control;
     }
+
+    // make sure the the control has been initialized.
+    if (this._control.ngControl && this._control.ngControl.control) {
+      // get the validators for current control.
+      const validatorFn = this._control.ngControl.control.validator;
+
+      // if our current validatorFn isn't equal to it might be we are CD behind, marking the
+      // component will allow us to catch up.
+      if (validatorFn !== this._previousControlValidatorFn) {
+        this._changeDetectorRef.markForCheck();
+      }
+    }
   }
 
   ngOnDestroy() {
diff --git a/src/material/input/input.spec.ts b/src/material/input/input.spec.ts
index 611cdc3320f2..0580f626b6e1 100644
--- a/src/material/input/input.spec.ts
+++ b/src/material/input/input.spec.ts
@@ -349,6 +349,48 @@ describe('MatMdcInput without forms', () => {
     expect(label.nativeElement.querySelector('.mat-mdc-form-field-required-marker')).toBeTruthy();
   }));
 
+  it('should show the required star when FormControl is reassigned', fakeAsync(() => {
+    const fixture = createComponent(MatInputWithRequiredAssignableFormControl);
+    fixture.detectChanges();
+
+    // should have star by default
+    let label = fixture.debugElement.query(By.css('label'))!;
+    expect(label.nativeElement.querySelector('.mat-mdc-form-field-required-marker')).toBeTruthy();
+
+    fixture.componentInstance.reassignFormControl();
+    fixture.changeDetectorRef.markForCheck();
+    fixture.detectChanges();
+
+    // should be removed as form was reassigned with no required validators
+    label = fixture.debugElement.query(By.css('label'))!;
+    expect(label.nativeElement.querySelector('.mat-mdc-form-field-required-marker')).toBeFalsy();
+  }));
+
+  it('should show the required star when required validator is toggled', fakeAsync(() => {
+    const fixture = createComponent(MatInputWithRequiredAssignableFormControl);
+    fixture.detectChanges();
+
+    // should have star by default
+    let label = fixture.debugElement.query(By.css('label'))!;
+    expect(label.nativeElement.querySelector('.mat-mdc-form-field-required-marker')).toBeTruthy();
+
+    fixture.componentInstance.removeRequiredValidtor();
+    fixture.changeDetectorRef.markForCheck();
+    fixture.detectChanges();
+
+    // should be removed as control validator was removed
+    label = fixture.debugElement.query(By.css('label'))!;
+    expect(label.nativeElement.querySelector('.mat-mdc-form-field-required-marker')).toBeFalsy();
+
+    fixture.componentInstance.addRequiredValidator();
+    fixture.changeDetectorRef.markForCheck();
+    fixture.detectChanges();
+
+    // should contain star as control validator was readded
+    label = fixture.debugElement.query(By.css('label'))!;
+    expect(label.nativeElement.querySelector('.mat-mdc-form-field-required-marker')).toBeTruthy();
+  }));
+
   it('should not hide the required star if input is disabled', () => {
     const fixture = createComponent(MatInputLabelRequiredTestComponent);
 
@@ -2333,3 +2375,29 @@ class MatInputSimple {}
   standalone: false,
 })
 class InputWithNgContainerPrefixAndSuffix {}
+
+@Component({
+  template: `
+    <mat-form-field>
+      <mat-label>Hello</mat-label>
+      <input matInput [formControl]="formControl">
+    </mat-form-field>`,
+  standalone: false,
+})
+class MatInputWithRequiredAssignableFormControl {
+  formControl = new FormControl('', [Validators.required]);
+
+  reassignFormControl() {
+    this.formControl = new FormControl();
+  }
+
+  addRequiredValidator() {
+    this.formControl.setValidators([Validators.required]);
+    this.formControl.updateValueAndValidity();
+  }
+
+  removeRequiredValidtor() {
+    this.formControl.setValidators([]);
+    this.formControl.updateValueAndValidity();
+  }
+}

From 6223babd452dbbb0cf9aa5452cdb17e8573dcaaa Mon Sep 17 00:00:00 2001
From: Karl Seamon <bannanafiend@gmail.com>
Date: Thu, 20 Feb 2025 11:20:04 -0500
Subject: [PATCH 80/91] perf(material/slide-toggle): Optimize :state descendant
 selectors (#30521)

(cherry picked from commit 6ff9c9f3d6410a9d04c6f93635c4d2fe3101b334)
---
 src/material/slide-toggle/slide-toggle.scss | 107 +++++++++++---------
 1 file changed, 59 insertions(+), 48 deletions(-)

diff --git a/src/material/slide-toggle/slide-toggle.scss b/src/material/slide-toggle/slide-toggle.scss
index 161a2f7c4d98..640aad6ce4b9 100644
--- a/src/material/slide-toggle/slide-toggle.scss
+++ b/src/material/slide-toggle/slide-toggle.scss
@@ -113,22 +113,22 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
     }
 
     @include token-utils.use-tokens($_mdc-slots...) {
-      .mdc-switch:enabled:hover:not(:focus):not(:active) & {
+      .mdc-switch:enabled:hover:not(:focus):not(:active) > & {
         @include token-utils.create-token-slot(background, unselected-hover-track-color);
       }
 
-      .mdc-switch:enabled:focus:not(:active) & {
+      .mdc-switch:enabled:focus:not(:active) > & {
         @include token-utils.create-token-slot(background, unselected-focus-track-color);
       }
 
-      .mdc-switch:enabled:active & {
+      .mdc-switch:enabled:active > & {
         @include token-utils.create-token-slot(background, unselected-pressed-track-color);
       }
 
-      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
-      #{$_interactive-disabled-selector}:focus:not(:active) &,
-      #{$_interactive-disabled-selector}:active &,
-      .mdc-switch.mdc-switch--disabled & {
+      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) > &,
+      #{$_interactive-disabled-selector}:focus:not(:active) > &,
+      #{$_interactive-disabled-selector}:active > &,
+      .mdc-switch.mdc-switch--disabled > & {
         @include token-utils.create-token-slot(background, disabled-unselected-track-color);
       }
     }
@@ -162,22 +162,22 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
     }
 
     @include token-utils.use-tokens($_mdc-slots...) {
-      .mdc-switch:enabled:hover:not(:focus):not(:active) & {
+      .mdc-switch:enabled:hover:not(:focus):not(:active) > & {
         @include token-utils.create-token-slot(background, selected-hover-track-color);
       }
 
-      .mdc-switch:enabled:focus:not(:active) & {
+      .mdc-switch:enabled:focus:not(:active) > & {
         @include token-utils.create-token-slot(background, selected-focus-track-color);
       }
 
-      .mdc-switch:enabled:active & {
+      .mdc-switch:enabled:active > & {
         @include token-utils.create-token-slot(background, selected-pressed-track-color);
       }
 
-      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
-      #{$_interactive-disabled-selector}:focus:not(:active) &,
-      #{$_interactive-disabled-selector}:active &,
-      .mdc-switch.mdc-switch--disabled & {
+      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) > &,
+      #{$_interactive-disabled-selector}:focus:not(:active) > &,
+      #{$_interactive-disabled-selector}:active > &,
+      .mdc-switch.mdc-switch--disabled > & {
         @include token-utils.create-token-slot(background, disabled-selected-track-color);
       }
     }
@@ -266,16 +266,19 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
       @include token-utils.create-token-slot(height, with-icon-handle-size);
     }
 
-    .mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) & {
+    // stylelint-disable-next-line max-line-length
+    .mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
       @include token-utils.create-token-slot(width, pressed-handle-size);
       @include token-utils.create-token-slot(height, pressed-handle-size);
     }
 
-    .mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) & {
+    // stylelint-disable-next-line max-line-length
+    .mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
       @include token-utils.create-token-slot(margin, selected-pressed-handle-horizontal-margin);
     }
 
-    .mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) & {
+    // stylelint-disable-next-line max-line-length
+    .mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
       @include token-utils.create-token-slot(margin, unselected-pressed-handle-horizontal-margin);
     }
 
@@ -310,46 +313,49 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
 
   @include token-utils.use-tokens($_mdc-slots...) {
     &::after {
-      .mdc-switch--selected:enabled & {
+      .mdc-switch--selected:enabled > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, selected-handle-color);
       }
 
-      .mdc-switch--selected:enabled:hover:not(:focus):not(:active) & {
+      .mdc-switch--selected:enabled:hover:not(:focus):not(:active) > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, selected-hover-handle-color);
       }
 
-      .mdc-switch--selected:enabled:focus:not(:active) & {
+      .mdc-switch--selected:enabled:focus:not(:active) > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, selected-focus-handle-color);
       }
 
-      .mdc-switch--selected:enabled:active & {
+      .mdc-switch--selected:enabled:active > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, selected-pressed-handle-color);
       }
 
-      #{$_interactive-disabled-selector}.mdc-switch--selected:hover:not(:focus):not(:active) &,
-      #{$_interactive-disabled-selector}.mdc-switch--selected:focus:not(:active) &,
-      #{$_interactive-disabled-selector}.mdc-switch--selected:active &,
-      .mdc-switch--selected.mdc-switch--disabled & {
-        @include token-utils.create-token-slot(background, disabled-selected-handle-color);
+      #{$_interactive-disabled-selector}.mdc-switch--selected:hover:not(:focus):not(:active),
+      #{$_interactive-disabled-selector}.mdc-switch--selected:focus:not(:active),
+      #{$_interactive-disabled-selector}.mdc-switch--selected:active,
+      .mdc-switch--selected.mdc-switch--disabled {
+        > .mdc-switch__handle-track > & {
+          @include token-utils.create-token-slot(background, disabled-selected-handle-color);
+        }
       }
 
-      .mdc-switch--unselected:enabled & {
+      .mdc-switch--unselected:enabled > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, unselected-handle-color);
       }
 
-      .mdc-switch--unselected:enabled:hover:not(:focus):not(:active) & {
+      // stylelint-disable-next-line max-line-length
+      .mdc-switch--unselected:enabled:hover:not(:focus):not(:active) > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, unselected-hover-handle-color);
       }
 
-      .mdc-switch--unselected:enabled:focus:not(:active) & {
+      .mdc-switch--unselected:enabled:focus:not(:active) > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, unselected-focus-handle-color);
       }
 
-      .mdc-switch--unselected:enabled:active & {
+      .mdc-switch--unselected:enabled:active > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, unselected-pressed-handle-color);
       }
 
-      .mdc-switch--unselected.mdc-switch--disabled & {
+      .mdc-switch--unselected.mdc-switch--disabled > .mdc-switch__handle-track > & {
         @include token-utils.create-token-slot(background, disabled-unselected-handle-color);
       }
     }
@@ -369,15 +375,17 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
   top: 0;
 
   @include token-utils.use-tokens($_mdc-slots...) {
-    .mdc-switch:enabled & {
+    .mdc-switch:enabled > .mdc-switch__handle-track > .mdc-switch__handle > & {
       @include token-utils.create-token-slot(box-shadow, handle-elevation-shadow);
     }
 
-    #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
-    #{$_interactive-disabled-selector}:focus:not(:active) &,
-    #{$_interactive-disabled-selector}:active &,
-    .mdc-switch.mdc-switch--disabled & {
-      @include token-utils.create-token-slot(box-shadow, disabled-handle-elevation-shadow);
+    #{$_interactive-disabled-selector}:hover:not(:focus):not(:active),
+    #{$_interactive-disabled-selector}:focus:not(:active),
+    #{$_interactive-disabled-selector}:active,
+    .mdc-switch.mdc-switch--disabled {
+      > .mdc-switch__handle-track > .mdc-switch__handle > & {
+        @include token-utils.create-token-slot(box-shadow, disabled-handle-elevation-shadow);
+      }
     }
   }
 }
@@ -406,7 +414,7 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
       display: block;
     }
 
-    .mdc-switch:hover & {
+    .mdc-switch:hover > .mdc-switch__handle-track > .mdc-switch__handle > & {
       opacity: 0.04;
       transition: 75ms opacity cubic-bezier(0, 0, 0.2, 1);
     }
@@ -417,32 +425,35 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
     }
 
     @include token-utils.use-tokens($_mdc-slots...) {
-      #{$_interactive-disabled-selector}:enabled:focus &,
-      #{$_interactive-disabled-selector}:enabled:active &,
-      #{$_interactive-disabled-selector}:enabled:hover:not(:focus) &,
-      .mdc-switch--unselected:enabled:hover:not(:focus) & {
-        @include token-utils.create-token-slot(background, unselected-hover-state-layer-color);
+      #{$_interactive-disabled-selector}:enabled:focus,
+      #{$_interactive-disabled-selector}:enabled:active,
+      #{$_interactive-disabled-selector}:enabled:hover:not(:focus),
+      .mdc-switch--unselected:enabled:hover:not(:focus) {
+        > .mdc-switch__handle-track > .mdc-switch__handle > & {
+          @include token-utils.create-token-slot(background, unselected-hover-state-layer-color);
+        }
       }
 
-      .mdc-switch--unselected:enabled:focus & {
+      .mdc-switch--unselected:enabled:focus > .mdc-switch__handle-track > .mdc-switch__handle > & {
         @include token-utils.create-token-slot(background, unselected-focus-state-layer-color);
       }
 
-      .mdc-switch--unselected:enabled:active & {
+      .mdc-switch--unselected:enabled:active > .mdc-switch__handle-track > .mdc-switch__handle > & {
         @include token-utils.create-token-slot(background, unselected-pressed-state-layer-color);
         @include token-utils.create-token-slot(opacity, unselected-pressed-state-layer-opacity);
         transition: opacity 75ms linear;
       }
 
-      .mdc-switch--selected:enabled:hover:not(:focus) & {
+      // stylelint-disable-next-line max-line-length
+      .mdc-switch--selected:enabled:hover:not(:focus) > .mdc-switch__handle-track > .mdc-switch__handle > & {
         @include token-utils.create-token-slot(background, selected-hover-state-layer-color);
       }
 
-      .mdc-switch--selected:enabled:focus & {
+      .mdc-switch--selected:enabled:focus > .mdc-switch__handle-track > .mdc-switch__handle > & {
         @include token-utils.create-token-slot(background, selected-focus-state-layer-color);
       }
 
-      .mdc-switch--selected:enabled:active & {
+      .mdc-switch--selected:enabled:active > .mdc-switch__handle-track > .mdc-switch__handle > & {
         @include token-utils.create-token-slot(background, selected-pressed-state-layer-color);
         @include token-utils.create-token-slot(opacity, selected-pressed-state-layer-opacity);
         transition: opacity 75ms linear;

From 46cf310d2e688069cd4c62dc370c2f720209f2d8 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Thu, 20 Feb 2025 17:56:44 +0100
Subject: [PATCH 81/91] build: update to the Angular 19.2 RC (#30528)

Updates the repo to Angular 19.2 so we can verify that things work as expected.

(cherry picked from commit 41d63539c06e1cc05eda8a7e5148dd88aca6e811)
---
 package.json |   34 +-
 yarn.lock    | 1536 +++++++++++++++++++++++++++-----------------------
 2 files changed, 861 insertions(+), 709 deletions(-)

diff --git a/package.json b/package.json
index cfb88715509f..0c0cba5465eb 100644
--- a/package.json
+++ b/package.json
@@ -56,12 +56,12 @@
   },
   "version": "19.1.5",
   "dependencies": {
-    "@angular/animations": "^19.1.3",
-    "@angular/common": "^19.1.3",
-    "@angular/compiler": "^19.1.3",
-    "@angular/core": "^19.1.3",
-    "@angular/forms": "^19.1.3",
-    "@angular/platform-browser": "^19.1.3",
+    "@angular/animations": "^19.2.0-rc.0",
+    "@angular/common": "^19.2.0-rc.0",
+    "@angular/compiler": "^19.2.0-rc.0",
+    "@angular/core": "^19.2.0-rc.0",
+    "@angular/forms": "^19.2.0-rc.0",
+    "@angular/platform-browser": "^19.2.0-rc.0",
     "@types/google.maps": "^3.54.10",
     "@types/youtube": "^0.1.0",
     "rxjs": "^6.6.7",
@@ -70,19 +70,19 @@
     "zone.js": "~0.15.0"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^19.1.3",
-    "@angular-devkit/core": "^19.1.3",
-    "@angular-devkit/schematics": "^19.1.3",
+    "@angular-devkit/build-angular": "^19.2.0-rc.0",
+    "@angular-devkit/core": "^19.2.0-rc.0",
+    "@angular-devkit/schematics": "^19.2.0-rc.0",
     "@angular/bazel": "https://github.com/angular/bazel-builds.git#d9a8ea4f9e62cb475eff89519426a38631b2704d",
     "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#74e0e7b090c6e16056290836b2d936ca7820b86f",
-    "@angular/build": "^19.1.3",
-    "@angular/cli": "^19.1.3",
-    "@angular/compiler-cli": "^19.1.3",
-    "@angular/localize": "^19.1.3",
+    "@angular/build": "^19.2.0-rc.0",
+    "@angular/cli": "^19.2.0-rc.0",
+    "@angular/compiler-cli": "^19.2.0-rc.0",
+    "@angular/localize": "^19.2.0-rc.0",
     "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1fa3a08b6a111de820da092799319ed47c058849",
-    "@angular/platform-browser-dynamic": "^19.1.3",
-    "@angular/platform-server": "^19.1.3",
-    "@angular/router": "^19.1.3",
+    "@angular/platform-browser-dynamic": "^19.2.0-rc.0",
+    "@angular/platform-server": "^19.2.0-rc.0",
+    "@angular/router": "^19.2.0-rc.0",
     "@babel/core": "^7.16.12",
     "@babel/helper-explode-assignable-expression": "^7.18.6",
     "@babel/helper-string-parser": "^7.22.5",
@@ -102,7 +102,7 @@
     "@octokit/rest": "18.3.5",
     "@rollup/plugin-commonjs": "^21.0.0",
     "@rollup/plugin-node-resolve": "^13.1.3",
-    "@schematics/angular": "^19.1.3",
+    "@schematics/angular": "^19.2.0-rc.0",
     "@types/babel__core": "^7.1.18",
     "@types/browser-sync": "^2.26.3",
     "@types/fs-extra": "^9.0.13",
diff --git a/yarn.lock b/yarn.lock
index ab2206ac345f..a8db786b8457 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18,35 +18,35 @@
     "@angular-devkit/core" "18.1.0-next.0"
     rxjs "7.8.1"
 
-"@angular-devkit/architect@0.1901.4":
-  version "0.1901.4"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1901.4.tgz#d8df65cd0cf5a0e1de960e48f523fc56975d7a48"
-  integrity sha512-EoRTN8p7z0YnqOEIJKKu/NwSsCJxFkyGuZOobz7btnUWwlDqG8CNAhJgtlsOXPihwEkHEkzRIm1feDkWEjCYsA==
+"@angular-devkit/architect@0.1902.0-rc.0":
+  version "0.1902.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1902.0-rc.0.tgz#a816ef393a28636b3b5d343e5b96813b759e80fb"
+  integrity sha512-grtyVxRL/EuHvwSAqvDcKDG795eyiZFtz7tY+48q87M9dyNQ51KPVvY0unEJ+RZMowejgKUnkBlGE68o56tGkQ==
   dependencies:
-    "@angular-devkit/core" "19.1.4"
+    "@angular-devkit/core" "19.2.0-rc.0"
     rxjs "7.8.1"
 
-"@angular-devkit/build-angular@^19.1.3":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-19.1.4.tgz#9dddc06a152ae7dd55114102ffc401bca2c1d60f"
-  integrity sha512-t8qC26Boz1aAMt2xVKthwEXRqMI4ZVwelxRNfHryLdLTujTaehFt3qbjxukMmRGCWmQObauH0UOvDh3pAA24dQ==
+"@angular-devkit/build-angular@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-19.2.0-rc.0.tgz#348eb366867bddbc713fc1c5cdfeb526bc22113d"
+  integrity sha512-QTG/522EFsElueBUQW06Og2J3eNSHN2JWQYs3UbXzOU7J9da0MQOObT2F4U+PDAr5lUD5PkAX8bd3bIG50nBWw==
   dependencies:
     "@ampproject/remapping" "2.3.0"
-    "@angular-devkit/architect" "0.1901.4"
-    "@angular-devkit/build-webpack" "0.1901.4"
-    "@angular-devkit/core" "19.1.4"
-    "@angular/build" "19.1.4"
-    "@babel/core" "7.26.0"
-    "@babel/generator" "7.26.3"
+    "@angular-devkit/architect" "0.1902.0-rc.0"
+    "@angular-devkit/build-webpack" "0.1902.0-rc.0"
+    "@angular-devkit/core" "19.2.0-rc.0"
+    "@angular/build" "19.2.0-rc.0"
+    "@babel/core" "7.26.9"
+    "@babel/generator" "7.26.9"
     "@babel/helper-annotate-as-pure" "7.25.9"
     "@babel/helper-split-export-declaration" "7.24.7"
-    "@babel/plugin-transform-async-generator-functions" "7.25.9"
+    "@babel/plugin-transform-async-generator-functions" "7.26.8"
     "@babel/plugin-transform-async-to-generator" "7.25.9"
-    "@babel/plugin-transform-runtime" "7.25.9"
-    "@babel/preset-env" "7.26.0"
-    "@babel/runtime" "7.26.0"
+    "@babel/plugin-transform-runtime" "7.26.9"
+    "@babel/preset-env" "7.26.9"
+    "@babel/runtime" "7.26.9"
     "@discoveryjs/json-ext" "0.6.3"
-    "@ngtools/webpack" "19.1.4"
+    "@ngtools/webpack" "19.2.0-rc.0"
     "@vitejs/plugin-basic-ssl" "1.2.0"
     ansi-colors "4.1.3"
     autoprefixer "10.4.20"
@@ -54,13 +54,13 @@
     browserslist "^4.21.5"
     copy-webpack-plugin "12.0.2"
     css-loader "7.1.2"
-    esbuild-wasm "0.24.2"
+    esbuild-wasm "0.25.0"
     fast-glob "3.3.3"
     http-proxy-middleware "3.0.3"
     istanbul-lib-instrument "6.0.3"
     jsonc-parser "3.3.1"
     karma-source-map-support "1.4.0"
-    less "4.2.1"
+    less "4.2.2"
     less-loader "12.2.0"
     license-webpack-plugin "4.0.2"
     loader-utils "3.3.1"
@@ -69,32 +69,32 @@
     ora "5.4.1"
     picomatch "4.0.2"
     piscina "4.8.0"
-    postcss "8.4.49"
+    postcss "8.5.2"
     postcss-loader "8.1.1"
     resolve-url-loader "5.0.0"
     rxjs "7.8.1"
-    sass "1.83.1"
-    sass-loader "16.0.4"
-    semver "7.6.3"
+    sass "1.85.0"
+    sass-loader "16.0.5"
+    semver "7.7.1"
     source-map-loader "5.0.0"
     source-map-support "0.5.21"
-    terser "5.37.0"
+    terser "5.39.0"
     tree-kill "1.2.2"
     tslib "2.8.1"
-    webpack "5.97.1"
+    webpack "5.98.0"
     webpack-dev-middleware "7.4.2"
     webpack-dev-server "5.2.0"
     webpack-merge "6.0.1"
     webpack-subresource-integrity "5.1.0"
   optionalDependencies:
-    esbuild "0.24.2"
+    esbuild "0.25.0"
 
-"@angular-devkit/build-webpack@0.1901.4":
-  version "0.1901.4"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1901.4.tgz#a7627e3ca79f2c398249ab2e6f3a57c92a294893"
-  integrity sha512-C/Cd1JeRTy2P/powIldc5UZObw92TDGATD/LFlfPfi94celLa2DlEL1ybPTpnGs/R5/q5R26F6fbhmAVSeTJ8g==
+"@angular-devkit/build-webpack@0.1902.0-rc.0":
+  version "0.1902.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1902.0-rc.0.tgz#cc5a0260e18e883df2d1bc1975a718dc795bdc3f"
+  integrity sha512-0jD7zGxUHGU5XPC/H2Fgb1KZjxgwzqgOhcjrd4Sp82DWdPeC8WISDWS0ioE+Breez6aXzDliNEDdLQQCXWxuWg==
   dependencies:
-    "@angular-devkit/architect" "0.1901.4"
+    "@angular-devkit/architect" "0.1902.0-rc.0"
     rxjs "7.8.1"
 
 "@angular-devkit/core@18.1.0-next.0":
@@ -109,10 +109,10 @@
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/core@19.1.4", "@angular-devkit/core@^19.1.3":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.1.4.tgz#dad947bce8f311d02fce715875dc91392bdc12e6"
-  integrity sha512-IDvSSiQgaixH2RtZtIpq1+XaHeuzMiTWfDyNF9DuYcU+S8CdG1SWrc8d59tmOrM/q+IRGyFgbBhTU1un52hNHw==
+"@angular-devkit/core@19.2.0-rc.0", "@angular-devkit/core@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-19.2.0-rc.0.tgz#7a942209ba54adb7c40a8837021a1c42e5d8c312"
+  integrity sha512-VNj7rEizjNWCLNqb2Wguln3Bzb07nlY5jDVz5mtuiIBfyn46T2LW++XixzZrJWK0aGH8FXyCtAAi8cZnbTURog==
   dependencies:
     ajv "8.17.1"
     ajv-formats "3.0.1"
@@ -121,21 +121,21 @@
     rxjs "7.8.1"
     source-map "0.7.4"
 
-"@angular-devkit/schematics@19.1.4", "@angular-devkit/schematics@^19.1.3":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.1.4.tgz#1c440c091f03f01f9891ef3947e88c9a22a28427"
-  integrity sha512-EKXBkx6EDcvyO+U68w/eXicRaF92zSSzYNvR3tMZszEKYE6xBr3kZxY99PP54HXQHR4zYwLvFJVp+T6bnvte2w==
+"@angular-devkit/schematics@19.2.0-rc.0", "@angular-devkit/schematics@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-19.2.0-rc.0.tgz#8372bea2ed6f675d588a3a32570093e7959e637a"
+  integrity sha512-jkyMAD8AQJkIOXnLIEoNH9L62Zn3V1+fq926+p5W70TaXi88wKlfNo80+uugaZLrYzAx8MRokSq5Z4YRXONUwQ==
   dependencies:
-    "@angular-devkit/core" "19.1.4"
+    "@angular-devkit/core" "19.2.0-rc.0"
     jsonc-parser "3.3.1"
     magic-string "0.30.17"
     ora "5.4.1"
     rxjs "7.8.1"
 
-"@angular/animations@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-19.1.3.tgz#9fbf588cc2eb61f000553ce63a2514f417a992d6"
-  integrity sha512-MI+Tbp9OOisrQtTQH7o+xiQCODXicCs8WHNpGzdCpnXdRkQuVSOb6xAjD9OXJqcQGotLgeyennnkIJGXdz4RTA==
+"@angular/animations@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-19.2.0-rc.0.tgz#84a68e83674eb46501730496ee226af6c47c0fda"
+  integrity sha512-jK2G3oSCXQbZuHmmA+PVxj573FE5C6nBPFwItaRsDcgSW4Posug595YAsDdBs11o+Z11pnGTFkPTW71TEOTCIQ==
   dependencies:
     tslib "^2.3.0"
 
@@ -231,75 +231,76 @@
     vite "5.2.12"
     watchpack "2.4.1"
 
-"@angular/build@19.1.4", "@angular/build@^19.1.3":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@angular/build/-/build-19.1.4.tgz#82cac484059560d7a904f16fdcbc6ea5707a4caf"
-  integrity sha512-yfvLeUT2a8JTuVBY259vsSv0uLyhikHHgQcWa3VSr0TvCKrwCsBIFDq7vqmhLqIVWi/Z4D7n3J5JQAbDrl38Sg==
+"@angular/build@19.2.0-rc.0", "@angular/build@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/build/-/build-19.2.0-rc.0.tgz#d6d6840411097a2d3f8006b77e118beff7273d46"
+  integrity sha512-DxiSqWY9oqoSUmiDyIaorR42RifoTSUaVc4Mu4EDMjVauFvBQ5a81OJUzOYmv5THzS5Xh7TfSOtHCB1bohtOkQ==
   dependencies:
     "@ampproject/remapping" "2.3.0"
-    "@angular-devkit/architect" "0.1901.4"
-    "@babel/core" "7.26.0"
+    "@angular-devkit/architect" "0.1902.0-rc.0"
+    "@babel/core" "7.26.9"
     "@babel/helper-annotate-as-pure" "7.25.9"
     "@babel/helper-split-export-declaration" "7.24.7"
     "@babel/plugin-syntax-import-attributes" "7.26.0"
-    "@inquirer/confirm" "5.1.1"
+    "@inquirer/confirm" "5.1.6"
     "@vitejs/plugin-basic-ssl" "1.2.0"
     beasties "0.2.0"
     browserslist "^4.23.0"
-    esbuild "0.24.2"
+    esbuild "0.25.0"
     fast-glob "3.3.3"
     https-proxy-agent "7.0.6"
     istanbul-lib-instrument "6.0.3"
     listr2 "8.2.5"
     magic-string "0.30.17"
-    mrmime "2.0.0"
+    mrmime "2.0.1"
     parse5-html-rewriting-stream "7.0.0"
     picomatch "4.0.2"
     piscina "4.8.0"
-    rollup "4.30.1"
-    sass "1.83.1"
-    semver "7.6.3"
-    vite "6.0.7"
+    rollup "4.34.8"
+    sass "1.85.0"
+    semver "7.7.1"
+    source-map-support "0.5.21"
+    vite "6.1.0"
     watchpack "2.4.2"
   optionalDependencies:
-    lmdb "3.2.2"
+    lmdb "3.2.6"
 
-"@angular/cli@^19.1.3":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-19.1.4.tgz#1559c0e2996dad21ffe270b2c5e46c562ab5b156"
-  integrity sha512-C1Z2OTLjUJIkLsay6RJ1rzY0Tdb1Mj/cBh9dZryDstuits8G0Tphe36hnLownnoHspFQfjSRtVzF4NwKiDlQRw==
+"@angular/cli@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-19.2.0-rc.0.tgz#cd164a7a8ced94fe8b0f369891f767a530b4f5b7"
+  integrity sha512-bC2+SrasznHJ7d/ZnjdH/gVKiz7uK7mbUNhYLfG6iaiCaoW+UwNDT9WIuHtLkMglj4VhPXON80qXvpdLBFg+GA==
   dependencies:
-    "@angular-devkit/architect" "0.1901.4"
-    "@angular-devkit/core" "19.1.4"
-    "@angular-devkit/schematics" "19.1.4"
-    "@inquirer/prompts" "7.2.1"
+    "@angular-devkit/architect" "0.1902.0-rc.0"
+    "@angular-devkit/core" "19.2.0-rc.0"
+    "@angular-devkit/schematics" "19.2.0-rc.0"
+    "@inquirer/prompts" "7.3.2"
     "@listr2/prompt-adapter-inquirer" "2.0.18"
-    "@schematics/angular" "19.1.4"
+    "@schematics/angular" "19.2.0-rc.0"
     "@yarnpkg/lockfile" "1.1.0"
     ini "5.0.0"
     jsonc-parser "3.3.1"
     listr2 "8.2.5"
-    npm-package-arg "12.0.1"
+    npm-package-arg "12.0.2"
     npm-pick-manifest "10.0.0"
     pacote "20.0.0"
     resolve "1.22.10"
-    semver "7.6.3"
+    semver "7.7.1"
     symbol-observable "4.0.0"
     yargs "17.7.2"
 
-"@angular/common@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/common/-/common-19.1.3.tgz#6b21830ede0b1ed8132d3c3871a673a1886505c9"
-  integrity sha512-r1P0W6FKrON83szIJboF8z6UNCVL4HIxyD+nhmHMMT/iJpu4kDHVugaN/+w2jYLb4oelAJK5xzkzA+1IaHpzLg==
+"@angular/common@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/common/-/common-19.2.0-rc.0.tgz#4a32c344cfab1ca4302c5489e1fd7ca9d01144b8"
+  integrity sha512-03VFBI9ZB9Ka18qjpk6y3kbiS/EF6e5lx7GafcsOWwM/s6POWLlGrSzWG6z9cNJ8g10uvxg7sKYBB+9kNMmBNg==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/compiler-cli@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-19.1.3.tgz#df250faeb527e9b133f9a1cc447ab3cd4cffc94a"
-  integrity sha512-nDBvZenQECcr9CClmTp3iJNilRQ6oDKFgBkhlWffEFBx0Z6kBA36MXKKLuCkf31D+NGmt5VJlAkl8Ax8BJ9qJw==
+"@angular/compiler-cli@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-19.2.0-rc.0.tgz#50b203586c0a8b9adca93839781dc16b13055a05"
+  integrity sha512-FJAluHoygdGMXIp95bD9d8ZUYieXEAGsbHmvWPqilvOwUtq+4aGPp0sRUksFTciTjvJCEOgATW1IXiXpftYK3w==
   dependencies:
-    "@babel/core" "7.26.0"
+    "@babel/core" "7.26.9"
     "@jridgewell/sourcemap-codec" "^1.4.14"
     chokidar "^4.0.0"
     convert-source-map "^1.5.1"
@@ -308,10 +309,10 @@
     tslib "^2.3.0"
     yargs "^17.2.1"
 
-"@angular/compiler@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-19.1.3.tgz#79689c3fe937da2a203e12865fa04b576990d3a9"
-  integrity sha512-omX5Gyt3zlJVTUteO2YxsqYWtAIpkvs8kRYSUsLTi79V1gbGo+J1TawFuyBTrWxj4UtTGvwmDgZxiCIwMtP5KQ==
+"@angular/compiler@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-19.2.0-rc.0.tgz#9783b01173a4264c84ba99ade584f1dae7ba68e9"
+  integrity sha512-4yao4j+s0768PUPMjhLH8tb9b5SKp9cnv3M8xQyBoc71iMsKohJwX0Fgw7/5qxC6xjsS2kfeHCvmzBCxZIkSEg==
   dependencies:
     tslib "^2.3.0"
 
@@ -322,26 +323,26 @@
   dependencies:
     tslib "^2.3.0"
 
-"@angular/core@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/core/-/core-19.1.3.tgz#9a4ebb2689e84e1e234d6e0e9da2edd0b2392a09"
-  integrity sha512-Hh1eHvi+y+gsTRODiEEEWnRj5zqv9WNoou1KmQ1mv1NTOf0Pv61Hg9P2rBWDr0mPIXFSzqUKjyzW30BgdQ+AEA==
+"@angular/core@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/core/-/core-19.2.0-rc.0.tgz#53034d90f14ea3c8ebd31bd426b119823a156228"
+  integrity sha512-/0wKuv75p7d25QH5I+bb5Yim2k4TMkdntvhdTzcFI20fZQf232+Nj2G9Sy9jpPQpmLtAzfdzPXbjFaGsHo/Dfg==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/forms@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-19.1.3.tgz#34f3110c39ed92abba0bff8406e111f7eea02f04"
-  integrity sha512-M6eEJBysJm9zSUhm8ggljZCsgHLccZl70P34tyddb8erh9it2uoOXW0aVaZgDt1UAiF5a1EzjdVdN4TZTT/OGA==
+"@angular/forms@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-19.2.0-rc.0.tgz#0c0ac021cdb3801390cfbf74128f332afe5cfaa1"
+  integrity sha512-nA3XFVTCD3OW0/TWNiV2vrNd4Rl/P+kLgCk/VfvUoDxUE8VcWVnkgNZ7xBkl0jnNe8mBPxZqc+v+tTZ+4WJGKA==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/localize@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-19.1.3.tgz#73adbcd660c4eca89294555001688f2a099a9b32"
-  integrity sha512-MrDZG3A5Wk9l5AXt9Y5a7FYM608SqqnhWfnWPlkBU8HwE/IEOKY1QDIRLDoUZ1RchEFpI7QX46sqTEIGc5V+hA==
+"@angular/localize@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-19.2.0-rc.0.tgz#3fd47a50ee19ad78e9c266a2f991a6e3f55db8f7"
+  integrity sha512-KeFtDt/q0WcdNtn0Fz7VfYgWD1JOFOASbhQiesBufrgFWrE8V8p0nTbuUWP9pzNIhc+SwOD+NxWJEAuqth009w==
   dependencies:
-    "@babel/core" "7.26.0"
+    "@babel/core" "7.26.9"
     "@types/babel__core" "7.20.5"
     fast-glob "3.3.3"
     yargs "^17.2.1"
@@ -362,32 +363,32 @@
     typescript "~4.9.0"
     yaml "2.7.0"
 
-"@angular/platform-browser-dynamic@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.1.3.tgz#70f6ecdfb4517e661bf42f1396245001a79ec3f5"
-  integrity sha512-rfsHu/+wB8YLPjsHKd/Go0SI8zP2gjMkebUHM9SbvVLXEAkxFubcF2htVKbKu8eTncfEJEXD6+3gRAjh5SLrKw==
+"@angular/platform-browser-dynamic@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.0-rc.0.tgz#5f206cde18cf714963fd501f69e8688bed5bcc97"
+  integrity sha512-ZqB5s/2LEp+3aSQNlcvSmzhRpxdCRj8iR9uggbj6LIk2hvy9h+SGtSyGQWPTi7SalMekHIzoHHvRFeXTN4YYqQ==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-browser@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-19.1.3.tgz#768e83918e5ade876930ce3d2b89e21e704f0844"
-  integrity sha512-bLgnM2hRyzUdoWRoUhe+IMenlr74EvrgwyG7anJ27bjg5PcvhQPXrGqU0hri5yPDb9SHVJZminr7OjNCN8QJkQ==
+"@angular/platform-browser@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-19.2.0-rc.0.tgz#d186818b6a5bc3d493a4a5c941f0671baffdfabc"
+  integrity sha512-L+avJcGFKWon1iiXPzmt9R8YFE154eMaECsYeWVv1W4Qy1MMHEL4qwOKnO/B8HUarSCfYLiLTPMR1a9PqIbBhQ==
   dependencies:
     tslib "^2.3.0"
 
-"@angular/platform-server@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-19.1.3.tgz#c4f1bd6a4414790e3f5305daa938fc0831b3b9c1"
-  integrity sha512-8tORd/GPtZTr+gC+eXgBHyfQAhAa4CcDaM9+rqiTU4hXAJzD+7+XyW1M1ITGqieGIuLf0nlnhg4Vys+dlkUqEQ==
+"@angular/platform-server@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-19.2.0-rc.0.tgz#8166c807374e7135da56f9079901c74f15d0a597"
+  integrity sha512-OO69ZE0ccUdaItqs/2qkAMs/2pdaQZpTkvPhzn3+HftPYfJxIM+OZKDaP/p9EHAYcqIGK5JK8BR8hvfOboT4JQ==
   dependencies:
     tslib "^2.3.0"
     xhr2 "^0.2.0"
 
-"@angular/router@^19.1.3":
-  version "19.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/router/-/router-19.1.3.tgz#4429fad5540086e083be302203c5c68400fd9a75"
-  integrity sha512-DJ9BgvtxJV6xohaPQXPdBsFCZoQIEq2OPDyKcoW4L0ST4kIIFpHyI6wJ+AlPnLkhSwmOOoHciH0oxZ2xPVxmiQ==
+"@angular/router@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@angular/router/-/router-19.2.0-rc.0.tgz#977501b7b825d21cb3794eeafa941fba4b599092"
+  integrity sha512-/+lMsHLG5+v2LyNwNPgpHf9F2L6BACmIF565PVwCJ324j+ItDHOIjDywguAefGodns1JLVuNgfKF5/i0NZoAvQ==
   dependencies:
     tslib "^2.3.0"
 
@@ -409,7 +410,7 @@
     "@babel/highlight" "^7.24.7"
     picocolors "^1.0.0"
 
-"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0":
+"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2":
   version "7.26.2"
   resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
   integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
@@ -423,11 +424,16 @@
   resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed"
   integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
 
-"@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0":
+"@babel/compat-data@^7.25.9":
   version "7.26.2"
   resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e"
   integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==
 
+"@babel/compat-data@^7.26.5", "@babel/compat-data@^7.26.8":
+  version "7.26.8"
+  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
+  integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
+
 "@babel/core@7.24.6":
   version "7.24.6"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.6.tgz#8650e0e4b03589ebe886c4e4a60398db0a7ec787"
@@ -449,21 +455,21 @@
     json5 "^2.2.3"
     semver "^6.3.1"
 
-"@babel/core@7.26.0":
-  version "7.26.0"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40"
-  integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==
+"@babel/core@7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.9.tgz#71838542a4b1e49dfed353d7acbc6eb89f4a76f2"
+  integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==
   dependencies:
     "@ampproject/remapping" "^2.2.0"
-    "@babel/code-frame" "^7.26.0"
-    "@babel/generator" "^7.26.0"
-    "@babel/helper-compilation-targets" "^7.25.9"
+    "@babel/code-frame" "^7.26.2"
+    "@babel/generator" "^7.26.9"
+    "@babel/helper-compilation-targets" "^7.26.5"
     "@babel/helper-module-transforms" "^7.26.0"
-    "@babel/helpers" "^7.26.0"
-    "@babel/parser" "^7.26.0"
-    "@babel/template" "^7.25.9"
-    "@babel/traverse" "^7.25.9"
-    "@babel/types" "^7.26.0"
+    "@babel/helpers" "^7.26.9"
+    "@babel/parser" "^7.26.9"
+    "@babel/template" "^7.26.9"
+    "@babel/traverse" "^7.26.9"
+    "@babel/types" "^7.26.9"
     convert-source-map "^2.0.0"
     debug "^4.1.0"
     gensync "^1.0.0-beta.2"
@@ -491,13 +497,13 @@
     json5 "^2.2.3"
     semver "^6.3.1"
 
-"@babel/generator@7.26.3":
-  version "7.26.3"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019"
-  integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==
+"@babel/generator@7.26.9", "@babel/generator@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.9.tgz#75a9482ad3d0cc7188a537aa4910bc59db67cbca"
+  integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==
   dependencies:
-    "@babel/parser" "^7.26.3"
-    "@babel/types" "^7.26.3"
+    "@babel/parser" "^7.26.9"
+    "@babel/types" "^7.26.9"
     "@jridgewell/gen-mapping" "^0.3.5"
     "@jridgewell/trace-mapping" "^0.3.25"
     jsesc "^3.0.2"
@@ -512,7 +518,7 @@
     "@jridgewell/trace-mapping" "^0.3.25"
     jsesc "^2.5.1"
 
-"@babel/generator@^7.25.9", "@babel/generator@^7.26.0":
+"@babel/generator@^7.25.9":
   version "7.26.2"
   resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f"
   integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==
@@ -544,14 +550,6 @@
   dependencies:
     "@babel/types" "^7.24.7"
 
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9"
-  integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==
-  dependencies:
-    "@babel/traverse" "^7.25.9"
-    "@babel/types" "^7.25.9"
-
 "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.6", "@babel/helper-compilation-targets@^7.24.7":
   version "7.24.7"
   resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9"
@@ -574,6 +572,17 @@
     lru-cache "^5.1.1"
     semver "^6.3.1"
 
+"@babel/helper-compilation-targets@^7.26.5":
+  version "7.26.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8"
+  integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==
+  dependencies:
+    "@babel/compat-data" "^7.26.5"
+    "@babel/helper-validator-option" "^7.25.9"
+    browserslist "^4.24.0"
+    lru-cache "^5.1.1"
+    semver "^6.3.1"
+
 "@babel/helper-create-class-features-plugin@^7.25.9":
   version "7.25.9"
   resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83"
@@ -616,6 +625,17 @@
     lodash.debounce "^4.0.8"
     resolve "^1.14.2"
 
+"@babel/helper-define-polyfill-provider@^0.6.3":
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21"
+  integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.22.6"
+    "@babel/helper-plugin-utils" "^7.22.5"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+
 "@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.24.7":
   version "7.24.7"
   resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9"
@@ -706,6 +726,11 @@
   resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46"
   integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==
 
+"@babel/helper-plugin-utils@^7.26.5":
+  version "7.26.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
+  integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
+
 "@babel/helper-remap-async-to-generator@^7.18.9":
   version "7.24.7"
   resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7"
@@ -741,14 +766,6 @@
     "@babel/traverse" "^7.24.7"
     "@babel/types" "^7.24.7"
 
-"@babel/helper-simple-access@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739"
-  integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==
-  dependencies:
-    "@babel/traverse" "^7.25.9"
-    "@babel/types" "^7.25.9"
-
 "@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
   version "7.25.9"
   resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
@@ -828,13 +845,13 @@
     "@babel/template" "^7.24.7"
     "@babel/types" "^7.24.7"
 
-"@babel/helpers@^7.26.0":
-  version "7.26.0"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4"
-  integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==
+"@babel/helpers@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.9.tgz#28f3fb45252fc88ef2dc547c8a911c255fc9fef6"
+  integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==
   dependencies:
-    "@babel/template" "^7.25.9"
-    "@babel/types" "^7.26.0"
+    "@babel/template" "^7.26.9"
+    "@babel/types" "^7.26.9"
 
 "@babel/highlight@^7.24.7":
   version "7.24.7"
@@ -851,19 +868,19 @@
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
   integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
 
-"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2":
+"@babel/parser@^7.25.9", "@babel/parser@^7.26.2":
   version "7.26.2"
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11"
   integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==
   dependencies:
     "@babel/types" "^7.26.0"
 
-"@babel/parser@^7.26.3":
-  version "7.26.3"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234"
-  integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==
+"@babel/parser@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5"
+  integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==
   dependencies:
-    "@babel/types" "^7.26.3"
+    "@babel/types" "^7.26.9"
 
 "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9":
   version "7.25.9"
@@ -955,14 +972,14 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-async-generator-functions@7.25.9", "@babel/plugin-transform-async-generator-functions@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2"
-  integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==
+"@babel/plugin-transform-async-generator-functions@7.26.8", "@babel/plugin-transform-async-generator-functions@^7.26.8":
+  version "7.26.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8"
+  integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
     "@babel/helper-remap-async-to-generator" "^7.25.9"
-    "@babel/traverse" "^7.25.9"
+    "@babel/traverse" "^7.26.8"
 
 "@babel/plugin-transform-async-to-generator@7.25.9", "@babel/plugin-transform-async-to-generator@^7.25.9":
   version "7.25.9"
@@ -973,12 +990,12 @@
     "@babel/helper-plugin-utils" "^7.25.9"
     "@babel/helper-remap-async-to-generator" "^7.25.9"
 
-"@babel/plugin-transform-block-scoped-functions@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458"
-  integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==
+"@babel/plugin-transform-block-scoped-functions@^7.26.5":
+  version "7.26.5"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e"
+  integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
 
 "@babel/plugin-transform-block-scoping@^7.25.9":
   version "7.25.9"
@@ -1060,12 +1077,11 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-exponentiation-operator@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f"
-  integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==
+"@babel/plugin-transform-exponentiation-operator@^7.26.3":
+  version "7.26.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc"
+  integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==
   dependencies:
-    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9"
     "@babel/helper-plugin-utils" "^7.25.9"
 
 "@babel/plugin-transform-export-namespace-from@^7.25.9":
@@ -1075,12 +1091,12 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-for-of@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755"
-  integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==
+"@babel/plugin-transform-for-of@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56"
+  integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
     "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
 
 "@babel/plugin-transform-function-name@^7.25.9":
@@ -1128,14 +1144,13 @@
     "@babel/helper-module-transforms" "^7.25.9"
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-modules-commonjs@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686"
-  integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==
+"@babel/plugin-transform-modules-commonjs@^7.26.3":
+  version "7.26.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb"
+  integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==
   dependencies:
-    "@babel/helper-module-transforms" "^7.25.9"
+    "@babel/helper-module-transforms" "^7.26.0"
     "@babel/helper-plugin-utils" "^7.25.9"
-    "@babel/helper-simple-access" "^7.25.9"
 
 "@babel/plugin-transform-modules-systemjs@^7.25.9":
   version "7.25.9"
@@ -1170,12 +1185,12 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949"
-  integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==
+"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6":
+  version "7.26.6"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe"
+  integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
 
 "@babel/plugin-transform-numeric-separator@^7.25.9":
   version "7.25.9"
@@ -1270,13 +1285,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-runtime@7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea"
-  integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==
+"@babel/plugin-transform-runtime@7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz#ea8be19ef134668e98f7b54daf7c4f853859dc44"
+  integrity sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==
   dependencies:
     "@babel/helper-module-imports" "^7.25.9"
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
     babel-plugin-polyfill-corejs2 "^0.4.10"
     babel-plugin-polyfill-corejs3 "^0.10.6"
     babel-plugin-polyfill-regenerator "^0.6.1"
@@ -1304,19 +1319,19 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/plugin-transform-template-literals@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1"
-  integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==
+"@babel/plugin-transform-template-literals@^7.26.8":
+  version "7.26.8"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5"
+  integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
 
-"@babel/plugin-transform-typeof-symbol@^7.25.9":
-  version "7.25.9"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b"
-  integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==
+"@babel/plugin-transform-typeof-symbol@^7.26.7":
+  version "7.26.7"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937"
+  integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==
   dependencies:
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
 
 "@babel/plugin-transform-unicode-escapes@^7.25.9":
   version "7.25.9"
@@ -1349,14 +1364,14 @@
     "@babel/helper-create-regexp-features-plugin" "^7.25.9"
     "@babel/helper-plugin-utils" "^7.25.9"
 
-"@babel/preset-env@7.26.0":
-  version "7.26.0"
-  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1"
-  integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==
+"@babel/preset-env@7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3"
+  integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==
   dependencies:
-    "@babel/compat-data" "^7.26.0"
-    "@babel/helper-compilation-targets" "^7.25.9"
-    "@babel/helper-plugin-utils" "^7.25.9"
+    "@babel/compat-data" "^7.26.8"
+    "@babel/helper-compilation-targets" "^7.26.5"
+    "@babel/helper-plugin-utils" "^7.26.5"
     "@babel/helper-validator-option" "^7.25.9"
     "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9"
     "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9"
@@ -1368,9 +1383,9 @@
     "@babel/plugin-syntax-import-attributes" "^7.26.0"
     "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
     "@babel/plugin-transform-arrow-functions" "^7.25.9"
-    "@babel/plugin-transform-async-generator-functions" "^7.25.9"
+    "@babel/plugin-transform-async-generator-functions" "^7.26.8"
     "@babel/plugin-transform-async-to-generator" "^7.25.9"
-    "@babel/plugin-transform-block-scoped-functions" "^7.25.9"
+    "@babel/plugin-transform-block-scoped-functions" "^7.26.5"
     "@babel/plugin-transform-block-scoping" "^7.25.9"
     "@babel/plugin-transform-class-properties" "^7.25.9"
     "@babel/plugin-transform-class-static-block" "^7.26.0"
@@ -1381,21 +1396,21 @@
     "@babel/plugin-transform-duplicate-keys" "^7.25.9"
     "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9"
     "@babel/plugin-transform-dynamic-import" "^7.25.9"
-    "@babel/plugin-transform-exponentiation-operator" "^7.25.9"
+    "@babel/plugin-transform-exponentiation-operator" "^7.26.3"
     "@babel/plugin-transform-export-namespace-from" "^7.25.9"
-    "@babel/plugin-transform-for-of" "^7.25.9"
+    "@babel/plugin-transform-for-of" "^7.26.9"
     "@babel/plugin-transform-function-name" "^7.25.9"
     "@babel/plugin-transform-json-strings" "^7.25.9"
     "@babel/plugin-transform-literals" "^7.25.9"
     "@babel/plugin-transform-logical-assignment-operators" "^7.25.9"
     "@babel/plugin-transform-member-expression-literals" "^7.25.9"
     "@babel/plugin-transform-modules-amd" "^7.25.9"
-    "@babel/plugin-transform-modules-commonjs" "^7.25.9"
+    "@babel/plugin-transform-modules-commonjs" "^7.26.3"
     "@babel/plugin-transform-modules-systemjs" "^7.25.9"
     "@babel/plugin-transform-modules-umd" "^7.25.9"
     "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9"
     "@babel/plugin-transform-new-target" "^7.25.9"
-    "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9"
+    "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6"
     "@babel/plugin-transform-numeric-separator" "^7.25.9"
     "@babel/plugin-transform-object-rest-spread" "^7.25.9"
     "@babel/plugin-transform-object-super" "^7.25.9"
@@ -1411,17 +1426,17 @@
     "@babel/plugin-transform-shorthand-properties" "^7.25.9"
     "@babel/plugin-transform-spread" "^7.25.9"
     "@babel/plugin-transform-sticky-regex" "^7.25.9"
-    "@babel/plugin-transform-template-literals" "^7.25.9"
-    "@babel/plugin-transform-typeof-symbol" "^7.25.9"
+    "@babel/plugin-transform-template-literals" "^7.26.8"
+    "@babel/plugin-transform-typeof-symbol" "^7.26.7"
     "@babel/plugin-transform-unicode-escapes" "^7.25.9"
     "@babel/plugin-transform-unicode-property-regex" "^7.25.9"
     "@babel/plugin-transform-unicode-regex" "^7.25.9"
     "@babel/plugin-transform-unicode-sets-regex" "^7.25.9"
     "@babel/preset-modules" "0.1.6-no-external-plugins"
     babel-plugin-polyfill-corejs2 "^0.4.10"
-    babel-plugin-polyfill-corejs3 "^0.10.6"
+    babel-plugin-polyfill-corejs3 "^0.11.0"
     babel-plugin-polyfill-regenerator "^0.6.1"
-    core-js-compat "^3.38.1"
+    core-js-compat "^3.40.0"
     semver "^6.3.1"
 
 "@babel/preset-modules@0.1.6-no-external-plugins":
@@ -1438,10 +1453,10 @@
   resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
   integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
 
-"@babel/runtime@7.26.0":
-  version "7.26.0"
-  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1"
-  integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==
+"@babel/runtime@7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.9.tgz#aa4c6facc65b9cb3f87d75125ffd47781b475433"
+  integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==
   dependencies:
     regenerator-runtime "^0.14.0"
 
@@ -1470,6 +1485,15 @@
     "@babel/parser" "^7.25.9"
     "@babel/types" "^7.25.9"
 
+"@babel/template@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2"
+  integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==
+  dependencies:
+    "@babel/code-frame" "^7.26.2"
+    "@babel/parser" "^7.26.9"
+    "@babel/types" "^7.26.9"
+
 "@babel/traverse@^7.10.3", "@babel/traverse@^7.24.6", "@babel/traverse@^7.24.7":
   version "7.24.7"
   resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5"
@@ -1499,6 +1523,19 @@
     debug "^4.3.1"
     globals "^11.1.0"
 
+"@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a"
+  integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==
+  dependencies:
+    "@babel/code-frame" "^7.26.2"
+    "@babel/generator" "^7.26.9"
+    "@babel/parser" "^7.26.9"
+    "@babel/template" "^7.26.9"
+    "@babel/types" "^7.26.9"
+    debug "^4.3.1"
+    globals "^11.1.0"
+
 "@babel/types@^7.0.0", "@babel/types@^7.10.3", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.24.6", "@babel/types@^7.24.7", "@babel/types@^7.4.4":
   version "7.24.7"
   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2"
@@ -1516,10 +1553,10 @@
     "@babel/helper-string-parser" "^7.25.9"
     "@babel/helper-validator-identifier" "^7.25.9"
 
-"@babel/types@^7.26.3":
-  version "7.26.3"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0"
-  integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==
+"@babel/types@^7.26.9":
+  version "7.26.9"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce"
+  integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==
   dependencies:
     "@babel/helper-string-parser" "^7.25.9"
     "@babel/helper-validator-identifier" "^7.25.9"
@@ -1661,6 +1698,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461"
   integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==
 
+"@esbuild/aix-ppc64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz#499600c5e1757a524990d5d92601f0ac3ce87f64"
+  integrity sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==
+
 "@esbuild/android-arm64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
@@ -1681,6 +1723,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894"
   integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==
 
+"@esbuild/android-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz#b9b8231561a1dfb94eb31f4ee056b92a985c324f"
+  integrity sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==
+
 "@esbuild/android-arm@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
@@ -1701,6 +1748,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3"
   integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==
 
+"@esbuild/android-arm@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz#ca6e7888942505f13e88ac9f5f7d2a72f9facd2b"
+  integrity sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==
+
 "@esbuild/android-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
@@ -1721,6 +1773,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb"
   integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==
 
+"@esbuild/android-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz#e765ea753bac442dfc9cb53652ce8bd39d33e163"
+  integrity sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==
+
 "@esbuild/darwin-arm64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
@@ -1741,6 +1798,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936"
   integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==
 
+"@esbuild/darwin-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz#fa394164b0d89d4fdc3a8a21989af70ef579fa2c"
+  integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==
+
 "@esbuild/darwin-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
@@ -1761,6 +1823,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9"
   integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==
 
+"@esbuild/darwin-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz#91979d98d30ba6e7d69b22c617cc82bdad60e47a"
+  integrity sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==
+
 "@esbuild/freebsd-arm64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
@@ -1781,6 +1848,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00"
   integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==
 
+"@esbuild/freebsd-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz#b97e97073310736b430a07b099d837084b85e9ce"
+  integrity sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==
+
 "@esbuild/freebsd-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
@@ -1801,6 +1873,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f"
   integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==
 
+"@esbuild/freebsd-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz#f3b694d0da61d9910ec7deff794d444cfbf3b6e7"
+  integrity sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==
+
 "@esbuild/linux-arm64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
@@ -1821,6 +1898,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43"
   integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==
 
+"@esbuild/linux-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz#f921f699f162f332036d5657cad9036f7a993f73"
+  integrity sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==
+
 "@esbuild/linux-arm@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
@@ -1841,6 +1923,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736"
   integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==
 
+"@esbuild/linux-arm@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz#cc49305b3c6da317c900688995a4050e6cc91ca3"
+  integrity sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==
+
 "@esbuild/linux-ia32@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
@@ -1861,6 +1948,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5"
   integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==
 
+"@esbuild/linux-ia32@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz#3e0736fcfab16cff042dec806247e2c76e109e19"
+  integrity sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==
+
 "@esbuild/linux-loong64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
@@ -1881,6 +1973,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc"
   integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==
 
+"@esbuild/linux-loong64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz#ea2bf730883cddb9dfb85124232b5a875b8020c7"
+  integrity sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==
+
 "@esbuild/linux-mips64el@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
@@ -1901,6 +1998,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb"
   integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==
 
+"@esbuild/linux-mips64el@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz#4cababb14eede09248980a2d2d8b966464294ff1"
+  integrity sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==
+
 "@esbuild/linux-ppc64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
@@ -1921,6 +2023,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412"
   integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==
 
+"@esbuild/linux-ppc64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz#8860a4609914c065373a77242e985179658e1951"
+  integrity sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==
+
 "@esbuild/linux-riscv64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
@@ -1941,6 +2048,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694"
   integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==
 
+"@esbuild/linux-riscv64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz#baf26e20bb2d38cfb86ee282dff840c04f4ed987"
+  integrity sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==
+
 "@esbuild/linux-s390x@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
@@ -1961,6 +2073,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577"
   integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==
 
+"@esbuild/linux-s390x@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz#8323afc0d6cb1b6dc6e9fd21efd9e1542c3640a4"
+  integrity sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==
+
 "@esbuild/linux-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
@@ -1981,11 +2098,21 @@
   resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f"
   integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==
 
+"@esbuild/linux-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz#08fcf60cb400ed2382e9f8e0f5590bac8810469a"
+  integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==
+
 "@esbuild/netbsd-arm64@0.24.2":
   version "0.24.2"
   resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6"
   integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==
 
+"@esbuild/netbsd-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz#935c6c74e20f7224918fbe2e6c6fe865b6c6ea5b"
+  integrity sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==
+
 "@esbuild/netbsd-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
@@ -2006,11 +2133,21 @@
   resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40"
   integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==
 
+"@esbuild/netbsd-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz#414677cef66d16c5a4d210751eb2881bb9c1b62b"
+  integrity sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==
+
 "@esbuild/openbsd-arm64@0.24.2":
   version "0.24.2"
   resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f"
   integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==
 
+"@esbuild/openbsd-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz#8fd55a4d08d25cdc572844f13c88d678c84d13f7"
+  integrity sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==
+
 "@esbuild/openbsd-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
@@ -2031,6 +2168,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205"
   integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==
 
+"@esbuild/openbsd-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz#0c48ddb1494bbc2d6bcbaa1429a7f465fa1dedde"
+  integrity sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==
+
 "@esbuild/sunos-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
@@ -2051,6 +2193,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6"
   integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==
 
+"@esbuild/sunos-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz#86ff9075d77962b60dd26203d7352f92684c8c92"
+  integrity sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==
+
 "@esbuild/win32-arm64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
@@ -2071,6 +2218,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85"
   integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==
 
+"@esbuild/win32-arm64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz#849c62327c3229467f5b5cd681bf50588442e96c"
+  integrity sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==
+
 "@esbuild/win32-ia32@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
@@ -2091,6 +2243,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2"
   integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==
 
+"@esbuild/win32-ia32@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz#f62eb480cd7cca088cb65bb46a6db25b725dc079"
+  integrity sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==
+
 "@esbuild/win32-x64@0.17.19":
   version "0.17.19"
   resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
@@ -2111,6 +2268,11 @@
   resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b"
   integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==
 
+"@esbuild/win32-x64@0.25.0":
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b"
+  integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==
+
 "@firebase/app-types@^0.7.0":
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f"
@@ -2264,136 +2426,135 @@
     protobufjs "^7.2.5"
     yargs "^17.7.2"
 
-"@inquirer/checkbox@^4.0.4":
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.0.4.tgz#e7335f9c23f4100f789a8fceb26417c9a74a6dee"
-  integrity sha512-fYAKCAcGNMdfjL6hZTRUwkIByQ8EIZCXKrIQZH7XjADnN/xvRUhj8UdBbpC4zoUzvChhkSC/zRKaP/tDs3dZpg==
+"@inquirer/checkbox@^4.1.2":
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.2.tgz#a12079f6aff68253392a1955d1a202eb9ac2e207"
+  integrity sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/figures" "^1.0.9"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/figures" "^1.0.10"
+    "@inquirer/type" "^3.0.4"
     ansi-escapes "^4.3.2"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/confirm@5.1.1", "@inquirer/confirm@^5.1.1":
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.1.tgz#18385064b8275eb79fdba505ce527801804eea04"
-  integrity sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==
+"@inquirer/confirm@5.1.6", "@inquirer/confirm@^5.1.6":
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.6.tgz#e5a959676716860c26560b33997b38bd65bf96ad"
+  integrity sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
 
-"@inquirer/core@^10.1.2":
-  version "10.1.2"
-  resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.2.tgz#a9c5b9ed814a636e99b5c0a8ca4f1626d99fd75d"
-  integrity sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==
+"@inquirer/core@^10.1.7":
+  version "10.1.7"
+  resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.7.tgz#04260b59e0343e86f76da0a4e1fbe4975aca03ca"
+  integrity sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==
   dependencies:
-    "@inquirer/figures" "^1.0.9"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/figures" "^1.0.10"
+    "@inquirer/type" "^3.0.4"
     ansi-escapes "^4.3.2"
     cli-width "^4.1.0"
     mute-stream "^2.0.0"
     signal-exit "^4.1.0"
-    strip-ansi "^6.0.1"
     wrap-ansi "^6.2.0"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/editor@^4.2.1":
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.1.tgz#9887e95aa28a52eb20e9e08d85cb3698ef404601"
-  integrity sha512-xn9aDaiP6nFa432i68JCaL302FyL6y/6EG97nAtfIPnWZ+mWPgCMLGc4XZ2QQMsZtu9q3Jd5AzBPjXh10aX9kA==
+"@inquirer/editor@^4.2.7":
+  version "4.2.7"
+  resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.7.tgz#61cb58486b125a9cbfc88a9424bf1681bb7dbd2d"
+  integrity sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
     external-editor "^3.1.0"
 
-"@inquirer/expand@^4.0.4":
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.4.tgz#e3b052835e48fd4ebcf71813b7eae8b03c729d1b"
-  integrity sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg==
+"@inquirer/expand@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.9.tgz#935947192dad0d07a537664ba6a527b9ced44be2"
+  integrity sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
     yoctocolors-cjs "^2.1.2"
 
+"@inquirer/figures@^1.0.10":
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.10.tgz#e3676a51c9c51aaabcd6ba18a28e82b98417db37"
+  integrity sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==
+
 "@inquirer/figures@^1.0.2":
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.3.tgz#1227cc980f88e6d6ab85abadbf164f5038041edd"
   integrity sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==
 
-"@inquirer/figures@^1.0.9":
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.9.tgz#9d8128f8274cde4ca009ca8547337cab3f37a4a3"
-  integrity sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==
-
-"@inquirer/input@^4.1.1":
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.1.tgz#aea2e463087c6aae57b9801e1ae5648f50d0d22e"
-  integrity sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg==
+"@inquirer/input@^4.1.6":
+  version "4.1.6"
+  resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.6.tgz#329700fd5a2d2f37be63768b09afd0a44edf3c67"
+  integrity sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
 
-"@inquirer/number@^3.0.4":
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.4.tgz#090dcac6886d0cddc255f6624b61fb4461747fee"
-  integrity sha512-DX7a6IXRPU0j8kr2ovf+QaaDiIf+zEKaZVzCWdLOTk7XigqSXvoh4cul7x68xp54WTQrgSnW7P1WBJDbyY3GhA==
+"@inquirer/number@^3.0.9":
+  version "3.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.9.tgz#23dae9e31de368e18c4ec2543a9f006e4bb4a98d"
+  integrity sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
 
-"@inquirer/password@^4.0.4":
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.4.tgz#77891ae3ed5736607e6e942993ac40ca00411a2c"
-  integrity sha512-wiliQOWdjM8FnBmdIHtQV2Ca3S1+tMBUerhyjkRCv1g+4jSvEweGu9GCcvVEgKDhTBT15nrxvk5/bVrGUqSs1w==
+"@inquirer/password@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.9.tgz#1a7d14a14bd2e54294d7fa5cc9fa6da99315149c"
+  integrity sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
     ansi-escapes "^4.3.2"
 
-"@inquirer/prompts@7.2.1":
-  version "7.2.1"
-  resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.2.1.tgz#f00fbcf06998a07faebc10741efa289384529950"
-  integrity sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==
-  dependencies:
-    "@inquirer/checkbox" "^4.0.4"
-    "@inquirer/confirm" "^5.1.1"
-    "@inquirer/editor" "^4.2.1"
-    "@inquirer/expand" "^4.0.4"
-    "@inquirer/input" "^4.1.1"
-    "@inquirer/number" "^3.0.4"
-    "@inquirer/password" "^4.0.4"
-    "@inquirer/rawlist" "^4.0.4"
-    "@inquirer/search" "^3.0.4"
-    "@inquirer/select" "^4.0.4"
-
-"@inquirer/rawlist@^4.0.4":
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.4.tgz#d10bbd6c529cd468d3d764c19de21334a01fa6d9"
-  integrity sha512-IsVN2EZdNHsmFdKWx9HaXb8T/s3FlR/U1QPt9dwbSyPtjFbMTlW9CRFvnn0bm/QIsrMRD2oMZqrQpSWPQVbXXg==
+"@inquirer/prompts@7.3.2":
+  version "7.3.2"
+  resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.3.2.tgz#ad0879eb3bc783c19b78c420e5eeb18a09fc9b47"
+  integrity sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==
+  dependencies:
+    "@inquirer/checkbox" "^4.1.2"
+    "@inquirer/confirm" "^5.1.6"
+    "@inquirer/editor" "^4.2.7"
+    "@inquirer/expand" "^4.0.9"
+    "@inquirer/input" "^4.1.6"
+    "@inquirer/number" "^3.0.9"
+    "@inquirer/password" "^4.0.9"
+    "@inquirer/rawlist" "^4.0.9"
+    "@inquirer/search" "^3.0.9"
+    "@inquirer/select" "^4.0.9"
+
+"@inquirer/rawlist@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.9.tgz#c5f8253c87ad48713e0e8b34274fdd1aa8b08d2c"
+  integrity sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/type" "^3.0.4"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/search@^3.0.4":
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.4.tgz#fcf51a853536add37491920634a182ecc9f5524b"
-  integrity sha512-tSkJk2SDmC2MEdTIjknXWmCnmPr5owTs9/xjfa14ol1Oh95n6xW7SYn5fiPk4/vrJPys0ggSWiISdPze4LTa7A==
+"@inquirer/search@^3.0.9":
+  version "3.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.9.tgz#00848c93ce86dcd24989a72dabfd8aeb34d2829b"
+  integrity sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/figures" "^1.0.9"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/figures" "^1.0.10"
+    "@inquirer/type" "^3.0.4"
     yoctocolors-cjs "^2.1.2"
 
-"@inquirer/select@^4.0.4":
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.4.tgz#026ada15754def1cd3fbc01efc56eae45ccc7de4"
-  integrity sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w==
+"@inquirer/select@^4.0.9":
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.9.tgz#28a4c7b9a406798a9ea365d67dbad5e427c3febe"
+  integrity sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==
   dependencies:
-    "@inquirer/core" "^10.1.2"
-    "@inquirer/figures" "^1.0.9"
-    "@inquirer/type" "^3.0.2"
+    "@inquirer/core" "^10.1.7"
+    "@inquirer/figures" "^1.0.10"
+    "@inquirer/type" "^3.0.4"
     ansi-escapes "^4.3.2"
     yoctocolors-cjs "^2.1.2"
 
@@ -2404,10 +2565,10 @@
   dependencies:
     mute-stream "^1.0.0"
 
-"@inquirer/type@^3.0.2":
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.2.tgz#baff9f8d70947181deb36772cd9a5b6876d3e60c"
-  integrity sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==
+"@inquirer/type@^3.0.4":
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.4.tgz#fa5f9e91a0abf3c9e93d3e1990ecb891d8195cf2"
+  integrity sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==
 
 "@isaacs/cliui@^8.0.2":
   version "8.0.2"
@@ -2478,7 +2639,7 @@
     "@jridgewell/resolve-uri" "^3.0.3"
     "@jridgewell/sourcemap-codec" "^1.4.10"
 
-"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
   version "0.3.25"
   resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
   integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
@@ -2540,60 +2701,60 @@
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.11.tgz#8b0034d9f9a5c859f629a5c1e760bf43258e9e6c"
   integrity sha512-7rO1BiJDWy0WEHDknVSuROMmBHD0Vh5KsgQojN8ulNbOJf0f3KsjoVB3HDPlVO3n75hTjxGn0rG19im28H3DVQ==
 
-"@lmdb/lmdb-darwin-arm64@3.2.2":
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.2.tgz#39e25e2a95d35a7350862af96d05e5396ea8a074"
-  integrity sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==
+"@lmdb/lmdb-darwin-arm64@3.2.6":
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.6.tgz#5de419e9b95ba7aa5a0305a451e202be41dd76c0"
+  integrity sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==
 
 "@lmdb/lmdb-darwin-x64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.11.tgz#e7290bec89c21d94ae501f014d12ac24ae8283a5"
   integrity sha512-rqkwNYEqQ6BR51ffHasIMh/8+slTPf1kfoAdreLDsUkpAJ/hntW0QP9eMC9eOwRjfuOURdlgGLeCaaCpDTxMCQ==
 
-"@lmdb/lmdb-darwin-x64@3.2.2":
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.2.tgz#7b9eac5b7a89dbf3433648622fe52799dd4202e5"
-  integrity sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==
+"@lmdb/lmdb-darwin-x64@3.2.6":
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.6.tgz#1e2a066f49b454411ed778a589ee57a6051851df"
+  integrity sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==
 
 "@lmdb/lmdb-linux-arm64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.11.tgz#399299cc2f4f97c78666f2c5273842c77847f2c2"
   integrity sha512-P5d7Uj297g2tlKsvDZDqZNEZ3mw0npTrQuizPS63tXV1VGz/bHMuqL1/NWmJqAtVSPZdhQe0DD/sbBai7Ra6UA==
 
-"@lmdb/lmdb-linux-arm64@3.2.2":
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.2.tgz#f81b9233b2b78141af4cd22864f152cfeeed7b93"
-  integrity sha512-4hdgZtWI1idQlWRp+eleWXD9KLvObgboRaVoBj2POdPEYvsKANllvMW0El8tEQwtw74yB9NT6P8ENBB5UJf5+g==
+"@lmdb/lmdb-linux-arm64@3.2.6":
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.6.tgz#42c4c67dd67da62860f8fb7dd57e9171f407c1d2"
+  integrity sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==
 
 "@lmdb/lmdb-linux-arm@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.11.tgz#943db4a560115bbb96b77be564d128c41898e193"
   integrity sha512-uGR/sHB5p5d5dzP2+sbrf42++qw8PQbB6CqgHMBfZcXTUWz+A84XWWbl9UMg+6XY11mBHKUpzhswbHnpmE3iAg==
 
-"@lmdb/lmdb-linux-arm@3.2.2":
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.2.tgz#251fa02ed9d2d8b8a4827f5e53bf1e2d8aa745b8"
-  integrity sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==
+"@lmdb/lmdb-linux-arm@3.2.6":
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.6.tgz#a4aabc336dfbb2efdad6c91e39a95bece96fa7bd"
+  integrity sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==
 
 "@lmdb/lmdb-linux-x64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.11.tgz#ec5e071a157f185c2920ce99769dbf5a2fffe8f1"
   integrity sha512-xiO21qpfu/cu1Pcf/2+l2eG/96wFTzgPa25/qQ/VdvlrnKfYhtDzBo06lmfa6xrEzQZJ/kdFzwHZuafCDE58iA==
 
-"@lmdb/lmdb-linux-x64@3.2.2":
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.2.tgz#f794a5b4c06019a82622565ba3d38e47aa113a2c"
-  integrity sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==
+"@lmdb/lmdb-linux-x64@3.2.6":
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.6.tgz#83fb669606ebe6275915a06f2ca2e34d2ce1664e"
+  integrity sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==
 
 "@lmdb/lmdb-win32-x64@3.0.11":
   version "3.0.11"
   resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.11.tgz#76fdd3338a5f55e778f3c9121cce2cacf87b48a6"
   integrity sha512-tjlzuLdmTlsWVdj7Wso/p3wJtLMqznkeGEELRMjRQCgas8mONBuwmk9jFO30Di86z4QxL1agZvugUrPMCm/iDw==
 
-"@lmdb/lmdb-win32-x64@3.2.2":
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz#d160454f0e6c4f4af0a5a05d85141c3bd9523f9c"
-  integrity sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==
+"@lmdb/lmdb-win32-x64@3.2.6":
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz#729f2035ddef1975279b3329532f5c1f86c91918"
+  integrity sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==
 
 "@material/material-color-utilities@^0.3.0":
   version "0.3.0"
@@ -2818,10 +2979,10 @@
     "@napi-rs/nice-win32-ia32-msvc" "1.0.1"
     "@napi-rs/nice-win32-x64-msvc" "1.0.1"
 
-"@ngtools/webpack@19.1.4":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-19.1.4.tgz#3062b99456c600039a3b5def867efd548bef15e2"
-  integrity sha512-ZmUlbVqu/pz8abxVxNCKgKeY5g2MX1NsKxhM8rRV5tVV/MaAtSYNHgmFSYcKWA178v7k6BUuhnoNNxl5qqc1kw==
+"@ngtools/webpack@19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-19.2.0-rc.0.tgz#b693ecf88180c3f827877bf1b1ef5199a477cef0"
+  integrity sha512-NcEoDEn46h1H3Vp+2a1HyfjnCa/J3IF9R4UNK12W9qHa+k5ru27Ij3xaLbW4MYyqU3WOuCnacnLAI0pPXujAtQ==
 
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
@@ -3354,265 +3515,175 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27"
   integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==
 
-"@rollup/rollup-android-arm-eabi@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz#462e7ecdd60968bc9eb95a20d185e74f8243ec1b"
-  integrity sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==
-
-"@rollup/rollup-android-arm-eabi@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809"
-  integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==
+"@rollup/rollup-android-arm-eabi@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz#731df27dfdb77189547bcef96ada7bf166bbb2fb"
+  integrity sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==
 
 "@rollup/rollup-android-arm64@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203"
   integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==
 
-"@rollup/rollup-android-arm64@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz#78a2b8a8a55f71a295eb860a654ae90a2b168f40"
-  integrity sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==
-
-"@rollup/rollup-android-arm64@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad"
-  integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==
+"@rollup/rollup-android-arm64@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz#4bea6db78e1f6927405df7fe0faf2f5095e01343"
+  integrity sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==
 
 "@rollup/rollup-darwin-arm64@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096"
   integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==
 
-"@rollup/rollup-darwin-arm64@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz#5b783af714f434f1e66e3cdfa3817e0b99216d84"
-  integrity sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==
-
-"@rollup/rollup-darwin-arm64@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23"
-  integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==
+"@rollup/rollup-darwin-arm64@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz#a7aab77d44be3c44a20f946e10160f84e5450e7f"
+  integrity sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==
 
 "@rollup/rollup-darwin-x64@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c"
   integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==
 
-"@rollup/rollup-darwin-x64@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz#f72484e842521a5261978034e18e20f778a2850d"
-  integrity sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==
-
-"@rollup/rollup-darwin-x64@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d"
-  integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==
-
-"@rollup/rollup-freebsd-arm64@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz#3c919dff72b2fe344811a609c674a8347b033f62"
-  integrity sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==
-
-"@rollup/rollup-freebsd-arm64@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003"
-  integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==
+"@rollup/rollup-darwin-x64@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz#c572c024b57ee8ddd1b0851703ace9eb6cc0dd82"
+  integrity sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==
 
-"@rollup/rollup-freebsd-x64@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz#b62a3a8365b363b3fdfa6da11a9188b6ab4dca7c"
-  integrity sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==
+"@rollup/rollup-freebsd-arm64@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz#cf74f8113b5a83098a5c026c165742277cbfb88b"
+  integrity sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==
 
-"@rollup/rollup-freebsd-x64@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360"
-  integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==
+"@rollup/rollup-freebsd-x64@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz#39561f3a2f201a4ad6a01425b1ff5928154ecd7c"
+  integrity sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==
 
 "@rollup/rollup-linux-arm-gnueabihf@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8"
   integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==
 
-"@rollup/rollup-linux-arm-gnueabihf@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz#0d02cc55bd229bd8ca5c54f65f916ba5e0591c94"
-  integrity sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9"
-  integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==
+"@rollup/rollup-linux-arm-gnueabihf@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz#980d6061e373bfdaeb67925c46d2f8f9b3de537f"
+  integrity sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==
 
 "@rollup/rollup-linux-arm-musleabihf@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549"
   integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==
 
-"@rollup/rollup-linux-arm-musleabihf@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz#c51d379263201e88a60e92bd8e90878f0c044425"
-  integrity sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==
-
-"@rollup/rollup-linux-arm-musleabihf@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b"
-  integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==
+"@rollup/rollup-linux-arm-musleabihf@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz#f91a90f30dc00d5a64ac2d9bbedc829cd3cfaa78"
+  integrity sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==
 
 "@rollup/rollup-linux-arm64-gnu@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577"
   integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==
 
-"@rollup/rollup-linux-arm64-gnu@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz#93ce2addc337b5cfa52b84f8e730d2e36eb4339b"
-  integrity sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==
-
-"@rollup/rollup-linux-arm64-gnu@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528"
-  integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==
+"@rollup/rollup-linux-arm64-gnu@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz#fac700fa5c38bc13a0d5d34463133093da4c92a0"
+  integrity sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==
 
 "@rollup/rollup-linux-arm64-musl@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c"
   integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==
 
-"@rollup/rollup-linux-arm64-musl@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz#730af6ddc091a5ba5baac28a3510691725dc808b"
-  integrity sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==
-
-"@rollup/rollup-linux-arm64-musl@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80"
-  integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==
+"@rollup/rollup-linux-arm64-musl@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz#f50ecccf8c78841ff6df1706bc4782d7f62bf9c3"
+  integrity sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==
 
-"@rollup/rollup-linux-loongarch64-gnu@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e"
-  integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==
+"@rollup/rollup-linux-loongarch64-gnu@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz#5869dc0b28242da6553e2b52af41374f4038cd6e"
+  integrity sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==
 
 "@rollup/rollup-linux-powerpc64le-gnu@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf"
   integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==
 
-"@rollup/rollup-linux-powerpc64le-gnu@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz#b5565aac20b4de60ca1e557f525e76478b5436af"
-  integrity sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==
-
-"@rollup/rollup-linux-powerpc64le-gnu@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc"
-  integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==
+"@rollup/rollup-linux-powerpc64le-gnu@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz#5cdd9f851ce1bea33d6844a69f9574de335f20b1"
+  integrity sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==
 
 "@rollup/rollup-linux-riscv64-gnu@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9"
   integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==
 
-"@rollup/rollup-linux-riscv64-gnu@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz#d488290bf9338bad4ae9409c4aa8a1728835a20b"
-  integrity sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==
-
-"@rollup/rollup-linux-riscv64-gnu@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e"
-  integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==
+"@rollup/rollup-linux-riscv64-gnu@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz#ef5dc37f4388f5253f0def43e1440ec012af204d"
+  integrity sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==
 
 "@rollup/rollup-linux-s390x-gnu@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec"
   integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==
 
-"@rollup/rollup-linux-s390x-gnu@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz#eb2e3f3a06acf448115045c11a5a96868c95a556"
-  integrity sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==
-
-"@rollup/rollup-linux-s390x-gnu@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea"
-  integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==
+"@rollup/rollup-linux-s390x-gnu@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz#7dbc3ccbcbcfb3e65be74538dfb6e8dd16178fde"
+  integrity sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==
 
 "@rollup/rollup-linux-x64-gnu@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942"
   integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==
 
-"@rollup/rollup-linux-x64-gnu@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz#065952ef2aea7e837dc7e02aa500feeaff4fc507"
-  integrity sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==
-
-"@rollup/rollup-linux-x64-gnu@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588"
-  integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==
+"@rollup/rollup-linux-x64-gnu@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz#5783fc0adcab7dc069692056e8ca8d83709855ce"
+  integrity sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==
 
 "@rollup/rollup-linux-x64-musl@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d"
   integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==
 
-"@rollup/rollup-linux-x64-musl@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz#3435d484d05f5c4d1ffd54541b4facce2887103a"
-  integrity sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==
-
-"@rollup/rollup-linux-x64-musl@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01"
-  integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==
+"@rollup/rollup-linux-x64-musl@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz#00b6c29b298197a384e3c659910b47943003a678"
+  integrity sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==
 
 "@rollup/rollup-win32-arm64-msvc@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf"
   integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==
 
-"@rollup/rollup-win32-arm64-msvc@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz#69682a2a10d9fedc334f87583cfca83c39c08077"
-  integrity sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==
-
-"@rollup/rollup-win32-arm64-msvc@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52"
-  integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==
+"@rollup/rollup-win32-arm64-msvc@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz#cbfee01f1fe73791c35191a05397838520ca3cdd"
+  integrity sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==
 
 "@rollup/rollup-win32-ia32-msvc@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54"
   integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==
 
-"@rollup/rollup-win32-ia32-msvc@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz#b64470f9ac79abb386829c56750b9a4711be3332"
-  integrity sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==
-
-"@rollup/rollup-win32-ia32-msvc@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e"
-  integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==
+"@rollup/rollup-win32-ia32-msvc@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz#95cdbdff48fe6c948abcf6a1d500b2bd5ce33f62"
+  integrity sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==
 
 "@rollup/rollup-win32-x64-msvc@4.18.0":
   version "4.18.0"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4"
   integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==
 
-"@rollup/rollup-win32-x64-msvc@4.28.0":
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz#cb313feef9ac6e3737067fdf34f42804ac65a6f2"
-  integrity sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==
-
-"@rollup/rollup-win32-x64-msvc@4.30.1":
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c"
-  integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==
+"@rollup/rollup-win32-x64-msvc@4.34.8":
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz#4cdb2cfae69cdb7b1a3cc58778e820408075e928"
+  integrity sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==
 
 "@rushstack/node-core-library@4.3.0":
   version "4.3.0"
@@ -3684,13 +3755,13 @@
     argparse "~1.0.9"
     string-argv "~0.3.1"
 
-"@schematics/angular@19.1.4", "@schematics/angular@^19.1.3":
-  version "19.1.4"
-  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-19.1.4.tgz#333817e440866b5b4e92adc2e784b2f501dc68d7"
-  integrity sha512-HFf83SoXbj1K4jkYSSfCg/oXkmSGBx0zG1Lh+dE5GZFdTQmykrBY519aSdrqLVyZzKYjTGfDfSewUeO4a0GE2A==
+"@schematics/angular@19.2.0-rc.0", "@schematics/angular@^19.2.0-rc.0":
+  version "19.2.0-rc.0"
+  resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-19.2.0-rc.0.tgz#9a60c66934c079d4c8758d5158cf7b042717e8f4"
+  integrity sha512-lxZreq+DWs1aIU7H4wl3mjE9axL5QssHQfWBmm2WlJp+4p61X32EBrgw+E1R9v3pAxs2Iz8gwDsPf7+ocpH8Zg==
   dependencies:
-    "@angular-devkit/core" "19.1.4"
-    "@angular-devkit/schematics" "19.1.4"
+    "@angular-devkit/core" "19.2.0-rc.0"
+    "@angular-devkit/schematics" "19.2.0-rc.0"
     jsonc-parser "3.3.1"
 
 "@sigstore/bundle@^3.0.0":
@@ -4023,7 +4094,7 @@
   resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-4.6.4.tgz#76350389d51412047934992bacc40750c69d82a8"
   integrity sha512-qCw5sVW+ylTnrEhe5kfX4l6MgU9REXIVDa/lWEcvTOUmd+LqDYwyjovDq+Zk9blElaEHOj1URDQ/djEBVRf+pw==
 
-"@types/json-schema@*", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+"@types/json-schema@*", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.9":
   version "7.0.15"
   resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
   integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -4641,11 +4712,6 @@ ajv-formats@^2.1.1:
   dependencies:
     ajv "^8.0.0"
 
-ajv-keywords@^3.5.2:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
-  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
-
 ajv-keywords@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
@@ -4673,7 +4739,7 @@ ajv@8.17.1:
     json-schema-traverse "^1.0.0"
     require-from-string "^2.0.2"
 
-ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.5, ajv@^6.12.6, ajv@~6.12.6:
+ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.6, ajv@~6.12.6:
   version "6.12.6"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
   integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -5081,6 +5147,14 @@ babel-plugin-polyfill-corejs3@^0.10.6:
     "@babel/helper-define-polyfill-provider" "^0.6.2"
     core-js-compat "^3.38.0"
 
+babel-plugin-polyfill-corejs3@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6"
+  integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.6.3"
+    core-js-compat "^3.40.0"
+
 babel-plugin-polyfill-regenerator@^0.6.1:
   version "0.6.2"
   resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e"
@@ -5491,6 +5565,16 @@ browserslist@^4.24.0:
     node-releases "^2.0.18"
     update-browserslist-db "^1.1.0"
 
+browserslist@^4.24.3:
+  version "4.24.4"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
+  integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
+  dependencies:
+    caniuse-lite "^1.0.30001688"
+    electron-to-chromium "^1.5.73"
+    node-releases "^2.0.19"
+    update-browserslist-db "^1.1.1"
+
 browserstack-local@^1.3.7:
   version "1.5.5"
   resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.5.5.tgz#f36b625f3b8bfd053f673d85fd1082f2d0759693"
@@ -5727,6 +5811,11 @@ caniuse-lite@^1.0.30001663:
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz#fda8f1d29a8bfdc42de0c170d7f34a9cf19ed7a3"
   integrity sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==
 
+caniuse-lite@^1.0.30001688:
+  version "1.0.30001700"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz#26cd429cf09b4fd4e745daf4916039c794d720f6"
+  integrity sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==
+
 canonical-path@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d"
@@ -6328,13 +6417,20 @@ copy-webpack-plugin@12.0.2:
     schema-utils "^4.2.0"
     serialize-javascript "^6.0.2"
 
-core-js-compat@^3.38.0, core-js-compat@^3.38.1:
+core-js-compat@^3.38.0:
   version "3.38.1"
   resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09"
   integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==
   dependencies:
     browserslist "^4.23.3"
 
+core-js-compat@^3.40.0:
+  version "3.40.0"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.40.0.tgz#7485912a5a4a4315c2fdb2cbdc623e6881c88b38"
+  integrity sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==
+  dependencies:
+    browserslist "^4.24.3"
+
 core-util-is@1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -7097,6 +7193,11 @@ electron-to-chromium@^1.5.4:
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6"
   integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==
 
+electron-to-chromium@^1.5.73:
+  version "1.5.102"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz#81a452ace8e2c3fa7fba904ea4fed25052c53d3f"
+  integrity sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==
+
 emoji-regex@^8.0.0:
   version "8.0.0"
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -7329,10 +7430,10 @@ es6-weak-map@^2.0.3:
     es6-iterator "^2.0.3"
     es6-symbol "^3.1.1"
 
-esbuild-wasm@0.24.2:
-  version "0.24.2"
-  resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.24.2.tgz#1ab3b4b858ecf226a3c1a63455358ecea704c500"
-  integrity sha512-03/7Z1gD+ohDnScFztvI4XddTAbKVmMEzCvvkBpQdWKEXJ+73dTyeNrmdxP1Q0zpDMFjzUJwtK4rLjqwiHbzkw==
+esbuild-wasm@0.25.0:
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.25.0.tgz#56bbcc29d9eb5052ff1598248dc37dd958876e82"
+  integrity sha512-60iuWr6jdTVylmGXjpnqk3pCktUi5Rmjiv6EMza3h4X20BLtfL2BjUGs1+UCt2G9UK7jVGrJdUr5i1k0sL3wBg==
 
 esbuild@0.21.4:
   version "0.21.4"
@@ -7363,36 +7464,36 @@ esbuild@0.21.4:
     "@esbuild/win32-ia32" "0.21.4"
     "@esbuild/win32-x64" "0.21.4"
 
-esbuild@0.24.2, esbuild@^0.24.2:
-  version "0.24.2"
-  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
-  integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
+esbuild@0.25.0:
+  version "0.25.0"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92"
+  integrity sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==
   optionalDependencies:
-    "@esbuild/aix-ppc64" "0.24.2"
-    "@esbuild/android-arm" "0.24.2"
-    "@esbuild/android-arm64" "0.24.2"
-    "@esbuild/android-x64" "0.24.2"
-    "@esbuild/darwin-arm64" "0.24.2"
-    "@esbuild/darwin-x64" "0.24.2"
-    "@esbuild/freebsd-arm64" "0.24.2"
-    "@esbuild/freebsd-x64" "0.24.2"
-    "@esbuild/linux-arm" "0.24.2"
-    "@esbuild/linux-arm64" "0.24.2"
-    "@esbuild/linux-ia32" "0.24.2"
-    "@esbuild/linux-loong64" "0.24.2"
-    "@esbuild/linux-mips64el" "0.24.2"
-    "@esbuild/linux-ppc64" "0.24.2"
-    "@esbuild/linux-riscv64" "0.24.2"
-    "@esbuild/linux-s390x" "0.24.2"
-    "@esbuild/linux-x64" "0.24.2"
-    "@esbuild/netbsd-arm64" "0.24.2"
-    "@esbuild/netbsd-x64" "0.24.2"
-    "@esbuild/openbsd-arm64" "0.24.2"
-    "@esbuild/openbsd-x64" "0.24.2"
-    "@esbuild/sunos-x64" "0.24.2"
-    "@esbuild/win32-arm64" "0.24.2"
-    "@esbuild/win32-ia32" "0.24.2"
-    "@esbuild/win32-x64" "0.24.2"
+    "@esbuild/aix-ppc64" "0.25.0"
+    "@esbuild/android-arm" "0.25.0"
+    "@esbuild/android-arm64" "0.25.0"
+    "@esbuild/android-x64" "0.25.0"
+    "@esbuild/darwin-arm64" "0.25.0"
+    "@esbuild/darwin-x64" "0.25.0"
+    "@esbuild/freebsd-arm64" "0.25.0"
+    "@esbuild/freebsd-x64" "0.25.0"
+    "@esbuild/linux-arm" "0.25.0"
+    "@esbuild/linux-arm64" "0.25.0"
+    "@esbuild/linux-ia32" "0.25.0"
+    "@esbuild/linux-loong64" "0.25.0"
+    "@esbuild/linux-mips64el" "0.25.0"
+    "@esbuild/linux-ppc64" "0.25.0"
+    "@esbuild/linux-riscv64" "0.25.0"
+    "@esbuild/linux-s390x" "0.25.0"
+    "@esbuild/linux-x64" "0.25.0"
+    "@esbuild/netbsd-arm64" "0.25.0"
+    "@esbuild/netbsd-x64" "0.25.0"
+    "@esbuild/openbsd-arm64" "0.25.0"
+    "@esbuild/openbsd-x64" "0.25.0"
+    "@esbuild/sunos-x64" "0.25.0"
+    "@esbuild/win32-arm64" "0.25.0"
+    "@esbuild/win32-ia32" "0.25.0"
+    "@esbuild/win32-x64" "0.25.0"
 
 esbuild@^0.17.5:
   version "0.17.19"
@@ -7451,11 +7552,47 @@ esbuild@^0.20.1:
     "@esbuild/win32-ia32" "0.20.2"
     "@esbuild/win32-x64" "0.20.2"
 
+esbuild@^0.24.2:
+  version "0.24.2"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d"
+  integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==
+  optionalDependencies:
+    "@esbuild/aix-ppc64" "0.24.2"
+    "@esbuild/android-arm" "0.24.2"
+    "@esbuild/android-arm64" "0.24.2"
+    "@esbuild/android-x64" "0.24.2"
+    "@esbuild/darwin-arm64" "0.24.2"
+    "@esbuild/darwin-x64" "0.24.2"
+    "@esbuild/freebsd-arm64" "0.24.2"
+    "@esbuild/freebsd-x64" "0.24.2"
+    "@esbuild/linux-arm" "0.24.2"
+    "@esbuild/linux-arm64" "0.24.2"
+    "@esbuild/linux-ia32" "0.24.2"
+    "@esbuild/linux-loong64" "0.24.2"
+    "@esbuild/linux-mips64el" "0.24.2"
+    "@esbuild/linux-ppc64" "0.24.2"
+    "@esbuild/linux-riscv64" "0.24.2"
+    "@esbuild/linux-s390x" "0.24.2"
+    "@esbuild/linux-x64" "0.24.2"
+    "@esbuild/netbsd-arm64" "0.24.2"
+    "@esbuild/netbsd-x64" "0.24.2"
+    "@esbuild/openbsd-arm64" "0.24.2"
+    "@esbuild/openbsd-x64" "0.24.2"
+    "@esbuild/sunos-x64" "0.24.2"
+    "@esbuild/win32-arm64" "0.24.2"
+    "@esbuild/win32-ia32" "0.24.2"
+    "@esbuild/win32-x64" "0.24.2"
+
 escalade@^3.1.1, escalade@^3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
   integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
 
+escalade@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
+  integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
 escape-goat@^2.0.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
@@ -10328,10 +10465,10 @@ less-loader@12.2.0:
   resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-12.2.0.tgz#e1e94522f6abe9e064ef396c29a3151bc6c1b6cc"
   integrity sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==
 
-less@4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/less/-/less-4.2.1.tgz#fe4c9848525ab44614c0cf2c00abd8d031bb619a"
-  integrity sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==
+less@4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/less/-/less-4.2.2.tgz#4b59ede113933b58ab152190edf9180fc36846d8"
+  integrity sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==
   dependencies:
     copy-anything "^2.0.1"
     parse-node-version "^1.0.1"
@@ -10417,10 +10554,10 @@ lmdb@3.0.11:
     "@lmdb/lmdb-linux-x64" "3.0.11"
     "@lmdb/lmdb-win32-x64" "3.0.11"
 
-lmdb@3.2.2:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.2.2.tgz#1b3c50a0184847c88e02f038a598d6a229a8765e"
-  integrity sha512-LriG93la4PbmPMwI7Hbv8W+0ncLK7549w4sbZSi4QGDjnnxnmNMgxUkaQTEMzH8TpwsfFvgEjpLX7V8B/I9e3g==
+lmdb@3.2.6:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.2.6.tgz#dd18bae6323679f99bc3cb57df81dc507f50f505"
+  integrity sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==
   dependencies:
     msgpackr "^1.11.2"
     node-addon-api "^6.1.0"
@@ -10428,12 +10565,12 @@ lmdb@3.2.2:
     ordered-binary "^1.5.3"
     weak-lru-cache "^1.2.2"
   optionalDependencies:
-    "@lmdb/lmdb-darwin-arm64" "3.2.2"
-    "@lmdb/lmdb-darwin-x64" "3.2.2"
-    "@lmdb/lmdb-linux-arm" "3.2.2"
-    "@lmdb/lmdb-linux-arm64" "3.2.2"
-    "@lmdb/lmdb-linux-x64" "3.2.2"
-    "@lmdb/lmdb-win32-x64" "3.2.2"
+    "@lmdb/lmdb-darwin-arm64" "3.2.6"
+    "@lmdb/lmdb-darwin-x64" "3.2.6"
+    "@lmdb/lmdb-linux-arm" "3.2.6"
+    "@lmdb/lmdb-linux-arm64" "3.2.6"
+    "@lmdb/lmdb-linux-x64" "3.2.6"
+    "@lmdb/lmdb-win32-x64" "3.2.6"
 
 loader-runner@^4.2.0:
   version "4.3.0"
@@ -11309,6 +11446,11 @@ mrmime@2.0.0:
   resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4"
   integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==
 
+mrmime@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc"
+  integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==
+
 ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -11390,6 +11532,11 @@ nanoid@^3.3.7:
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
   integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
 
+nanoid@^3.3.8:
+  version "3.3.8"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
+  integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
+
 nash@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/nash/-/nash-3.0.0.tgz#bced3a0cb8434c2ad30d1a0d567cfc0c37128eea"
@@ -11541,6 +11688,11 @@ node-releases@^2.0.18:
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
   integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
 
+node-releases@^2.0.19:
+  version "2.0.19"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
+  integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+
 node-source-walk@^4.0.0, node-source-walk@^4.2.0, node-source-walk@^4.2.2:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.3.0.tgz#8336b56cfed23ac5180fe98f1e3bb6b11fd5317c"
@@ -11625,10 +11777,10 @@ npm-normalize-package-bin@^4.0.0:
   resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1"
   integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==
 
-npm-package-arg@12.0.1:
-  version "12.0.1"
-  resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.1.tgz#eb05e797b2fbdf8acf7f1d15344e1e05904202d5"
-  integrity sha512-aDxjFfPV3Liw0WOBWlyZLMBqtbgbg03rmGvHDJa2Ttv7tIz+1oB5qWec4psCDFZcZi9b5XdGkPdQiJxOPzvQRQ==
+npm-package-arg@12.0.2:
+  version "12.0.2"
+  resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.2.tgz#3b1e04ebe651cc45028e298664e8c15ce9c0ca40"
+  integrity sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==
   dependencies:
     hosted-git-info "^8.0.0"
     proc-log "^5.0.0"
@@ -12414,12 +12566,12 @@ postcss-values-parser@^2.0.1:
     indexes-of "^1.0.1"
     uniq "^1.0.1"
 
-postcss@8.4.49, postcss@^8.4.49:
-  version "8.4.49"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"
-  integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==
+postcss@8.5.2:
+  version "8.5.2"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd"
+  integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==
   dependencies:
-    nanoid "^3.3.7"
+    nanoid "^3.3.8"
     picocolors "^1.1.1"
     source-map-js "^1.2.1"
 
@@ -12432,6 +12584,24 @@ postcss@^8.1.7, postcss@^8.2.14, postcss@^8.4.17, postcss@^8.4.19, postcss@^8.4.
     picocolors "^1.0.0"
     source-map-js "^1.2.0"
 
+postcss@^8.4.49:
+  version "8.4.49"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"
+  integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==
+  dependencies:
+    nanoid "^3.3.7"
+    picocolors "^1.1.1"
+    source-map-js "^1.2.1"
+
+postcss@^8.5.1:
+  version "8.5.3"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
+  integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
+  dependencies:
+    nanoid "^3.3.8"
+    picocolors "^1.1.1"
+    source-map-js "^1.2.1"
+
 preact-render-to-string@^6.2.1:
   version "6.5.5"
   resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-6.5.5.tgz#831dc3b343320d2d38c23d9cea0d7530d262f948"
@@ -13342,32 +13512,32 @@ rollup-plugin-sourcemaps@^0.6.3:
     "@rollup/pluginutils" "^3.0.9"
     source-map-resolve "^0.6.0"
 
-rollup@4.30.1:
-  version "4.30.1"
-  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.30.1.tgz#d5c3d066055259366cdc3eb6f1d051c5d6afaf74"
-  integrity sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==
+rollup@4.34.8, rollup@^4.30.1:
+  version "4.34.8"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.8.tgz#e859c1a51d899aba9bcf451d4eed1d11fb8e2a6e"
+  integrity sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==
   dependencies:
     "@types/estree" "1.0.6"
   optionalDependencies:
-    "@rollup/rollup-android-arm-eabi" "4.30.1"
-    "@rollup/rollup-android-arm64" "4.30.1"
-    "@rollup/rollup-darwin-arm64" "4.30.1"
-    "@rollup/rollup-darwin-x64" "4.30.1"
-    "@rollup/rollup-freebsd-arm64" "4.30.1"
-    "@rollup/rollup-freebsd-x64" "4.30.1"
-    "@rollup/rollup-linux-arm-gnueabihf" "4.30.1"
-    "@rollup/rollup-linux-arm-musleabihf" "4.30.1"
-    "@rollup/rollup-linux-arm64-gnu" "4.30.1"
-    "@rollup/rollup-linux-arm64-musl" "4.30.1"
-    "@rollup/rollup-linux-loongarch64-gnu" "4.30.1"
-    "@rollup/rollup-linux-powerpc64le-gnu" "4.30.1"
-    "@rollup/rollup-linux-riscv64-gnu" "4.30.1"
-    "@rollup/rollup-linux-s390x-gnu" "4.30.1"
-    "@rollup/rollup-linux-x64-gnu" "4.30.1"
-    "@rollup/rollup-linux-x64-musl" "4.30.1"
-    "@rollup/rollup-win32-arm64-msvc" "4.30.1"
-    "@rollup/rollup-win32-ia32-msvc" "4.30.1"
-    "@rollup/rollup-win32-x64-msvc" "4.30.1"
+    "@rollup/rollup-android-arm-eabi" "4.34.8"
+    "@rollup/rollup-android-arm64" "4.34.8"
+    "@rollup/rollup-darwin-arm64" "4.34.8"
+    "@rollup/rollup-darwin-x64" "4.34.8"
+    "@rollup/rollup-freebsd-arm64" "4.34.8"
+    "@rollup/rollup-freebsd-x64" "4.34.8"
+    "@rollup/rollup-linux-arm-gnueabihf" "4.34.8"
+    "@rollup/rollup-linux-arm-musleabihf" "4.34.8"
+    "@rollup/rollup-linux-arm64-gnu" "4.34.8"
+    "@rollup/rollup-linux-arm64-musl" "4.34.8"
+    "@rollup/rollup-linux-loongarch64-gnu" "4.34.8"
+    "@rollup/rollup-linux-powerpc64le-gnu" "4.34.8"
+    "@rollup/rollup-linux-riscv64-gnu" "4.34.8"
+    "@rollup/rollup-linux-s390x-gnu" "4.34.8"
+    "@rollup/rollup-linux-x64-gnu" "4.34.8"
+    "@rollup/rollup-linux-x64-musl" "4.34.8"
+    "@rollup/rollup-win32-arm64-msvc" "4.34.8"
+    "@rollup/rollup-win32-ia32-msvc" "4.34.8"
+    "@rollup/rollup-win32-x64-msvc" "4.34.8"
     fsevents "~2.3.2"
 
 rollup@^2.66.1:
@@ -13402,33 +13572,6 @@ rollup@^4.13.0:
     "@rollup/rollup-win32-x64-msvc" "4.18.0"
     fsevents "~2.3.2"
 
-rollup@^4.23.0:
-  version "4.28.0"
-  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.0.tgz#eb8d28ed43ef60a18f21d0734d230ee79dd0de77"
-  integrity sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==
-  dependencies:
-    "@types/estree" "1.0.6"
-  optionalDependencies:
-    "@rollup/rollup-android-arm-eabi" "4.28.0"
-    "@rollup/rollup-android-arm64" "4.28.0"
-    "@rollup/rollup-darwin-arm64" "4.28.0"
-    "@rollup/rollup-darwin-x64" "4.28.0"
-    "@rollup/rollup-freebsd-arm64" "4.28.0"
-    "@rollup/rollup-freebsd-x64" "4.28.0"
-    "@rollup/rollup-linux-arm-gnueabihf" "4.28.0"
-    "@rollup/rollup-linux-arm-musleabihf" "4.28.0"
-    "@rollup/rollup-linux-arm64-gnu" "4.28.0"
-    "@rollup/rollup-linux-arm64-musl" "4.28.0"
-    "@rollup/rollup-linux-powerpc64le-gnu" "4.28.0"
-    "@rollup/rollup-linux-riscv64-gnu" "4.28.0"
-    "@rollup/rollup-linux-s390x-gnu" "4.28.0"
-    "@rollup/rollup-linux-x64-gnu" "4.28.0"
-    "@rollup/rollup-linux-x64-musl" "4.28.0"
-    "@rollup/rollup-win32-arm64-msvc" "4.28.0"
-    "@rollup/rollup-win32-ia32-msvc" "4.28.0"
-    "@rollup/rollup-win32-x64-msvc" "4.28.0"
-    fsevents "~2.3.2"
-
 router@^1.3.1:
   version "1.3.8"
   resolved "https://registry.yarnpkg.com/router/-/router-1.3.8.tgz#1509614ae1fbc67139a728481c54b057ecfb04bf"
@@ -13542,10 +13685,10 @@ safe-stable-stringify@^2.3.1:
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
 
-sass-loader@16.0.4:
-  version "16.0.4"
-  resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.4.tgz#5c2afb755fbc0a45a004369efa11579518a39a45"
-  integrity sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==
+sass-loader@16.0.5:
+  version "16.0.5"
+  resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.5.tgz#257bc90119ade066851cafe7f2c3f3504c7cda98"
+  integrity sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==
   dependencies:
     neo-async "^2.6.2"
 
@@ -13565,10 +13708,10 @@ sass@1.77.2:
     immutable "^4.0.0"
     source-map-js ">=0.6.2 <2.0.0"
 
-sass@1.83.1:
-  version "1.83.1"
-  resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.1.tgz#dee1ab94b47a6f9993d3195d36f556bcbda64846"
-  integrity sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==
+sass@1.85.0:
+  version "1.85.0"
+  resolved "https://registry.yarnpkg.com/sass/-/sass-1.85.0.tgz#0127ef697d83144496401553f0a0e87be83df45d"
+  integrity sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==
   dependencies:
     chokidar "^4.0.0"
     immutable "^5.0.2"
@@ -13599,15 +13742,6 @@ sax@>=0.6.0, sax@^1.2.4:
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
   integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
 
-schema-utils@^3.1.1, schema-utils@^3.2.0:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
-  integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
-  dependencies:
-    "@types/json-schema" "^7.0.8"
-    ajv "^6.12.5"
-    ajv-keywords "^3.5.2"
-
 schema-utils@^4.0.0, schema-utils@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b"
@@ -13618,6 +13752,16 @@ schema-utils@^4.0.0, schema-utils@^4.2.0:
     ajv-formats "^2.1.1"
     ajv-keywords "^5.1.0"
 
+schema-utils@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.0.tgz#3b669f04f71ff2dfb5aba7ce2d5a9d79b35622c0"
+  integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==
+  dependencies:
+    "@types/json-schema" "^7.0.9"
+    ajv "^8.9.0"
+    ajv-formats "^2.1.1"
+    ajv-keywords "^5.1.0"
+
 select-hose@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@@ -13672,10 +13816,10 @@ semver@7.6.2, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
   integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
 
-semver@7.6.3:
-  version "7.6.3"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
-  integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+semver@7.7.1:
+  version "7.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
+  integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
 
 semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1:
   version "6.3.1"
@@ -13773,7 +13917,7 @@ sentence-case@^2.1.0:
     no-case "^2.2.0"
     upper-case-first "^1.1.2"
 
-serialize-javascript@^6.0.1, serialize-javascript@^6.0.2:
+serialize-javascript@^6.0.2:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
   integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
@@ -14769,28 +14913,28 @@ term-size@^2.1.0:
   resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
   integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
 
-terser-webpack-plugin@^5.3.10:
-  version "5.3.10"
-  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
-  integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
+terser-webpack-plugin@^5.3.11:
+  version "5.3.11"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz#93c21f44ca86634257cac176f884f942b7ba3832"
+  integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==
   dependencies:
-    "@jridgewell/trace-mapping" "^0.3.20"
+    "@jridgewell/trace-mapping" "^0.3.25"
     jest-worker "^27.4.5"
-    schema-utils "^3.1.1"
-    serialize-javascript "^6.0.1"
-    terser "^5.26.0"
+    schema-utils "^4.3.0"
+    serialize-javascript "^6.0.2"
+    terser "^5.31.1"
 
-terser@5.37.0:
-  version "5.37.0"
-  resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3"
-  integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==
+terser@5.39.0, terser@^5.31.1:
+  version "5.39.0"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a"
+  integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==
   dependencies:
     "@jridgewell/source-map" "^0.3.3"
     acorn "^8.8.2"
     commander "^2.20.0"
     source-map-support "~0.5.20"
 
-terser@^5.10.0, terser@^5.26.0:
+terser@^5.10.0:
   version "5.31.1"
   resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.1.tgz#735de3c987dd671e95190e6b98cfe2f07f3cf0d4"
   integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==
@@ -15381,6 +15525,14 @@ update-browserslist-db@^1.1.0:
     escalade "^3.1.2"
     picocolors "^1.0.1"
 
+update-browserslist-db@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580"
+  integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==
+  dependencies:
+    escalade "^3.2.0"
+    picocolors "^1.1.1"
+
 update-notifier@^4.1.1:
   version "4.1.3"
   resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3"
@@ -15580,14 +15732,14 @@ vite@5.2.12:
   optionalDependencies:
     fsevents "~2.3.3"
 
-vite@6.0.7:
-  version "6.0.7"
-  resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.7.tgz#f0f8c120733b04af52b4a1e3e7cb54eb851a799b"
-  integrity sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==
+vite@6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-6.1.0.tgz#00a4e99a23751af98a2e4701c65ba89ce23858a6"
+  integrity sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==
   dependencies:
     esbuild "^0.24.2"
-    postcss "^8.4.49"
-    rollup "^4.23.0"
+    postcss "^8.5.1"
+    rollup "^4.30.1"
   optionalDependencies:
     fsevents "~2.3.3"
 
@@ -15755,10 +15907,10 @@ webpack-subresource-integrity@5.1.0:
   dependencies:
     typed-assert "^1.0.8"
 
-webpack@5.97.1:
-  version "5.97.1"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.97.1.tgz#972a8320a438b56ff0f1d94ade9e82eac155fa58"
-  integrity sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==
+webpack@5.98.0:
+  version "5.98.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.98.0.tgz#44ae19a8f2ba97537978246072fb89d10d1fbd17"
+  integrity sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==
   dependencies:
     "@types/eslint-scope" "^3.7.7"
     "@types/estree" "^1.0.6"
@@ -15778,9 +15930,9 @@ webpack@5.97.1:
     loader-runner "^4.2.0"
     mime-types "^2.1.27"
     neo-async "^2.6.2"
-    schema-utils "^3.2.0"
+    schema-utils "^4.3.0"
     tapable "^2.1.1"
-    terser-webpack-plugin "^5.3.10"
+    terser-webpack-plugin "^5.3.11"
     watchpack "^2.4.1"
     webpack-sources "^3.2.3"
 

From 14288890f1299fd26e326994f8b33507c7a2de3d Mon Sep 17 00:00:00 2001
From: Denis Bowen <42016383+DBowen33@users.noreply.github.com>
Date: Thu, 20 Feb 2025 18:28:14 +0000
Subject: [PATCH 82/91] fix(material/chips): forced colors disabled chip fix
 (#30429)

doesn't apply forced color to disabled chips to distingiush from active chips

fixes b/383354169

(cherry picked from commit c5213fd3ef4202e9a6896be0f9202bbba78bde6b)
---
 src/material/chips/chip.scss | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/material/chips/chip.scss b/src/material/chips/chip.scss
index 18b8e711209b..ffbd69cda821 100644
--- a/src/material/chips/chip.scss
+++ b/src/material/chips/chip.scss
@@ -62,6 +62,9 @@ $_avatar-trailing-padding: 8px;
 .mdc-evolution-chip--disabled,
 .mdc-evolution-chip__action:disabled {
   pointer-events: none;
+  @include cdk.high-contrast {
+    forced-color-adjust: none;
+  }
 }
 
 .mdc-evolution-chip__action--primary {

From 3dc945c983bc088cc90e8a2cf98f858c2eb73929 Mon Sep 17 00:00:00 2001
From: iladovi <138984680+iladovi@users.noreply.github.com>
Date: Thu, 20 Feb 2025 20:21:05 +0100
Subject: [PATCH 83/91] fix(cdk/collections): SelectionModel setSelection
 method inconsistent with compareWith (#27460)

Fix bug in SelectionModel where compareWith function
was not consistently respected in setSelection method.

Fixes #27425

(cherry picked from commit 9494ff2d65c98726046e6a20dd6a6d938e97a2f6)
---
 src/cdk/collections/selection-model.ts |  2 +-
 src/cdk/collections/selection.spec.ts  | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/cdk/collections/selection-model.ts b/src/cdk/collections/selection-model.ts
index 8ad03692bcff..cf9ca587d959 100644
--- a/src/cdk/collections/selection-model.ts
+++ b/src/cdk/collections/selection-model.ts
@@ -91,7 +91,7 @@ export class SelectionModel<T> {
   setSelection(...values: T[]): boolean | void {
     this._verifyValueAssignment(values);
     const oldValues = this.selected;
-    const newSelectedSet = new Set(values);
+    const newSelectedSet = new Set(values.map(value => this._getConcreteValue(value)));
     values.forEach(value => this._markSelected(value));
     oldValues
       .filter(value => !newSelectedSet.has(this._getConcreteValue(value, newSelectedSet)))
diff --git a/src/cdk/collections/selection.spec.ts b/src/cdk/collections/selection.spec.ts
index 85cecb4d5614..be902b68a478 100644
--- a/src/cdk/collections/selection.spec.ts
+++ b/src/cdk/collections/selection.spec.ts
@@ -300,6 +300,17 @@ describe('SelectionModel', () => {
     expect(model.selected.length).toBe(1);
   });
 
+  it('should not empty selection when caling setSelection twice with comparable', () => {
+    type Item = {id: number};
+    const compareFn = (x: Item, y: Item) => x.id === y.id;
+    const model = new SelectionModel<Item>(false, [], false, compareFn);
+    model.setSelection({id: 1});
+    expect(model.selected).toEqual([{id: 1}]);
+
+    model.setSelection({id: 1});
+    expect(model.selected).toEqual([{id: 1}]);
+  });
+
   describe('setSelection', () => {
     it('should not deselect an already selected value', () => {
       type Item = {key: number; value: string};

From df49210187826b256b60903da7f4c2d86f0c3cd3 Mon Sep 17 00:00:00 2001
From: Andrew Seguin <andrewseguin@users.noreply.github.com>
Date: Thu, 20 Feb 2025 15:47:54 -0700
Subject: [PATCH 84/91] Revert "perf(material/slide-toggle): Optimize :state
 descendant selectors" (#30530)

This reverts commit d9460557f734df46e6f20a35877e442f4cda0280.

Co-authored-by: Andrew Seguin <andrewseguin@google.com>
(cherry picked from commit 283f11039203ae23016d1ed52313025489b2a7cf)
---
 src/material/slide-toggle/slide-toggle.scss | 107 +++++++++-----------
 1 file changed, 48 insertions(+), 59 deletions(-)

diff --git a/src/material/slide-toggle/slide-toggle.scss b/src/material/slide-toggle/slide-toggle.scss
index 640aad6ce4b9..161a2f7c4d98 100644
--- a/src/material/slide-toggle/slide-toggle.scss
+++ b/src/material/slide-toggle/slide-toggle.scss
@@ -113,22 +113,22 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
     }
 
     @include token-utils.use-tokens($_mdc-slots...) {
-      .mdc-switch:enabled:hover:not(:focus):not(:active) > & {
+      .mdc-switch:enabled:hover:not(:focus):not(:active) & {
         @include token-utils.create-token-slot(background, unselected-hover-track-color);
       }
 
-      .mdc-switch:enabled:focus:not(:active) > & {
+      .mdc-switch:enabled:focus:not(:active) & {
         @include token-utils.create-token-slot(background, unselected-focus-track-color);
       }
 
-      .mdc-switch:enabled:active > & {
+      .mdc-switch:enabled:active & {
         @include token-utils.create-token-slot(background, unselected-pressed-track-color);
       }
 
-      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) > &,
-      #{$_interactive-disabled-selector}:focus:not(:active) > &,
-      #{$_interactive-disabled-selector}:active > &,
-      .mdc-switch.mdc-switch--disabled > & {
+      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
+      #{$_interactive-disabled-selector}:focus:not(:active) &,
+      #{$_interactive-disabled-selector}:active &,
+      .mdc-switch.mdc-switch--disabled & {
         @include token-utils.create-token-slot(background, disabled-unselected-track-color);
       }
     }
@@ -162,22 +162,22 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
     }
 
     @include token-utils.use-tokens($_mdc-slots...) {
-      .mdc-switch:enabled:hover:not(:focus):not(:active) > & {
+      .mdc-switch:enabled:hover:not(:focus):not(:active) & {
         @include token-utils.create-token-slot(background, selected-hover-track-color);
       }
 
-      .mdc-switch:enabled:focus:not(:active) > & {
+      .mdc-switch:enabled:focus:not(:active) & {
         @include token-utils.create-token-slot(background, selected-focus-track-color);
       }
 
-      .mdc-switch:enabled:active > & {
+      .mdc-switch:enabled:active & {
         @include token-utils.create-token-slot(background, selected-pressed-track-color);
       }
 
-      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) > &,
-      #{$_interactive-disabled-selector}:focus:not(:active) > &,
-      #{$_interactive-disabled-selector}:active > &,
-      .mdc-switch.mdc-switch--disabled > & {
+      #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
+      #{$_interactive-disabled-selector}:focus:not(:active) &,
+      #{$_interactive-disabled-selector}:active &,
+      .mdc-switch.mdc-switch--disabled & {
         @include token-utils.create-token-slot(background, disabled-selected-track-color);
       }
     }
@@ -266,19 +266,16 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
       @include token-utils.create-token-slot(height, with-icon-handle-size);
     }
 
-    // stylelint-disable-next-line max-line-length
-    .mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
+    .mat-mdc-slide-toggle .mdc-switch:active:not(.mdc-switch--disabled) & {
       @include token-utils.create-token-slot(width, pressed-handle-size);
       @include token-utils.create-token-slot(height, pressed-handle-size);
     }
 
-    // stylelint-disable-next-line max-line-length
-    .mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
+    .mat-mdc-slide-toggle .mdc-switch--selected:active:not(.mdc-switch--disabled) & {
       @include token-utils.create-token-slot(margin, selected-pressed-handle-horizontal-margin);
     }
 
-    // stylelint-disable-next-line max-line-length
-    .mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) > .mdc-switch__handle-track > & {
+    .mat-mdc-slide-toggle .mdc-switch--unselected:active:not(.mdc-switch--disabled) & {
       @include token-utils.create-token-slot(margin, unselected-pressed-handle-horizontal-margin);
     }
 
@@ -313,49 +310,46 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
 
   @include token-utils.use-tokens($_mdc-slots...) {
     &::after {
-      .mdc-switch--selected:enabled > .mdc-switch__handle-track > & {
+      .mdc-switch--selected:enabled & {
         @include token-utils.create-token-slot(background, selected-handle-color);
       }
 
-      .mdc-switch--selected:enabled:hover:not(:focus):not(:active) > .mdc-switch__handle-track > & {
+      .mdc-switch--selected:enabled:hover:not(:focus):not(:active) & {
         @include token-utils.create-token-slot(background, selected-hover-handle-color);
       }
 
-      .mdc-switch--selected:enabled:focus:not(:active) > .mdc-switch__handle-track > & {
+      .mdc-switch--selected:enabled:focus:not(:active) & {
         @include token-utils.create-token-slot(background, selected-focus-handle-color);
       }
 
-      .mdc-switch--selected:enabled:active > .mdc-switch__handle-track > & {
+      .mdc-switch--selected:enabled:active & {
         @include token-utils.create-token-slot(background, selected-pressed-handle-color);
       }
 
-      #{$_interactive-disabled-selector}.mdc-switch--selected:hover:not(:focus):not(:active),
-      #{$_interactive-disabled-selector}.mdc-switch--selected:focus:not(:active),
-      #{$_interactive-disabled-selector}.mdc-switch--selected:active,
-      .mdc-switch--selected.mdc-switch--disabled {
-        > .mdc-switch__handle-track > & {
-          @include token-utils.create-token-slot(background, disabled-selected-handle-color);
-        }
+      #{$_interactive-disabled-selector}.mdc-switch--selected:hover:not(:focus):not(:active) &,
+      #{$_interactive-disabled-selector}.mdc-switch--selected:focus:not(:active) &,
+      #{$_interactive-disabled-selector}.mdc-switch--selected:active &,
+      .mdc-switch--selected.mdc-switch--disabled & {
+        @include token-utils.create-token-slot(background, disabled-selected-handle-color);
       }
 
-      .mdc-switch--unselected:enabled > .mdc-switch__handle-track > & {
+      .mdc-switch--unselected:enabled & {
         @include token-utils.create-token-slot(background, unselected-handle-color);
       }
 
-      // stylelint-disable-next-line max-line-length
-      .mdc-switch--unselected:enabled:hover:not(:focus):not(:active) > .mdc-switch__handle-track > & {
+      .mdc-switch--unselected:enabled:hover:not(:focus):not(:active) & {
         @include token-utils.create-token-slot(background, unselected-hover-handle-color);
       }
 
-      .mdc-switch--unselected:enabled:focus:not(:active) > .mdc-switch__handle-track > & {
+      .mdc-switch--unselected:enabled:focus:not(:active) & {
         @include token-utils.create-token-slot(background, unselected-focus-handle-color);
       }
 
-      .mdc-switch--unselected:enabled:active > .mdc-switch__handle-track > & {
+      .mdc-switch--unselected:enabled:active & {
         @include token-utils.create-token-slot(background, unselected-pressed-handle-color);
       }
 
-      .mdc-switch--unselected.mdc-switch--disabled > .mdc-switch__handle-track > & {
+      .mdc-switch--unselected.mdc-switch--disabled & {
         @include token-utils.create-token-slot(background, disabled-unselected-handle-color);
       }
     }
@@ -375,17 +369,15 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
   top: 0;
 
   @include token-utils.use-tokens($_mdc-slots...) {
-    .mdc-switch:enabled > .mdc-switch__handle-track > .mdc-switch__handle > & {
+    .mdc-switch:enabled & {
       @include token-utils.create-token-slot(box-shadow, handle-elevation-shadow);
     }
 
-    #{$_interactive-disabled-selector}:hover:not(:focus):not(:active),
-    #{$_interactive-disabled-selector}:focus:not(:active),
-    #{$_interactive-disabled-selector}:active,
-    .mdc-switch.mdc-switch--disabled {
-      > .mdc-switch__handle-track > .mdc-switch__handle > & {
-        @include token-utils.create-token-slot(box-shadow, disabled-handle-elevation-shadow);
-      }
+    #{$_interactive-disabled-selector}:hover:not(:focus):not(:active) &,
+    #{$_interactive-disabled-selector}:focus:not(:active) &,
+    #{$_interactive-disabled-selector}:active &,
+    .mdc-switch.mdc-switch--disabled & {
+      @include token-utils.create-token-slot(box-shadow, disabled-handle-elevation-shadow);
     }
   }
 }
@@ -414,7 +406,7 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
       display: block;
     }
 
-    .mdc-switch:hover > .mdc-switch__handle-track > .mdc-switch__handle > & {
+    .mdc-switch:hover & {
       opacity: 0.04;
       transition: 75ms opacity cubic-bezier(0, 0, 0.2, 1);
     }
@@ -425,35 +417,32 @@ $_interactive-disabled-selector: '.mat-mdc-slide-toggle-disabled-interactive.mdc
     }
 
     @include token-utils.use-tokens($_mdc-slots...) {
-      #{$_interactive-disabled-selector}:enabled:focus,
-      #{$_interactive-disabled-selector}:enabled:active,
-      #{$_interactive-disabled-selector}:enabled:hover:not(:focus),
-      .mdc-switch--unselected:enabled:hover:not(:focus) {
-        > .mdc-switch__handle-track > .mdc-switch__handle > & {
-          @include token-utils.create-token-slot(background, unselected-hover-state-layer-color);
-        }
+      #{$_interactive-disabled-selector}:enabled:focus &,
+      #{$_interactive-disabled-selector}:enabled:active &,
+      #{$_interactive-disabled-selector}:enabled:hover:not(:focus) &,
+      .mdc-switch--unselected:enabled:hover:not(:focus) & {
+        @include token-utils.create-token-slot(background, unselected-hover-state-layer-color);
       }
 
-      .mdc-switch--unselected:enabled:focus > .mdc-switch__handle-track > .mdc-switch__handle > & {
+      .mdc-switch--unselected:enabled:focus & {
         @include token-utils.create-token-slot(background, unselected-focus-state-layer-color);
       }
 
-      .mdc-switch--unselected:enabled:active > .mdc-switch__handle-track > .mdc-switch__handle > & {
+      .mdc-switch--unselected:enabled:active & {
         @include token-utils.create-token-slot(background, unselected-pressed-state-layer-color);
         @include token-utils.create-token-slot(opacity, unselected-pressed-state-layer-opacity);
         transition: opacity 75ms linear;
       }
 
-      // stylelint-disable-next-line max-line-length
-      .mdc-switch--selected:enabled:hover:not(:focus) > .mdc-switch__handle-track > .mdc-switch__handle > & {
+      .mdc-switch--selected:enabled:hover:not(:focus) & {
         @include token-utils.create-token-slot(background, selected-hover-state-layer-color);
       }
 
-      .mdc-switch--selected:enabled:focus > .mdc-switch__handle-track > .mdc-switch__handle > & {
+      .mdc-switch--selected:enabled:focus & {
         @include token-utils.create-token-slot(background, selected-focus-state-layer-color);
       }
 
-      .mdc-switch--selected:enabled:active > .mdc-switch__handle-track > .mdc-switch__handle > & {
+      .mdc-switch--selected:enabled:active & {
         @include token-utils.create-token-slot(background, selected-pressed-state-layer-color);
         @include token-utils.create-token-slot(opacity, selected-pressed-state-layer-opacity);
         transition: opacity 75ms linear;

From 80fd0b30e5a2e51ff8f985bd126c7f28eaa8815a Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 21 Feb 2025 09:47:36 +0100
Subject: [PATCH 85/91] build: update to TypeScript 5.8 (#30533)

Updates the repo to TypeScript 5.8 to be in line with the rest of Angular.

(cherry picked from commit c0a8060039be8e94e37ee39f2dbfae848acc8498)
---
 package.json | 8 ++++----
 yarn.lock    | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/package.json b/package.json
index 0c0cba5465eb..0af27cc558fb 100644
--- a/package.json
+++ b/package.json
@@ -171,17 +171,17 @@
     "tsickle": "0.39.1",
     "tslint": "^6.1.3",
     "tsutils": "^3.21.0",
-    "typescript": "5.7.2",
+    "typescript": "5.8.1-rc",
     "vrsource-tslint-rules": "6.0.0",
     "yaml": "^1.10.2",
     "yargs": "^17.3.1",
     "zx": "^6.2.4"
   },
   "resolutions": {
-    "@angular/build-tooling/typescript": "5.7.2",
-    "@angular/ng-dev/typescript": "5.7.2",
+    "@angular/build-tooling/typescript": "5.8.1-rc",
+    "@angular/ng-dev/typescript": "5.8.1-rc",
     "browser-sync-client": "2.26.13",
-    "dgeni-packages/typescript": "5.7.2",
+    "dgeni-packages/typescript": "5.8.1-rc",
     "**/https-proxy-agent": "5.0.0",
     "string-width": "4.2.3",
     "wrap-ansi": "7.0.0"
diff --git a/yarn.lock b/yarn.lock
index a8db786b8457..dfbe1f5998ce 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -15320,10 +15320,10 @@ typescript@5.4.2:
   resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372"
   integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==
 
-typescript@5.4.5, typescript@5.7.2, typescript@~4.5.4, typescript@~4.9.0:
-  version "5.7.2"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6"
-  integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==
+typescript@5.4.5, typescript@5.8.1-rc, typescript@~4.5.4, typescript@~4.9.0:
+  version "5.8.1-rc"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.1-rc.tgz#678b7586bf1d7fdec0dbf35708ab7bb39ce13c3d"
+  integrity sha512-D8IlSOUk1E08jpFdK81reYkA1a/4XtEdV6MElOGdbu/uOy1RpEDqNO/onWmqUaLkTyeHmmU/QlWvjcM9cqF85g==
 
 typescript@^3.9.10, typescript@^3.9.5, typescript@^3.9.7:
   version "3.9.10"

From 0055622e1fe9a310f4643c6c8e047ba7f232150c Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 21 Feb 2025 21:54:56 +0100
Subject: [PATCH 86/91] fix(material/datepicker): changed after checked error
 when assigning end value (#30534)

Fixes that there was a hidden "changed after checked" error in the range picker when the secondary value was being assinged without notifying Angular.

Fixes #30526.

(cherry picked from commit 7ef405c4e6014c1724788c3561eaff3701e654d1)
---
 src/material/datepicker/date-range-input-parts.ts | 14 +++++++-------
 tools/public_api_guard/material/datepicker.md     |  2 --
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/material/datepicker/date-range-input-parts.ts b/src/material/datepicker/date-range-input-parts.ts
index dcffd998400a..946d8b6ea1c0 100644
--- a/src/material/datepicker/date-range-input-parts.ts
+++ b/src/material/datepicker/date-range-input-parts.ts
@@ -193,6 +193,12 @@ abstract class MatDateRangeInputPartBase<D>
     opposite?._validatorOnChange();
   }
 
+  protected override _formatValue(value: D | null) {
+    super._formatValue(value);
+    // Any time the input value is reformatted we need to tell the parent.
+    this._rangeInput._handleChildValueChange();
+  }
+
   /** return the ARIA accessible name of the input element */
   _getAccessibleName(): string {
     return _computeAriaAccessibleName(this._elementRef.nativeElement);
@@ -264,16 +270,10 @@ export class MatStartDate<D> extends MatDateRangeInputPartBase<D> {
     if (this._model) {
       const range = new DateRange(value, this._model.selection.end);
       this._model.updateSelection(range, this);
+      this._rangeInput._handleChildValueChange();
     }
   }
 
-  protected override _formatValue(value: D | null) {
-    super._formatValue(value);
-
-    // Any time the input value is reformatted we need to tell the parent.
-    this._rangeInput._handleChildValueChange();
-  }
-
   override _onKeydown(event: KeyboardEvent) {
     const endInput = this._rangeInput._endInput;
     const element = this._elementRef.nativeElement;
diff --git a/tools/public_api_guard/material/datepicker.md b/tools/public_api_guard/material/datepicker.md
index e36f6f9de145..4874d6c02852 100644
--- a/tools/public_api_guard/material/datepicker.md
+++ b/tools/public_api_guard/material/datepicker.md
@@ -833,8 +833,6 @@ export class MatStartDate<D> extends MatDateRangeInputPartBase<D> {
     // (undocumented)
     protected _assignValueToModel(value: D | null): void;
     // (undocumented)
-    protected _formatValue(value: D | null): void;
-    // (undocumented)
     protected _getValueFromModel(modelValue: DateRange<D>): D | null;
     // (undocumented)
     _onKeydown(event: KeyboardEvent): void;

From 78ab27ea78b8cb4376570869d19dca6420beb455 Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Fri, 21 Feb 2025 21:55:22 +0100
Subject: [PATCH 87/91] fix(material/list): option views not change detected
 when control is disabled (#30532)

Fixes that we weren't change detecting the view of the selection list options when the form control for the entire list is disabled. The visual difference is subtle for unchecked options, but it's noticeable for checked ones.

Fixes #30522.

(cherry picked from commit 8b2b944c88c59e58618c30d4722f154972debac4)
---
 src/material/list/selection-list.spec.ts | 23 +++++++++++++----------
 src/material/list/selection-list.ts      |  1 +
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/material/list/selection-list.spec.ts b/src/material/list/selection-list.spec.ts
index 09b6c7233961..4ed99d669957 100644
--- a/src/material/list/selection-list.spec.ts
+++ b/src/material/list/selection-list.spec.ts
@@ -1540,6 +1540,8 @@ describe('MatSelectionList with forms', () => {
     });
 
     it('should be able to disable options from the control', () => {
+      const optionElements = listOptions.map(option => option._elementRef.nativeElement);
+      const inputs = optionElements.map(element => element.querySelector('input')!);
       selectionList.focus();
       expect(selectionList.disabled)
         .withContext('Expected the selection list to be enabled.')
@@ -1547,13 +1549,15 @@ describe('MatSelectionList with forms', () => {
       expect(listOptions.every(option => !option.disabled))
         .withContext('Expected every list option to be enabled.')
         .toBe(true);
-      expect(
-        listOptions.some(
-          option => option._elementRef.nativeElement.getAttribute('tabindex') === '0',
-        ),
-      )
+      expect(optionElements.some(el => el.getAttribute('tabindex') === '0'))
         .withContext('Expected one list item to be in the tab order')
         .toBe(true);
+      // Note: assert the disabled of the inner inputs, because they're placed inside of the
+      // view of the individual options which is detected separately from the host. The tabindex
+      // check above isn't enough, because it doesn't go through change detection.
+      expect(inputs.every(input => !input.disabled))
+        .withContext('Expected all options to be enabled')
+        .toBe(true);
 
       fixture.componentInstance.formControl.disable();
       fixture.detectChanges();
@@ -1564,13 +1568,12 @@ describe('MatSelectionList with forms', () => {
       expect(listOptions.every(option => option.disabled))
         .withContext('Expected every list option to be disabled.')
         .toBe(true);
-      expect(
-        listOptions.every(
-          option => option._elementRef.nativeElement.getAttribute('tabindex') === '-1',
-        ),
-      )
+      expect(optionElements.every(el => el.getAttribute('tabindex') === '-1'))
         .withContext('Expected every list option to be removed from the tab order')
         .toBe(true);
+      expect(inputs.every(input => input.disabled))
+        .withContext('Expected all options to be disabled')
+        .toBe(true);
     });
 
     it('should be able to update the disabled property after form control disabling', () => {
diff --git a/src/material/list/selection-list.ts b/src/material/list/selection-list.ts
index 2ba9ce71a1e9..850bb0815558 100644
--- a/src/material/list/selection-list.ts
+++ b/src/material/list/selection-list.ts
@@ -256,6 +256,7 @@ export class MatSelectionList
   setDisabledState(isDisabled: boolean): void {
     this.disabled = isDisabled;
     this._changeDetectorRef.markForCheck();
+    this._markOptionsForCheck();
   }
 
   /**

From d01e16d8147fe0579ad54ca509b9fca254aed87e Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Mon, 24 Feb 2025 21:09:17 +0100
Subject: [PATCH 88/91] fix(material/button): incorrect outlined focus overlay
 shape when border radius is customized (#30513)

Fixes that the focus overlay on outlined buttons wasn't covering the outlined button fully when its border radius is customized.

Fixes #30484.

(cherry picked from commit fea07a750bd7eac11d56209ddc5f8e70da98c51a)
---
 src/material/button/button-high-contrast.scss | 5 ++---
 src/material/button/button.scss               | 8 --------
 2 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/src/material/button/button-high-contrast.scss b/src/material/button/button-high-contrast.scss
index 881365eb537a..d8a19f270dc0 100644
--- a/src/material/button/button-high-contrast.scss
+++ b/src/material/button/button-high-contrast.scss
@@ -1,12 +1,11 @@
 @use '@angular/cdk';
 
-// Add an outline to make buttons more visible in high contrast mode. Stroked buttons and FABs
-// don't need a special look in high-contrast mode, because those already have an outline.
 .mat-mdc-button:not(.mdc-button--outlined),
 .mat-mdc-unelevated-button:not(.mdc-button--outlined),
 .mat-mdc-raised-button:not(.mdc-button--outlined),
 .mat-mdc-outlined-button:not(.mdc-button--outlined),
-.mat-mdc-icon-button.mat-mdc-icon-button {
+.mat-mdc-icon-button.mat-mdc-icon-button,
+.mat-mdc-outlined-button .mdc-button__ripple {
   @include cdk.high-contrast {
     outline: solid 1px;
   }
diff --git a/src/material/button/button.scss b/src/material/button/button.scss
index a44a6f6a684c..e82f5305d9d1 100644
--- a/src/material/button/button.scss
+++ b/src/material/button/button.scss
@@ -264,14 +264,6 @@
       @include token-utils.create-token-slot(color, disabled-label-text-color);
       @include token-utils.create-token-slot(border-color, disabled-outline-color);
     }
-
-    // TODO(crisbeto): this causes a weird gap between the ripple and the
-    // outline. We should remove it and update the screenshot tests.
-    .mdc-button__ripple {
-      @include token-utils.create-token-slot(border-width, outline-width);
-      border-style: solid;
-      border-color: transparent;
-    }
   }
 }
 

From 759a2c4c8ee6af1ea4fa5b56dcc4b665d736c2e8 Mon Sep 17 00:00:00 2001
From: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date: Tue, 25 Feb 2025 17:28:54 +0100
Subject: [PATCH 89/91] ci: properly print test errors for docs site (#30547)

Fixes that we weren't printing test errors on CI.

(cherry picked from commit 44b02dbcaa9a285a1a4523cc3bf8316f1a1df9d1)
---
 material.angular.io/.bazelrc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/material.angular.io/.bazelrc b/material.angular.io/.bazelrc
index 21b9d8170002..4770089c4205 100644
--- a/material.angular.io/.bazelrc
+++ b/material.angular.io/.bazelrc
@@ -9,6 +9,9 @@ build --nowatchfs
 # Turn off legacy external runfiles
 build --nolegacy_external_runfiles
 
+# By default, failing tests don't print any output, it goes to the log file
+test --test_output=errors
+
 # Turn on --incompatible_strict_action_env which was on by default
 # in Bazel 0.21.0 but turned off again in 0.22.0. Follow
 # https://github.com/bazelbuild/bazel/issues/7026 for more details.

From 0eadfc9429388771c22e7c12ddaf23fa3cc7cc6c Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 25 Feb 2025 17:29:32 +0100
Subject: [PATCH 90/91] fix(google-maps): resolve mismatching types (#30544)

Due to some infrastructure issues, we can't import the real types for the marker clusterer. We work around it by copying some of them into the repository which has caused an issue where the external types no longer align with the internal ones. This change resolves the issue by converting a few classes to interfaces.

Fixes #30466.

(cherry picked from commit 2b7133bc68553b5167692c0159a6597a8581e6c1)
---
 .../map-marker-clusterer-types.ts             | 28 ++++++-------------
 .../google-maps/google-maps.md                | 23 ++++++++-------
 2 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/src/google-maps/map-marker-clusterer/map-marker-clusterer-types.ts b/src/google-maps/map-marker-clusterer/map-marker-clusterer-types.ts
index 3983f0b80210..c0dae7a90648 100644
--- a/src/google-maps/map-marker-clusterer/map-marker-clusterer-types.ts
+++ b/src/google-maps/map-marker-clusterer/map-marker-clusterer-types.ts
@@ -20,25 +20,15 @@ export interface ClusterOptions {
   markers?: Marker[];
 }
 
-export declare class Cluster {
+export interface Cluster {
   marker?: Marker;
   readonly markers?: Marker[];
-  protected _position: google.maps.LatLng;
-  constructor({markers, position}: ClusterOptions);
-  get bounds(): google.maps.LatLngBounds | undefined;
-  get position(): google.maps.LatLng;
-  /**
-   * Get the count of **visible** markers.
-   */
-  get count(): number;
-  /**
-   * Add a marker to the cluster.
-   */
+  bounds?: google.maps.LatLngBounds;
+  position: google.maps.LatLng;
+  count: number;
   push(marker: Marker): void;
-  /**
-   * Cleanup references and remove marker from map.
-   */
   delete(): void;
+  new (options: ClusterOptions): Cluster;
 }
 
 export declare class MarkerClusterer extends google.maps.OverlayView {
@@ -117,11 +107,11 @@ export interface Renderer {
   render(cluster: Cluster, stats: ClusterStats, map: google.maps.Map): Marker;
 }
 
-export declare class ClusterStats {
-  readonly markers: {
+export interface ClusterStats {
+  markers: {
     sum: number;
   };
-  readonly clusters: {
+  clusters: {
     count: number;
     markers: {
       mean: number;
@@ -130,7 +120,7 @@ export declare class ClusterStats {
       max: number;
     };
   };
-  constructor(markers: Marker[], clusters: Cluster[]);
+  new (markers: Marker[], clusters: Cluster[]): ClusterStats;
 }
 
 export interface Algorithm {
diff --git a/tools/public_api_guard/google-maps/google-maps.md b/tools/public_api_guard/google-maps/google-maps.md
index 43c4961ba3ad..8e09549d2012 100644
--- a/tools/public_api_guard/google-maps/google-maps.md
+++ b/tools/public_api_guard/google-maps/google-maps.md
@@ -49,20 +49,22 @@ export type AriaLabelFn = (text: string) => string;
 export type Calculator = (markers: google.maps.Marker[], clusterIconStylesCount: number) => ClusterIconInfo;
 
 // @public (undocumented)
-export class Cluster {
-    constructor({ markers, position }: ClusterOptions);
+export interface Cluster {
+    // (undocumented)
+    new (options: ClusterOptions): Cluster;
+    // (undocumented)
+    bounds?: google.maps.LatLngBounds;
+    // (undocumented)
+    count: number;
     // (undocumented)
-    get bounds(): google.maps.LatLngBounds | undefined;
-    get count(): number;
     delete(): void;
     // (undocumented)
     marker?: Marker;
     // (undocumented)
     readonly markers?: Marker[];
     // (undocumented)
-    get position(): google.maps.LatLng;
+    position: google.maps.LatLng;
     // (undocumented)
-    protected _position: google.maps.LatLng;
     push(marker: Marker): void;
 }
 
@@ -107,10 +109,11 @@ export interface ClusterOptions {
 }
 
 // @public (undocumented)
-export class ClusterStats {
-    constructor(markers: Marker[], clusters: Cluster[]);
+export interface ClusterStats {
+    // (undocumented)
+    new (markers: Marker[], clusters: Cluster[]): ClusterStats;
     // (undocumented)
-    readonly clusters: {
+    clusters: {
         count: number;
         markers: {
             mean: number;
@@ -120,7 +123,7 @@ export class ClusterStats {
         };
     };
     // (undocumented)
-    readonly markers: {
+    markers: {
         sum: number;
     };
 }

From f89a0b3295afd3e070ba41effa3adabae865bf7d Mon Sep 17 00:00:00 2001
From: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date: Tue, 25 Feb 2025 17:29:53 +0100
Subject: [PATCH 91/91] fix(material-angular-io): update site images (#30543)

The site images, e.g. when linking the docs site on social media, were still using the M2 appearance. These changes update the images and delete some unnecessary ones.

(cherry picked from commit 459cfb9d8eebede8ea3d0de5eeb3691609d8eaf5)
---
 .../src/app/scene-viewer/scene-viewer.scss    |   1 +
 .../src/assets/img/favicon.ico                | Bin 0 -> 15406 bytes
 .../img/favicons/android-chrome-192x192.png   | Bin 2416 -> 0 bytes
 .../img/favicons/android-chrome-512x512.png   | Bin 6079 -> 0 bytes
 .../assets/img/favicons/apple-touch-icon.png  | Bin 1616 -> 0 bytes
 .../src/assets/img/favicons/browserconfig.xml |   9 --------
 .../src/assets/img/favicons/favicon-16x16.png | Bin 541 -> 0 bytes
 .../src/assets/img/favicons/favicon-32x32.png | Bin 718 -> 0 bytes
 .../src/assets/img/favicons/favicon.ico       | Bin 15086 -> 0 bytes
 .../src/assets/img/favicons/manifest.json     |  20 ------------------
 .../assets/img/favicons/mstile-150x150.png    | Bin 1419 -> 0 bytes
 .../assets/img/favicons/safari-pinned-tab.svg |   1 -
 .../src/assets/img/manifest.json              |   9 ++++++++
 .../src/assets/img/site-preview.png           | Bin 51233 -> 142831 bytes
 .../assets/screenshots/autocomplete.scene.png | Bin 17789 -> 6071 bytes
 .../src/assets/screenshots/select.scene.png   | Bin 24135 -> 11710 bytes
 .../assets/screenshots/timepicker.scene.png   | Bin 29373 -> 11960 bytes
 material.angular.io/src/favicon.ico           | Bin 15086 -> 0 bytes
 material.angular.io/src/index.html            |  19 ++++-------------
 material.angular.io/tools/audit-docs.js       |   2 +-
 20 files changed, 15 insertions(+), 46 deletions(-)
 create mode 100644 material.angular.io/src/assets/img/favicon.ico
 delete mode 100644 material.angular.io/src/assets/img/favicons/android-chrome-192x192.png
 delete mode 100644 material.angular.io/src/assets/img/favicons/android-chrome-512x512.png
 delete mode 100644 material.angular.io/src/assets/img/favicons/apple-touch-icon.png
 delete mode 100644 material.angular.io/src/assets/img/favicons/browserconfig.xml
 delete mode 100644 material.angular.io/src/assets/img/favicons/favicon-16x16.png
 delete mode 100644 material.angular.io/src/assets/img/favicons/favicon-32x32.png
 delete mode 100644 material.angular.io/src/assets/img/favicons/favicon.ico
 delete mode 100644 material.angular.io/src/assets/img/favicons/manifest.json
 delete mode 100644 material.angular.io/src/assets/img/favicons/mstile-150x150.png
 delete mode 100644 material.angular.io/src/assets/img/favicons/safari-pinned-tab.svg
 create mode 100644 material.angular.io/src/assets/img/manifest.json
 delete mode 100644 material.angular.io/src/favicon.ico

diff --git a/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.scss b/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.scss
index 3eb46eb6a53f..b69064a4076c 100644
--- a/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.scss
+++ b/material.angular.io/scenes/src/app/scene-viewer/scene-viewer.scss
@@ -13,4 +13,5 @@ app-scene-viewer {
   top: 0;
   height: 100%;
   width: 100%;
+  pointer-events: none;
 }
diff --git a/material.angular.io/src/assets/img/favicon.ico b/material.angular.io/src/assets/img/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..8b32f006f98fc3a5d5308785577fc0821bc1d183
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/android-chrome-192x192.png b/material.angular.io/src/assets/img/favicons/android-chrome-192x192.png
deleted file mode 100644
index b2bae4c8f457c1a025e93e0317fa77131b8c6063..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/android-chrome-512x512.png b/material.angular.io/src/assets/img/favicons/android-chrome-512x512.png
deleted file mode 100644
index 02721358da67947baeb9b21a75d947da9dd8c0c9..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/apple-touch-icon.png b/material.angular.io/src/assets/img/favicons/apple-touch-icon.png
deleted file mode 100644
index edc892f874fd3baa18a34de5f4facf78b5a8072e..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/browserconfig.xml b/material.angular.io/src/assets/img/favicons/browserconfig.xml
deleted file mode 100644
index 9a36d9379562..000000000000
--- a/material.angular.io/src/assets/img/favicons/browserconfig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<browserconfig>
-  <msapplication>
-    <tile>
-      <square150x150logo src="assets/img/favicons/mstile-150x150.png?v=8.2.3"/>
-      <TileColor>#d7e3ff</TileColor>
-    </tile>
-  </msapplication>
-</browserconfig>
diff --git a/material.angular.io/src/assets/img/favicons/favicon-16x16.png b/material.angular.io/src/assets/img/favicons/favicon-16x16.png
deleted file mode 100644
index 061c969f276b3b493426354cd1553bc289295f50..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/favicon-32x32.png b/material.angular.io/src/assets/img/favicons/favicon-32x32.png
deleted file mode 100644
index ad862bcf2288bc6a470c5517214dfd53e4b06a40..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/favicon.ico b/material.angular.io/src/assets/img/favicons/favicon.ico
deleted file mode 100644
index dcb849db86c0dc1f94a4d1aeacf943f18bac59e3..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/manifest.json b/material.angular.io/src/assets/img/favicons/manifest.json
deleted file mode 100644
index 321f180e47de..000000000000
--- a/material.angular.io/src/assets/img/favicons/manifest.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "name": "Angular Material",
-  "short_name": "Angular Material",
-  "theme_color": "#FFFFFF",
-  "background_color": "#d7e3ff",
-  "start_url": "/",
-  "display": "standalone",
-  "icons": [
-    {
-      "src": "/assets/img/favicons/android-chrome-192x192.png?v=8.2.3",
-      "sizes": "192x192",
-      "type": "image/png"
-    },
-    {
-      "src": "/assets/img/favicons/android-chrome-512x512.png?v=8.2.3",
-      "sizes": "512x512",
-      "type": "image/png"
-    }
-  ]
-}
diff --git a/material.angular.io/src/assets/img/favicons/mstile-150x150.png b/material.angular.io/src/assets/img/favicons/mstile-150x150.png
deleted file mode 100644
index 8e3d617148c8079eb4ba872b05cf616dc2676a63..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/assets/img/favicons/safari-pinned-tab.svg b/material.angular.io/src/assets/img/favicons/safari-pinned-tab.svg
deleted file mode 100644
index 6a8d0e256fc0..000000000000
--- a/material.angular.io/src/assets/img/favicons/safari-pinned-tab.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg version="1" xmlns="http://www.w3.org/2000/svg" width="1029.333" height="1029.333" viewBox="0 0 772.000000 772.000000"><path d="M277.5 38.6c-58.8 21.1-139.2 49.9-178.5 64-39.3 14.1-71.6 25.7-71.7 25.8-.1.1.3 3.5.8 7.6s2.9 25.3 5.4 47c2.4 21.7 9.2 80.9 14.9 131.5 10.3 89.7 25 219.3 30.2 264.5 1.4 12.6 3.1 23 3.7 23.6.7.6 66.9 37.7 147.2 82.4 80.3 44.7 148.2 82.6 150.8 84.2l4.9 2.9 50.1-27.9c27.6-15.4 96.1-53.5 152.2-84.7 56.1-31.2 102.1-56.8 102.2-56.9.1-.1 13.9-118 27.3-233.6 1.7-14.6 3.7-31.9 4.5-38.5.8-6.6 2.4-20.1 3.5-30 1.1-9.9 2.7-23.4 3.5-30 .8-6.6 2.4-20.1 3.5-30 1.1-9.9 2.7-23.4 3.5-30 .8-6.6 2.4-20.1 3.5-30 1.1-9.9 3-25.6 4.1-34.9 1.1-9.2 1.8-17.1 1.5-17.4-.3-.2-39.6-14.4-87.3-31.4C517.7 47.2 419.7 12.2 402.1 5.9c-9-3.2-16.7-5.9-17-5.8-.3.1-48.7 17.4-107.6 38.5zm74.1 156.5c10.4 5 25.9 12.5 34.4 16.6 8.5 4.1 56.7 27.3 107 51.5s91.8 44.2 92.1 44.6c.4.4-18.6 12.4-42.1 26.7-23.6 14.3-42.5 26.3-42.1 26.7.3.4 19.5 9.8 42.6 20.9 23.1 11 42.1 20.2 42.3 20.4.1.1-18.5 11.6-41.5 25.5s-42.4 25.8-43 26.4c-1 .9 8.9 6 41.2 21.5 23.4 11.2 42.5 20.7 42.5 21-.1.3-32.8 20.5-72.8 44.7-71.6 43.5-72.7 44.2-75.7 42.9-1.6-.7-16.3-7.7-32.5-15.5s-71.6-34.5-123-59.2c-51.4-24.8-93.8-45.3-94.2-45.6-.3-.4 18.4-12.4 41.8-26.7 23.3-14.3 42.3-26.2 42.3-26.5 0-.3-19.1-9.7-42.4-21-32.9-15.8-42.2-20.7-41.3-21.6.7-.6 19.9-12.5 42.6-26.4l41.3-25.2-16.8-8.2c-9.2-4.5-28.4-13.8-42.5-20.6-14.2-6.8-25.8-12.7-25.8-13 .1-.3 6-4.1 13.2-8.5 7.3-4.4 39.5-24.3 71.7-44.2 32.2-19.9 59.3-36.2 60.2-36.3.9 0 10.1 4.1 20.5 9.1z"/></svg>
\ No newline at end of file
diff --git a/material.angular.io/src/assets/img/manifest.json b/material.angular.io/src/assets/img/manifest.json
new file mode 100644
index 000000000000..482bebc3d65e
--- /dev/null
+++ b/material.angular.io/src/assets/img/manifest.json
@@ -0,0 +1,9 @@
+{
+  "name": "Angular Material",
+  "short_name": "Angular Material",
+  "theme_color": "#FFFFFF",
+  "background_color": "#d7e3ff",
+  "start_url": "/",
+  "display": "standalone",
+  "icons": []
+}
diff --git a/material.angular.io/src/assets/img/site-preview.png b/material.angular.io/src/assets/img/site-preview.png
index bcd7442b3972bbf76761ce333e344b1f413c02ec..2fef7d7cf21cc9064205b4dfdf564f603987b6a5 100644
GIT binary patch
diff --git a/material.angular.io/src/assets/screenshots/autocomplete.scene.png b/material.angular.io/src/assets/screenshots/autocomplete.scene.png
index a1cf0cbf41f9f3b6be84282f5def624d792ecddc..8788e4d658de8c836c3e4b3e0b20a6fd22d97c77 100644
GIT binary patch
diff --git a/material.angular.io/src/assets/screenshots/select.scene.png b/material.angular.io/src/assets/screenshots/select.scene.png
index d72ea514d67339df06255ad466543b850ca5fda3..8b8117c54e952efd137c4c62ec31225a0fc1f3d0 100644
GIT binary patch
diff --git a/material.angular.io/src/assets/screenshots/timepicker.scene.png b/material.angular.io/src/assets/screenshots/timepicker.scene.png
index 329b40b349e2b116494778b3e8c915234927b6c5..af627c2f9b8f15506eadbcc8b8834c6174f5c844 100644
GIT binary patch
diff --git a/material.angular.io/src/favicon.ico b/material.angular.io/src/favicon.ico
deleted file mode 100644
index 57614f9c967596fad0a3989bec2b1deff33034f6..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/material.angular.io/src/index.html b/material.angular.io/src/index.html
index 52d600a0845b..0a538d1831c5 100644
--- a/material.angular.io/src/index.html
+++ b/material.angular.io/src/index.html
@@ -2,7 +2,7 @@
 <html lang="en-US">
 <head>
   <meta charset="utf-8">
-  <title>Angular Material UI component library</title>
+  <title>Angular Material UI Component Library</title>
   <link rel="canonical" href="https://material.angular.io">
   <base href="/">
 
@@ -36,14 +36,8 @@
   <meta property="og:image:width" content="1339" />
   <meta property="og:image:height" content="943" />
 
-  <link rel="apple-touch-icon" sizes="180x180" href="assets/img/favicons/apple-touch-icon.png?v=8.2.3">
-  <link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicons/favicon-32x32.png?v=8.2.3">
-  <link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicons/favicon-16x16.png?v=8.2.3">
-  <link rel="manifest" href="assets/img/favicons/manifest.json?v=8.2.3">
-  <link rel="mask-icon" href="assets/img/favicons/safari-pinned-tab.svg?v=8.2.3" color="#d7e3ff">
-  <link rel="shortcut icon" href="assets/img/favicons/favicon.ico?v=8.2.3">
-  <meta name="msapplication-TileColor" content="#d7e3ff">
-  <meta name="msapplication-config" content="assets/img/favicons/browserconfig.xml?v=8.2.3">
+  <link rel="manifest" href="assets/img/manifest.json?v=19.1.0">
+  <link rel="shortcut icon" href="assets/img/favicon.ico?v=19.1.0">
   <meta name="theme-color" content="#d7e3ff">
 
   <link rel="preconnect" href="https://fonts.gstatic.com">
@@ -68,7 +62,7 @@
         "@type": "Organization",
         "name": "Angular",
         "description": "Angular is a platform for building mobile and desktop web applications. Join the community of millions of developers who build compelling user interfaces with Angular.",
-        "url": "https://angular.io",
+        "url": "https://angular.dev",
         "logo": "https://angular.io/assets/images/logos/angular/angular.svg"
       }
     }
@@ -93,10 +87,5 @@
   m.parentNode.insertBefore(a,m)
   })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
   </script>
-  <script>
-    // This hides the address bar on mobile browsers
-    // https://developers.google.com/web/fundamentals/native-hardware/fullscreen/
-    window.addEventListener('load', function() { window.scrollTo(0, 1); });
-  </script>
 </body>
 </html>
diff --git a/material.angular.io/tools/audit-docs.js b/material.angular.io/tools/audit-docs.js
index 1c8b272acbab..481c1f4aa62d 100644
--- a/material.angular.io/tools/audit-docs.js
+++ b/material.angular.io/tools/audit-docs.js
@@ -52,7 +52,7 @@ const MIN_SCORES_PER_PAGE = [
   {
     url: '',
     minScores: {
-      pwa: 75,
+      pwa: 0,
       performance: 25, // Intentionally low because Ligthouse is flaky.
       seo: 90,
       'best-practices': 90,
