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 @@ + +# 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)) | + + + # 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 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(length: number, valueFunction: (index: number) => T): T[] { @Injectable() export class LuxonDateAdapter extends DateAdapter { 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 { }); 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 { } 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 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 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 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 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; } -// @public +// @public @deprecated export const matTooltipAnimations: { readonly tooltipState: AnimationTriggerMetadata; }; From 6ca21fd74080c460b58b6915d2e5b771d0db7848 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov 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 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; + 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: ` + + + + `, + 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 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 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 ---- - - From 4f676d4030689463ba05959dfd3fac2cecb5a20e Mon Sep 17 00:00:00 2001 From: Wagner Maciel 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; 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; + 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: ` + + + + + `, + 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 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 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; 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 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 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 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 @@ - -# 19.1.0-rc.0 "paper-plane" (2025-01-08) + +# 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)) | @@ -50,57 +422,6 @@ - -# 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)) | - - - - -# 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)) | - - - # 19.0.3 "polonium-popsicle" (2024-12-11) ### material @@ -115,33 +436,6 @@ - -# 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)) | - - - # 19.0.2 "plastic-rhino" (2024-12-04) ### cdk @@ -165,19 +459,6 @@ - -# 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)) | - - - # 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 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 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); 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 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 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 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 @@ + +# 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)) | + + + # 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 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: contains unknown category(-ies): ${unknownCategories.join( - ', ' - )}` + ', ', + )}`, ); } else if (!allValuesValid) { onError( - `Invalid arguments: has non-numeric or out-of-range values: ${minScoresRaw}` + `Invalid arguments: 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 { + // 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 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 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 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 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 @@

Responsive App

[fixedInViewport]="isMobile()" fixedTopGap="56"> @for (nav of fillerNav; track nav) { - {{nav}} + {{nav}} } 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 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 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 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 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 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(): TreeKeyManagerFactory; // @public @deprecated -export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER: { - provide: InjectionToken>; - useFactory: typeof NOOP_TREE_KEY_MANAGER_FACTORY; -}; +export const NOOP_TREE_KEY_MANAGER_FACTORY_PROVIDER: Provider; // @public @deprecated export class NoopTreeKeyManager implements TreeKeyManagerStrategy { From b72838b10ddff42bba788ffee202651ec1017918 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov 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(event: Event): T | null; @@ -29,6 +28,16 @@ export function getSupportedInputTypes(): Set; // @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 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 { 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 { /** 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 { /** 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 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 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 @@ + +# 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)) | + + + # 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 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; - 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 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; + return element( + by.css('app-homepage header .docs-header-headline .mat-h1'), + ).getText() as Promise; } } 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 { 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, + path: string; + component: ComponentType; data: { - scene: ComponentType, - scale?: number, - hueRotate?: number - } + scene: ComponentType; + 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: '', 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('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: '
', 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( 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 | 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; 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(); 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; 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>(); @@ -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(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(); @@ -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; @@ -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; 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; let component: Carousel; - beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [DocsAppTestingModule, CarouselTestComponent], @@ -57,14 +55,16 @@ describe('HorizontalCarousel', () => { } `, - 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(undefined, { alias: 'aria-label' }); + readonly ariaLabel = input(undefined, {alias: 'aria-label'}); readonly items = contentChildren(CarouselItem); readonly list = viewChild.required>('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: - * - *
* Deprecated *
- * + * * 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} = { '
', 'http://material.angular.io/whole-snippet-example.html': '
', - 'http://material.angular.io/deprecated.html': - `
Deprecated
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: - //
Deprecated
, + // for example: + //
Deprecated
, // 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'; `, 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 Material Design specification' + summary: + 'Angular Material offers a wide variety of UI components based on the Material Design specification', }, [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(); 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 + private readonly elementRef: ElementRef, ) {} 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 ``.' + overview: 'Build a custom control that integrates with ``.', }, { 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': '', - '/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`]: ``, @@ -32,7 +31,7 @@ describe('StackBlitzWriter', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule], - providers: [StackBlitzWriter] + providers: [StackBlitzWriter], }).compileComponents(); })); @@ -76,7 +75,6 @@ describe('StackBlitzWriter', () => { `); - }); 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>(); - 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 { const result: FileDictionary = {}; const tasks: Promise[] = []; 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(); @@ -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 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)" /> - + @for (fruit of filteredFruits(); track fruit) { {{fruit}} } From 6bd376174ed3b56e211d725ac21bcb6fba90bbc6 Mon Sep 17 00:00:00 2001 From: Karl Seamon 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 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 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 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; @@ -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; } +@Component({ + template: ` + + + {{ chip }} + + + `, +}) +class AsyncMultiSelectionChipListbox { + private _chipsSubject = new BehaviorSubject(['tutorial-1', 'tutorial-2', 'tutorial-3']); + chips$: Observable = this._chipsSubject.pipe(observeOn(asyncScheduler, 500)); + control = new FormControl(null); + @ViewChild(MatChipListbox) chipListbox: MatChipListbox; + @ViewChildren(MatChipOption) chips: QueryList; + + updateChips(chips: string[]): void { + this._chipsSubject.next(chips); + } +} + @Component({ template: ` 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 = 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 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 { `, + 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 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 @@ + +# 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)) | + + + # 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 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); - 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 | {[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 = 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 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 | 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 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 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 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 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 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 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 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 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 | 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 = { @@ -39,16 +40,13 @@ export type ImmutableObject = { * Used to manipulate or dispose of said overlay. */ export class OverlayRef implements PortalOutlet { - private _backdropElement: HTMLElement | null = null; - private _backdropTimeout: ReturnType | undefined; private readonly _backdropClick = new Subject(); private readonly _attachments = new Subject(); private readonly _detachments = new Subject(); 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 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 { source: MatTimepicker; } +/** 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 implements OnDestroy, MatOptionParentComponent { private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true}); private _dateAdapter = inject>(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(null); @@ -314,7 +328,7 @@ export class MatTimepicker 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; +// @public +export const MAT_TIMEPICKER_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>; + // @public export class MatTimepicker implements OnDestroy, MatOptionParentComponent { constructor(); From b8c1e3a2b2649f3db973b57ecdbe35f6d37ce212 Mon Sep 17 00:00:00 2001 From: Miles Malerba 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 @@ + +# 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)) | + + + # 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 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 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 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 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 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 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 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(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 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 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 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 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 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 @@ + +# 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)) | + + + # 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 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; + 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; beforeEach(() => { @@ -1989,6 +2010,61 @@ class SimplePreselectedMatHorizontalStepperApp { index = 0; } +@Component({ + template: ` + + +
+ Step one + +
+ + +
+
+
+ +
+ Step two + +
+ + +
+
+
+ +
+ Step two + +
+ + +
+
+
+ + Done + +
+ `, + 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: ` From 312231bd5c4510d7b999fe0fa25c4c1cd351044d Mon Sep 17 00:00:00 2001 From: Wilt 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 { 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 { 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 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'); /** Change event object that is emitted when the select value has changed. */ -export class MatSelectChange { +export class MatSelectChange { 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; + readonly selectionChange: EventEmitter>; _selectionModel: SelectionModel; setDescribedByIds(ids: string[]): void; setDisabledState(isDisabled: boolean): void; @@ -224,12 +224,12 @@ export const matSelectAnimations: { }; // @public -export class MatSelectChange { +export class MatSelectChange { 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; private _needsOutlineLabelOffsetUpdate = false; private _previousControl: MatFormFieldControl | 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: ` + + Hello + + `, + 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 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 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 { 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(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 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 (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 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 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 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 extends MatDateRangeInputPartBase { 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 extends MatDateRangeInputPartBase { // (undocumented) protected _assignValueToModel(value: D | null): void; // (undocumented) - protected _formatValue(value: D | null): void; - // (undocumented) protected _getValueFromModel(modelValue: DateRange): D | null; // (undocumented) _onKeydown(event: KeyboardEvent): void; From 78ab27ea78b8cb4376570869d19dca6420beb455 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov 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 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 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 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 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 literal 15406 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 g&4f10owv~xjHrNNqM+40R&`gqRy9{G(J zQ&xPYK)3i&_n}35)nfG`us4*i)9IFPZPvYIwd9BCxacY}QP+M_L0_wz>hI6@)b-|# zR{6fX@`Lek4GsWIaX1VrJWDq7ZaAX>ZfknduKRaJ!Mrwl>DuiXL`0mK4^CooH7c)f zM-G7P7CNoHBC=%tcNM@`z46!L)Pc(2NxW-#1i|msh%swC!JZw9Wyc~k?EQ*_*3zfq zh#ein#*sbIAHgdVKUF*|bl^%afmbF6cRggdjnth@3H3BZWUobfRv3T1cjtNtzUUVh z(~FEdfFr`x8H!(rn+~A2>J3kFfI*Dpoi!kr7wu{K=(2{$R5?_m2d@S)EQrm=3qeDU zdCd5qFbmx-#B76CM?7r+fV}tEnMg^ZW+7H4D^SD@QAN$cwrv!!pE5+jM%hp-`~;89 zSlUb_bNpN7=Eeh4S8JCF7(U*ps%^;3j8C%E*P{J3qu~qT}74Ws{G9<#Rnte7BxP#Rl-x>xhDw6PT3MEPb41s)`@_i z!wUcphkBIsY<)K+ffn&!ZDp3DVjwqY*0#K+gL7M+_qy!vaDcB#Zhv`Lot;Ydx3~@` z;&07Pa8Gjl*=^F6wX^nE`;Sw@0BCXwCw|<)_r^S5hZTC9H;wcTx_l@#_btR57q- z!nj1VMWEn%5!{4zmU3WYj{3bZAok>^CttuEI)D&MH%UPE2#3UDY1}pHA(>t21avn2 z{;Qe`Np6+tA^e&=kCKtQ_lOg|Kgw@*X%Nxhh^N`xE=j2iDH^=kT;ld&j|jl7=F;ja zlQ-h%r-{jx7u1^Cn0C(lCTdn>#tK;Zd)Q8&r5^hxLfO;(k$c2P)WP46G!%f=Q=-aB z2j>_S2Q;ehgg5=qs}(gQ-ran3h_2GN3?IJe)@wJAIeNVnv#;ezR$~5iN~OEuJhR_8}bI@LH-*p`WKxd-oHuws{x(jss7oZ+h~PN zQ51wSAGkVZQ=H)zR<~e|W|L;-7u+GAf8O44wv9xh4Zv)Z2?p~5-yqPjuuTR8!piyj zC3D1EXXjV2UGx@nObk)ctEAD??+u=#rS@_V&3ht9N%$th?R<5?QvOE6+FpA-h&B)% zx9D}niuF{goKktCw+jP>(Et5?_F5ZGU?jb#)5%f)qK{;UA0>yyWWvv#Kbw$5iieXa z=i=c>=g6@DkX1dZvbIP)?C$=@fxdp+co<;f3fdYAg1AEPWp*YIIHnN!JkG?mB^=%- mebdv`-v#Y5?<)+d{b4IG>9~%pLhmTop8#;!5KJ@rWbr>wrW1w$ 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 @@ - - - - - - #d7e3ff - - - 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 literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM*uK0G|+7pUlGFy$t`C%m14#3}pQ2WB9*9@!xEre{+O^42TFw0hs-Nxg3!3 zcZn)c0ZB}{J%!)|F`G=mPq~IVEzBq>Hkl5|J#@T|K6HE zGx+}>EBSwI*8km+|1R|YJKOpH!N&cX7TbW15ibey3uZ9C?*03|g$mn?texF`uXktv zsXMo5iE!a6u2i6sEuJopArhBO`@@Br4R}~tS$bZ^9y8nf{2zNyj@o;FYpG0m234M* z>;7{Da-71R$hd26vPe48G)=jc;b^{$#+i=EVrKI>_6P;aXT_Cs+i+OC+PpksisgZr zBiUw4>X&?wEYW-A&g*<%f2lwzd!nDZxl*&$l8%@8-sam=!(J`vZ95WlE8_h7O*zv= zI2pAUt^Ymmgszgnj%y|6tF|Ve+R(NCRo&5hRR@CXPU-yYU$$}j@q4%bu|JLz{Ppr_ zKhXIM;Z-3KB|(Yh3I#>^X_+~x3MG{VsS23|CCLm76>}bc;^8O^)6h8OfBKB)(;xZee9%@5v&}!U`@8CWlj)l{bedoW618#E~;cWR9?(Ztz&(rN{6}T(IPmlj&5D N9iFa!F6*2UngCNh?X3U+ 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 literal 0 HcmV?d00001 literal 718 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 \ 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 literal 142831 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 KzV@wE#Qy@4sIH^{ literal 51233 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 Q)q5Z#p&(u?rtkm%0DY4DT>t<8 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 literal 6071 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 literal 17789 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 F{|3O@RxAJj 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 literal 11710 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 literal 24135 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%0DO2Q)ccRy*5AHue z9=!j)fMcWp1Rwx`PzWHYrKiuDB|lD|A!pB?^)OOz zEPSL%6VJcZ`saHej((u7YNg6DcGRZ{@~m3tZaIG9gjFUI)<8er>=AkEwdgJF5<2V< z=$Bu8-DeGWpgv>1@7AfKv}@BQvBfC|0SG`KC;|v{P}q#G^nYd$H9g(JoK64$002ov JPDHLkV1nLYXrKT9 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 literal 11960 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 EU!(<6KL7v# literal 29373 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π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 Nr__JTFzvMr^FKp4S3v*( 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 @@ - Angular Material UI component library + Angular Material UI Component Library @@ -36,14 +36,8 @@ - - - - - - - - + + @@ -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'); - 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,